JAVA课程设计报告贪吃蛇.doc_第1页
JAVA课程设计报告贪吃蛇.doc_第2页
JAVA课程设计报告贪吃蛇.doc_第3页
JAVA课程设计报告贪吃蛇.doc_第4页
JAVA课程设计报告贪吃蛇.doc_第5页
免费预览已结束,剩余22页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

淮 海 工 学 院 计算机工程学院课程设计报告设计名称: 面向对象课程设计 选题名称: 益智类小游戏的设计与实现 姓 名: 杜海涛 学 号: 080915211 专业班级: 海洋092 系 (院): 计算机工程学院 设计时间: 2011.12.192012.1.1 设计地点: 软件实验室、教室 成绩:指导教师评语: 签名: 年 月 日面向对象课程设计报告 第 27 页,共 27 页1课程设计目的设计目的:面向对象程序设计是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。其目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力,提高学生的应用能力。2课程设计任务与要求:2.1设计题目如下:益智类小游戏的设计与实现通过多线程和多媒体技术,实现游戏过程中的人机交互和界面动画方案。 2.2设计要求课程设计可选用Eclipse、JBuilder、NetBeans等作为开发平台以提高开发效率,通过资料查阅和学习尽可能熟练掌握其中一种集成开发环境。认真完成需求分析,建议采用UML建模技术进行系统的分析设计,在画出系统用例图和类图,并将UML图复制到设计报告中。认真按时完成课程设计报告,课程设计报告内容包括:课程设计目的、设计任务与要求、设计说明书、设计成果和设计心得五个部分,具体要求见设计报告模板。通过这次设计,要求掌握以下内容:1) 面向对象技术中的继承与多态(重载和覆盖)机制、各种修饰符的使用2) 类、包、接口的定义与使用3) 常用工具类与算法的实现(数组、向量、字符串、链表)4) java.awt、javax.swing中常用标准GUI组件及相应的事件处理5) Java的异常处理机制6) Java的数据库连接技术7)Java的多线程技术与动画制作8)Java的网络编程3课程设计说明书本次设计要达到的目标分别从以下模块进行阐述: 游戏主界面模块:游戏的主界面是进入游戏后,能够给玩家第一感官的部分,主要包括游戏图形区域界面、游戏的速度选择更新界面、游戏分数的显示更新界面、新生方块的预览、游戏开始按钮、暂停游戏按钮、退出游戏按钮以及游戏排行榜按钮。从很大程度上决定了玩家对游戏的兴趣问题,因此,游戏的主界面应该力求美观,爽心悦目。 游戏控制模块: 这个模块是游戏的中心环节,主要完成控制游戏的开始、暂停、退出等功能。为了能够给玩家一个很好的游戏环境,这部分应该做到易懂、易操作。1.4 设计实现功能和目标本设计所开发的是基于Java的一个贪吃蛇游戏软件,主要实现游戏的开始、暂停、退出、等功能,分为: 游戏主界面模块、游戏控制模块以二个模块。 性能:本软件在设计方面本着方便、实用及娱乐性高的宗旨,在对界面进行设计的过程中,始终坚持清晰明了,在性能方面能够实现效率高,不易出错等优点。 游戏主界面模块:主要包括游戏图形区域界面、游戏开始按钮、暂停游戏按钮、关闭按钮。游戏的主界面应该力求美观,爽心悦目。 游戏控制模块:主要完成控制游戏的开始、暂停、退出等功能,这部分应该做到易懂、易操作而且准确率高,不易出错。1.5游戏设计环境 本次课程设计所涉及和实现的是用Java编程语言开发的贪吃蛇游戏。本次设计的系统环境及工具如下: 运行环境:windows xp 编程语言:Java 3.分析与设计(1)游戏处理流程。本次游戏处理流程如图1所示。进入游戏画面 单机“开始”按钮,游戏开始,蛇开始随即出现键盘操作: “左移” “右移” “向下” “向上”没有吃到实物且蛇碰到边界或者自身游戏中途欲退出,单击游戏界面上的“”游戏结束图1 游戏流程设计(2)功能模块设计。软件开发过程中的功能模块设计,主要解决实现该游戏需求的程序模块设计问题。包括如何把该游戏划分成若干个模块,决定各个模块之间的接口、模块之间传递的信息,以及模块结构的设计等。(3)游戏功能 本系统主要完成一下几个方面的功能:1. 游戏控制功能包括游戏的开始、暂停、退出2. 界面布局3. 其他辅助功能(4)总设计模块的划分根据游戏游戏需求中游戏所要实现的功能,整个游戏分为二个模块进行具体的设计,如图2所示。贪吃蛇游戏游戏控制模块游戏主界面模块图2游戏总设计模块(5)游戏煮界面模块游戏界面主框架主要包括游戏图形区域界面、游戏的开始按钮、暂停按钮、游戏的退出按钮。游戏界面主框架的主要结构如图3所。游戏的主界面框架游戏控制按钮界面游戏图形区域界面(即游戏画布)图3游戏主界面框架(6)游戏控制模块游戏控制模块主要通过主界面上的按钮来控制游戏的开始、游戏的暂停、游戏的退出这三个功能。在这个模块中,需要给各个按钮或文本框加入代码,来对上述的功能加以进一步的实现。游戏控制模块的主要框架如图4所示。游戏控制模块游戏的退出功能游戏的的开始功能图4游戏控制模块框架1. 游戏开始控制:单击“begin”按钮,游戏画布既有移动的贪吃蛇出现,游戏正式开始2. 游戏退出控制:单击“”按钮,退出游戏。(7)类模块设计1.类模块之间的关系通过对功能要求的分析,将贪吃蛇游戏功能划分为6个类模块,他们的关系如图5所示。Snake(主类)SnakeFrame(用户界面类)SnakePabel(游戏界面及内容)SnakeModel(游戏内容)AnayIndex(游戏方向)AnayIndexReadOnly(方向)图5贪吃蛇之间的关系(8)各类模块设计概要1Snake类Snake类该类包含main方法,为应用程序的主类。该类用来创建游戏的用户界面,整个程序从该类的main方法开始执行。 SnakeFrame类用来设计游戏的用户界面。 SnakePanel类设置游戏运行状态,设置蛇头颜色,背景颜色,随机块颜色,移动以及分数更新,实现上下左右移动的方法接口。 SnakeModel类设置初始化蛇的形状和运行方向,设置随机块的位置,判断游戏是否出界,以及出界后的处理,设置方向的更新。 ArrayIndex类 用来得到坐标,设置坐标以及判断运行方向相同或相反。 ArrayIndexReadOnly类用来得到坐标,以及判断运行方向相同或相反。 (9)详细设计1.程序的主要结构:本次所设计贪吃蛇游戏程序的主结构如图6所示。初始化失败初始化不正常退出进入时间等待状态返回相关事件退出开始请求正常退出图6贪吃蛇程序主结构2.类模块流程图 GreedSnake类创建SnakeFrame窗口类的一个实例设置关闭窗口按键和窗口高度宽带图7GreedSnake类程序流程图SnakeFrame第一菜单及菜单变量创建菜单及菜单项将组件注册给事件监听者处理给予菜单动作时间图8SnakeFrame类程序流程图SnakePanel类设置蛇头身体,随机块和初始运行方向变量处理游戏动作设置蛇头、背景、随机块颜色实现移动接口实现按键接口定义数据成员图9SnakePanel类程序流程图SnakeModel类设置函数坐标和方向设置初始化状态设置贪吃蛇界面并初始化游戏Y是否与运行方向相反保持原来方向N按指示方向运动Y重设置蛇头和蛇身,重新生产随即块蛇是否吃了随机块NY是否出界游戏结束NY游戏结束是否相交N移动,把蛇头加到蛇身体里面并且把尾巴移出是否吃了足够的果实Y游戏结束,“你赢了”图10SnakeModel类程序流程图ArrayIndexReadOnly类构造函数得到坐标设置与运行方向相同和相反的表示方法图11 ArrayIndexReadOnly类程序流程图ArrayIndex类设置X,Y坐标设置与运行方向相同或相反的表示方法图12 ArrayIndex类程序流程图4课程设计成果打开贪吃蛇游戏后,出现如图14所示界面。图14点击“开始”出现如图15界面。图15按“”控制蛇的方向,如图16所示。蛇碰到边界则游戏结束,出现“游戏结束”,如图17所示。图16蛇碰到自己的身体则游戏结束,如图17所示。图17本次实验部分源程序代码:import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Snake extends JFrame private JPanel contentPane; /窗体内容网格 private JButton btnStart = new JButton(开始); /游戏开始按钮 private JButton btnPause = new JButton(暂停); /游戏暂停按钮 private JButton btnExit = new JButton(退出); /游戏退出按 private JPanel pnlTop = new JPanel(); /顶部按钮和分数面板 private JPanel pnlLeft = new JPanel(); /左侧面板 private JPanel playPanel = new JPanel(); /游戏区面板 private BorderLayout borderLayout1 = new BorderLayout(); /容器布局管理器 private BorderLayout borderLayout2 = new BorderLayout(); private GridLayout rbtnLayout = new GridLayout(10, 1, 1, 1); private static final int UP = 1,LEFT = 2,DOWN = 3,RIGHT = 4;/蛇运动方向 private static final int ROWS = 30; /游戏区行数 private static final int COLS = 50; /游戏区列数 private boolean isPause = false; /游戏暂停标志 private boolean isEnd; /游戏结束标志 private SnakeBody snake; /贪食蛇 private int score = 0; /当前得分 SnakeThread thread = new SnakeThread(); /游戏主线程 private GridLayout grid1 = new GridLayout(ROWS,COLS,0,0); /游戏区布局 private JButton blocks; /游戏区的所有方块 JPanel jPanel2 = new JPanel(); JLabel jLabel1 = new JLabel(得分:); JLabel lblScroe = new JLabel(0); ButtonGroup buttonGroup1 = new ButtonGroup(); JRadioButton rbtnLow = new JRadioButton(初级, true); JRadioButton rbtnMid = new JRadioButton(中级); JRadioButton rbtnHigh = new JRadioButton(高级); public Snake() super(贪食蛇游戏); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); contentPane = (JPanel)this.getContentPane(); contentPane.setLayout(borderLayout2); this.setResizable(false); this.setSize(new Dimension(512, 414); keyAction keyAct = new keyAction(); this.addKeyListener(keyAct); btnStart.addKeyListener(keyAct); btnPause.addKeyListener(keyAct); btnExit.addKeyListener(keyAct); rbtnLow.addKeyListener(keyAct); rbtnMid.addKeyListener(keyAct); rbtnHigh.addKeyListener(keyAct); btnAction btnAct = new btnAction(); btnStart.addActionListener(btnAct); btnPause.addActionListener(btnAct); btnExit.addActionListener(btnAct); rbtnLow.addActionListener(btnAct); rbtnMid.addActionListener(btnAct); rbtnHigh.addActionListener(btnAct); pnlLeft.setLayout(borderLayout1); playPanel.setLayout(grid1); playPanel.setBackground(Color.white); playPanel.setBorder(BorderFactory.createEtchedBorder(); jPanel2.setLayout(rbtnLayout); buttonGroup1.add(rbtnLow); buttonGroup1.add(rbtnMid); buttonGroup1.add(rbtnHigh); rbtnLow.setSelected(true); pnlLeft.add(playPanel); pnlLeft.add(jPanel2, BorderLayout.WEST); jPanel2.add(f1, rbtnLow); jPanel2.add(f2, rbtnMid); jPanel2.add(f3, rbtnHigh); pnlTop.add(btnStart); pnlTop.add(btnPause); pnlTop.add(btnExit); pnlTop.add(jLabel1); pnlTop.add(lblScroe); contentPane.add(pnlTop, BorderLayout.NORTH); contentPane.add(pnlLeft, BorderLayout.CENTER); /创建并初始化游戏区方块 blocks = new JButtonROWSCOLS; for (int i = 0; i ROWS; i+) for (int j = 0; j COLS; j+) blocksij = new JButton(); blocksij.setBackground(Color.lightGray); blocksij.setVisible(false); playPanel.add(blocksij); public static void main(String args) Snake app = new Snake(); app.validate(); app.setVisible(true); public void start() snake = new SnakeBody(); /创建蛇身 if (rbtnLow.isSelected() snake.setSpeed(300); if (rbtnMid.isSelected() snake.setSpeed(200); if (rbtnHigh.isSelected() snake.setSpeed(100); score = 0; isPause = false; isEnd = false; / btnPause.setText(暂停); /初始化游戏区 for (int i = 0; i ROWS; i+) for (int j = 0; j COLS; j+) blocksij.setBackground(Color.lightGray); blocksij.setVisible(false); /在游戏区内随机放置豆 int x = (int) (Math.random() * ROWS); int y = (int) (Math.random() * COLS); while (blocksxy.isVisible() x = (int) (Math.random() * ROWS); y = (int) (Math.random() * COLS); blocksxy.setBackground(Color.yellow); blocksxy.setVisible(true); try thread.start(); catch (IllegalThreadStateException illegalThreadStateException) class SnakeBody public int row; public int col; public int len = 3, direction = RIGHT, lastdirection = RIGHT; public long speed = 300; public SnakeBody() len = 3; direction = RIGHT; lastdirection = RIGHT; row = new intROWS; col = new intCOLS; for (int i = 0; i = len; i+) rowi = 1; coli = len - i; public void setSpeed(int s) speed = s; public void move() blocksrowlencollen.setVisible(false); /去掉蛇尾 blocksrowlencollen.setBackground(Color.white); /修改颜色 /显示蛇身 for (int i = 0; i 0; i-) rowi = rowi - 1; coli = coli - 1; /根据蛇身运动方向,决定蛇头位置 switch (direction) case UP: if (lastdirection = DOWN) row0 += 1; else row0 -= 1; lastdirection = UP; break; case LEFT: if (lastdirection = RIGHT) col0 += 1; else col0 -= 1; lastdirection = LEFT; break; case DOWN: if (lastdirection = UP) row0 -= 1; else row0 += 1; lastdirection = DOWN; break; case RIGHT: if (lastdirection = LEFT) col0 -= 1; else col0 += 1; lastdirection = RIGHT; break; /当蛇头碰到墙时,蛇头碰到蛇身时,游戏结束 if (row0 = ROWS | row0 = COLS | col0 100) JOptionPane.showMessageDialog(null, 恭喜你过关了,准备进入下一关); speed -= 100; if (speed = 200) rbtnMid.setSelected(true); if (speed = 100) rbtnHigh.setSelected(true); /吃豆后,蛇身加长,并随机显示下一个豆 if (blocksrow0col0.getBackground().equals(Color.yellow) len+; int x, y; x = (int) (Math.random() * ROWS); y = (int) (Math.random() * COLS); while (blocksxy.isVisible() x = (int) (Math.random() * ROWS); y = (int) (Math.random() * COLS); blocksxy.setBackground(Color.yellow); blocksxy.setVisible(true); blocksrow0col0.setBackground(Color.green); blocksrow0col0.setVisible(true); /显示蛇头 class SnakeThread extends Thread public void run() while (true) try Thread.sleep(snake.speed); /控制移动速度 if (!isEnd & !isPause) snake.move(); /移动蛇身 if (isEnd) /游戏结束 btnStart.setEnabled(true); catch (Exception ex) class keyAction extends KeyAdapter public void keyPressed(KeyEvent e) if (!isEnd & !isPause) /根据用户按键,设置蛇运动方向 if (e.getKeyCode() = KeyEvent.VK_UP) snake.direction = UP; if (e.getKeyCode() = KeyEvent.VK_DOWN) snake.direction = DOWN; if (e.getK

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论