HTML5技术

人生就像一条加速奔向死亡的贪吃蛇【winform版】 - 大萝卜控

字号+ 作者:H5之家 来源:博客园 2016-05-22 18:00 我要评论( )

群里聊天的时候,一个学妹说她在做贪吃蛇的小作业,于是昨晚(5.20无聊只好撸代码/(ㄒoㄒ)/~~)花了2个小时撸了一个出来,早上又花了些时间完善功能,就有了这个还算比较完善的版本,当然代码结构比较混乱,没有抽像成类,后来搜索了博客园以前的,发现都只

群里聊天的时候,一个学妹说她在做贪吃蛇的小作业,于是昨晚(5.20无聊只好撸代码/(ㄒoㄒ)/~~)花了2个小时撸了一个出来,早上又花了些时间完善功能,就有了这个还算比较完善的版本,当然代码结构比较混乱,没有抽像成类,后来搜索了博客园以前的,发现都只是实现了基本的功能,根本不能愉快的玩耍。

 

(不要吐槽我玩的烂,已经被虐成狗了,速度快乐根本反应不过来,好吧,我老了。。。下载链接在最下面

整个程序只定义了一个Pos类来保存点的x,y值,还有2个枚举

Pos { public int X; public int Y; public Pos(int x, int y) { X = x; Y = y; } }

蛇身体用一个队列(就是不喜欢List,感觉队列更加符合蛇身体移动特性:移除蛇尾,添加到蛇头)来保存Pos信息,使用队列虽然方便了蛇尾移出和蛇头添加,却不能直接得到蛇头信息,所以独立变量保存,食物也是一个独立的Pos变量记录其位置

Pos food; //食物位置 Queue<Pos> snake;//蛇身体队列 Pos head; x,y; cubeL = 22; //格子大小

整个游戏节奏由定时器驱动,当蛇长度到达预定长度,定时器将会缩短时间间隔,加快游戏进度(到100毫秒的时候,已经丧病了)

private void Speed() { if (snake.Count == 7) { timer1.Interval = 450; level = 2; } ........ else if (snake.Count == 60) { timer1.Interval = 100; level = 8; } }

绘制代码就不详细解释了,有点乱,如果您有耐心可以把它们抽离出来写到一个Snake类里面

private void Form1_Paint(object sender, PaintEventArgs e) {     e.Graphics.TranslateTransform(20, 50);     Pen pen = new Pen(Color.Green,1);     //绘制网格     for (int i = 0; i < x+1; i++)     {         e.Graphics.DrawLine(pen, i * cubeL, 0, i * cubeL, y * cubeL);     }     for (int j = 0; j < y+1; j++)     {         e.Graphics.DrawLine(pen, 0, j * cubeL, x * cubeL, j * cubeL);     }     SolidBrush brush = new SolidBrush(Color.Orange);     //绘制蛇     if (state != GameState.Init)     {         e.Graphics.FillRectangle(brush, food.X * cubeL, food.Y * cubeL, cubeL, cubeL);         brush.Color = Color.DeepSkyBlue;         foreach (var p in snake)         {             e.Graphics.FillRectangle(brush, p.X * cubeL, p.Y * cubeL, cubeL, cubeL);         }         brush.Color = Color.Blue;         e.Graphics.FillRectangle(brush, head.X * cubeL, head.Y * cubeL, cubeL, cubeL);         brush.Color = Color.Red;     }     //绘制状态提示     if(state == GameState.Init)     {         brush.Color = Color.Red;         e.Graphics.DrawString("S 开始游戏,空格 暂停/继续游戏 \n\r奔向死亡吧,骚年!", new Font("微软雅黑", 20), brush, 150, 120);     }     else if (state == GameState.Start)     {         if (!timer1.Enabled)             e.Graphics.DrawString("游戏暂停,空格继续!", new Font("微软雅黑", 20), brush, 150, 120);     }     else     {         brush.Color = Color.Red;         e.Graphics.DrawString("游戏结束,S 开始游戏!", new Font("微软雅黑", 20), brush, 150, 120);     }     e.Graphics.ResetTransform();     string tip = "level:"+level.ToString()+" 长度: "+snake.Count.ToString()+ "  分数:"+(snake.Count*level*10).ToString();     brush.Color = Color.Black;     e.Graphics.DrawString(tip, new Font("微软雅黑", 15), brush, 360, 10); }

键盘输入处理,输入的键被暂时保存在一个Direction枚举变量中,直到移动之后才确定为当前移动方向(否则会出现bug,比如先其他方向,再反方向就会出错!整个游戏的节奏唯一由定时器确定)

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 你看那个人他像一条狗 - 纯洁的微笑

    你看那个人他像一条狗 - 纯洁的微笑

    2017-03-29 11:02

  • 【初码干货】使用阿里云对Web开发中的资源文件进行CDN加速的深入研究和实践 - 初码

    【初码干货】使用阿里云对Web开发中的资源文件进行CDN加速的深入研究

    2016-07-03 16:00

  • 15个最新加速 Web 开发的框架和工具 - 帅的相对论

    15个最新加速 Web 开发的框架和工具 - 帅的相对论

    2015-11-25 11:13

  • 最新13个加速 Web 开发的框架和工具 - 帅的相对论

    最新13个加速 Web 开发的框架和工具 - 帅的相对论

    2015-11-17 14:26

网友点评
r