基于Java的贪吃蛇游戏设计(含免费可⽤源代码)
补充说明:本⽂为笔者在校期间Java的课程设计题⽬,也参考了许多前辈的实现思路(但是游戏设计的⽐较简陋)。⽂中主要介绍了本课题的设计思路和项⽬结构,以及⼀些问题的解决⽅案。如果您也有这些疑问并对此感兴趣,希望能帮到您。如果您想要源码,点击 即可
进⼊下载页⾯。现在已开放免费下载。
在此感谢各位点击进⼊⽂章并考虑下载该资源。在下载源码后,现将可能遇到的⼀些问题,汇总说明如下:
1、对于源码是否能正常运⾏:该源码使⽤eclipse编写,且是笔者课设使⽤的可运⾏代码。最近从该下载链接中再次下载,经过亲⾃测试后,现在仍可运⾏。
2、eclipse问题:
(1)如果出现了下图所⽰的Class File Editor,可能是jdk的路径配置有问题。解决⽅案可参考:
(2)如果选择项⽬⽂件夹后,左侧Project Explorer为空,是因为⼯程的 .metadata不完整。
解决⽅案可参考:。具体操作如下:
打开File中的Import。
选择Existing Projects into Workspace。
随后打开⽂件路径,便能⾃动寻到项⽬。
然后问题就解决了。
3、在eclipse成功导⼊项⽬后,运⾏StartGame.java便能直接运⾏。
4、针对不同代码编译器可能出现的报错问题:由于笔者已经很少接触Java,且之前⼀直使⽤eclipse,所以对于不同编译器可能会出现的各种报错信息,暂也⽆法提供直接解决⽅案,望各位百度后⾃⾏解决。在这⾥主要对VSCode和Idea的问题简单进⾏说明。
(1)VSCode和Idea的编码问题:由于eclipse和VSCode的编码⽅式不同,所以将该源码放⼊VSCode中,中⽂会出现乱码。解决⽅法:File Encoding 转为GBK。
解决⽅案可参考:
(2)由于笔者不太喜欢⽤VSCode,⽽是⽐较喜欢⽤Idea,所以VSCode经过测试没有成功运⾏该项⽬。在这⾥主要对该Eclipse的Java 项⽬在Idea中使⽤提供解决参考:。通过该参考⽂章,经过笔者测试,成功将本⽂的源码在Idea中运⾏。
基于Java的贪吃蛇游戏设计
引⾔:
贪吃蛇是世界知名的益智类⼩游戏,选择这个题⽬的原因是为了尽可能运⽤Swing组件的知识。因为对做游戏⽅⾯有⼀定的兴趣,也很想知道流畅的游戏是怎么做出来的,所以选择对这⽅⾯进⾏尝试。
需要说明的是,虽然最终已经能够实现想要的简单效果,但是在程序中仍有许多未完善的功能,也可能存在着bug,在设计过程中也遇到了很多的问题。本⽂中会对这些内容进⾏简要阐述。
1. 需求分析
本程序主要是完成贪吃蛇游戏的基本操作,需要满⾜以下⼏点要求:
(1) 利⽤⽅向键来改变蛇的运⾏⽅向。
(2) 空格键暂停或继续游戏,并在随机的地⽅产⽣⾷物。
(3) 吃到⾷物就增长蛇的⾝体长度。
(4) 碰到壁或⾃⾝则游戏结束,否则正常运⾏。
2. 设计思路
根据整体需求,⼤致设计思路如下:在游戏开始后,在没有触发死亡条件的时候,按下⽅向键可以让蛇移动。按键移动很简单,只需要监听键盘触发事件即可。关键是按下按键怎么移动。在我看来,整个程序最关键的就是如何实现移动。即最难的就是计算坐标。
在设计的过程中,我把显⽰区域想象成⼀个⼤表格,⾥⾯的格⼦就是组成蛇的基本单位,⼀个格⼦也可以代表⼀个⾷物。然后使⽤坐标来区分这些格⼦。.
经过实验,根据蛇的图⽚素材(蛇的图⽚素材 来⾃于⽹络),坐标之间的距离为25,所以界⾯也必须是25的倍数,⾷物的⽣成坐标也必须是25的倍数,否则如果不是25的倍数,蛇可能就吃不到⾷物,也可能在触碰到边界的时候多出⼀部分。也就是说坐标应该像如下图这样:
接下来关于如何实现吃掉⾷物就简单的多了:只要蛇头的坐标与⾷物的坐标重合,蛇的⾝体长度加⼀就可以了,同时⽣成新的⾷物。⾷物的随机出现只需要调⽤random就可以了,范围根据屏幕(画布)⼤⼩决定,如下:
//如果⼩蛇的头和⾷物坐标重合
if(snakeX[0]==foodx && snakeY[0]==foody){
//长度+1
length++;
java贪吃蛇实验报告//重新⽣成⾷物
foodx =25+25* Int(32);
foody =75+75* Int(6);
}
之后我建⽴了两个数组:
int[] snakeX =new int[600];//蛇的坐标X
int[] snakeY =new int[500];//蛇的坐标Y
分别来记录蛇横坐标的变化和蛇纵坐标的变化。并在初始化⽅法⾥设置蛇的初始长度,蛇的初始头部坐标,第⼀个⾝体坐标,第⼆个⾝体坐标:
length =3;
snakeX[0]=100; snakeY[0]=100;//头部坐标
snakeX[1]=75; snakeY[1]=100;//第⼀个⾝体坐标
snakeX[2]=50; snakeY[2]=100;//第⼆个⾝体坐标
接下来就是如何实现移动的效果。
⾸先介绍⼀下游戏帧的概念:
游戏帧就是游戏运⾏时每秒所运⾏的帧数(简称FPS,Frames Per Second) 和视频⼀样,FPS越⼤,在屏幕上的视频就越来越平滑,直到⼀个临界点(⼤约是100FPS),超过这个临界点,再⾼的FPS都只是
⼀个令⼈惊奇的数值,400FPS和100FPS在⼈的视觉中⼏乎没有差别。也就是说设定⼀定数值的帧就可以让⼀个静态图⽚连续转动,从⽽让游戏流畅运⾏。
所以这⾥就⽤到了⼀个定时器,不断的刷新页⾯,获得动画的⼀个效果。
Timer timer =new Timer(110,this);//定时器
所以,蛇的移动其实是⼀张张静态的图⽚。这条蛇在画布上移动,说⽩了就是每个点坐标的变化。即在每次画⾯刷新之前,我都对蛇的坐标进⾏相应的变化,即可达到流畅运⾏的感觉。(⽐如在未按⽅向键的情况下,蛇会默认向⼀个⽅向⼀致移动,即坐标⼀直向x/y轴对应⽅向加25的移动。在按下某个除移动⽅向外的⽅向键,设就会改变移动⽅向,即按改变的x/y轴对应⽅向25的移动。⽽蛇⾝我⽤⼀个循环,不断往复地重复蛇头上⼀次移动到的坐标,从⽽实现蛇坐标的改变以及感官上的不断移动)
还有碰到墙壁或⾃⾝死亡,能够暂停和开始都是⽐较容易实现的功能,在代码部分可以详细见到。
以下为实现贪吃蛇游戏各模块的功能,⼤致流程:
3. 代码部分简述
3.1 主类StartGame
(1) 此程序的⼊⼝,定义了JFrame的对象jf,并设置窗⼝的⼤⼩,标题,在屏幕的位置等。
(2) 源代码见StartGame类。
3.2 类Data
(1) 实现蛇的⾝体、头部,⾷物等素材的导⼊。(所以素材放在image包下)
(2) 源代码见Data类,素材见image包。
3.3 类GamePanel
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论