




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
南京晓庄学院JAVA程序设计课程设计报告题 目:接球游戏的设计与实现姓 名: 吕琴学 号: 11130924班 级: 11计算机转本2班指导教师: 王铮完成时间2014年6月 成 绩:数学与信息技术学院2014年6月1目录1引言11.1系统开发背景11.1系统开发的目的和意义11.2完成的主要工作12需求分析和总体设计22.1需求分析与设计思路22.1.1关键技术说明22.1.2需求分析22.1.3系统设计方案与思路22.1.4系统目录结构说明22.2系统功能结构23详细设计43.1系统模块实现43.1.1源程序模块实现44系统运行结果775 课程设计总结8Java课程设计接球游戏的设计与实现1 引言1.1 系统开发背景 接球游戏仿照手掌机上的打砖块游戏制作的,游戏难度及游戏速度可以调节。这是一款挑战型的小游戏,看你能成功接住多少小球。1.1 系统开发的目的和意义这是一款 休闲娱乐游戏,其实接球的游戏有很多种,主要还是考验敏捷的思考能力和反应能力,有助于集中精神的训练。1.2 完成的主要工作(1)程序的界面会有移动的滑板, 滑板会根据鼠标的移动而移动。(2)程序会随机的出现不同的球。(3)程序的主界面是还有选择项,可以选择重新开始或者退出。2 需求分析和总体设计2.1 需求分析与设计思路 2.1.1 关键技术说明1、用户界面的设计,使用画布来显示。2、鼠标的监听事件的实现。2.1.2 需求分析很多的人们在压力这么大的社会中,需要有小游戏来放松身心,而接球小游戏就可以。2.1.3 系统设计方案与思路本程序是一个用java写的接球小游戏。游戏开始时会有小球从窗口上部随机位置下落,玩家要做的是通过鼠标控制窗口下部的板子来接住落下的小球,接住一个加一分,直到没有接到一个小球,游戏结束。为了增加游戏的娱乐性,本程序尝试提供3个难度,根据难度来调整小球的速度。因为要通过鼠标来控制板子,所以需要一个来监听鼠标位置移动的监听器,来捕获鼠标的移动和鼠标的当前位置(用来更新板子的位置和判断是否接住小球),同时这个类负责板子的绘制与更新。本程序采用一个独立的线程来绘制下落的小球,这个线程仅仅负责小球的绘制和判断小球是否被接住,以及记录更新分数。这样可以增加程序的效率,不会出现卡顿的现象。程序的主要窗体由一个UI类控制,主要负责窗口和菜单的绘制以及线程的调用。2.1.4 系统目录结构说明对系统包结构、文件结构列表说明,如表2-1、2-2所示。表2-1包名作用Java.awt.Insets包含用于创建用户界面和绘制图形图像的所有类Java.awt.event.ActionEvent定义了动作的类Java.awt.event.ActionListener包含用于创建用户界面和绘制图形图像的所有的类Java.awt.event.MouseEvent把类全部导进来Javax.swing.JOptionPane有助于方便地弹出要求用户提供或向其发出通知表2-2文件名作用GameUI.java程序的主窗体,负责窗口和菜单的绘制以及线程的调用。MyThread.Java游戏的线程,主要负责小球的绘制和判断小球是否被接住,以及记录更新分数。MyListener.java监听鼠标位置移动的监听器。用来捕获鼠标的移动和鼠标的当前位置,同时这个类负责板子的绘制与更新。2.2 系统功能结构对系统实现功能进行说明,分析系统功能结构,画出系统功能结构图,如图2-1所示。3 详细设计3.1 系统模块实现3.1.1 源程序模块实现本模块主要负责小球的绘制和判断小球是否被接住,以及记录更新分数一、 实现原理MyThread继承于Thread,使用一个单独的线程进行小球的绘制。小球的绘制和滑板的绘制大同小异,都是使用java.awt.Graphics进行绘制的。MyThread还兼顾着进行小球是否被接住的判断。主要是通过返回的板子的坐标和小球的坐标来判断小球是否在板子上方的一定范围里,如果在,则判断为接住,否则,为掉落。二、 分层结构及调用关系说明进入游戏画面根据球出现的位置,移动鼠标使滑板到相应的位置的上方,测试可以接多少个球。若滑板接到一个球,则玩家就得一分,若接不到球,就游戏结束。先选择游戏的难度,有简单,中等和困难。游戏结束,选择否,退出游戏。游戏结束,选择是,重新开始新的游戏。三、 关键代码分析public void run() drawOval();/* * 创建线程的方法 */public void drawOval() UI.text_field.setText(count + 分);/start = System.currentTimeMillis();while (isFinish) while (isPause) synchronized(this.g)g.setColor(java.awt.Color.black);g.fillOval(x, y, width, height);y += y1;getColors();g.setColor(color);g.fillOval(x, y, width, height);int x2 = listener.getX();if (y 595 & x x2 & x 630) if (isexist) isAgain();stopThread();try Thread.sleep(speed); catch (Exception ef) ef.printStackTrace();小球的绘制其实就是不断的绘制一个圆形,只不过圆形的y坐标在不停的变化。难度的控制是通过主程序传入的speed参数来控制的,这个参数用于Thread.sleep(speed),很显然,当这个参数与小球下落的速度成反比。通过调用UI.text_field.setText()来更新主窗口上的分数。四、 分析总结这个模块应该是本程序的核心模块了,很多逻辑上的错误都发生过,应该是写的最为艰辛的模块了。不过好在程序本身的逻辑并不是太过复杂,走了几次弯路也就完成的差不多了。4 系统运行结果 5 课程设计总结一个好的算法可以让你的程序更健壮,编写的代码量更少,处理异常一直是JAVA里的常事,通过试验,让我对基础的知识更加深入了解,也对更改代码错误有了一定的提升,能看的懂错误的代码错在哪里,并进行修改,使其正确。 这个游戏只是一个简单的接球游戏,如果可以做的更好,就会更好的训练人们的集中力和反应速度,敏捷的做出正确的判断。附件:GameUI.java:import java.awt.Insets;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;/* * 游戏界面类 */public class GameUI extends javax.swing.JFrame private static GameUI UI;private java.awt.Graphics g;private MyListener ml;public javax.swing.JLabel text_field;/public javax.swing.JProgressBar pBar;private String command;public java.util.ArrayList list = new java.util.ArrayList();private javax.swing.JToggleButton button;public static void main(String args) UI = new GameUI();UI.initUI();/* * 初始化窗体的方法 */public void initUI() / 设置标题this.setTitle(接球);/ 设置大小this.setSize(610, 635);/ 设置关闭是退出程序this.setDefaultCloseOperation(3);/ 设置打开窗体时在屏幕中间显示this.setLocationRelativeTo(null);/ 设置窗体的流式布局管理器this.setLayout(new java.awt.FlowLayout();/ 设置窗体背景颜色this.getContentPane().setBackground(java.awt.Color.black);/ 创建文本标签对象text_field = new javax.swing.JLabel();javax.swing.JLabel lable = new javax.swing.JLabel(分数 :);/ 设置文本标签前景颜色lable.setForeground(java.awt.Color.red);text_field.setForeground(java.awt.Color.red);/ 创建按钮对象button = new javax.swing.JToggleButton();button.setMargin(new Insets(0, 0, 0, 0);button.setIcon(new javax.swing.ImageIcon(images/Pause.gif);button.setActionCommand(暂停);/ 通过匿名内部类来创建动作监听器java.awt.event.ActionListener button_listener = new java.awt.event.ActionListener() public void actionPerformed(ActionEvent e) String com = e.getActionCommand();if (com.equals(暂停) button.setMargin(new Insets(0, 0, 0, 0);button.setIcon(new javax.swing.ImageIcon(images/start.gif);button.setActionCommand(继续);for (int i = 0; i list.size(); i+) list.get(i).PauseThread();if (com.equals(继续) button.setMargin(new Insets(0, 0, 0, 0);button.setIcon(new javax.swing.ImageIcon(images/Pause.gif);button.setActionCommand(暂停);for (int i = 0; i list.size(); i+) list.get(i).ContinueThread();button.addActionListener(button_listener);this.add(button);this.add(lable);this.add(text_field);/ 的到菜单条javax.swing.JMenuBar bar = creatMenuBar();/ 为窗体设置菜单条this.setJMenuBar(bar);/ 设置窗体的可见性this.setVisible(true);/* * 创建菜单条的方法 */public javax.swing.JMenuBar creatMenuBar() / 创建菜单条对象javax.swing.JMenuBar bar = new javax.swing.JMenuBar();/ 创建菜单对象javax.swing.JMenu menu_menu = new javax.swing.JMenu(菜单);javax.swing.JMenu difficulty_menu = new javax.swing.JMenu(难度);/ 创建菜单选项对象javax.swing.JMenuItem star_item = new javax.swing.JMenuItem(开始);javax.swing.JMenuItem exit_item = new javax.swing.JMenuItem(退出);/ 创建单选选项javax.swing.JRadioButtonMenuItem easy_item = new javax.swing.JRadioButtonMenuItem(简单);javax.swing.JRadioButtonMenuItem middle_item = new javax.swing.JRadioButtonMenuItem(中等);javax.swing.JRadioButtonMenuItem hard_item = new javax.swing.JRadioButtonMenuItem(困难);/ 创建一个按钮组javax.swing.ButtonGroup group = new javax.swing.ButtonGroup();/ 将单选按钮添加到按钮组中group.add(easy_item);group.add(middle_item);group.add(hard_item);/ 将单选按钮添加到菜单中difficulty_menu.add(easy_item);difficulty_menu.add(middle_item);difficulty_menu.add(hard_item);/ 通过匿名内部类来创建动作监听器ActionListener listener = new java.awt.event.ActionListener() public void actionPerformed(ActionEvent e) command = e.getActionCommand();/ 如果选择开始,则创建线程对象if (command.equals(开始) & list.size() = 0) creatBall(20, 1);/ 如果选择退出按钮,则退出程序if (command.equals(退出) System.exit(0);/ 如果选择简单按钮if (command.equals(简单) & list.size() = 0) creatBall(20, 1);/ 如果选择中等按钮if (command.equals(中等) & list.size() = 0) creatBall(50, 2);if (command.equals(困难) & list.size() = 0) creatBall(40, 2);/ 添加动作监听器star_item.addActionListener(listener);exit_item.addActionListener(listener);easy_item.addActionListener(listener);middle_item.addActionListener(listener);hard_item.addActionListener(listener);/ 将菜单选项对象添加到菜单对象上menu_menu.add(star_item);menu_menu.add(exit_item);/ 将菜单对象添加到菜单条上bar.add(menu_menu);bar.add(difficulty_menu);/ 返回菜单条对象return bar;/* * 创建线程对象的方法 * param speed :速度 * */public void creatBall(int speed, int num) java.util.Random ran = new java.util.Random();if (ml = null) g = UI.getGraphics();ml = new MyListener(g);UI.addMouseListener(ml);UI.addMouseMotionListener(ml);for (int i = 0; i num; i+) int x = ran.nextInt(600) + 10;int y = 100;MyThread th = new MyThread(g, ml, UI, x, y, speed);list.add(th);th.start();/* * 得到命令的方法 */public String getCommand() return command;MyListener.java:import java.awt.event.MouseEvent;/* * 鼠标监听器的类 */public class MyListener extends java.awt.event.MouseAdapter private java.awt.Graphics g;private int x = 5, y = 620;private int width = 100, height = 10;public MyListener(java.awt.Graphics g) this.g = g;public void mouseMoved(MouseEvent e) / 设置画布对象颜色synchronized (this.g) g.setColor(java.awt.Color.black);g.fillRect(x, y, width, height);x = e.getX();g.setColor(java.awt.Color.green);g.fillRect(x, y, width, height);/* * 得到x的方法 * * return:x */public int getX() return x;MyThread.java:import javax.swing.JOptionPane;/* * 线程类 */public class MyThread extends Thread private int width = 20, height = 20;private int x, y;private int count = 0;private java.awt.Graphics g;private GameUI UI;private boolean isexist = true;private MyListener listener;private int speed;private int y1 = 5;private int response;private boolean isFinish = true;private boolean isPause = true;private java.util.ArrayList list;private float value = 320;private java.awt.Color color = java.awt.Color.blue;/* * 重写构造器 */public MyThread(java.awt.Graphics g, MyListener listener, GameUI UI, int x,int y, int speed) this.g = g;this.UI = UI;this.x = x;this.y = y;this.speed = speed;this.listener = listener;public void run() drawOval();/* * 创建线程的方法 */public void drawOval() UI.text_field.setText(count + 分);/start = System.currentTimeMillis();while (isFinish) while (isPause) synchronized(this.g)g.setColor(java.awt.Color.black);g.fillOval(x, y, width, height);y += y1;getColors();g.setColor(color);g.fillOval(x, y, width, height);int x2 = listener.getX();if (y 595 & x x2 & x 630) if (isexist) isAgain();stopThread();try Thread.sleep(speed); catch (Exception ef) ef.printStackTrace();/* * 线程结束时消去最后一个圆的方法 */public void fadeOval() g.setColor(java.awt.Color.black);g.fillOval(x, y, width, height);/* * 重来对话框的处理方法 */public void isAgain() isexist = false;list = UI.list;System.out.println(list.size();for (int j = 0; j list.size(); j+) / 停在线程,并且去掉最后一个圆list.get(j).stopThread();list.get(j).fadeOval();Object options = 是, 否 ;String command = UI.getCommand();response = JOptionPane.showOptionDialog(null,你的得分为 : + count + n坚持就是胜利,是否再来一次?, null, JOptionPane.YES_OPTION,JOptionPane.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东防排烟自考试题及答案
- 矿长任职考试题及答案
- 库仑力考试题及答案
- 松脂工技能巩固考核试卷及答案
- 球团原料工岗位操作技能考核试卷及答案
- 2025年中国轻型裁割机数据监测报告
- 飞机桨叶型面仿形工职业考核试卷及答案
- 蒸馏炉工综合考核试卷及答案
- 摊商岗位操作技能考核试卷及答案
- 炼钢浇铸工专项考核试卷及答案
- 中队辅导员培训材料
- 2025年巷道掘砌工(技师)职业技能鉴定理论考试题库(含答案)
- 小学五爱教育
- 开学第一课消防安全知识课件
- 香港劳务派遣合同范本年
- 2025年威海桃威铁路有限公司招聘笔试参考题库含答案解析
- 妊娠期高血压疾病的观察及护理
- 临床骨筋膜室综合征护理业务学习
- 医院DIP支付方式改革工作实施方案
- 企业与高校合作共建实验室协议
- 租房合同范本下载(可直接打印)
评论
0/150
提交评论