




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGE1《Java语言程序设计》课程设计题目20设计一个贪吃蛇游戏程序专业信息管理与信息系统班级信管101学号201052275107学生姓名沈园同组成员杨贵文指导教师李永刚编写日期2011年7月1日PAGEPAGE2一、设计任务书(一)课程设计的目的与任务课程设计是课程教学中的一项重要内容,是完成教学计划达到教学目标的重要环节,是教学计划中综合性较强的实践教学环节,它对帮助学生全面牢固地掌握课堂教学内容、培养学生的实践和实际动手能力、提高学生全面素质具有很重要的意义。《Java语言程序设计》是一门实用性和实践性都很强的课程,课程设计环节应占有更加重要的地位。本课程设计的目的和任务,是通过学生用Java语言设计一个完整的应用程序,使学生综合应用所学知识完成软件的分析、设计、调试和总结,可加深和巩固对理论教学和实验教学内容的掌握,使学生进一步掌握使用面向对象技术开发完整系统的方法。(二)本课程设计的基本理论本课程设计基于面向对象程序设计思想,从面向对象的编程技术入手,涉及图形用户界面设计、异常处理、输入输出等知识点,是Java语言程序设计课程的一个综合应用。(三)课程设计的方式与基本要求1.课程设计方式课程设计的题目应提前两周布置给学生,每2-3人为1组,每组可以从给定的选题表中选择一个题目,以便学生作好充分准备。1周的课程设计主要分成以下几个阶段:(1)系统分析与设计(2)在前期资料查阅的基础上,学生对所选的课题进行功能分析与设计,并与指导老师进行充分的沟通。(3)程序编制与调试(4)学生在指导老师的指导下独立完成程序的编制与调试,指导老师应实时考察学生的实际编程与调试能力。(5)总结报告(6)最终提交完整的设计文档、源代码和可执行文件。学生根据规定的课程设计报告格式撰写设计报告与总结。(7)答辩与考核阶段(8)指导教师对每位学生进行当面提问,学生以语言表达和实际操作的方式进行答辩。指导教师将综合每一学生1周的表现及能力进行综合评分。2.基本要求(1)设计的软件系统要实现题目要求的功能。(2)整个课程设计的各个环节都要求学生自己动手。(3)要求学生熟练掌握Java语言设计一个完整的应用程序的设计方法和步骤(软件的分析、设计、调试和总结)。(4)对课程设计进行总结,撰写课程设计报告;二、程序功能简介能够显示贪吃蛇的运动,回车、R、S是开始,空格、P是暂停。能够通过键盘上的上下左右键,控制贪吃蛇的移动方向。当吃到食物时,蛇就自动长大一格,并且获得一分;当蛇撞墙或撞到自己就结束游戏。结束后能显示获得分数。三、系统设计(一)设计分析要点分析:(1)数据结构:matrix[][]用来存储地图上面的信息,如果什么也没有设置为false,如果有食物或蛇,设置为true;nodeArray,一个LinkedList,用来保存蛇的每一节;food用来保存食物的位置;而Node类是保存每个位置的信息。(2)重要函数:changeDirection(intnewDirection),用来改变蛇前进的方向,而且只是保存头部的前进方向,因为其他的前进方向已经用位置来指明了。其中newDirection必须和原来的direction不是相反方向,所以相反方向的值用了同样的奇偶性。在测试的时候使用了direction%2!=newDirection%2进行判断。moveOn(),用来更新蛇的位置,对于当前方向,把头部位置进行相应改变。如果越界,结束;否则,检测是否遇到食物(加头部)或身体(结束);如果什么都没有,加上头部,去掉尾部。由于用了LinkedList数据结构,省去了相当多的麻烦。(二)程序代码文件名:SnakeModel.javapackagesy;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjava.util.*;publicclassGreedSnakeimplementsKeyListener{JFramemainFrame;CanvaspaintCanvas;JLabellabelScore;//计分牌SnakeModelsnakeModel=null;//蛇publicstaticfinalintcanvasWidth=200;publicstaticfinalintcanvasHeight=300;publicstaticfinalintnodeWidth=10;publicstaticfinalintnodeHeight=10;//GreedSnake():初始化游戏界面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);labelHelp=newJLabel("ENTERorRorSforstart;",JLabel.CENTER);panelButtom.add(labelHelp,BorderLayout.CENTER);labelHelp=newJLabel("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);begin();}//keyPressed():按键检测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);break;caseKeyEvent.VK_LEFT:snakeModel.changeDirection(SnakeModel.LEFT);break;caseKeyEvent.VK_RIGHT:snakeModel.changeDirection(SnakeModel.RIGHT);break;caseKeyEvent.VK_ADD:caseKeyEvent.VK_PAGE_UP:snakeModel.speedUp();//加速break;caseKeyEvent.VK_SUBTRACT:caseKeyEvent.VK_PAGE_DOWN:snakeModel.speedDown();//减速break;caseKeyEvent.VK_SPACE:caseKeyEvent.VK_P:snakeModel.changePauseState();//暂停或继续break;default:}//重新开始if(keyCode==KeyEvent.VK_R||keyCode==KeyEvent.VK_S||keyCode==KeyEvent.VK_ENTER){snakeModel.running=false;begin();}}//keyReleased():空函数publicvoidkeyReleased(KeyEvente){}//keyTyped():空函数publicvoidkeyTyped(KeyEvente){}//repaint():绘制游戏界面(包括蛇和食物)voidrepaint(){Graphicsg=paintCanvas.getGraphics();//drawbackgroundg.setColor(Color.WHITE);g.fillRect(0,0,canvasWidth,canvasHeight);//drawthesnakeg.setColor(Color.BLACK);LinkedListna=snakeModel.nodeArray;Iteratorit=na.iterator();while(it.hasNext()){Noden=(Node)it.next();drawNode(g,n);}//drawthefoodg.setColor(Color.RED);Noden=snakeModel.food;drawNode(g,n);updateScore();}//drawNode():绘画某一结点(蛇身或食物)privatevoiddrawNode(Graphicsg,Noden){g.fillRect(n.x*nodeWidth,n.y*nodeHeight,nodeWidth-1,nodeHeight-1);}//updateScore():改变计分牌publicvoidupdateScore(){Strings="Score:"+snakeModel.score;labelScore.setText(s);}//begin():游戏开始,放置贪吃蛇voidbegin(){if(snakeModel==null||!snakeModel.running){snakeModel=newSnakeModel(this,canvasWidth/nodeWidth,this.canvasHeight/nodeHeight);(newThread(snakeModel)).start();}}//main():主函数publicstaticvoidmain(String[]args){GreedSnakegs=newGreedSnake();}}//Node:结点类classNode{intx;inty;Node(intx,inty){this.x=x;this.y=y;}}//SnakeModel:贪吃蛇模型classSnakeModelimplementsRunnable{GreedSnakegs;boolean[][]matrix;//界面数据保存在数组里LinkedListnodeArray=newLinkedList();Nodefood;intmaxX;//最大宽度intmaxY;//最大长度intdirection=2;//方向booleanrunning=false;inttimeInterval=200;//间隔时间(速度)doublespeedChangeRate=0.75;//速度改变程度booleanpaused=false;//游戏状态intscore=0;intcountMove=0;//UP和DOWN是偶数,RIGHT和LEFT是奇数publicstaticfinalintUP=2;publicstaticfinalintDOWN=4;publicstaticfinalintLEFT=1;publicstaticfinalintRIGHT=3;//GreedModel():初始化界面publicSnakeModel(GreedSnakegs,intmaxX,intmaxY){this.gs=gs;this.maxX=maxX;this.maxY=maxY;matrix=newboolean[maxX][];for(inti=0;i<maxX;++i){matrix[i]=newboolean[maxY];Arrays.fill(matrix[i],false);//没有蛇和食物的地区置false}//初始化贪吃蛇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;//蛇身处置true}food=createFood();matrix[food.x][food.y]=true;//食物处置true}//changeDirection():改变运动方向publicvoidchangeDirection(intnewDirection){if(direction%2!=newDirection%2)//避免冲突{direction=newDirection;}}//moveOn():贪吃蛇运动函数publicbooleanmoveOn(){Noden=(Node)nodeArray.getFirst();intx=n.x;inty=n.y;switch(direction){caseUP:y--;break;caseDOWN:y++;break;caseLEFT:x--;break;caseRIGHT:x++;break;}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;score+=scoreGet>0?scoreGet:10;countMove=0;food=createFood();matrix[food.x][food.y]=true;returntrue;}elsereturnfalse;//撞到身体}else//什么都没有碰到{nodeArray.addFirst(newNode(x,y));//加上头部matrix[x][y]=true;n=(Node)nodeArray.removeLast();//去掉尾部matrix[n.x][n.y]=false;countMove++;returntrue;}}returnfalse;//越界(撞到墙壁)}//run():贪吃蛇运动线程publicvoidrun(){running=true;while(running){try{Thread.sleep(timeInterval);}catch(Exceptione){break;}if(!pause
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 木材防腐与防虫处理技术考核试卷
- 矿产资源调查与评价方法-石墨滑石考核试卷
- 生物质成型燃料的燃烧污染物排放与控制考核试卷
- 秋风初一语文作文
- 静下心来初三语文作文
- 真空设备在化工领域的应用考核试卷
- 机械式停车设备维护保养技巧考核试卷
- 玻璃制品疲劳寿命评估考核试卷
- 粉末冶金在汽车尾气净化领域的应用考核试卷
- 电子电路的智能电网应用考核试卷
- 银行等安全保卫现场检查要点清单
- 活动场地租赁与活动安全责任协议
- 《数据统计与分析》课件
- 2024年河南职业技术学院单招职业适应性考试题库必考题
- (二模)新疆维吾尔自治区2025年普通高考第二次适应性检测 英语试卷(含答案详解)
- 征信系统AI应用行业深度调研及发展战略咨询报告
- 书法艺术疗愈在书法教育中的实践与应用研究
- 射频电路封装设计与工艺实现方法研究
- 2025年中国航天日知识竞赛考试题库300题(含答案)
- 物业项目经理考题及答案
- T-JSQX 0016-2024 无人驾驶配送装备通.用技术要求
评论
0/150
提交评论