Java贪吃蛇报告.docx
《Java贪吃蛇报告.docx》由会员分享,可在线阅读,更多相关《Java贪吃蛇报告.docx(20页珍藏版)》请在冰豆网上搜索。
![Java贪吃蛇报告.docx](https://file1.bdocx.com/fileroot1/2022-12/19/edf5a054-a75c-4774-95ef-af5c2e4fa0e2/edf5a054-a75c-4774-95ef-af5c2e4fa0e21.gif)
Java贪吃蛇报告
第xx小组:
贪吃蛇游戏项目
小组成员及分工
姓名
角色
负责功能
组长
设计与编码
测试
主要完成模式选择窗口和游戏主窗口菜单栏下拉菜单的设计与程序编写,贪吃蛇游戏界面布局,游戏的操作步骤设计。
程序的调试
主要完成游戏主窗口的设计与编程,设计贪吃蛇的移动方向键设置,得分规则等,以及最后程序的调试。
主要完成主菜单窗口的设计和程序编写,界面的设计布局,游戏主窗口界面背景设置,按钮的图片设置等。
一、实验环境
操作系统:
Windows7
编程环境:
Eclipse、JDK
二、实验内容与完成情况
(主要介绍项目总体功能分析与说明。
)
贪吃蛇小游戏的JAVA程序是利用上↑、下↓、左←、右→方向键来改变蛇的运动方向,按空键暂停游戏,按enter键重新开始。
长按某个方向键后,蛇的运动速度会加快,在随机的地方产生食物,吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常进行游戏。
以不同的速度和不同方向吃到食物所获得的分数也不相同。
窗口功能说明:
设计了三个窗口,分别是游戏主窗口,主菜单窗口,模式选择窗口。
菜单栏分别为:
游戏菜单(重新开始)和帮助菜单以及返回(返回主菜单) 。
其中,按返回菜单按钮后会显示主菜单,其包括游戏开始、设置、退出游戏三项按钮选择;如果按“设置”按钮会进入“模式选择”窗口。
而模式选择窗口菜单包括了初级、中级、高级、返回按钮。
1、功能1(主菜单窗口)
(1)主菜单窗口主要是提供“游戏开始”、“设置”和“退出”按钮。
“游戏开始”按钮按下后会进入“游戏主窗口”开始游戏;“设置”按钮是调用“模式选择”窗口对游戏贪吃蛇的速度进行设置;“退出”按钮按下则会直接退出游戏。
(2)功能1实现的流程图
实现的效果图如下:
(3)功能1(主菜单窗口)代码:
packageSwing;
importclasssetMenuextendsJFrame{
privateintspeed1=200;
publicstaticintspeed=200;
*/
publicstaticvoidmain(String[]args){
(newRunnable(){
publicvoidrun(){
try{
setMenuframe=newsetMenu(speed);
(frame);
(true);
}catch(Exceptione){
();
}
}
});
}
/**
*Createtheframe.
*/
publicsetMenu(intspeed2){
speed1=speed2;
}
publicvoidSsetMenu(finalsetMenuframe){
setTitle("主菜单");
setDefaultCloseOperation;
setBounds(100,100,250,350);
contentPane=newJPanel();
(newColor(102,204,102));
(newEmptyBorder(5,5,5,5));
setContentPane(contentPane);
(null);
*/
publicstaticvoidmain(String[]args){
(newRunnable(){
publicvoidrun(){
try{
setMenuframe=newsetMenu(speed);
(frame);
(true);
}catch(Exceptione){
();
}
}
});
}
/**
*Createtheframe.
*/
publicsetMenu(intspeed2){
speed1=speed2;
}
publicvoidSsetMenu(finalsetMenuframe){
setTitle("主菜单");
setDefaultCloseOperation;
setBounds(100,100,250,350);
contentPane=newJPanel();
(newColor(102,204,102));
(newEmptyBorder(5,5,5,5));
setContentPane(contentPane);
(null);
dd(labelScore,;
(this);
();
(false);tart();
}
}
//main():
主函数
publicstaticvoidmain(String[]args){
Gamegs=newGame(200);
}
@Override
publicbooleanimageUpdate(Imagearg0,intarg1,intarg2,intarg3,
intarg4,intarg5){
//TODOAuto-generatedmethodstub
returnfalse;
}
}
//Node:
结点类
classNode{
intx;
inty;
Node(intx,inty){
=x;
=y;
}
}
//SnakeModel:
贪吃蛇模型
classSnakeModelimplementsRunnable{
Gamegs;
boolean[][]matrix;//界面数据保存在数组里
LinkedListnodeArray=newLinkedList();
Nodefood;
intmaxX;//最大宽度
intmaxY;//最大长度
intdirection=2;//方向
booleanrunning=false;
inttimeInterval=200;//间隔时间(速度)
doublespeedChangeRate=;//速度改变程度
booleanpaused=false;//游戏状态
intscore=0;
intcountMove=0;
//UP和DOWN是偶数,RIGHT和LEFT是奇数
publicstaticfinalintUP=2;
publicstaticfinalintDOWN=4;
publicstaticfinalintLEFT=1;
publicstaticfinalintRIGHT=3;
//GreedModel():
初始化界面
publicSnakeModel(Gamegs,intmaxX,intmaxY,intspeed_snake){
timeInterval=speed_snake;//速度
=gs;
=maxX;
=maxY;
matrix=newboolean[maxX][];
for(inti=0;imatrix[i]=newboolean[maxY];
(matrix[i],false);//没有蛇和食物的地区置false
}
//初始化贪吃蛇
intinitArrayLength=maxX>2010:
maxX/2;//蛇头位置,长度
//for(inti=0;iintx=maxX/2+i;
//inty=maxY/2;
//(newNode(x,y));
matrix[x][y]=true;//蛇身处置true
}
food=createFood();
matrix[][]=true;//食物处置true
}
//changeDirection():
改变运动方向
publicvoidchangeDirection(intnewDirection){
if(direction%2!
=newDirection%2){//检查方向冲突
direction=newDirection;
}
}
//moveOn():
贪吃蛇运动函数
publicbooleanmoveOn(){
Noden=(Node)();//获取蛇头的位置
intx=;
inty=;
////switch(direction){
caseUP:
y--;
break;
caseDOWN:
y++;
break;
caseLEFT:
x--;
break;
caseRIGHT:
x++;
break;
}
if((0<=x&&x//"asd");
if(matrix[x][y]){//吃到食物或者撞到身体
if(x==&&y=={//吃到食物
"eat");
(food);//在头部加上一结点
//计分规则与移动长度和速度有关
intscoreGet=(10000-200*countMove)/timeInterval;
score+=scoreGet>0scoreGet:
10;
countMove=0;
food=createFood();
matrix[][]=true;
returntrue;
}else
returnfalse;//撞到身体
}else{//什么都没有碰到
(newNode(x,y));//加上头部
matrix[x][y]=true;
n=(Node)();//去掉尾部
matrix[][]=false;
countMove++;
returntrue;
}
}
returnfalse;//越界(撞到墙壁)
}
//run():
贪吃蛇运动线程
publicvoidrun(){
running=true;
while(running){
try{
(timeInterval);
}catch(Exceptione){
break;
}
if(!
paused){
if(moveOn()){//未结束
();
}else{//游戏结束
(null,"GAMEOVER","GameOver",;
break;
}
}
}
running=false;
}
//createFood():
生成食物及放置地点
privateNodecreateFood(){
intx=0;
inty=0;
do{
Randomr=newRandom();
x=(maxX);
y=(maxY);
}while(matrix[x][y]);
returnnewNode(x,y);
}
//speedUp():
加快蛇运动速度
publicvoidspeedUp(){
timeInterval*=speedChangeRate;
}
//speedDown():
放慢蛇运动速度
publicvoidspeedDown(){
timeInterval/=speedChangeRate;
}
//changePauseState():
改变游戏状态(暂停或继续)
publicvoidchangePauseState(){
paused=!
paused;
}
}
三、功能测试
对系统的所有功能模块进行测试并截图显示,并对出现的问题(及其现象)和解决办法予以记录。
游戏主界面:
点击“菜单”菜单出现“重新开始”下拉菜单,点击后游戏重新开始
点击“帮助”菜单出现“游戏说明”下拉菜单
当蛇碰到边界或者碰到自身蛇体,游戏结束。
主菜单窗口:
模式选择窗口:
对出现的问题(及其现象)和解决办法予以记录:
1、开始在程序编写时没规定游戏主窗口的大小,当用鼠标拉大窗口后,出现了蛇在移动时没碰触到边界就出现游戏失败的弹出框即游戏结束。
经过查看程序和在网上找资料了解到是由于没有对主窗口设定一定的窗口大小导致的。
解决办法为:
publicstaticfinalintDEFAULT_WIDTH=500;publicstaticfinalintDEFAULT_HEIGHT=400;………(newDimension(DEFAULT_WIDTH-10,DEFAULT_HEIGHT-10));//490*390
2、在蛇的运行线程过程中,当蛇撞到墙或自己的身体时,程序出错。
发现是因为我们只做了简单的抛出异常操作,使程序运行后效果不出来,经过老师在上课时教的用try-catch去捕捉异常,将抛出一个Exception类的异常对象。
try{
(timeInterval); }
catch(Exception e)
{ break; }
3、通过在网上查找资料参考学习到Swing中弹出对话框实现显示出信息、提出问题、警告、用户输入参数等功能并显示一个带有OK按钮的模态对话框。
JOptionPane类其中封装了很多的方法,很方便。
在这些模式对话框中使用了showMessageDialog()显示信息对话框以及showOptionDialog()显示选择性的对话框等。
四、项目总结
每个小组成员单独完成,内容包括项目分析、开发和团队合作过程中的经验和教训,如:
遇到的困难及解决方法、主要技术的使用等。
设计程序采用什么编程语言并不是最重要的,关键是要有一个清晰的思路和一个完整的软件流程图,所有要先把设计原理与思路搞清楚,再把流程图画出来。
在编码过程中使用不了解的函数还可以查资料或翻书来了解功能和执行语法。
在设计程序时,不能妄想一次就将整个程序设计好,“反复修改,不断改进”不仅提高代码感,也培养做事细心的习惯,温故和矫正中发现问题,更好的完善程序。
还有要养成养成注释程序的习惯,一个程序的完美与否不仅是实现功能,还是能清晰快速地明白编写者的思路,这样使资料的保存和交流方便。
五、个人课程总结报告
在基于原来的Java学习上了解了更细致的Java学习和编程思路,老师的讲解很细致,原来学习Java没想过功能语法上,在课堂学习中渐渐更加深对各函数语法的理解有助于日后在编码时更准确的应用这些工具。
在学习的过程中也发现Java的语言功能远不止目前所学到的这些,课堂之后自己还要继续去发掘,不会的东西还有太多,需要不断去了解积累更新,Java的编程才能更得心应手。