软工JAVA课程设计.pdf

上传人:赵** 文档编号:43624809 上传时间:2022-09-17 格式:PDF 页数:24 大小:648.89KB
返回 下载 相关 举报
软工JAVA课程设计.pdf_第1页
第1页 / 共24页
软工JAVA课程设计.pdf_第2页
第2页 / 共24页
点击查看更多>>
资源描述

《软工JAVA课程设计.pdf》由会员分享,可在线阅读,更多相关《软工JAVA课程设计.pdf(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、-JAVAJAVA 程序设计程序设计课程设计报告课程设计报告院院 系:系:计算机与信息工程学院计算机与信息工程学院题题 目目:吞食蛇吞食蛇学生姓名学生姓名:张聚营张聚营卢毛毛卢毛毛学生学号学生学号:20144499 20144645:20144499 20144645专业班级专业班级:软一软一软二软二指导教师指导教师:吴光伟吴光伟完成时间完成时间:2016:2016 年年 6 6 月月 2323 号号-目录1 需求分析.31.1 基本功能如下:.31.2 扩展功能:.32 设计.32.1设计思路.32.3 系统功能模块.42.4 程序流程图.4图 2.2.62.5 总设计模块的划分.63 功能

2、的具体实现.73.1 重新开始 .73.2 暂停.73.3 保存分数 .83.4 加速减速 .94 运行结果 .94.1 游戏开始界面.94.2 蛇撞到自身结束游戏.104.3 蛇撞到墙面结束游戏.104.4 游戏暂停 .114.5 游戏在暂停或者运行时重新开始.114.6 游戏分数的保存.12总 结.13参 考 文 献.14附录 A 源代码.15评分 表:.24-1 1 需求分析需求分析1.11.1 基本功能如下:基本功能如下:1.能够使用键盘控制吞食蛇的行动。2.能够随机生成食物,供吞食蛇吞噬。3.提供游戏的暂停和保存的功能。1.21.2 扩展功能:扩展功能:4.提供难度的选择,如速度、地

3、形。5.提供服务器,让玩家可以比较战绩。其他功能可以按照自己的兴趣进行创新添加。2 2 设计设计2.12.1 设计思路设计思路贪吃蛇游戏设计与实现,主要分为以下二个模块:游戏主界面模块和游戏控制模块。在此只实现游戏的游戏主界面模块、游戏控制模块。并且只是实现移动速度、暂停、重新开始等功能。游戏主界面模块:游戏的主界面是进入游戏后,能够给玩家第一感官的部分,主要包括游戏图形区域界面、游戏的速度选择更新界面、新生方块的预览、暂停游戏按钮、重新开始游戏按钮。从很大程度上决定了玩家对游戏的兴趣问题,因此,游戏的主界面应该力求美观,爽心悦目。游戏控制模块:这个模块是游戏的中心环节,主要完成控制游戏的开始

4、、暂停、-重新开始等功能。为了能够给玩家一个很好的游戏环境,这部分应该做到易懂、易操作。本设计所开发的是基于 Java 的一个贪吃蛇游戏软件,主要实现游戏的速度控制、游戏的暂停、游戏的退出等功能,分为:游戏主界面模块,游戏主界面模块等两个模块。1234GreedSnakeSnakeControlSnakeModelSnakeView该文件为程序入口,含有 main 方法控制器,控制蛇,食物,石头该文件实现蛇类实 现 菜 单 控 制 运 行 等 总 体 要 求,实现 方 向 键 控 制 蛇 方 向,空 格 键 或 P键控制游戏暂停或继续,PageUp和PageDown控制速度,R 键控制游戏开始

5、,还有分数等。图 2.12.22.2 设计目标设计目标本软件是针对贪食蛇小游戏的 JAVA 程序,利用方向键来改变蛇的方向;按 PageUp加速,PageDown减速;按空格键或 P 键暂停或继续游戏;按 R 键重新开始。并在随机的地方产生食物,吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行2.32.3 系统功能模块系统功能模块Java 源文件及其功能如表所示:2.42.4 程序流程图程序流程图本次游戏设计的处理流程如图。-游戏开始键盘操作:向上向下向左向右加速减速没有吃到食物且蛇碰到边界或自身分数保存游 戏途 欲断,后 继游戏中中稍续点击SpeedUp加SpeedDow点击确认

6、结束游戏点击 S 保存点击空格或暂停再 次 点 击,游 戏 继续-图图 2.22.22.52.5 总设计模块的划分总设计模块的划分根据游戏需求中游戏所要实现的功能,整个游戏分为二个模块进行具体的设计,如图 2 所示。贪吃蛇游戏游戏主界面模游戏控制模块游戏控制模块的主要框架如图 3 所示。游戏控制模块块游戏的暂停功能图图 2.32.3图图 2.42.4 控控制制模模块块框框架架-游戏的重新开始 游戏的保存-游戏暂停控制:点击“空格”按钮或 P,游戏暂停;再单击,游戏继续。游戏重新开始控制:点击“R”键后,点击确定,即游戏重新开始。游戏保存控制:点击“S”键好,点击确定,退出游戏界面。游戏加速减速

7、控制:点击“SpeedUp”加速,点击“SpeedDown”减速。3 3 功能的具体实现功能的具体实现3.13.1 重新开始重新开始按 R 键使进行中的游戏或者暂停中的游戏重新开始,调用 reset方法,相关代码如下:casecase KeyEvent.VK_RVK_R:/-按 R 键重新启动游戏model.reset();breakbreak;publicpublicvoidvoid reset()direction =SnakeModel.UPUP;/蛇运行的方向timeInterval=200;/时间间隔,毫秒paused =falsefalse;/暂停标志score =0;/得分cou

8、ntMove =0;/吃到食物前移动的次数3.23.2 暂停暂停定义一个布尔类型,pause,初始化为 false,再在无限循环运动running 类运用 if 语句,具体代码如下:-booleanbooleanpaused =falsefalse;booleanbooleanpaused =falsefalse;ifif(!paused)ifif(moveOn()setChanged();/Model通知 View 数据已经更新 notifyObservers();elseelse JOptionPane.showMessageDialog(nullnull,you failed,Game

9、Over,JOptionPane.INFORMATION_MESSAGEINFORMATION_MESSAGE);breakbreak;3.33.3 保存分数保存分数按 S 键保存,在 keyPressed类中,调用 keyEvent类,如果是 S,则执行如下代码,将分数保存在 score.java中。casecase KeyEvent.VK_SVK_S:/-按 S 键保存FileWriterfileWritter =nullnull;trytry fileWritter =newnewFileWriter(score,truetrue);/将分数保存到 score 文件fileWritter

10、.write(model.score+n);catchcatch (FileNotFoundExceptione1)e1.printStackTrace();catchcatch (IOExceptione1)e1.printStackTrace();finallyfinally trytry ifif(fileWritter !=nullnull)fileWritter.close();catchcatch (IOExceptione1)e1.printStackTrace();-breakbreak;3.43.4 加速减速加速减速同样的,调用 speedUp,speedDown方法:cas

11、ecase KeyEvent.VK_PAGE_UPVK_PAGE_UP:/-按 PageUp加速model.speedUp();breakbreak;casecase KeyEvent.VK_PAGE_DOWNVK_PAGE_DOWN:/-按 PageDown减速model.speedDown();4 4 运行结果运行结果4.14.1 游戏开始界面游戏开始界面图 4.1-4.24.2 蛇撞到自身结束游戏蛇撞到自身结束游戏图 4.24.34.3 蛇撞到墙面结束游戏蛇撞到墙面结束游戏图 4.3-4.44.4 游戏暂停游戏暂停图 4.44.54.5 游戏在暂停或者运行时重新开始游戏在暂停或者运行时重

12、新开始图 4.5-4.64.6 游戏分数的保存游戏分数的保存图 4.6-总总 结结课程设计是对学习成果的考核和总结,这两个礼拜通过小组努力和吴光伟老师的耐心指导,本着严谨诚实,开拓创新的精神,完成了这次设计。这次设计是我们第一次从理论构思到实际工程论证的设计,它使我们深刻理解了在所学到的知识,让我们把所学的知识从头梳理和使用了一遍,巩固了我们的知识,也接触到了一些未曾接触过的东西,受益匪浅。-参参 考考 文文 献献1 叶核亚,陈道蓄.JAVA程序设计实用教程.(第四版).北京:子工业出版社,2013.112 汤阳光.智播客贪食蛇游戏项目开发3 耿祥义.JAVA大学实用教程.北京:清华大学出版社

13、,2009-电-附录附录 A A 源代码源代码/GreedSnake.javapackage mvcTest;publicclass GreedSnake publicstaticvoid main(Stringargs)SnakeModelmodel =new SnakeModel(20,30);SnakeControlcontrol =new SnakeControl(model);SnakeViewview =new SnakeView(model,control);/添加一个观察者,让 view 成为 model 的观察者model.addObserver(view);(new Thr

14、ead(model).start();/SnakeControl.javapackage mvcTest;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.io.FileNotFoundException;import java.io.FileWriter;import java.io.IOException;public class SnakeControl implements KeyListener-SnakeModel model;public SnakeControl(SnakeM

15、odel model)this.model=model;public void keyPressed(KeyEvent e)int keyCode=e.getKeyCode();switch(keyCode)/-按上下左右键控制蛇的方向 case KeyEvent.VK_UP:model.changeDirection(SnakeModel.UP);break;case KeyEvent.VK_DOWN:model.changeDirection(SnakeModel.DOWN);break;case KeyEvent.VK_LEFT:model.changeDirection(SnakeMo

16、del.LEFT);break;case KeyEvent.VK_RIGHT:model.changeDirection(SnakeModel.RIGHT);break;case KeyEvent.VK_PAGE_UP:/-按 pageup 加速 model.speedUp();break;case KeyEvent.VK_PAGE_DOWN:/-按 pagedown减速 model.speedDown();break;case KeyEvent.VK_SPACE:/-按空格键或 P 键暂停游戏 case KeyEvent.VK_P:model.changePauseState();break

17、;case KeyEvent.VK_R:/-按 R 键重新启动游戏model.reset();break;case KeyEvent.VK_S:/-按 S 键保存分数FileWriter fileWritter=null;try-fileWritter=newFileWriter(score,true);/将分数保存到 score 文件fileWritter.write(model.score+n);catch(FileNotFoundException e1)e1.printStackTrace();catch(IOException e1)e1.printStackTrace();fina

18、lly try if(fileWritter!=null)fileWritter.close();catch(IOException e1)e1.printStackTrace();break;default:public void keyReleased(KeyEvent e)public void keyTyped(KeyEvent e)/SnakeModel.javapackage mvcTest;import javax.swing.*;import java.util.Arrays;import java.util.LinkedList;import java.util.Observ

19、able;import java.util.Random;public class SnakeModel extends Observable implementsRunnable boolean matrix;/指示位置上有没蛇体或食物 LinkedList nodeArray=new LinkedList();/蛇体 Node food;int maxX;int maxY;int direction=2;/蛇运行的方向-boolean running=false;/运行状态 int timeInterval=200;/时间间隔,毫秒 double speedChangeRate=0.75;

20、/每次得速度变化率 boolean paused=false;/暂停标志 int score=0;/得分 int countMove=0;/吃到食物前移动的次数 public static final int UP=2;public static final int DOWN=4;public static final int LEFT=1;public static final int RIGHT=3;public SnakeModel(int maxX,int maxY)this.maxX=maxX;this.maxY=maxY;reset();public void reset()dir

21、ection=SnakeModel.UP;/蛇运行的方向 timeInterval=200;/时间间隔,毫秒 paused=false;/暂停标志 score=0;/得分 countMove=0;/吃到食物前移动的次数 /初始化 matirx matrix=new booleanmaxX;for(int i=0;i 20?10:maxX/2;-nodeArray.clear();for(int i=0;i initArrayLength;+i)int x=maxX/2+i;/maxX被初始化为 20 int y=maxY/2;/maxY被初始化为 30 /nodeArrayx,y:10,15-

22、11,15-12,1520,15 /默认的运行方向向上,所以游戏一开始 nodeArray就变为:/10,14-10,15-11,15-12,1519,15 nodeArray.addLast(new Node(x,y);matrixxy=true;/创建食物 food=createFood();matrixfood.xfood.y=true;public void changeDirection(int newDirection)/改变的方向不能与原来方向同向或反向 if(direction%2!=newDirection%2)direction=newDirection;public bo

23、olean moveOn()Node n=(Node)nodeArray.getFirst();int x=n.x;int y=n.y;/根据方向增减坐标值 switch(direction)case UP:y-;break;case DOWN:y+;break;case LEFT:x-;break;case RIGHT:x+;break;/如果新坐标落在有效范围内,则进行处理 if(0=x&x maxX)&(0=y&y 0?scoreGet:10;countMove=0;food=createFood();/创建新的食物 matrixfood.xfood.y=true;/设置食物所在位置 r

24、eturn true;else/吃到蛇体自身,失败 return false;else /如果新坐标的点上没有东西(蛇体),移动蛇体 nodeArray.addFirst(new Node(x,y);matrixxy=true;n=(Node)nodeArray.removeLast();matrixn.xn.y=false;countMove+;return true;return false;/触到边线,失败 public void run()running=true;while(running)try Thread.sleep(timeInterval);catch(Exception

25、e)break;if(!paused)if(moveOn()setChanged();/Model通-知 View 数据已经更新 notifyObservers();else JOptionPane.showMessageDialog(null,you failed,Game Over,JOptionPane.INFORMATION_MESSAGE);break;running=false;private Node createFood()int x=0;int y=0;/随机获取一个有效区域内的与蛇体和食物不重叠的位置 do Random r=new Random();x=r.nextInt

26、(maxX);y=r.nextInt(maxY);while(matrixxy);return new Node(x,y);public void speedUp()timeInterval*=speedChangeRate;public void speedDown()timeInterval/=speedChangeRate;public void changePauseState()paused=!paused;public String toString()String result=;for(int i=0;i nodeArray.size();+i)Node n=(Node)nod

27、eArray.get(i);result+=+n.x+,+n.y+;return result;class Node-int x;int y;Node(int x,int y)this.x=x;this.y=y;/SnakeView.javapackage mvcTest;import javax.swing.*;import java.awt.*;import java.util.Iterator;import java.util.LinkedList;import java.util.Observable;import java.util.Observer;public class Sna

28、keView implements ObserverSnakeControl control=null;SnakeModel model=null;JFrame mainFrame;Canvas paintCanvas;JLabel labelScore;public static final int canvasWidth=200;public static final int canvasHeight=300;public static final int nodeWidth=10;public static final int nodeHeight=10;public SnakeView

29、(SnakeModel model,SnakeControlcontrol)this.model=model;this.control=control;mainFrame=new JFrame(GreedSnake);Container cp=mainFrame.getContentPane();/创建顶部的分数显示 labelScore=new JLabel(Score:);cp.add(labelScore,BorderLayout.NORTH);/创建中间的游戏显示区域 paintCanvas=new Canvas();paintCanvas.setSize(canvasWidth+1,

30、canvasHeight+1);paintCanvas.addKeyListener(control);cp.add(paintCanvas,BorderLayout.CENTER);/创建底下的帮助栏 JPanel panelButtom=new JPanel();panelButtom.setLayout(new BorderLayout();JLabel labelHelp;labelHelp=new JLabel(按 PageUp 加速,按PageDown减速;,JLabel.CENTER);-panelButtom.add(labelHelp,BorderLayout.NORTH);

31、labelHelp=new JLabel(按 R 重新开始;,JLabel.CENTER);panelButtom.add(labelHelp,BorderLayout.CENTER);labelHelp=new JLabel(按 SPACE 键 或 P 键暂停游戏,JLabel.CENTER);panelButtom.add(labelHelp,BorderLayout.SOUTH);cp.add(panelButtom,BorderLayout.SOUTH);mainFrame.addKeyListener(control);mainFrame.pack();mainFrame.setRe

32、sizable(false);mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);mainFrame.setVisible(true);void repaint()Graphics g=paintCanvas.getGraphics();/draw background g.setColor(Color.WHITE);g.fillRect(0,0,canvasWidth,canvasHeight);/draw the snake g.setColor(Color.BLACK);LinkedList na=model.nodeArra

33、y;Iterator it=na.iterator();while(it.hasNext()Node n=(Node)it.next();drawNode(g,n);/draw the food g.setColor(Color.RED);Node n=model.food;drawNode(g,n);updateScore();private void drawNode(Graphics g,Node n)g.fillRect(n.x*nodeWidth,n.y*nodeHeight,nodeWidth-1,nodeHeight-1);public void updateScore()String s=Score:+model.score;labelScore.setText(s);public void update(Observable o,Object arg)repaint();-评分表:评分表:课题名称指导教师JAVA 程序设计 课程设计吞食蛇吴光伟评语姓 名学号2014449920144645成绩年月日成绩评定张聚营卢毛毛日期-

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁