1、 计算机科学和技术专业12级综合课程设计汇报题目: 贪吃蛇小游戏 组员: 姓名 学号 郝兴明 07051 指导老师: 王金龙 开始日期: 年 12月 7 日 完成日期: 年 01月 8 日 级综合课程设计评价表题 目贪吃蛇小游戏指导老师王金龙项 目 内 容 简 介此次综合课程设计内容为“贪吃蛇”小游戏,游戏操作简单,设计却很复杂,关键实现内容为:经过键盘控制蛇移动,判定蛇是否死亡,和经过对应按钮来控制游戏进程。评价工作量 (饱满、达成要求、不饱满);运行效果 (良好、有小问题、错误较多);文档及汇报撰写 (规范、较规范、 不规范、未提交);答辩 (优异、良好、 通常、 较差);团体分工及协作
2、(很好、很好、 通常、 较差)。成绩学 号姓 名组内分工贡献排名成 绩郝兴明程序设计、编写、测试、汇报答辩小组签字青岛理工大学课程设计任务书姓 名 组内分工 郝兴明 程序设计、编写、测试、汇报 院 (系): 计算机工程 专 业: 计算机科学和技术 任务起至日期: 12月 7 日 至 01月 8 日 课程设计题目: 贪吃蛇小游戏 关键内容及要求: “贪吃蛇”小游戏关键应实现以下多个方面功效:1. 经过方向键控制蛇移动2.蛇吃到食物后身体变长3.食物随机产生4.蛇吃到自己身体或墙后死亡5.蛇在移动过程中能够暂停/继续6.可手动停止游戏工作计划安排:12月07日-12月10日 需求分析12月11日-
3、12月15日 概要设计12月16日-12月20日 框架搭建12月21日-12月30日 具体功效设计12月31日-01月03日 程序测试01月04日-01月05日 书写汇报01月06日 项目答辩第1部分 概述1. 内容介绍“贪吃蛇”是一款经典小游戏,以其操作简单、娱乐性强而广受欢迎。一条蛇在封闭围墙内移动,在围墙内随机出现一个食物,经过键盘方向键来控制蛇移动,当蛇吃到食物后蛇身体长一节,同时出现一个新食物等候蛇去吃,假如蛇在移动过程中蛇头吃到自己身体或吃到围墙石头,则蛇死亡,游戏结束。作为一个小游戏,设计中必需要考虑人机交互和用户体验,所以游戏界面应简练直观,让用户可直接了解游戏操作。“贪吃蛇”
4、设计对java编程提升和进阶是一次很好锻炼机会。此次设计使用java语言,经过GUI编程、线程、事件监听等技术来实现游戏开发,功效即使较少,但游戏基础功效全部含有,可正常进行游戏。2. 功效介绍“贪吃蛇”小游戏设计较复杂,要想实现全部功效需要很高技术要求和很强编程能力。因为本人技术能力欠缺,所以只能实现基础游戏功效,经过画图方法来显示出蛇身体,食物位置和墙位置。关键操作是经过键盘方向键来控制蛇移动方向,无效方向要忽略;当蛇吃到食物时蛇身体变长一节,同时产生一个新食物;蛇吃到自己身体或吃到石头时死亡,游戏结束;在游戏控制区域可经过对应按钮来控制游戏运行进度。3. 设计环境此次游戏设计环境及开发工
5、具以下:运行环境:Windows 7编程语言:java开发环境:eclipse第2部分 需求分析1 用户特点分析游戏开发成功后,可适适用于各类人群使用,所以要求界面简单,操作方便, 不需要进行专门培训就能够学会怎样操作2.功效需求2.1图形界面需求游戏画布区关键包含蛇身体出现位置,食物随机出现位置,墙固定位置,和蛇可移动区域。游戏控制区域显示按钮及操作提醒。2.2属性需求在可使用性方面,要求各个功效实现简单,操作方便,系统处理正确;整个系统恢复性能号,链接速度快,以确保系统可适用性好。另外,还要求系统可扩展性、可维护性、可移植性良好。2.3功效模块需求软件开发过程中功效模块设计,关键处理实现该
6、游戏需求程序模块设计问题。包含怎样把该游戏划分成若干个模块、决定各个模块之间接口、模块之间穿信息,和模块结构设计等。2.3.1游戏功效本游戏关键完成以下几方面功效:1) 游戏控制功效2) 界面布局3) 其它辅助功效2.3.2功效模块划分依据游戏需求,整个游戏关键划分为游戏界面和游戏控制两个模块。见图2.1 。游戏界面是整个游戏运行区域,可动态观察游戏过程。游戏控制是用来控制游戏进程,能够开始游戏,暂停/继续游戏,停止游戏。贪吃蛇游戏游戏界面模块游戏控制模块图2.1 游戏模块划分第3部分 系统设计1. 系统步骤图系统步骤图是描绘系统物理模型传统工具。它基础思想是用图形符号描绘系统里面每个部件,表
7、示信息在各个部件之间流动情况。开始游戏控制蛇移动身体变长是否吃到自己 是 是 是否吃到食物 否 否 是否撞墙 否游戏结束蛇死亡是 图3.1 系统步骤图2.类模块设计此次设计遵照MVC设计模式,关键类之间关系以下:Snake类(蛇类)Game类(主面板)Controller类(控制器)Ground类(墙类)Food类(食物类) 图3.2 MVC设计模式表现Snake类:设置蛇属性,和蛇产生、移动、吃食物、死亡等方法。Food类:设置食物随机产生和是否被吃掉等方法。Controller类:监听Snake类和按键事件,并进行处理。Game类:用来控制游戏进程和界面显示。3.各类具体设计表3.1 Sn
8、ake类组员作用private boolean pause;判定是否暂停private boolean life;判定蛇是否死亡private boolean isMoving;判定蛇是否在移动private LinkedListbody;存放蛇身体节点private void init();初始化方法public void move();蛇移动方法public void drawMe(Graphics g);画出蛇身体public void start();让蛇开始移动public void die();让蛇死亡表3.2 Food类:Public void newFood(Point p);
9、设置食物产生位置Public Boolean isSnakeEatFood(Snake snake);判定蛇是否吃到食物public void drawMe(Graphics g);在画布上画出食物表3.3 Ground类:Private int rocks;存放石头数组Public Ground();初始化石头Public Boolean isSnakeEatRock(Snake snake);判定是否吃到石头Public Point getPoint();设置食物产生位置public void drawMe(Graphics g);在画布上画出石头表3.4 Controller类:Publ
10、ic Controller(Snake snake,Food food,Ground ground,GamePanel gamePanel);初始化控制器类Public void keyPressed(KeyEvent e);监听按键事件Public void snakeMoved(Snake snake);监听蛇移动Public void newGame();创建新游戏Public void setSnake(Snake snake);设置蛇第4部分 系统实现1. 界面展示“贪吃蛇”小游戏适合广大群体,故界面应以简练直观为主,让玩家一眼便可了解游戏操作。具体游戏界面以下:游戏初始化界面图 4
11、.1 游戏初始化界面游戏开始界面图 4.2 游戏开始运行界面游戏结束界面图 4.3 游戏结束界面2.游戏具体实现代码2.1游戏画布区public void display(Snake snake,Food food,Ground ground)System.out.println(GamePanels display);this.snake = snake;this.food = food;this.ground = ground;this.repaint();protected void paintComponent(Graphics g)g.setColor(new Color(0xcfc
12、fcf);g.fillRect(0, 0, Global.WIDTH * Global.CELL_SIZE, Global.HEIGHT * Global.CELL_SIZE);if(ground != null & snake != null & food != null)this.ground.drawMe(g);this.snake.drawMe(g);this.food.drawMe(g);2.2控制区private static final long serialVersionUID = 1L;private final JButton button_start = new JBut
13、ton(开始游戏);private final JButton button_wait = new JButton(暂停游戏);private final JButton button_stop = new JButton(停止游戏);private final JLabel label_tips = new JLabel(方向键控制蛇移动);public GameOptionPanel()super();setLayout(null);setFocusable(false);setVisible(true);button_start.setFont(new Font(楷体, Font.PLA
14、IN, 17);button_wait.setFont(new Font(楷体, Font.PLAIN, 17);button_stop.setFont(new Font(楷体, Font.PLAIN, 17);label_tips.setFont(new Font(楷体, Font.PLAIN, 25);button_start.setFocusable(false);button_wait.setFocusable(false);button_stop.setFocusable(false);label_tips.setFocusable(false);button_start.setBo
15、unds(10, 10, 110, 40);button_wait.setBounds(145, 10, 110, 40);button_stop.setBounds(280, 10, 110, 40);label_tips.setBounds(70, 70, 300, 40);add(button_start);add(button_wait);add(button_stop);add(label_tips);public JButton getStartButton()return button_start;public JButton getWaitButton()return butt
16、on_wait;public JButton getStopButton()return button_stop;public JLabel getTipsLabel()return label_tips;2.3蛇移动public void move()if(!(oldDirection + newDirection = 0)oldDirection = newDirection;System.out.println(Snakes move);oldTail = body.removeLast();int x = body.getFirst().x;int y = body.getFirst(
17、).y;switch(oldDirection)case UP:y-;if(y 0)y = Global.HEIGHT -1;break;case DOWN:y+;if(y = Global.HEIGHT)y = 0;break;case LEFT:x-;if(x 0)x = Global.WIDTH - 1;break;case RIGHT:x+;if(x = Global.WIDTH)x = 0;break;Point newHead = new Point(x,y);body.addFirst(newHead);2.4监听按键public void keyPressed(KeyEvent
18、 e)if(!snake.isPause()&snake.isLive()&snake.isMoving()switch(e.getKeyCode()case KeyEvent.VK_UP:snake.changeDirection(Snake.UP);break;case KeyEvent.VK_DOWN:snake.changeDirection(Snake.DOWN);break;case KeyEvent.VK_LEFT:snake.changeDirection(Snake.LEFT);break;case KeyEvent.VK_RIGHT:snake.changeDirectio
19、n(Snake.RIGHT);break;2.5画出蛇身体public void drawMe(Graphics g)g.setColor(Color.BLUE);for(Point p:body)g.fill3DRect(p.x * Global.CELL_SIZE, p.y * Global.CELL_SIZE, Global.CELL_SIZE, Global.CELL_SIZE, true);2.6随机产生食物public Point getPoint()Random radom = new Random();int x = 0, y = 0;dox = radom.nextInt(G
20、lobal.WIDTH);y = radom.nextInt(Global.HEIGHT);while(rocksxy=1);return (new Point(x,y);2.7初始化墙public Ground()for(int x=0;xGlobal.WIDTH;x+)rocksx0 = 1;rocksxGlobal.WIDTH-1 = 1;for(int y=0;yGlobal.HEIGHT;y+)rocks0y = 1;rocksGlobal.HEIGHT-1y = 1;第5部分 系统测试5.1测试概述进行软件测试是对系统性能、完善程度和安全性进行测试,在现今这个科技发达时代,软件应用
21、于各个领域,假如一个软件未经过细致系统测试就投入使用,在使用过程中一旦出现问题后果将不堪设想,这不仅仅是对用户负责,更是对开发人员本身负责,经过系统测试不停地发觉问题和处理问题,在以后工作中就会减小这些漏洞出现几率,不停地完善每一个软件是每一个软件开发人员共同愿望。所以,进行系统测试是十分必需。在进行此次游戏设计过程中,对于软件测试一直贯穿一直,对于在开发过程中代码和文档,和系统完成后全部在进行测试。测试并不仅仅是为了找犯错误,经过分析错误产生原因和错误发生趋势,能够帮助项目管理者发觉目前软件开发过程中缺点,方便立即改善。测试关键分5种,即单元测试、集成测试、确定测试和白盒测试和黑盒测试。 此
22、次游戏测试关键采取黑盒测试方法,检验游戏功效是否能实现。5.2 具体测试5.2.1测试一测试内容:是否能正常开始游戏测试方法:点击开始按钮预期结果:游戏区出现蛇、食物和墙,蛇会移动测试结果:和预期一样,祥见图5.1图 5.1 开始按钮测试5.2.2测试二测试内容:是否能暂停/继续游戏测试方法:点击暂停/继续按钮预期结果:点击暂停后蛇停止移动,按钮变为继续游戏,点击继续后沿原方向移动,按钮变为暂停游戏。 测试结果:和预期一样,祥见图5.2和图5.3图5.2 暂停游戏测试图5.3 继续游戏测试5.2.3测试三测试内容:蛇是否能吃食物身体变长测试方法:控制蛇移动去吃食物预期结果:吃食物后蛇身体变长一
23、节,同时产生一个新食物 测试结果:和预期一样,祥见图5.4图5.4 蛇吃食物测试(蛇身体默认为3节)5.2.4测试四测试内容:蛇撞墙是否会死测试方法:控制蛇移动去撞墙预期结果:蛇死亡不再移动,游戏结束 测试结果:和预期一样,祥见图5.5图5.5 蛇撞墙死亡测试5.2.5测试五测试内容:蛇吃到自己身体是否会死测试方法:控制蛇移动让蛇头吃到自己身体预期结果:蛇死亡不再移动,游戏结束 测试结果:和预期一样,祥见图5.6图5.6 蛇吃到自己身体测试第6部分 系统总结此次课程设计从游戏界面和游戏控制两方面实现了比较完善功效,因为本人能力有限,还需要学习地方很多,所以还是不尽完美,有很多能够优化地方,但游
24、戏基础功效全部很齐全,相比之前做管理系统类设计,应该能够说是又上升了一个层次。即使在设计中碰到了很多困难,比如说为了修改一个小小bug而花费一整天,重新去学习新知识,改了一次又一次等等,不过最终功夫不负有心人,游戏功效全部基础上实现了,作为一个学习计算机人,尤其是一个立即毕业大四学生,更需要有坚持不懈毅力和不停学习新知识激情,困难只是我们走向成功阶梯。当你克服一个一个困难后,会感到满满成就感。总体来说,这次课设对我自己是一次很好锻炼机会,不仅把以前学到只是温习了一遍,还学习到了很多新知识,而且还提升了敲代码能力。对设计中碰到问题,经过仔细思索和查阅资料,使得问题得以处理,对自己以后独立思索处理问题能力也有很大帮助。参考文件1 李芝兴 杨瑞龙. Java程序设计之网络编程(第2版). 清华大学出版社,.72 张海藩 牟永敏. 软件工程导论(第6版). 清华大学出版社,.7