Java课程设计之贪吃蛇安阳工学院计算机学院JAVA课程设计报告专业班级: 学生姓名: 学生学号: 小组成员: 指导教师姓名: 宋强目录一选题目的与系统概述 (1)1.1选题目的 (1)1.2系统概述.................................................................................1 二系统可行性分析与相关技术背景分析 (2)2.1系统可行性分析 (2)2.2相关技术背景分析.....................................................................2 三系统设计与关键技术 (3)3.1系统设计 (3)3.2关键技术.................................................................................5 四系统测试与操作实施方法.........................................................9 五系统设计总结与回顾 (11)六参考文献 (12)一、选题目的与系统概述1.1 选题目的贪吃蛇游戏是一款非常经典的游戏,因为它比较简单有趣,无论老少都比较适合。
贪吃蛇的设计对每一个Java语言设计者进行语言提高和进阶都是一个很好的锻炼机会。
在这个游戏的设计中,牵涉到图形界面的显示与更新、数据的收集与更新,并且在这个游戏的开发中,还要应用类的继承机制以及一些设计模式。
因此,如何设计和开发好这个贪吃蛇游戏,对于提高Java开发水平和系统的设计能力有极大的帮助。
在设计开发过程中,需要处理好各个类之间的继承关系,还要处理各个类相应的封装,并且还要协调好各个模块之间的逻辑依赖关系和数据通信关系。
正是因为如此,本次设计的目的在于学习Java程序设计基本技术,学习用Netbeans开发Java程序的相关技术,熟悉游戏“贪吃蛇”的需求,熟悉项目开发的完整过程。
学会怎样进行一个项目的需求分析、概要设计、详细设计等软件开发过程,熟练地掌握Java程序设计的基本技术和方法,熟练地掌握Netbeans环境的使用方法,培养起初步的项目分析能力和程序设计能力。
1.2 系统概述1.2.1 设计的主要内容贪吃蛇游戏设计与实现,主要分为以下二个模块:游戏主界面模块和游戏控制模块。
在此只实现游戏的游戏主界面模块、游戏控制模块。
可实现开始、暂停、改变速度,更换颜色等功能。
1.2.2 设计要达到的目标本次设计要达到的目标分别从以下模块进行阐述:游戏主界面模块:游戏的主界面是进入游戏后,能够给玩家第一感官的部分,主要包括游戏场景、状态栏、颜色设置、网格模式、及相关提示信息等。
从很大程度上决定了玩家对游戏的兴趣问题,因此,游戏的主界面应该力求美观,爽心悦目。
游戏控制模块:这个模块是游戏的中心环节,主要完成控制游戏的开始、暂停等功能。
为了能- 1 -够给玩家一个很好的游戏环境,这部分应该做到易懂、易操作。
1.2.3游戏设计环境本次课程设计所涉及和实现的是用Java编程语言和Netbeans开发工具开发的贪吃蛇游戏。
本次设计的系统环境及工具如下:编程语言:Java使用工具:jdk-6u16-windows-i586 Netbeans IDE 7.0.1二、系统可行性分析与相关技术背景分析2.1系统可行性分析游戏开发成功后,最终用户为各个年龄段的人群,用户范围相当广泛。
本游戏友好的用户界面,简单易学的按钮操作以及简单通俗的游戏规则,使广大的用户不需要专门进行培训,就可以立即学会如何使用。
本游戏的核心算法是如何实现移动和吃掉食物,没有碰到食物时,把当前远东方向上的下个节点入队,并以蛇节点的颜色绘制这个节点,然后把头指针所指的节点出队,并以游戏框架的背景颜色绘制出队的节点,这样就可以达到出队的效果。
而在吃食物的时候,只需把食物入队即可。
实现贪吃蛇的基本蛇的移动、吃到食物身体增长、碰壁后不会死亡,能够暂停和开始,以及当吃到自身时不会死亡。
在可使用性方面,要求各个功能实现简单,操作方便,系统处理正确;整个系统恢复性能好,连接速度快,以确保系统可使用性好。
另外,还要求系统的可扩展性、可维护性、可移植性良好。
软件开发过程中的功能模块设计,主要解决实现该游戏需求的程序模块设计问题。
包括如何把该游戏划分成若干个模块、决定各个模块之间的接口、模块之间传递的信息,以及模块结构的设计等。
2.2相关技术背景分析本次设计要运用java语言来完成,java 的特点是面向对象,可移植性,安全性,并发机制,支持可视化图形界面等,运用java 语言能够开发出安全,美观,JDK 运行高效的游戏。
本实验用到了Sun公司开发的jdk的java运行环境,是整JavaJavaJavaJava 个的核心,包括了运行环境,工具和基础的类库。
Java NetbeansNetBeans IDE用到了语言的项目开发软件。
是一个屡获殊荣的,WindowsMacLinuxSolarisNetBeans集成开发环境可以方便的在,,和中运行,包- 2 -NetBeans IDEJava括开源的开发环境和应用平台,可以使开发人员利用平台能够快WebNetBeans IDEPHPRuby速创建、企业、桌面以及移动的应用程序,目前支持、、JavaScriptAjaxGroovyGrailsC /C + +NetBeans、、、和等开发语言。
开发环境提供了丰富的产品文档和培训资源以及大量的第三方插件。
本课程项目是运用的Netbeans7.0.1的最新版本。
三、系统设计与关键技术3.1 系统设计3.1.1游戏设计流程图本次游戏设计的处理流程如图1所示。
进入游戏画面按ENTER键开始游戏。
键盘操作:左移右移向下向上蛇头碰到蛇尾游戏中途欲中断,稍后继续游戏是出现“是否再来一按ENTER键暂停游戏局,”否再次按ENTER键,游游戏结束戏恢复图1 游戏处理流程图- 3 -3.1.2 游戏功能设计本系统主要完成以下几方面的功能:1. 游戏控制功能——包括游戏的开始、暂停、结束2. 界面布局3. 其他辅助功能3.1.3 模块的划分设计根据游戏需求中游戏所要实现的功能,整个游戏分为二个模块进行具体的设计,如图2所示。
贪吃蛇游戏游游戏戏主控块界制面模模块图2 游戏总设计模块1、游戏主界面模块游戏界面主框架主要包括游戏场景、状态栏、颜色设置、网格模式、及相关提示信息。
游戏界面主框架的主要结构图如图3所示。
游戏的主界面框架)面游面游即戏戏游图控戏形制画区按布域钮) 界界图3 游戏主界面框架- 4 -2、游戏控制模块游戏控制模块主要通过键盘上的按键来控制游戏的开始、游戏的暂停、游戏的结束这三个功能以及控制游戏速度变化、蛇的运动方向。
在这个模块中,需要给各个按键或文本框加入代码,来对上述的功能加以进一步的实现。
游戏控制模块的主要框架如图4所示。
游戏控制模块游游游戏戏戏的的的暂退开停出始功功功能能能图4 游戏控制模块框架游戏开始控制:按ENTER键,游戏画布的贪吃蛇即开始游动,游戏正式开始。
游戏暂停控制:中途可按ENTER键,游戏暂停;再按NETER键,游戏继续。
游戏退出控制:关闭界面,退出该游戏。
3.2 关键技术3.2.1 功能包的设计1、mysnake包包含Main方法和MainGui方法(1) main类整个程序的入口package mysnake;public class Main {public static void main(String[] agrs){new MainGui();- 5 -}}(2)MainGui类主界面类,继承自JFrame类,蛇场Box和设置面板settingPanel置于其上,包括对主窗口的属性的设置、注册监听者等2、mysnake.box包包含Box类、Food类、Snake类。
设置游戏运行状态,用来设计游戏的用户界面,设置蛇头颜色,食物颜色,背景颜色,随机块颜色,移动以及分数更新,实现上下左右移动的方法接口。
其中更新属性面板的方法如下:private void updateProperty() {//更新蛇长gui.getSettingPanel().getSnakeLengthLabel().setText("" +getSnake().getBody().size());//更新方向switch (gui.getBox().getSnake().getDirection()) {case Snake.DIRECTION_DOWN:gui.getSettingPanel().getDirectionLabel().setText("下,?");break;case Snake.DIRECTION_LEFT:gui.getSettingPanel().getDirectionLabel().setText("左,?");break;case Snake.DIRECTION_RIGHT:gui.getSettingPanel().getDirectionLabel().setText("右,?");break;case Snake.DIRECTION_UP:gui.getSettingPanel().getDirectionLabel().setText("上,?");break;}3、mysnake.contral包包含SettingListener类、SnakeKeyListener类。
SettingListener类是主界面类,继承自JFrame,蛇场Box和设置面板settingPanel置于其上,包括对主窗口的属性的设置、注册监听者等;SnakeKeyListener类设置按键监听,根据按键改- 6 -变蛇的方向、速度等设置。
其中颜色设置的代码实现如下:private Color getComboBoxColor(JComboBox comboBox) {Color newColor;String newColorString = (String) comboBox.getSelectedItem();if (newColorString.equals("黑色")) {newColor = Color.BLACK;} else if (newColorString.equals("蓝色")) {newColor = Color.BLUE;} else if (newColorString.equals("青色")) {newColor = Color.CYAN;} else if (newColorString.equals("深灰色")) {newColor = Color.DARK_GRAY;} else if (newColorString.equals("灰色")) { newColor = Color.GRAY;} else if (newColorString.equals("绿色")) { newColor = Color.GREEN;} else if (newColorString.equals("浅灰色")) { newColor = Color.LIGHT_GRAY;} else if (newColorString.equals("洋红色")) { newColor = Color.MAGENTA;} else if (newColorString.equals("橘黄色")) { newColor = Color.ORANGE;} else if (newColorString.equals("粉红色")) { newColor = Color.PINK;} else if (newColorString.equals("红色")) { newColor = Color.RED;} else if (newColorString.equals("白色")) { newColor = Color.WHITE;} else if (newColorString.equals("黄色")) { newColor = Color.YELLOW;} else {newColor = Color.BLACK;}return newColor;}}4、mysnake.settingground包包括clock类和一个设计窗体。