当前位置:文档之家› java课程设计贪吃蛇

java课程设计贪吃蛇

JAVA设计贪吃蛇游戏 1.课程设计目的 《JAVA程序设计》是计算机相关专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。本课程的程序设计专题实际是计算机相关专业学生学习完《JAVA程序设计》课程后,进行的一次全面的综合训练,JAVA程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。

2.设计方案论证 2.1设计思路 贪吃蛇游戏设计与实现,主要分为以下二个模块:游戏主界面模块和游戏控制模块。在此只实现游戏的游戏主界面模块、游戏控制模块。并且只是实现移动速度、暂停、重新开始等功能。 游戏主界面模块: 游戏的主界面是进入游戏后,能够给玩家第一感官的部分,主要包括游戏图形区域界面、游戏的速度选择更新界面、新生方块的预览、游戏速度控制按钮、暂停游戏按钮、重新开始游戏按钮以及游戏排行榜按钮。从很大程度上决定了玩家对游戏的兴趣问题,因此,游戏的主界面应该力求美观,爽心悦目。 游戏控制模块: 这个模块是游戏的中心环节,主要完成控制游戏的速度、暂停、重新开始等功能。为了能够给玩家一个很好的游戏环境,这部分应该做到易懂、易操作。 本设计所开发的是基于Java的一个贪吃蛇游戏软件,主要实现游戏的速度控制、游戏的暂停、游戏的退出等功能,分为: 游戏主界面模块、游戏控制模块以二个模块。 性能: 本软件在设计方面本着方便、实用及娱乐性高的宗旨,在对界面进行设计的过程中,始终坚持清晰明了,在性能方面能够实现效率高,不易出错等优点。 2.2概要设计 2.3.1自定义类说明 类名:Exception 作用:用来处理当蛇撞到墙或自己的身体时程序的运行 继承的父类:GreedSnake类 实现的接口:没有

2.3详细设计 2.3.1程序概述 本程序是一个利用Java应用软件制作的贪食蛇小游戏。 在游戏过程中,用户通过点击小键盘区的方向键来控制蛇的运行方向;通过Pageup和pagedown键来控制蛇的移动速度,每单击一次,蛇的移动速度改变一次,改变频率为0.75。游戏运行过程中,如果想暂停,只需要按Space或P键即可。重新开始游戏的按键为Enter、S或R。当蛇没有吃到食物且碰到墙壁或自己的身体时游戏结束。 本程序的另一个功能是在程序运行窗口的左上角显示,用户在游戏过程中所得的分数,不过缺点是无法保存分数。

2.4.2程序流程图 本次游戏设计的处理流程如图1所示。 2.3.3 总设计模块的划分 根据游戏需求中游戏所要实现的功能,整个游戏分为二个模块进行具体的设计,如图2所示。

单击“Enter、S或R”按钮, 游戏开始,蛇开始随机。

键盘操作:

向上 左移

右移 向下

没有吃到食物且蛇碰到边界 单击“确定” 游戏结束 游戏中途欲中断,稍后继续游戏

单击“Space或P暂停游戏”

进入游戏画面 再次单击开始Enter、S或R按钮,游戏恢复

图1 游戏处理流程图

游戏控制模块的主要框架如图3所示。

游戏移动速度功能控制:点击“PageUp, PageDown”按钮,蛇的移动速度就会改变,每点击一次,速度的改变频率为0.75。 游戏暂停控制:点击“Space或P暂停游戏”按钮,游戏暂停;再单击,游戏继续。 游戏重新开始控制:点击“Enter、S或R”键后,系统图重新载入,即游戏重新

贪吃蛇游戏 游戏主界面模块

游戏控制模块

图2 游戏总设计模块

游戏控制模块 游戏的移动速度功能 游戏的暂停功能 游戏的重新开始

图3游戏控制模块框架 开始。 2.3.4类、方法、属性说明

(1)成员变量 表1 主要成员变量(属性) 成员变量描述 变量类型 名称

文件菜单中子菜单“新建” JMenuItem mFile_New 编辑菜单中子菜单“撤消” JMenuItem mEdit_Undo 格式菜单中子菜单“颜色” JMenu formatMenu_Color 帮助菜单中子菜单“帮助主题” MenuItem mHelp_HelpTopics

(2)方法 表2 主要方法 方法名 功能 备注

Notepad4() 描述记事本 无 Text.setBackground(Color.white) 设置编辑区默认背景色 无

Text.setForeground(Color.black) 设置编辑区默认前景色 无 3.设计结果与分析 本程序在运行后,能够正常的相应按键事件。由于程序的主要部分已经集成为一个对象SnakeModel,所以利用键盘就可以实现操作。蛇前行的过程中,可以任意向其左或右方向改变方向,但按其前进方向和前进的反方向都没有反应。点击PageUp, PageDown键后,蛇的移动速度会根据点击的次数而改变。每点击一次,速度的改变频率为0.75。点击Space或P键后游戏就暂停了。点击Enter或R或S键后系统则重新载入,即游戏重新开始。运行结果如下图4所示:

图4 程序运行图 当蛇没有吃到食物且碰到边界或碰撞到自己的身体时,游戏结束,此时得分为0。如果想重新开始即按ENTER或S键,运行结果如下图5所示:

图5 程序结束图 程序异常处理 在蛇的运行线程过程中,当蛇撞到墙或自己的身体时,将抛出一个Exception类的异常对象,然后使用try-catch去捕捉这个异常, 异常的处理如下: try{ Thread.sleep(timeInterval); } catch(Exception e) { break; } 4.心得体会 通过这次课程设计,我对这学期所学的JAVA语言程序设计有一个更深刻的了解,将所学的知识应用于实践,由于所学知识有限,为了使游戏能够实现自己预先的构想,我通过上网和去图书馆找程序,比较好的流程图及功能模块,不断阅读修改代码使程序达到预期所要实现的目标,完成课程设计后,可以感觉到自己对Java程序的又有了新的认识。 在做Java设计之前也有做过其他的课程设计,大多规模很小。在数据库、各种应用软件和游戏中,我仍觉得对游戏的设计有极大的热情。因为其各个模块间的联系十分紧密,代码重复执行率高,当经过无数次的调试、修改后,能最终看到成品,有无比自豪的心情。大学期间做过图书馆管理程序等简单的数据库管理系统的课程设计,思想大致相似,变化范围有限,没有太多自己可发挥的余地。综合运用以前所学习的知识,设计一个JAVA手机游戏,并能实现以下的功能:游戏暂停、游戏重新开始、游戏的结束。总之,通过本次的课程设计,使我平时学到的理论知识得到了很好地升华,理论与实际得到一次很好的结合,为我今后参加工作打下了坚实的基础,使我受益匪浅。

5.附录 import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*;

//Main Class public class GreedSnake extends KeyAdapter{ JFrame mainFrame; Canvas paintCanvas; JLabel labelScore;//计分牌 SnakeModel snakeModel=null;// 蛇 public static final int DEFAULT_WIDTH=500; public static final int DEFAULT_HEIGHT=300; public static final int nodeWidth=10; public static final int nodeHeight=10;

//GreedSnake():初始化游戏界面 public GreedSnake(){ //设置界面元素 mainFrame=new JFrame("贪吃蛇游戏"); Container cp=mainFrame.getContentPane(); labelScore=new JLabel("所得分数为:",JLabel.CENTER); cp.add(labelScore,BorderLayout.NORTH); paintCanvas=new Canvas(); paintCanvas.setSize(DEFAULT_WIDTH+1,DEFAULT_HEIGHT+1); paintCanvas.addKeyListener(this); 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); labelHelp=new JLabel("按 Enter 或 S 键重新开始游戏",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(this); mainFrame.pack(); mainFrame.setResizable(false); mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); mainFrame.setVisible(true); begin(); }

//keyPressed():按键检测 public void keyPressed(KeyEvent e){ int keyCode=e.getKeyCode(); if(snakeModel.running)

相关主题