Java弹球游戏实验报告—chen.doc_第1页
Java弹球游戏实验报告—chen.doc_第2页
Java弹球游戏实验报告—chen.doc_第3页
Java弹球游戏实验报告—chen.doc_第4页
Java弹球游戏实验报告—chen.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

课 程 设 计 报 告 题 目 弹球小游戏 姓 名 方成 学 号 20 专 业 java 指导教师 陈华恩 2013年 12 月 30 目录一、实验目的2二、需求分析2三、实验任务21、设计32、程序要求:33、选作题:3四、开发工具与平台3五、设计思路31、界面设计32、逻辑设计33、程序测试4六、实验总结5七、程序代码5八、参考文献111.疯狂java讲义122.算法导论123.java编程思想12一、实验目的1、 熟练掌握java面向对象编程。2、 掌握Swing图形用户界面编程以及事件处理等,掌握java绘图技术。3、 掌握timer类的灵活使用4、 培养独立查找资料,并解决问题的能力。二、需求分析经典的碰撞球是一个的古老游戏,目的是在训练人的反应能力。只有通过把所有的砖块消除完,才能顺利的完成任务。游戏要求如下:1、 实现球速度的随机性2、 实现球碰撞到边缘或者砖块自动反弹3、 实现游戏可以随时暂停4、 实现游戏结束后能重新开始游戏三、实验任务1、 设计设计并编程实现弹球程序:用户能通过菜单或者按钮新增一小球,该小球将从随机的位置出现,并具有随机颜色,随机速度以及随机的运动方向,小球沿初始方向匀速运动,当碰到窗口边缘时,小球将依据受力原理改变运动方向(可简化考虑,受力只改变小球的运动方向,小球仍按照初始速度匀速运动,且不考虑小球之间的碰撞)。2、 程序要求:(1) 具备相应界面,并通过事件编程,实现相应的菜单或者按钮功能。(2) 使用timer,在程序窗口区域绘制小球,并以线程控制小球的移动,实现动画效果。3、 选作题:(1) 实现奖励机制及关卡机制四、开发工具与平台JDK1.6+eclipse五、设计思路1、 界面设计首先建立窗口类 继承自JFrame。该界面为主界面。在加上按钮开始与暂停在加入JPanel面板,用于图形界面.2、 逻辑设计程序用过响应timer事件,按钮事件及键盘事件来管理程序的运行。程序开始窗口运行,等待响应用户消息游戏开始,小球开始移动移动速度在每次反弹后发生变化。如果小球碰倒边界或者砖块,小球方向发生变化若某个小球掉到球拍下面,游戏结束。按开始按钮则重新开始游戏退出移动球拍来使小球不至于掉到球拍下面3、 程序测试 六、实验总结1、这次实验综合运用了GUI编程,使我对多线程编程有了一定的了解,对java的多线程机制有了一点理解,更加熟练的运用swing组件设计界面,响应消息,接口的实现等等。2、通过课程设计的编程和对编程过程中遇到的问题的思考,切实的提高了我的编程能力,通过这次课程设计,我巩固所了学过的知识,能用JAVA熟练地运用其中的一些,进一步掌握了各个指令的功能是转向。七、程序代码package com.fangcheng.ball.game;import java.awt.Font;import java.awt.event.*;import javax.swing.*;import java.util.ArrayList;import java.util.Random;public class BallGame extends JFrame implements ActionListener,KeyListenerprivate JPanel p;private JButton start;private JButton stop;private JLabel ball;private JLabel qiupai;private JLabel bg;/用来放置背景图片的JLabelprivate JLabel win;private JLabel over;private int x1=50;private int x2=15;private int y1=325;private int y2=340;/球与球拍的初始位置private Timer time;/周期性触发球的移动事件的timer对象private boolean isRight=false;/球是否向右移动private boolean isDow=false;/球是否为下降private boolean isOver=false;/是否游戏结束private boolean isYi=false;/球拍是否能移动private int xsudu=3;private int ysudu=3;/球的x,y速度,初始值为3private Random ran=new Random();/用于随机产生球的x,y速度private ArrayList removeBrickList;/被移除的砖块的listprivate ArrayList brickList; /游戏时砖块的listprivate Font font;/* * 构造器,参数为窗口标题 * param s */ public BallGame(String s) super(s); gameShow(); /* * 用于游戏窗口绘制的方法 */ public void gameShow() /初始化组件 ImageIcon img1=new ImageIcon(BallGame.class.getResource(/images/ball.png); ImageIcon img2=new ImageIcon(this.getClass().getResource(/images/pa.png); ImageIcon img3=new ImageIcon(this.getClass().getResource(/images/kuang.png); ImageIcon img4=new ImageIcon(this.getClass().getResource(/images/win.gif); ImageIcon img5=new ImageIcon(this.getClass().getResource(/images/over.png); ImageIcon img6=new ImageIcon(this.getClass().getResource(/images/brick.gif); ImageIcon img7=new ImageIcon(this.getClass().getResource(/images/brick1.png); ImageIcon img8=new ImageIcon(this.getClass().getResource(/images/brick2.png); font=new Font(微软雅黑, Font.PLAIN, 12); ball=new JLabel(img1); qiupai=new JLabel(img2); bg=new JLabel(img3); win=new JLabel(img4); over=new JLabel(img5); p=new JPanel(); start=new JButton(开始); stop=new JButton(暂停); start.setFont(font); stop.setFont(font); time=new Timer(10,this); brickList=new ArrayList(); removeBrickList=new ArrayList(); /初始化砖块 for(int i=0;i27;i+) JLabel temp; if(i%6=0)/用来给砖块加载不同的图片 temp=new JLabel(img6); else if(i%6=1) temp=new JLabel(img7); else if(i%6=2) temp=new JLabel(img8); else if(i%6=3) temp=new JLabel(img7); else if(i%6=4) temp=new JLabel(img8); else temp=new JLabel(img6); brickList.add(temp); /将砖块添加至面板 for(int i=0;ibrickList.size();i+) if(i9) brickList.get(i).setBounds(25*i+10, 15, 20, 20); else if(i18) brickList.get(i).setBounds(25*(i-9)+10, 40, 20, 20); else if(i27) brickList.get(i).setBounds(25*(i-18)+10, 65, 20, 20); p.add(brickList.get(i); /置空布局管理器 this.setLayout(null); p.setLayout(null); /绝对位置布局组件 p.setBounds(0, 0, 240, 500); start.setBounds(50, 400, 60, 30); stop.setBounds(140, 400, 60, 30); this.setBounds(450, 100,246, 465); ball.setBounds(x1, y1, img1.getIconWidth(), img1.getIconHeight(); qiupai.setBounds(x2, y2, img2.getIconWidth(), img2.getIconHeight(); bg.setBounds(0, 0,img3.getIconWidth(), img3.getIconHeight(); over.setBounds(10, 30, img4.getIconWidth(), img4.getIconHeight(); win.setBounds(10, 30, img5.getIconWidth(), img5.getIconHeight(); /先将胜利与结束标签设为不可见 over.setVisible(false); win.setVisible(false); /添加监视器 start.addActionListener(this); stop.addActionListener(this); qiupai.addKeyListener(this); /添加键盘监视器(为了防止焦点丢失造成的问题,将所有组件都添加键盘监视器) p.addKeyListener(this); start.addKeyListener(this); stop.addKeyListener(this); this.addKeyListener(this); /加载组件 p.add(ball); p.add(qiupai); p.add(over); p.add(win); p.add(bg); this.add(start); this.add(stop); this.add(p); this.setResizable(false); this.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); this.setVisible(true); /* * 主程序入口 * param args */ public static void main(String args) new BallGame(碰撞球);/* * 发生操作的监视器 */public void actionPerformed(ActionEvent e) if(e.getSource().equals(start)if(isOver)x1=qiupai.getX()+30;y1=qiupai.getY()-15;/当游戏结束时按开始按钮,即二次开始游戏时将球的位置至于球拍上isOver=false;over.setVisible(false);win.setVisible(false);/遍历remove列表,将上次游戏移除的砖块再次绘制到面板(添加至bricklist)for(int i=0;iremoveBrickList.size();i+)removeBrickList.get(i).setVisible(true);brickList.add(removeBrickList.get(i);isYi=true;time.start();else if(e.getSource().equals(stop)if(!isOver) time.stop();/只有当游戏没有结束时,才能暂停 else/遍历砖块listfor(int i=0;i=brickList.get(i).getX()&ball.getX()=brickList.get(i).getX()+20&ball.getY()=brickList.get(i).getY()+20)/将需要移除的砖块保存到被移除的砖块的removeBrickListremoveBrickList.add(brickList.get(i);brickList.get(i).setVisible(false);brickList.remove(i);isDow=true;

温馨提示

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

评论

0/150

提交评论