Java课程设计之贪吃蛇_1.docx
Java课程设计之贪吃蛇 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类和一个设计窗体。其中clock类主要功能是计时,代码实现如下: public class Clock /*时间线程*/ - 7 - private Thread timeThread; /*经历的时间*/ private int time = 0; /*计时器*/ private Timer counTtimer; public Clock() timeThread = new Thread(new Runnable() public void run() counTtimer = new Timer(1000, new ActionListener() public void actionPerformed(ActionEvent e) setTime(getTime() + 1); ); getCounTtimer().start(); ); public Thread getTimeThread()