贪吃蛇java课程设计Word格式.docx
- 文档编号:5273023
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:14
- 大小:199.57KB
贪吃蛇java课程设计Word格式.docx
《贪吃蛇java课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《贪吃蛇java课程设计Word格式.docx(14页珍藏版)》请在冰点文库上搜索。
(2)ENTER,R,S重新开始游戏,界面回到开始界面;
(3)SPACE,P暂停游戏。
2.3.4使贪吃蛇听指挥
(1)加键盘监听器类;
(2)添加键盘监听器;
(3)定义其按键上,下,左,右;
(4)针对不同的键改变贪吃蛇的位置,与重画线程结合产生不同方向运动。
通过上下左右来调节。
2.3.5进行贪吃蛇类的确定
(1)定义背景的颜色为白色;
(2)定义贪吃蛇的颜色为黑色;
(3)定义食物的颜色为红色。
2.3.6食物出现的位置
通过随机函数调用,实现食物的出现,当贪吃蛇吃完一各食物,随即再生成一个食物。
2.3.7贪吃蛇身增加一节
运用for函数实现,当贪吃蛇每吃到食物,贪吃蛇蛇身就增加一节,然后在框架中又重新出现新的食物。
2.3.8得分增加
当贪吃蛇每吃到一块食物,贪吃蛇蛇身就增加一节,分数就有次序的增加。
在框架的上方有显示。
2.3.9贪吃蛇死亡
(1)当贪吃蛇撞到框架或自身的时候,则贪吃蛇死亡。
然后弹处一个对话框,显示youfailed。
(2)如果想继续游戏,点击“确定”,再按ENTER,R,S重新开始游戏,界面回到开始界面。
2.3.10游戏结束
显示youfailed,你取消对话框即退出了贪吃蛇游戏。
课程设计说明书NO.4
2.4设计的源代码
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.util.*;
publicclassGreedSnakeimplementsKeyListener
{
JFramemainFrame;
CanvaspaintCanvas;
JLabellabelScore;
SnakeModelsnakeModel=null;
publicstaticfinalintcanvasWidth=600;
publicstaticfinalintcanvasHeight=400;
publicstaticfinalintnodeWidth=10;
publicstaticfinalintnodeHeight=10;
publicGreedSnake()
mainFrame=newJFrame("
GreedSnake"
);
Containercp=mainFrame.getContentPane();
labelScore=newJLabel("
Score:
"
cp.add(labelScore,BorderLayout.NORTH);
paintCanvas=newCanvas();
paintCanvas.setSize(canvasWidth+1,canvasHeight+1);
paintCanvas.addKeyListener(this);
cp.add(paintCanvas,BorderLayout.CENTER);
JPanelpanelButtom=newJPanel();
panelButtom.setLayout(newBorderLayout());
JLabellabelHelp;
labelHelp=newJLabel("
PageUp,PageDownforspeed;
JLabel.CENTER);
panelButtom.add(labelHelp,BorderLayout.NORTH);
ENTERorRorSforstart;
panelButtom.add(labelHelp,BorderLayout.CENTER);
SPACEorPforpause"
JLabel.CENTER);
panelButtom.add(labelHelp,BorderLayout.SOUTH);
cp.add(panelButtom,BorderLayout.SOUTH);
mainFrame.addKeyListener(this);
mainFrame.pack();
mainFrame.setResizable(false);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setVisible(true);
课程设计说明书NO.5
begin();
}
publicvoidkeyPressed(KeyEvente)
intkeyCode=e.getKeyCode();
if(snakeModel.running)
switch(keyCode)
caseKeyEvent.VK_UP:
snakeModel.changeDirection(SnakeModel.UP);
break;
caseKeyEvent.VK_DOWN:
snakeModel.changeDirection(SnakeModel.DOWN);
caseKeyEvent.VK_LEFT:
snakeModel.changeDirection(SnakeModel.LEFT);
caseKeyEvent.VK_RIGHT:
snakeModel.changeDirection(SnakeModel.RIGHT);
caseKeyEvent.VK_ADD:
caseKeyEvent.VK_PAGE_UP:
snakeModel.speedUp();
caseKeyEvent.VK_SUBTRACT:
caseKeyEvent.VK_PAGE_DOWN:
snakeModel.speedDown();
caseKeyEvent.VK_SPACE:
caseKeyEvent.VK_P:
snakeModel.changePauseState();
default:
if(keyCode==KeyEvent.VK_R||
keyCode==KeyEvent.VK_S||
keyCode==KeyEvent.VK_ENTER)
snakeModel.running=false;
课程设计说明书NO.6
publicvoidkeyReleased(KeyEvente){
publicvoidkeyTyped(KeyEvente){
voidrepaint()
Graphicsg=paintCanvas.getGraphics();
//drawbackground
g.setColor(Color.WHITE);
g.fillRect(0,0,canvasWidth,canvasHeight);
//drawthesnake
g.setColor(Color.BLACK);
LinkedListna=snakeModel.nodeArray;
Iteratorit=na.iterator();
while(it.hasNext())
Noden=(Node)it.next();
drawNode(g,n);
//drawthefood
g.setColor(Color.RED);
Noden=snakeModel.food;
updateScore();
privatevoiddrawNode(Graphicsg,Noden)
g.fillRect(n.x*nodeWidth,
n.y*nodeHeight,
nodeWidth-1,
nodeHeight-1);
publicvoidupdateScore()
Strings="
"
+snakeModel.score;
labelScore.setText(s);
}
voidbegin()
课程设计说明书NO.7
if(snakeModel==null||!
snakeModel.running)
snakeModel=newSnakeModel(this,
canvasWidth/nodeWidth,
canvasHeight/nodeHeight);
(newThread(snakeModel)).start();
publicstaticvoidmain(String[]args)
GreedSnakegs=newGreedSnake();
classSnakeModelimplementsRunnable
GreedSnakegs;
boolean[][]matrix;
LinkedListnodeArray=newLinkedList();
Nodefood;
intmaxX;
intmaxY;
intdirection=2;
booleanrunning=false;
inttimeInterval=200;
doublespeedChangeRate=0.75;
booleanpaused=false;
intscore=0;
intcountMove=0;
//UPandDOWNshouldbeeven
//RIGHTandLEFTshouldbeodd
publicstaticfinalintUP=2;
publicstaticfinalintDOWN=4;
publicstaticfinalintLEFT=1;
publicstaticfinalintRIGHT=3;
publicSnakeModel(GreedSnakegs,intmaxX,intmaxY)
this.gs=gs;
this.maxX=maxX;
this.maxY=maxY;
//initialmatirx
课程设计说明书NO.8
matrix=newboolean[maxX][];
for(inti=0;
i<
maxX;
++i){
matrix[i]=newboolean[maxY];
Arrays.fill(matrix[i],false);
//initialthesnake
intinitArrayLength=maxX>
20?
10:
maxX/2;
for(inti=0;
i<
initArrayLength;
++i)
intx=maxX/2+i;
inty=maxY/2;
nodeArray.addLast(newNode(x,y));
matrix[x][y]=true;
food=createFood();
matrix[food.x][food.y]=true;
publicvoidchangeDirection(intnewDirection)
if(direction%2!
=newDirection%2)
direction=newDirection;
publicbooleanmoveOn()
Noden=(Node)nodeArray.getFirst();
intx=n.x;
inty=n.y;
switch(direction)
caseUP:
y--;
caseDOWN:
y++;
caseLEFT:
x--;
caseRIGHT:
课程设计说明书NO.9
x++;
if((0<
=x&
&
x<
maxX)&
(0<
=y&
y<
maxY))
if(matrix[x][y])
if(x==food.x&
y==food.y)
nodeArray.addFirst(food);
intscoreGet=(10000-200*countMove)/timeInterval;
core+=scoreGet>
0?
scoreGet:
10;
countMove=0;
food=createFood();
returntrue;
else
returnfalse;
nodeArray.addFirst(newNode(x,y));
matrix[x][y]=true;
n=(Node)nodeArray.removeLast();
matrix[n.x][n.y]=false;
countMove++;
returnfalse;
publicvoidrun()
running=true;
while(running)
try
Thread.sleep(timeInterval);
课程设计说明书NO.10
catch(Exceptione)
if(!
paused){
if(moveOn()){
gs.repaint();
JOptionPane.showMessageDialog(
null,
youfailed"
GameOver"
JOptionPane.INFORMATION_MESSAGE);
running=false;
privateNodecreateFood()
intx=0;
inty=0;
do{
Randomr=newRandom();
x=r.nextInt(maxX);
y=r.nextInt(maxY);
while(matrix[x][y]);
returnnewNode(x,y);
publicvoidspeedUp(){
timeInterval*=speedChangeRate;
publicvoidspeedDown()
timeInterval/=speedChangeRate;
publicvoidchangePauseState()
课程设计说明书NO.11
paused=!
paused;
publicStringtoString()
Stringresult="
;
for(inti=0;
nodeArray.size();
Noden=(Node)nodeArray.get(i);
result+="
["
+n.x+"
"
+n.y+"
]"
returnresult;
classNode
intx;
inty;
Node(intx,inty)
this.x=x;
this.y=y;
3.设计结果与分析
本设计是在JCreator+JDK平台上开发、调试运行的,运行的结果截图如下几个图所示。
图3程序运行起始界面
课程设计说明书NO.12
图3游戏开始界面
图4游戏进行中界面
课程设计说明书NO.13
4.设计心得体会
这次课程设计历时二个星期多左右,通过这两个星期的学习,发现了自己的很多不足,自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。
通过对Java的程序设计,感觉到自己在知识的理解上有很大的不足,对知识的掌握程度还是不那么的深入。
在这个课程设计中,融入了太多的汗水,就因为付出了很多,才感觉到这个课程设计所给我带来的深刻意义。
在知识的海洋里,我们应该勇于发现问题,积极的去探索问题,不应该遇到比较棘手的问题就对自己放松,对自己就降低了要求。
这个课程设计就是我自己的辛辛苦苦的劳动成果,所以当我顺利的完成了这个课程设计的时候,我的心情使无比的激动。
重拾教材与实验手册,对知识系统而全面进行了梳理,遇到难处先是苦思冥想再向同学请教,终于熟练掌握了基本理论知识,而且领悟诸多平时学习难以理解掌握的较难知识,学会了如何思考的思维方式,找到了设计的灵感。
在此过程中,有太多的艰辛,有太多的坎坷。
正是有了老师的耐心辅导,还有同学们的辛苦帮助,我才能这么顺利的完成这个课程设计。
所以我要谢谢他们每个人。
我想说:
为完成这次课程设计我们确实很辛苦,但苦中仍有乐,和同学这十几天的一起完成课程设计的日子,让我们有说有笑,相互帮助,配合默契,多少人间欢乐在这里洒下,大学里一年的相处还赶不上这十来天的实习,我感觉我和同学们之间的距离更加近了。
5.参考文献
[1]陈德志、冯智圣.Java程序设计习题解析[M].北京:
冶金工业出版社,2004.7:
101-188
[2]李向明,姜遇姬.Java程序设计教程[M].北京:
人民邮电大学出版社,2004.6:
204-260
[3]刘其红.Java程序设计实例教程[M].北京:
冶金出版社,2004.7:
51-127
[4]朱喜福.Java程序设计[M].北京:
清华大学出版社,2005.3:
120-150
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 贪吃 java 课程设计