基于JAVA的贪吃蛇游戏

miruos

发布日期: 2019-05-13 18:25:49 浏览量: 389
评分:
star star star star star star star star star star
*转载请注明来自write-bug.com

一、设计任务

  • 使用一门面向对象语言设计出一个贪吃蛇小游戏

  • 这里使用Java

二、功能分析

  • 蛇撞墙死,咬到自己死

  • 有随机食物出现

  • 蛇吃食物会变长一节

  • 可以暂停

  • 可以中途退出

  • 蛇的速度会增快

三、概要设计

  • 将地图,蛇,食物抽象出来

  • 整个游戏的进行,核心是将所有信息存储到一个二位数组中

  • 蛇的节点信息存储到一个List<Point>中

  • 地图上蛇,食物的显示,仅仅只是在对应的坐标上画东西

  • 蛇的移动仅仅是List中坐标的变化

四、详细设计

  • 定义一个二维数组background[][],令它的第一行和最后一行为true,用于后面画“墙”的标记

  • 定义一个ListedList集合,泛型为Point,因为Point可以存储坐标,然后,就可以用这个集合保存蛇的节点信息

  • 定义一个paint方法,参数为Graphics,该方法用于画界面,通过调用Graphics的setColor()方法来区分不同的事物,然后调用fill3DRect(),将坐标扩大20倍,形成一个个正方形。

  • 在paint()方法中,画完地图之后,使用Point集合,getFirst()可以获得头数据,也就是蛇头,剩下的使用一个for循环遍历Point集合,调用setColor()方法和fill3DRect()方法来画蛇头和蛇身。此处,为了蛇咬到自己可以显示蛇头,所以选择先画蛇身然后画蛇头。

  • 定义一个creatFood()方法,里面使用Random,产生随机x,y坐标,然后存在Point中,当然,为了防止食物长在石头上,需要判断y是否是第一行和最后一行。然后在paint()中画石头

  • 蛇的移动:蛇每移动一下,就会在Point中记录x,y坐标,为了方便,这里采用一个判断,如果蛇在移动一步的时候吃到了食物,也就是蛇头的坐标等于食物的坐标,那么我就不删除蛇的尾部,否则将尾部删除,就会出现蛇移动的视觉。

  • 蛇的方向改变,为了防止按键冲突,即在向上移动的时候,按向下走。这里定义四个常量,代表移动方向,其中相反方向使用相反常量。然后在移动的时候加入一个方法判断,如果加起来等于零,则不改变当前方向,否则改变方向。

  • 开始游戏:在用一个容器JFrame将界面放进去,然后调用刚才的工具类进行界面的初始化之后,要启动游戏了,也就是说需要让蛇不断地移动。这里启动了一个线程Thread,重写run方法,然后在run()方法中使用一个死循环。里面添加了JFrame的键盘监听事件,监听键盘的上下左右。然后定义一个move()方法,根据键盘输入的方向来在Point中添加蛇头的坐标。然后调用repaint()方法进行界面的更新,然后就可以见到蛇移动了。使用start()方法开启线程即可。

  • 结束游戏:两种可能,一是咬到自己和撞墙,也就是说蛇头的下一个坐标在Point中已经存在或是墙的坐标;一种是蛇占满整个屏幕,也就是蛇要吃1117(二维数组的大小减去蛇原来的三个再减去墙的数)个食物才行。因此在蛇移动之后,也就是添加蛇头之后,定义一个isGameOver()方法判断是否咬到自己和撞墙。然后在更新界面之后,判断是否游戏结束。最后加入线程停止功能,也就是每隔多少时间刷新一次。

  • 额外功能:

    • 暂停功能:添加一个键盘监听空格键,然后,进入一个死循环,弹框表明暂停,直到点击确认按钮,返回0,然后跳出循环
    • 分数:添加一个静态的全局变量score,在是否吃到食物eat()方法,使得score加上1。最后在JFrame中加入一个JLabel,加到JFrame的底部,在那里显示分数即可
    • 加速功能:如果吃到食物则使得进程暂停的时间缩短即可
    • 帮助:在分数的JLabel中加上一段文字即可。

五、功能介绍

  • 操作

    • 按↑↓←→进行移动
    • 按空格键暂停,再按一次空格键继续
    • 按Esc键直接退出
  • 功能介绍

    • 白色代表可移动区域,灰色代表墙,红色是蛇头,黄色是蛇身体,绿色是食物
    • 蛇撞墙会死,咬到自己会死,吃到食物会长长一节
    • 空格可以暂停,Esc可以直接退出
    • 每吃一节食物,蛇移动的速度会变快,分数会加1
  • 游戏界面

  • 失败界面

  • 暂停界面

六、不足之处

  • 界面太丑:这不能怪我啊!首先用java的GUI并不是Java的特长,而且我技术及其有限,所以。。。

  • 功能单一:身为一个贪吃蛇游戏,这样的功能也大致算是够了吧!考虑到客户的需求(其实是我自己的想法),玩游戏当然是一上来就能玩就好啊!然后就是可以随时退出。对于重玩功能,我是没有什么要求了。

七、心得体会

  • 敲代码的时候,重要的是写业务逻辑,界面的东西其实并不重要,因为这是美工的活,更改界面的代码也并不复杂

  • 对于这个小游戏,我发现它界面很丑,我也想进行更改,然后上网找了很多图片去替换,然后发现,替换之后,界面变得更丑了,可能是我审美观的问题。更重要的是,我将那条蛇的蛇头蛇身蛇尾用图片替换上去之后,一旦转向,整个都会转,是我代码逻辑的问题,但是要修复这个bug,我的智商不够用啊!!!

  • 学会了一点点git的使用,在这个贪吃蛇的整个流程中,都在不断的commit 和push,就是怕文件突然不见。

  • 对于面向对象语言有了更深刻的理解。将类抽象成对象,属性对应成员变量,功能对应方法。

  • 做一个东西,应该一点点的,从最基础的开始做,否则,一开始就想着一口气全部做完,完全不可能。

上传的附件 cloud_download 基于JAVA的贪吃蛇游戏.zip ( 230.82kb, 7次下载 )
error_outline 下载需要8点积分

发送私信

14
文章数
7
评论数
最近文章
eject