Winfrom 极简版贪吃蛇源码
该源码是我在百度知识库借助前辈的的经验,加上自己的一点小改动写的一个非常简陋的贪吃蛇小程序。如果你们有更好的改动方案,欢迎评论。
进入主题吧!
1.创建一个桌面应运程序,拖一个定时器控件。这样,程序界面完成。下面是源码!
/// <summary>
/// 键盘状态,初始为 start
/// </summary>
string Key_Name = "start"; /// <summary>
/// 蛇身数组
/// </summary>
Label[] Snake_Body = new Label[]; /// <summary>
/// 随机数,用于food
/// </summary>
Random R = new Random(); /// <summary>
/// 记录位置
/// </summary>
int Snake_Body_content_x = , Snake_Body_content_y = ; private void Form1_Load(object sender, EventArgs e)
{
this.Top = ;
this.Left = ;
this.Width = ;
this.Height = ;
this.BackColor = Color.White; //初始化一个Label蛇体,长度为5个Label 一个Label height = weight = 10 for (int i = ; i < ; i++)
{
//蛇段
Label Snake_Boby_content = new Label();
Snake_Boby_content.Height = ;
Snake_Boby_content.Width = ; //蛇段的位置
Snake_Boby_content.Top = ;
Snake_Boby_content.Left = - * ; //背景色
this.BackColor = Color.White;
//Snake_Boby_content.BackColor = Color.Black;
//Snake_Boby_content.Text = "▉";
Snake_Boby_content.Image = Image.FromFile(Application.StartupPath + @"\3.png"); //获取或设置包含有关控件的数据的对象
Snake_Boby_content.Tag = i; //加入蛇体
Snake_Body[i] = Snake_Boby_content;
this.Controls.Add(Snake_Boby_content);
} //每隔一段时间发生一次右移
tmTimer.Tick += new EventHandler(tmTimer_Tick); //按键时发生的事件监控
this.KeyDown += new KeyEventHandler(Form1_KeyDown); Snake_food(); //food 生成
//tmTimer.Start(); //计时器开始
tmTimer.Enabled = true;
tmTimer.Interval = ;
} /// <summary>
/// snake的自动移动事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void tmTimer_Tick(object sender, EventArgs e)
{
//用来记录snake的head的xy坐标
int x, y;
x = Snake_Body[].Left;
y = Snake_Body[].Top;
//获取键盘代码 if (Key_Name == "start") //键盘状态处于初始状态
{
Snake_Body[].Left = x + ; //Snake_Body[0]右移10
Snake_move(x, y); //调用
}
if (Key_Name == "Right") //键盘状态处于向右状态
{
Snake_Body[].Left = x + ;
Snake_move(x,y);
}
if (Key_Name == "Up") //键盘状态处于向上状态
{
Snake_Body[].Top = y - ;
Snake_move(x,y);
}
if (Key_Name == "Down")//键盘状态处于向下状态
{
Snake_Body[].Top = y + ;
Snake_move(x, y);
}
if (Key_Name == "Left")//键盘状态处于向左状态
{
Snake_Body[].Left = x - ;
Snake_move(x, y);
} //穿墙设置
if (x > )
{
Snake_Body[].Left = ;
}
if (x < )
{
Snake_Body[].Left = ;
}
if (y > )
{
Snake_Body[].Top = ;
}
if (y < )
{
Snake_Body[].Top = ;
} //每动一次,判断是否与食物重合
Eat_time();
} /// <summary>
/// 对键盘按键输入的响应
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param> private void Form1_KeyDown(object sender, KeyEventArgs e)
{
int x, y;
x = Snake_Body[].Left;
y = Snake_Body[].Top; //获取键盘代码
Key_Name = e.KeyCode.ToString(); if (Key_Name == "Right") //向右
{
Snake_Body[].Left = x + ;
Snake_move(x,y);
}
if (Key_Name == "Up") //向上
{
Snake_Body[].Top = y - ;
Snake_move(x, y);
}
if (Key_Name == "Down") //向下
{
Snake_Body[].Top = y + ;
Snake_move(x, y);
}
if (Key_Name == "Left") //向左
{
Snake_Body[].Left = x - ;
Snake_move(x, y);
} //每按一次,判断是否与食物重合
Eat_time();
} /// <summary>
/// 蛇的自动移动事件
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
public void Snake_move(int x, int y)
{
//记录x,y的中间变量 跟冒泡排序相同用法,临时存放变量
int temp_x = , temp_y = ; //遍历蛇身进行移动
for (int i = ; Snake_Body[i] != null; i++)
{
if (i >= )
{
//将记录前一个蛇段位置赋给中间变量
temp_x = Snake_Body_content_x;
temp_y = Snake_Body_content_y;
}
if (i == )
{
//将记录蛇头的改变前的位置给x y 赋给第一个蛇段,并记录蛇段的位置
temp_x = Snake_Body[i].Left;
temp_y = Snake_Body[i].Top;
Snake_Body[i].Left = x;
Snake_Body[i].Top = y;
}
else
{
//将记录前一个个蛇段的改变前的位置temp_赋给第二个蛇段,并记录改前位置
Snake_Body_content_x = Snake_Body[i].Left;
Snake_Body_content_y = Snake_Body[i].Top;
Snake_Body[i].Left = temp_x;
Snake_Body[i].Top = temp_y;
}
}
} /// <summary>
/// food的生成事件
/// </summary>
public void Snake_food()
{
//创建食物
Label Food = new Label();
Food.Width = ;
Food.Height = ; //生成一个随机位置的food
Food.Top = R.Next(, ) * ;
Food.Left = R.Next(, ) * ;
// Food.Text = "";
Food.Tag = "food";
Food.Image = Image.FromFile(Application.StartupPath + @"\3.png"); //Application.StartupPath + @"\3.png" 获取程序的根目录中的Debug中的图片
this.Controls.Add(Food);
} /// <summary>
/// 蛇吃食物事件
/// </summary>
public void Eat_time()
{
double x1 = , y1 = , x2 = , y2 = ;
//遍历Controls中所有Lable
foreach (Label lb in this.Controls)
{
//如果lb为food,将lable的位置记录
if (lb.Tag.ToString() == "food".ToString())
{
x2 = lb.Left;
y2 = lb.Top;
}
//如果lable为snake,将lable的位置记录
if (lb.Tag.ToString() == "".ToString())
{
x1 = lb.Left;
y1 = lb.Top;
}
} if (x2 == x1 && y2 == y1) //判断蛇头和食物是否重合,
{
Snake_eat(); //重新随机生成食物
foreach (Label lb in this.Controls)
{
if (lb.Tag.ToString() == "food".ToString())
{
lb.Top = R.Next(, ) * ;
lb.Left = R.Next(, ) * ;
}
}
}
} /// <summary>
/// 蛇触碰到食物的事件
/// </summary>
public void Snake_eat()
{
int i = ;
//遍历到蛇尾 将食物添加到最后一个位置
for (; Snake_Body[i] != null; i++) ;
//蛇触碰到food蛇段加1,定义蛇段
Label Snake_Boby_content = new Label();
Snake_Boby_content.Width = ;
Snake_Boby_content.Height = ;
Snake_Boby_content.Top = Snake_Body_content_y; //记录最后一段的位置
Snake_Boby_content.Left = Snake_Body_content_x;
Snake_Boby_content.BackColor = Color.White;
Snake_Boby_content.Image = Image.FromFile(Application.StartupPath + @"\3.png");
Snake_Boby_content.Tag = i;
Snake_Body[i] = Snake_Boby_content;
Snake_Boby_content.BackColor = Color.Black;
this.Controls.Add(Snake_Boby_content);
}
Winfrom 极简版贪吃蛇源码的更多相关文章
- c# 贪吃蛇源码
using UnityEngine; using System.Collections;using System.Diagnostics;using UnityEngine.SceneManageme ...
- H5 贪吃蛇源码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- js贪吃蛇源码
1.注意,自己引入jquery,这个demo基于jquery的,我的jquery是写的本地的 2.没有写注释,看不懂的再问我吧, <!DOCTYPE html><html> & ...
- C语言实现贪吃蛇源码
先放效果 源代码 //2016-2-12 //zhaoyu //Gmail:zhaoyu1995.com@gmail.com //Language: C //Platform:Code::Blocks ...
- Underscore源码阅读极简版入门
看了网上的一些资料,发现大家都写得太复杂,让新手难以入门.于是写了这个极简版的Underscore源码阅读. 源码: https://github.com/hanzichi/underscore-an ...
- OC版贪吃蛇
昨天写了一个js版贪吃蛇,今天突然想写一个OC版的,来对比一下两种语言的区别 oc版功能,适配所有尺寸iphone,可暂停,可设置地图和蛇的比例,可加速 对比一下会发现js版的相对OC版的会简单一些, ...
- TOJ 3973 Maze Again && TOJ 3128 简单版贪吃蛇
TOJ3973传送门:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=3973 时间限制(普通 ...
- android版猜拳游戏源码分享
android版猜拳游戏源码分享安卓版猜拳游戏源码,该文件中带有安装测试包的,这个游戏源码比较简单的,现在有两个代码,一个自定义VIEW的,一个就是普通的imageView图片,游戏非常适合一些新手的 ...
- js消除小游戏(极简版)
js小游戏极简版 (1) 基础布局 <div class = "box"> <p></p> <div class="div&qu ...
随机推荐
- 图解Python 【第一篇】:Python基础1
本节内容一览图 一.Python简介 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间, ...
- Vue UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例
Vue UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例 element ★11612 - 饿了么出品的Vue2的web UI工具套件 Vux ★7503 - 基于Vue和WeUI的组件库 ...
- 在CentOS7阿里云服务器部署ThinkPHP5,并配置phpstrom实现同步开发(微信小程序及管理员后端)
小程序和后端同步开发 1.服务器安装tp5框架: 方法很多比如:github.linux命令直接手动下.composer 都可以,方法很多,百度一下,不再累述 2.这时你会发现怎么都访问出现不了这个令 ...
- 用JSON文本动态创建DataGrid
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_汇总
2018年Spring Boot 2.x整合微信支付在线教育网站高级项目实战视频课程 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_1-1.SpringBoot整合微信支付开发在 ...
- 改进后的socket轮子,欢迎挑战
运行环境.net core2.1 下载地址
- mysql8修改密码问题
查看初始密码: grep "temporary password" /var/log/mysqld.log 查看validate_password变量 SHOW VARIABLES ...
- sql如何判断表字段是否存在默认值
if exists(SELECT 1 FROM sys.tables t INNER JOIN sys.columns c ON ...
- docker MySQL官方版本使用记录
docker MySQL官方版本使用记录 使用记录 拉取官方镜像:docker pull mysql 运行镜像:docker run --name mysql -p 3306:3306 -e MYSQ ...
- python3速查参考- python基础 4 -> 元组 + 字典 + 字符串 的学习
元组 元组:特点就是内容不可变,算只读的列表,可以被查询,不能被修改 a = 2, print(a) print(type(a)) b = ('a','b','c') print(b[1]) 运行结果 ...