C#Winform全原创贪吃蛇无bug极致简易小白必学逻辑完整代码

作者写给小白的话:
百度其实有很多贪吃蛇代码,但要么代码过于复杂根本看不懂,要么bug一堆为乞丐版贪吃蛇,要么解释不清楚为残缺代码,还有的是用数据结构弄的贪吃蛇,小白根本都不知道发生了什么,非常不适合学习,顶多复制看看就没了。
本程序特点:
基本把已知的bug解决完,简单易懂都是用基础做的,没有加数据结构。没有加任何花里胡哨的东西,代码明了简介,非常适合小白进行学习!



1. 程序功能介绍:
就是个贪吃蛇的游戏,没啥说的!

2. 代码功能解释:
snake_show()//初始化蛇的生成界面
move_Tick()//计时器自动移动
KeyPress()//接受按键控制方向
egg_show()//蛋的生成
eat()//吃蛋的过程
cheak()//检测函数
tail_show()//控制蛇尾的生成方向
snake_bug()//蛇吃到自己结束游戏
wall_bug()//撞墙结束游戏
egg_bug()//蛋刷到蛇身的bug
禁止按下反方向键移动bug
3. 全部完整代码:

  1. 创建winform项目,命名为MRTCS ------(末日贪吃蛇)

    ps:主要之前一开始弄的是tcs(贪吃蛇),然后又弄了cjtcs(超级贪吃蛇),之后弄了zztcs(最终贪吃蛇)

  2. 直接从工具箱拖2个timer计时器,改名为move和cheak,move间隔为300,cheak间隔为1,窗口大小设为1000,1000

  3. 然后复制一下代码

  4. 最后把代码里面的事件放进相应的控件中(load,move,cheak,KeyPress)

  5. 运行ok!
    以下代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace MRTCS
{public partial class Form1 : Form{public Form1(){InitializeComponent();}int x = 0; int y = 0; int count = 0;char fxp = 's';char oldfxp = 'w';bool egg_exist = false;Label[,] map = new Label[100, 100];//地图的二维数组Label[] snake = new Label[1000];//蛇的数组Label egg = new Label();//蛋的标签Random egg_position = new Random();private void Form1_Load(object sender, EventArgs e)//load事件{snake_show();}private void snake_show()//初始化蛇的生成界面{Label snake_template = new Label();snake_template.Size = new Size(100, 100);snake_template.BackColor = Color.Black;snake_template.Location = new Point(0, 0);snake[count] = snake_template;Controls.Add(snake[count]);}private void move_Tick(object sender, EventArgs e)//计时器自动移动{if (count > 0){for (int i = count; i > 0; i--){snake[i].Location = snake[i - 1].Location;}}switch (fxp){case 'a': snake[0].Left -= 100; break;case 'd': snake[0].Left += 100; break;case 'w': snake[0].Top -= 100; break;case 's': snake[0].Top += 100; break;}eat();}private void Form1_KeyPress(object sender, KeyPressEventArgs e)//接受按键控制方向{{switch (e.KeyChar){case 'a': if (oldfxp != 'd' || count == 0) fxp = 'a'; break;case 'd': if (oldfxp != 'a' || count == 0) fxp = 'd'; break;case 'w': if (oldfxp != 's' || count == 0) fxp = 'w'; break;case 's': if (oldfxp != 'w' || count == 0) fxp = 's'; break;}oldfxp = fxp;}}private void egg_show()//蛋的生成{int x = egg_position.Next(0, 9);int y = egg_position.Next(0, 9);egg.Location = new Point(x * 100, y * 100);egg.Size = new Size(100, 100);egg.BackColor = Color.Red;Controls.Add(egg);}private void eat()//吃蛋的过程{if (snake[0].Location == egg.Location){++count;Label snake_template = new Label();snake_template.Size = new Size(100, 100);snake_template.BackColor = Color.Black;snake_template.Location = tail_show(); /*new Point(snake[count - 1].Left - 100, snake[count - 1].Top);*/snake[count] = snake_template;Controls.Add(snake[count]);egg_exist = false;}}private void cheak_Tick(object sender, EventArgs e)//检测{if (!egg_exist)//刷蛋{egg_show();egg_exist = true;}egg_bug();snake_bug();wall_bug();}private void egg_bug()//蛋刷到蛇身{for (int i = 0; i < count + 1; i++){if (snake[i].Location == egg.Location && i != 0){egg_exist = false;}}}private void snake_bug()//蛇吃到自己{for (int i = 0; i < count + 1; i++){if (snake[i].Location == snake[0].Location && i != 0){move.Enabled = false;cheak.Enabled = false;MessageBox.Show("GameOver!");}}}private void wall_bug()//撞墙{if (snake[0].Left < 0 || snake[0].Left > 900 || snake[0].Top < 0 || snake[0].Top > 900){move.Enabled = false;cheak.Enabled = false;MessageBox.Show("GameOver!");}}private Point tail_show()//蛇尾的生成{if (count == 0|| count == 1){if (snake[0].Top == egg.Top && snake[0].Left - 100 == egg.Left)return new Point(snake[0].Left + 100, snake[0].Top);if (snake[0].Top == egg.Top && snake[0].Left + 100 == egg.Left)return new Point(snake[0].Left - 100, snake[0].Top);if (snake[0].Left == egg.Left && snake[0].Top - 100 == egg.Top)return new Point(snake[0].Left, snake[0].Top + 100);if (snake[0].Left == egg.Left && snake[0].Top + 100 == egg.Top)return new Point(snake[0].Left, snake[0].Top - 100);elsereturn new Point(-200,-200);}else{if (snake[count-1].Top == egg.Top && snake[count-2].Left - 100 == egg.Left)return new Point(snake[count-1].Left + 100, snake[count-1].Top);if (snake[count-1].Top == egg.Top && snake[count - 2].Left + 100 == egg.Left)return new Point(snake[count-1].Left - 100, snake[count-1].Top);if (snake[count-1].Left == egg.Left && snake[count - 2].Top - 100 == egg.Top)return new Point(snake[count-1].Left, snake[count-1].Top + 100);if (snake[count-1].Left == egg.Left && snake[count - 2].Top + 100 == egg.Top)return new Point(snake[count-1].Left, snake[count-1].Top - 100);elsereturn new Point(-200, -200);}}}
}

以上为全部代码!
感谢阅读!
有具体不懂的可以私聊问我!乐意教学!

【橙子】C#Winform--贪吃蛇是个人就看的懂的完整无bug逻辑代码相关推荐

  1. Pair Programming 1 (Casual Game) 曹竹 杨牧 贪吃蛇游戏扩展 Blog Report

    作者: 曹竹 杨牧 我们的分工: 我们的"贪吃蛇"游戏主要有两个部分拼接组合:后台逻辑和前台绘图,在定义了数据结构后就可以分工合作了. 具体开发过程: 我们在前两天对要开发的游戏和 ...

  2. matlab cat函数_如何用Matlab编写贪吃蛇游戏?(持续更新)

    今后我们实验室的研究重点将会聚焦在"基于游戏的测评"和"教育游戏化"这两个主题上,因此很有必要研究实现"爆款"游戏的一些基本的技术方法.这篇 ...

  3. 贪吃蛇python小白_面向 python 小白的贪吃蛇游戏

    代码和教程详见微信公众号:Python高效编程 效果图 图片 代码和教程详见微信公众号:Python高效编程 文字部分: 引言 作为python 小白,总是觉得自己要做好百分之二百的准备,才能开始写程 ...

  4. pygame render怎么显示中文_Pygame游戏——贪吃蛇(完结)

    我们的贪吃蛇游戏基本功能已经实现,可以完成吃食物,吃到食物变长,得分增加,食物再次随机出现. 但是我们有发现贪吃蛇可以穿到屏幕外面去,这显然是不合适的. 这一次我们需要完善的是: 游戏结束 游戏结束后 ...

  5. python贪吃蛇毕业设计_【干货|python项目实例——贪吃蛇】- 环球网校

    [摘要]当今世界充满了各种数据,而python是其中一种的重要组成部分.然而,若想其有所应用,我们需要对这些python理论进行实践.其中包含很多有趣的的过程,然后将其用于某些方面.其中一种应用就是p ...

  6. python程序源码百行_百行python代码,轻松完成贪吃蛇小游戏

    引言 作为python 小白,总是觉得自己要做好百分之二百的准备,才能开始写程序.以至于常常整天在那看各种语法教程,学了几个月还是只会print('hello world'). 这样做效率太低,正确的 ...

  7. 《Python游戏趣味编程》 第9章 贪吃蛇

    9 贪吃蛇 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了 本章我们将编写一个贪吃蛇的游戏,效果如图9-1所示.键盘控制小蛇上下左右移动,吃到食物后长度加一:蛇头碰到自 ...

  8. 花狗C语言彩色贪吃蛇(完整代码)

    2020博客之星年度总评选进行中:请为74号的狗子投上宝贵的一票! 我的投票地址:点击为我投票 写在前面: 大家好,我是 花狗Fdog ,来自内蒙古的一个小城市,目前在泰州读书. 很感谢能有这样一个平 ...

  9. 用pygame做一个简单的python小游戏---贪吃蛇

    用pygame做一个简单的python小游戏-贪吃蛇 贪吃蛇游戏博客链接:(方法一样,语言不一样) c++贪吃蛇:https://blog.csdn.net/weixin_46791942/artic ...

最新文章

  1. 【Linux】Ubuntu的一些高(sao)效(cao)率(zuo)工具
  2. oracle 创建 触发,Oracle 创建触发器
  3. 【Linux】一步一步学Linux——date命令(81)
  4. C# 获取Excel中的合并单元格
  5. Typecho浅色三栏主题
  6. 乘法更新规则对于并发的非负矩阵分解和最大间隔分类
  7. ES6学习(var,let,const区别)
  8. java xml文件无法打开,java – 无法打开beans.xml(配置文件)因为不存在
  9. 【数据结构和算法笔记】分别用vector数组和链表实现图的邻接表
  10. 【转】千万级并发实现的秘密:内核不是解决方案,而是问题所在!
  11. 9.RabbitMQ实战 --- 使用REST API控制Rabbit
  12. k8s节点不稳定,报错failed to wipe the XDP state error=failed to load BPF program
  13. java生成KML文件
  14. 计算机中年级排名怎么操作,智学网怎么查看年级排名?智学网查看年级排名的方法...
  15. Vue+SpringBoot打造房屋租售信息系统
  16. qq文件服务器怎么用,怎样使用qq文件助手功能图文教程
  17. 【Kotlin学习之旅】Kotlin实现101个C#的LINQ示例,让你领略一下Kotlin代码的魅力
  18. 【一起来刷Python题】——09.解决熄灯问题
  19. filebeat7.7.0相关详细配置预览- Setup ILM
  20. 从零开始的前端—HTML 02

热门文章

  1. 粒子回旋加速器(Cyclotron)的原理
  2. 信管1172-201711671226-WWY —JSP智能手机销售网后台设计
  3. PMP之挣值管理(PV、EV、AC、SV、CV、SPI、CPI)
  4. 测试边界值中的上点、内点、离点
  5. 欢迎来到 Elsa Workflows
  6. livy使用样例_livy提交spark应用
  7. 【Coursera-Machine Learning】自用7
  8. VBA提高篇_17 区域合纵连横,单元格精准定位
  9. js判断某个变量是否等于undefined
  10. c语言O2优化开启优缺点,c – gcc优化标志-O3使代码慢于-O2