C# 制作贪吃蛇小游戏

目录

  1. 画蛇
  2. 实现蛇的上下左右移动
  3. 随机生成目标物
  4. 开始游戏
  5. 计分
  6. 重新开始
  7. 增加难度
  8. 死亡判定

1.1 画蛇的一节

     Class Element()Graphics g;public void SnakeElement(Form form,float x,float y){g= form.CreateGraphics();Pen mypen = new Pen(Color.Black,2);g.DrawEllipse(mypen, x, y, 10, 10);g.FillEllipse(new SolidBrush(Color.Black),x,y,10,10);g.SmoothingMode = SmoothingMode.HighQuality;  //图片柔顺模式选择g.InterpolationMode = InterpolationMode.HighQualityBicubic;//高质量g.CompositingQuality = CompositingQuality.HighQuality;//再加一点g.Dispose();mypen.Dispose();GC.Collect();}

1.2 画整条蛇

     Element element = new Element();public void Drawsnake(Form form,List<Point> points){for (int i = 0; i < points.Count; i++){element.SnakeElement(form, points[i].X, points[i].Y);}}

原理是算得到整条蛇的坐标,然后根据坐标绘制对应数量的节

2.1 实现蛇的上下左右移动(此处利用timer来重绘)

 void drawsnake(){//将旧蛇删除element = new Element();element.ClearSnake(this);//判断方向switch (Directionindex){case 1:position.Y -= offset;break;case 2:position.Y += offset;break;case 3:position.X -= offset;break;case 4:position.X += offset;break;}//length是蛇的长度if (positions.Count < length)positions.Add(position);else{positions.RemoveAt(0);positions.Add(position);}snake.Drawsnake(this, positions);}

2.2 方向键开控制蛇的上下左右
原理是定义一个全局变量,当键盘按下对应的键时,赋不同的值

private void Form1_KeyDown(object sender, KeyEventArgs e){switch (e.KeyCode){case Keys.Up:if (Directionindex == 1 || Directionindex == 2)return;elseDirectionindex = 1;break;case Keys.Down:if (Directionindex == 2 || Directionindex == 1)return;elseDirectionindex = 2;break;case Keys.Left:if (Directionindex == 3 || Directionindex == 4)return;elseDirectionindex = 3;break;case Keys.Right:if (Directionindex == 4 || Directionindex == 3)return;elseDirectionindex = 4;break;}}//没有这段程序无法识别方向键protected override bool ProcessDialogKey(Keys keyData){if (keyData == Keys.Up || keyData == Keys.Down ||keyData == Keys.Left || keyData == Keys.Right)return false;elsereturn base.ProcessDialogKey(keyData);}

3.1 随机画目标物
原理是生成两个随机数,构成食物的坐标,然后绘制

    public class Food{Graphics g;public void DrawFood(Form form,int x,int y){g = form.CreateGraphics();Pen mypen = new Pen(Color.Black, 2);g.DrawEllipse(mypen, x, y, 10, 10);g.FillEllipse(new SolidBrush(Color.Red), x, y, 10, 10);g.Dispose();mypen.Dispose();GC.Collect();}}
void drawfood(Point point){food.DrawFood(this, point.X, point.Y);}void changefood(){Random random = new Random();int x = random.Next(0, 30);int y = random.Next(0, 30);x = x * 10;y = y * 10;foodposition = new Point(x, y);}

4 开始游戏

/// <summary>/// 记录分数/// </summary>int score = 0;/// <summary>/// 蛇的长度/// </summary>int length = 10;private void Form1_Load(object sender, EventArgs e){timer1.Interval = 400;label2.Text = score.ToString();}

设置一个button来开始游戏,并且将蛇的初始位置设置为(0,0)

 private void button1_Click(object sender, EventArgs e){if (button1.Text == "开始游戏"){IsStart = true;timer1.Enabled = true;position = new Point(0, 0);}elsereturn;}

5 、计分
当蛇头的位置与食物的位置重叠时,得分,并且重绘食物

        void checkFood(){if (positions[positions.Count - 1] == foodposition){changefood();length += 1;score += 1;label2.Text = score.ToString();}elsereturn;}

6 、重新开始

void restart(){         positions.Clear();position = new Point(0, 0);Directionindex = 4;timer1.Enabled = true;timer1.Interval = 400;length = 10;score = 0;label2.Text = score.ToString() ;}

7 、增加难度
这个其实很简单,就是增加timer的刷新率,但是也存在很严重的闪烁问题

        private void button3_Click(object sender, EventArgs e){if (timer1.Interval > 50)timer1.Interval -= 50;elsereturn;}

8、死亡判定
有两种方式结束游戏,第一,蛇碰到了自己的尾巴,第二,撞墙
代码如下

void checkAlive(){if (positions.Count > 3){for (int i = 0; i < positions.Count - 1; i++){if (positions[positions.Count - 1] == positions[i]){timer1.Enabled = false;if (MessageBox.Show("你死了,是:退出游戏,否:重新开始", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes){this.Close();}else{if (score > Convert.ToInt32(label4.Text))label4.Text = score.ToString();restart();}}}if (positions[positions.Count - 1].X < 0 || positions[positions.Count - 1].X > this.Width|| positions[positions.Count - 1].Y < 0 || positions[positions.Count - 1].Y > this.Height){timer1.Enabled = false;if (MessageBox.Show("你死了,是:退出游戏,否:重新开始", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes){this.Close();}else{//记录最高分if (score > Convert.ToInt32(label4.Text))label4.Text = score.ToString();restart();}}elsereturn;}}

总结:好了,到这里贪食蛇1.0已经可以成功运行了,小伙伴们可以去试一试,这应该是全网最简单的贪吃蛇吧,哈哈,如果有bug或者更好的实现方式,欢迎留言,周末写代码不容易,一键三连,谢谢
PS:还有些玩法可以加入,比如长按方向键可以加速等

  • 目前已知的bug,如果玩家快速按下做个方向键,会存在有些动作无法执行

C# 制作贪吃蛇小游戏,最简单的实现相关推荐

  1. python编程小游戏-10分钟用Python编写一个贪吃蛇小游戏,简单

    贪吃蛇,大家应该都玩过.小编当初第一次接触贪吃蛇的时候 ,还是能砸核桃的诺基亚上,当时玩的不亦乐乎.今天,我们用Python编程一个贪吃蛇游戏,下面我们先看看效果: 好了,先介绍一个思路 所有的游戏最 ...

  2. JavaScript制作贪吃蛇小游戏

    目录 效果展示 原理分析 Game.js文档 Snake.js文档 Food.js文档 附上源代码 写了这么久的代码 是否你和我一样感到枯燥乏味了呢? 是否没有前进的动力了呢? 别忘了当时的你踌躇满志 ...

  3. 51制作贪吃蛇小游戏,附带Proteus仿真

    一.代码解读 一个按钮来启动游戏的开始,开始以后LCD1602上显示当前的关卡和得分,当长到一定长度后会进入下一个关卡,每个关卡移动的速度不一样(越到后面速度越快,用到定时器) 有关蛇和食物里的属性都 ...

  4. python制作贪吃蛇小游戏,畅玩无限制

    前言 大家早好.午好.晚好吖 ❤ ~ 现在这年头,无论玩个什么游戏都有健康机制, 这让我们愉悦玩游戏得步伐变得承重起来, 于是无聊之下我写了个贪吃蛇小游戏,来玩个快乐 代码展示 导入模块 import ...

  5. 基于html5贪吃蛇小游戏,使用HTML5 Canvas制作贪吃蛇小游戏

    近重要在研究OAuth2,等demo完成了,会给大家来一个专题分享. 看到我身边的一个同事在玩 蛇蛇争霸 感觉蛮有意思的,这里找了一个 贪吃蛇的游戏 分享给大家. 按理说canvas与其应用是老生常谈 ...

  6. Unity制作贪吃蛇小游戏

        从开始学习到现在也做了不少小游戏,但是很多都堆积再同一个项目中,并且还有许多不完善之处,所以最近会逐渐发上来一些之前做的小游戏,希望对大家有所帮助. 今天发上来的是最开始做的一个,也是挺经典的 ...

  7. WPF制作贪吃蛇小游戏

    初学WPF,需要一个小程序来锻炼自己,而贪吃蛇是每一个小白(包括我自己)必学的经典案例,此文就来介绍一下,接近完美的贪吃蛇是如何制作的 . . . 学习源于赵庆明老师的课程(腾讯课堂) 此文将只对游戏 ...

  8. 大学生的小乐趣:html画布制作贪吃蛇小游戏

    源代码已存放在github上:https://github.com/WYKXLDZ/CollegeJoy/tree/master/snake 最终效果: 做贪吃蛇游戏需要Html5,部分Css美化,重 ...

  9. STM32+LCD实现简单的贪吃蛇小游戏

    寒假放假回家,只能宅在家里,无聊之余,幸好带了一块开发板回来,以前做项目都是在网上找相似或者有关联的项目,把别人的代码拿过来,修改修改,拼拼凑凑出自己项目,既然无聊就自己动脑筋思考,自己动手写贪吃蛇的 ...

最新文章

  1. 异构智能吴韧:物联网是“伪命题”?智联网才是未来
  2. Android属性动画 TypeEvaluator
  3. 点击button时候传递一个参数实现局部刷星_Tkinter的一个小小的规则,如果不了解,可能不会解决掉这个问题...
  4. apt-get卸载命令
  5. java 集合操作_Java 集合的操作 个人方法总结
  6. 标题: ZZ- Linux 系统裁减指南(LiPS)
  7. grappelli美化Django Admin
  8. vscode unins000.exe报错
  9. SpringBoot操作Redis查看cmd乱码的问题
  10. 计算机声音控制程序,怎么管理电脑各程序的音量-单独调节各个程序音量的方法 - 河东软件园...
  11. 当老鼠拥有“鹰眼”,人类世界会发生什么变化?
  12. DongDong认亲戚(map+并查集)
  13. 绝密隐私!有趣的网络摄像头大揭露
  14. Springboot毕设项目健康在线服务平台26iy0(java+VUE+Mybatis+Maven+Mysql)
  15. 清除APP 数据的时候出现Crash的情况分析
  16. 清华计算机考研复试机试,请问清华考研计算机复试考什么
  17. 解决office2003,无法卸载也无法安装问题
  18. Java 2.4(将磅转换为千克)编写程序,将磅数转换为千克数。程序提示输入用户磅数,然后转换为千克并显示结果。一磅等于0.454千克。下面是一个运行示例:
  19. 蓝牙设备名字和地址ID如何设置
  20. 通货膨胀理解之计算1年后100w贬值多少

热门文章

  1. 亲测方案:解决HBuilder X启动提示语法助手无法访问的问题
  2. python 制作 二维码
  3. 现在哪个安卓模拟器比较好用--BlueStacks 5
  4. 编程初学者为什么要选择python语言,哪些人群适合使用python
  5. 对称加密/非对称加密
  6. 数据仓库1-数仓的意义
  7. 【阿里聚安全·移动安全周刊】移动裸奔时代,手机已成为隐私的监视器
  8. 手机上如何学会使用计算机,手机怎么投屏到电脑上,我这儿有4种方法,一分钟让你学会...
  9. 【无人机组装与调试】第三章 舵机安装与调整
  10. 使用transformers从头训练Bert