Java程序设计实验报告2(弹球游戏)
- 格式:doc
- 大小:149.00 KB
- 文档页数:11
Visual Basic 课程设计报告课程设计题目:弹球游戏姓名:班级:指导老师:时间:一、实验目的学会使用Visual Basic设计、编写程序,掌握基本的常用控件的使用。
二、实验内容使用Visual Basic制作弹球游戏。
通过使用键盘控制挡板,使运动的小球不掉落,同时计算分数。
三、实验步骤1.创建游戏进入窗体(Form1)(1) 创建窗体,添加所需控件。
(2) 在“属性”窗口设置窗体和标签属性。
对象对象名属性名属性值事件名窗体Form Caption 弹球游戏2.0之是男人就撑过40秒无Icon (Icon) BorderStyle 3 Picture (Bitmap)标签Label1Caption 弹球游戏无Font 黑体BackColor &H00000000&ForeColor &H00808080&Label2Caption 开始游戏ClickBackStyle 0Font 宋体ForeColor &H00FFC0C0&Label3Caption 游戏帮助ClickBackStyle 0Font 宋体ForeColor &H00FFC0C0&Label4Caption 退出ClickBackStyle 0Font 宋体ForeColor &H00FFC0C0&Label5 Caption Copyright版权无所有(C)2009 曾聪BackColor &H00FFC0C0& Font 宋体ForeColor &H00000040&Label6Caption警告:本软件受版权法和国际条约的保护,未经授权擅自复制或传播本程序(或其中的任何部分),将受到严厉的刑事及民事制裁,并将在法律许可范围内受到最大可能的起诉. BackStyle 0Font 宋体Label7Caption是男人就撑过40秒BackStyle 0Font 黑体ForeColor &H00C0C0C0&(3) 设计代码。
java课程设计弹球一、教学目标本章节的教学目标旨在让学生掌握Java编程的基本技能,通过实践项目“弹球游戏”的设计与实现,培养学生的编程兴趣和解决问题的能力。
具体目标如下:1.理解Java编程语言的基本语法和结构。
2.掌握面向对象编程的思想,了解类和对象的概念。
3.熟悉常用数据结构,如数组、链表、栈和队列。
4.学习Java图形用户界面(GUI)编程,了解Swing组件的使用。
5.能运用Java语言编写简单的应用程序。
6.能运用面向对象的思想,设计并实现具有一定复杂度的软件系统。
7.熟练使用Java开发工具,如Eclipse或IntelliJ IDEA。
8.掌握调试和优化代码的方法。
情感态度价值观目标:1.培养学生对编程的兴趣,提高自主学习的积极性。
2.培养学生团队合作精神,学会在团队中分工协作。
3.培养学生面对挑战、解决问题的信心和能力。
二、教学内容本章节的教学内容以Java编程语言为基础,通过设计弹球游戏的项目,让学生掌握Java的基本语法、面向对象编程、GUI编程等知识。
教学大纲如下:1.Java基本语法:数据类型、运算符、控制结构、函数。
2.面向对象编程:类与对象、构造方法、封装、继承、多态。
3.Java常用数据结构:数组、链表、栈、队列。
4.Swing编程:窗口、按钮、文本框、图像显示等组件的使用。
5.事件处理:鼠标事件、键盘事件。
6.文件操作:文件的读取与写入。
7.项目实践:弹球游戏的设计与实现。
三、教学方法本章节采用讲授法、案例分析法、实验法等多种教学方法,以激发学生的学习兴趣和主动性。
1.讲授法:用于讲解Java基本语法、面向对象编程等理论知识。
2.案例分析法:通过分析典型案例,让学生了解Java编程的实际应用。
3.实验法:让学生动手实践,设计并实现弹球游戏项目。
4.小组讨论法:鼓励学生在小组内分工协作,共同完成项目任务。
四、教学资源本章节的教学资源包括教材、参考书、多媒体资料、实验设备等。
java弹球游戏代码_Java实现简单的弹球游戏本⽂实例为⼤家分享了Java实现简单的弹球游戏的具体代码,供⼤家参考,具体内容如下该程序主要是⽤于对java图形化界⾯编程进⾏联系,程序实现全部采⽤的是AWT包下的类。
程序仅做参考,供学习使⽤。
import java.awt.Canvas;import java.awt.Color;import java.awt.Dimension;import java.awt.Font;import java.awt.Frame;import java.awt.Graphics;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.swing.Timer;public class PinBallGame {//创建窗⼝对象private Frame frame = new Frame("弹球游戏");//桌⾯宽度private final int TABLE_WTDTH = 300;//桌⾯⾼度private final int TABLE_HEIGHT = 400;//球拍的⾼度和宽度private final int RACKET_WIDTH = 60;private final int RACKET_HETGHT = 20;//⼩球的⼤⼩private final int BALL_SIZE = 16;//定义变量,记录⼩球的坐标private int ballX = 120;private int ballY = 20;//定义变量,记录⼩球在x和y⽅向上分别移动的速度private int speedY = 10;private int speedX = 5;//定义变量,记录球拍的坐标private int racketX = 120;private final int racketY = 340;//定义变量,标识当前游戏是否已结束private boolean isOver = false;//声明⼀个定时器private Timer timer;//⾃定义⼀个类,继承Canvas,充当画布@SuppressWarnings("serial")private class MyCanvas extends Canvas{@Overridepublic void paint(Graphics g) {//TODO 在这⾥绘制内容if (isOver) {//游戏结束g.setColor(Color.BLUE);g.setFont(new Font("Times",Font.BOLD,30));g.drawString("游戏结束!", 50, 200);}else{//游戏中//绘制⼩球g.setColor(Color.RED);g.fillOval(ballX, ballY, BALL_SIZE, BALL_SIZE);//绘制球拍g.setColor(Color.PINK);g.fillRect(racketX, racketY, RACKET_WIDTH, RACKET_HETGHT); }}}//创建绘画区域MyCanvas drawArea = new MyCanvas();public void init() {//组装视图,游戏逻辑的控制//完成球拍坐标的变化KeyListener listener = new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {//获取当前按下的键int keyCode = e.getKeyCode();if (keyCode == KeyEvent.VK_LEFT) {//0) {racketX -= 10;}}if (keyCode == KeyEvent.VK_RIGHT) {//-> 应该向右移动if (racketX =(TABLE_WTDTH-BALL_SIZE)) {speedX = -speedX;}if (ballY <= 0 || (ballY > racketY-BALL_SIZE && ballX>racketX && ballX < racketX+RACKET_WIDTH)) { speedY = -speedY;}if (ballY > racketY-BALL_SIZE && (ballX < racketX || ballX > racketX+RACKET_WIDTH)) {//当前⼩球超出了球拍的范围,游戏结束//停⽌定时器timer.stop();//修改游戏是否结束的标记isOver = true;//重绘界⾯drawArea.repaint();}//更新⼩球的坐标,重绘界⾯ballX += speedX;ballY += speedY;//重绘界⾯drawArea.repaint();}};timer = new Timer(100, task);timer.start();drawArea.setPreferredSize(new Dimension(TABLE_WTDTH,TABLE_HEIGHT)); frame.add(drawArea);//设置frame最佳⼤⼩,并可视frame.pack();frame.setVisible(true);frame.setLocationRelativeTo(null);frame.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}public static void main(String[] args) {new PinBallGame().init();}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持脚本之家。
java弹球小游戏课程设计一、课程目标知识目标:1. 理解Java编程语言中面向对象的基本概念,包括类、对象、方法和属性;2. 掌握Java中图形用户界面(GUI)设计的基本原理,包括事件处理和图形绘制;3. 学会使用Java中的循环结构和条件语句实现逻辑控制;4. 了解坐标系统和动画原理在编程中的应用。
技能目标:1. 能够运用所学知识设计并实现一个简单的弹球小游戏;2. 学会使用Java中的Swing库进行界面设计和事件处理;3. 通过编程实践,掌握调试和修复代码中常见错误的能力;4. 培养创新思维和问题解决能力,能够对游戏进行优化和扩展。
情感态度价值观目标:1. 培养学生对计算机编程的兴趣,激发学习主动性和探究精神;2. 增强学生的团队合作意识,通过合作开发培养沟通与协作能力;3. 培养学生勇于克服困难、面对挑战的精神,提高自信心和自尊心;4. 使学生认识到编程与日常生活的紧密联系,培养将所学知识应用于实际的意识。
二、教学内容1. 面向对象编程基础:- 类与对象的概念- 构造方法与成员变量- 访问控制符- 继承与多态2. Java图形用户界面(GUI)设计:- JFrame窗口创建与布局管理- 事件处理机制- 组件的使用与定制3. Java编程逻辑控制:- 循环结构(for、while、do-while)- 条件语句(if-else、switch)- 方法调用的参数传递4. 游戏设计与编程实现:- 游戏场景设定与坐标系统- 动画原理与双缓冲技术- 弹球运动逻辑与碰撞检测- 游戏音效与背景音乐添加5. 教学内容的安排与进度:- 第一课时:面向对象编程基础,介绍类与对象的概念,编写简单的Java程序- 第二课时:Java图形用户界面设计,学习JFrame窗口创建和事件处理- 第三课时:Java编程逻辑控制,讲解循环结构和条件语句的使用- 第四课时:游戏设计与编程实现,分步骤实现弹球小游戏- 第五课时:游戏优化与扩展,对游戏进行调试优化,培养学生的创新思维教学内容参考教材相关章节,结合课程目标和学生的实际水平进行系统性地组织和安排。
课程设计报告题目弹球小游戏姓名方成学号20专业java指导教师陈华恩2013年12 月30目录一、实验目的 (3)二、需求分析 (3)三、实验任务 (3)1、设计 (3)2、程序要求: (3)3、选作题: (3)四、开发工具与平台 (3)五、设计思路 (4)1、界面设计 (4)2、逻辑设计 (4)3、程序测试 (4)六、实验总结 (5)七、程序代码 (5)八、参考文献 (11)1.《疯狂java讲义》 (12)2.《算法导论》 (12)3.《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事件,按钮事件及键盘事件来管理程序的运行。
《Java语言程序设计》课程设计实习报告题目:班级:学号:姓名:同组人员:指导老师:张彬一、实验目的1、掌握Swing图形用户界面编程以及事件处理等,掌握java绘图技术。
2、掌握多线程编程的基本原理,能使用Runnable、ExecutorService等接口进行线程的创建、启动等工作。
3、培养独立查找资料,并解决问题的能力。
二、实验任务1、设计并编程实现弹球游戏:用户能通过GUI组件指定生成小球的数量,每个小球将从随机的位置出现,并具有随机颜色,随机速度以及随机的运动方向,小球沿初始方向匀速运动,当碰到窗口边缘时,小球将依据受力原理改变运动方向(可简化考虑,受力只改变小球的运动方向,小球仍按照初始速度匀速运动,且不考虑小球之间的碰撞)。
鼠标在界面中显示为方块状,玩家需按住鼠标来回移动以避开运动的小球及屏幕四周,如果鼠标碰到任一小球或者窗口四周,则游戏结束。
程序需提供计时功能,并最终显示玩家能坚持多少秒。
2、程序要求:(1)具备相应界面,并通过事件编程,实现相应的GUI组件功能。
(2)使用多线程技术,在程序窗口区域绘制小球,并以线程控制小球的移动,实现动画效果。
(3)实现鼠标与屏幕四周,以及与小球的碰撞检测。
三、开发工具与平台1.开发工具:Eclipse默认是一个和Jbuilder类似的Java开发工具,但它不仅仅只是Java开发工具,只要装上相应的插件,eclipse也可作为其它语言的开发工具。
如C/C++插件(CDT)。
2.开发平台:JDK1.5四、设计思路1.界面设计(1)制作一个简单的面板JFrame,文件保存为bollFrame.java其中为一public的类bollFrame,其构造方法为:bollFrame(int n){super();setTitle("我的弹球小游戏");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();//得到电脑屏幕大小setSize(450,450);setLocation((dimension.width-game.getWidth())/2-250,(dimension.height-game.getHeight())/2-250);//设置面板显示基中;this.n = n;myBollPanel = new bollPanel(n);//构造一个画板;add(myBollPanel);//将画板放入JFramecreateMenu();//创建菜单;setJMenuBar(bar);}(2)构造画板类,文件保存为bollPanel.java其构造函数如下:bollPanel(int n){this.n = n;// executorThread = Executors.newCachedThreadPool();//创建线程池;mouse = new mouseThread(mxNow,myNow,groupThread,this);//启动鼠标线程;this.setIsOver(false);//游戏开始线程条件的判断;for(int i =0 ;i<n;++i){myBollThread =new bollThread(this);groupThread.add(myBollThread);//executorThread.execute(myBollThread);//小球线程加入线程池;}addMouseListener(this);addMouseMotionListener(this);}Paint()方法如下构造:public void paint(Graphics g){if(!this.getIsOver()) //如果游戏还没结束;{super.paint(g);//清除原先的图像g.setColor(Color.RED);g.setFont(new Font("宋体",Font.BOLD+Font.ITALIC,15));g.drawString("你已坚持:"+getT()+"S", 15, 15);//计时器的显示;for(int i = 0;i<n;++i){//画出每个线程球int xNow =groupThread.get(i).getxNow();int yNow = groupThread.get(i).getyNow();g.setColor(groupThread.get(i).getColor());g.fillOval(xNow,yNow,30,30);if(xNow>(getWidth()-23)||xNow<0){//碰到左右边界;groupThread.get(i).dx = -groupThread.get(i).dx;}if(yNow>(getHeight()-23)||yNow<0){//碰到上下边界;groupThread.get(i).dy = -groupThread.get(i).dy;}groupThread.get(i).setxNow(xNow+groupThread.get(i).getdx());// 设置下一个位置;groupThread.get(i).setyNow(yNow+groupThread.get(i).getdy());}}if(isMouse){g.drawImage(new ImageIcon("boll.gif").getImage(), mxNow, myNow, 40,40, this);//鼠标的图像;}}//end paint();总体界面如下:2.逻辑设计(1).首先,我们考虑到多个小球的运动,实质上是多线程的使用,n个小球我们就同时启动n个线程去控制每个小球的运动。
综合实验报告:滑板反射小球游戏专业班级:遥感科学与技术学号: 20133350姓名:易乐安日期: 2015年6月30日一、程序设计报告小球在窗口四壁弹射(虚线表示弹射的轨道)。
左右移动滑板,接住小球弹射,如果没有接住,则游戏失败一次。
要求:1. 自拟设计记分方法,和界面的其它部分;2. 滑板用键盘控制左右移动;3. 设置难度调节开关,允许游戏过程中改变这一设置,以调节小球运行速度,速度快,则难度增加。
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监听鼠标位置移动的监听器。
用来捕获鼠标的移动和鼠标的当前位置,同时这个类负责板子的绘制与更新。
定义界面:设置标题设置大小设置关闭是退出程序设置打开窗体时在屏幕中间显示设置窗体的流式布局管理器设置窗体背景颜色创建文本标签对象设置文本标签前景颜色创建进度条对象创建按钮对象创建菜单条对象创建菜单对象创建菜单选项对象 创建单选选项 创建一个按钮组主要算法描述:MyThread 继承于Thread ,使用一个单独的线程进行小球的绘制。
小球的绘制和滑板的绘制大同小异,都是使用java.awt.Graphics 进行绘制的。
红色反弹球java课程设计一、课程目标知识目标:1. 学生能理解Java编程中面向对象的基本概念,包括类、对象、方法和属性。
2. 学生能掌握Java中事件处理机制,特别是键盘事件。
3. 学生能运用Java中的循环结构和条件语句实现游戏逻辑。
4. 学生了解并应用二维数组管理游戏界面中对象的状态。
技能目标:1. 学生通过编写代码,能够实现一个简单的“红色反弹球”游戏,包括球的移动、边界检测以及与挡板的互动。
2. 学生能够运用调试工具检查和修正程序中的错误,提高解决问题的能力。
3. 学生能够通过小组合作,进行项目规划和代码整合,增强团队协作能力。
情感态度价值观目标:1. 学生培养对编程的兴趣,激发探究精神和创造力。
2. 学生在项目实施中体验团队合作的重要性,学会相互尊重和沟通。
3. 学生通过编程实践,培养坚持不懈和勇于面对挑战的品质。
4. 学生能够在游戏中融入社会主义核心价值观,例如通过合作完成任务,体现集体主义精神。
本课程设计针对高年级学生,考虑其逻辑思维和编程能力已有一定基础,旨在通过具体的游戏项目设计,将Java编程知识与实践相结合,提高学生解决复杂问题的能力,并在过程中培养积极的学习态度和价值观。
目标设定具体明确,便于后续教学活动和评估的开展。
二、教学内容1. 面向对象基础:- 类的定义与使用- 对象的创建与操作- 方法的定义与调用- 属性的概念与应用2. 事件处理机制:- 键盘事件监听- 事件处理器的编写- 响应键盘输入3. 游戏逻辑实现:- 球的移动与方向控制- 边界检测- 球与挡板的碰撞处理4. 二维数组应用:- 游戏界面布局- 数组操作实现状态更新5. 循环结构与条件语句:- 游戏循环实现- 条件判断与游戏规则应用6. 项目实践:- 游戏需求分析- 代码编写与调试- 团队合作与分工教学内容依据课程目标,结合教材相关章节进行选择和组织。
教学大纲将按照以下进度安排:第一课时:面向对象基础及事件处理机制介绍第二课时:游戏逻辑分析,二维数组应用第三课时:循环结构与条件语句,实现球的基本移动第四课时:完善游戏功能,进行团队合作编写和调试第五课时:项目展示,总结反馈教学内容确保科学性和系统性,旨在帮助学生将理论知识与实践相结合,提高编程技能。
弹球小游戏编程实现在当代科技发展快速的背景下,电子游戏已经成为人们娱乐生活中不可或缺的一部分。
弹球小游戏作为其中的经典之作,引领了一代又一代游戏爱好者的热情。
在本文中,将介绍弹球小游戏的编程实现过程,以帮助读者进一步了解游戏制作的原理和技术。
一、项目介绍弹球小游戏是一种经典的街机游戏,在游戏中玩家需要操控一个球拍,通过反弹球拍,将球击打到上方的砖块,从而消除砖块并得分。
游戏难度会逐渐增加,随着砖块的消除,球的速度也会加快,给玩家带来挑战。
二、编程环境准备在实现弹球小游戏之前,需要准备一些编程环境。
首先,选择合适的编程语言和开发工具,如Python语言和Pygame库。
接着,安装相关的软件和依赖项,并配置开发环境,确保编程平台正常运行。
三、游戏场景设计在编程实现过程中,首先需要设计游戏场景。
弹球小游戏通常包含一个球拍、一个球和若干砖块。
可以利用开发工具提供的绘图函数绘制这些元素,并设置它们在屏幕上的位置和大小。
四、游戏物理效果模拟为了使游戏更具真实感,需要模拟球的运动轨迹和球拍的反弹效果。
通过计算球的速度和方向,并结合碰撞检测算法,可以实现球与边界、球拍和砖块的交互作用。
当球和物体发生碰撞时,根据不同的碰撞情况调整球的运动方式,以及砖块的消除与得分。
五、用户交互设计游戏的交互性是吸引玩家的重要因素之一。
通过监听用户的键盘或鼠标操作,可以实现球拍的移动控制和游戏的开始、暂停等功能。
此外,可以添加音效和动画效果,提升游戏的娱乐性和视觉效果。
六、游戏逻辑设计在实现游戏逻辑时,需要确定游戏的基本规则和条件。
如何判断球与砖块的碰撞、游戏胜利和失败的条件、分数的计算等,都需要根据具体的游戏设计进行编程实现。
此外,还需要考虑游戏难度的逐渐增加以及关卡的设计等方面。
七、测试与优化在完成游戏的编程实现后,需要进行测试和优化。
通过不断调试和测试,发现和修复程序中的错误,并对性能进行优化,以提高游戏的稳定性和流畅度。
通过以上的步骤,我们可以顺利地完成弹球小游戏的编程实现。
Java程序设计实验报告题目弹球游戏姓名魏艺荣学号*********学院数计学院专业软件工程年级 2009 级指导教师张舒2010年 4 月16 日一、实验目的1、掌握Swing图形用户界面编程以及事件处理等,掌握java绘图技术。
2、掌握多线程编程的基本原理,能使用Runnable、ExecutorService等接口进行线程的创建、启动等工作。
3、培养独立查找资料,并解决问题的能力。
二、实验任务1、设计并编程实现弹球游戏:用户能通过GUI组件指定生成小球的数量,每个小球将从随机的位置出现,并具有随机颜色,随机速度以及随机的运动方向,小球沿初始方向匀速运动,当碰到窗口边缘时,小球将依据受力原理改变运动方向(可简化考虑,受力只改变小球的运动方向,小球仍按照初始速度匀速运动,且不考虑小球之间的碰撞)。
鼠标在界面中显示为方块状,玩家需按住鼠标来回移动以避开运动的小球及屏幕四周,如果鼠标碰到任一小球或者窗口四周,则游戏结束。
程序需提供计时功能,并最终显示玩家能坚持多少秒。
2、程序要求:(1)具备相应界面,并通过事件编程,实现相应的GUI组件功能。
(2)使用多线程技术,在程序窗口区域绘制小球,并以线程控制小球的移动,实现动画效果。
(3)实现鼠标与屏幕四周,以及与小球的碰撞检测。
三、开发工具与平台1.开发工具:Eclipse默认是一个和Jbuilder类似的Java开发工具,但它不仅仅只是Java开发工具,只要装上相应的插件,eclipse也可作为其它语言的开发工具。
如C/C++插件(CDT)。
2.开发平台:JDK1.5四、设计思路1.界面设计(1)制作一个简单的面板JFrame,文件保存为bollFrame.java其中为一public的类bollFrame,其构造方法为:bollFrame(int n){super();setTitle("我的弹球小游戏");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();//得到电脑屏幕大小setSize(450,450);setLocation((dimension.width-game.getWidth())/2-250,(dimension.height-game.getHeight())/2-250);//设置面板显示基中;this.n = n;myBollPanel = new bollPanel(n);//构造一个画板;add(myBollPanel);//将画板放入JFramecreateMenu();//创建菜单;setJMenuBar(bar);}(2)构造画板类,文件保存为bollPanel.java其构造函数如下:bollPanel(int n){this.n = n;// executorThread = Executors.newCachedThreadPool();//创建线程池;mouse = new mouseThread(mxNow,myNow,groupThread,this);//启动鼠标线程;this.setIsOver(false);//游戏开始线程条件的判断;for(int i =0 ;i<n;++i){myBollThread =new bollThread(this);groupThread.add(myBollThread);//executorThread.execute(myBollThread);//小球线程加入线程池;}addMouseListener(this);addMouseMotionListener(this);}Paint()方法如下构造:public void paint(Graphics g){if(!this.getIsOver()) //如果游戏还没结束;{super.paint(g);//清除原先的图像g.setColor(Color.RED);g.setFont(new Font("宋体",Font.BOLD+Font.ITALIC,15));g.drawString("你已坚持:"+getT()+"S", 15, 15);//计时器的显示;for(int i = 0;i<n;++i){//画出每个线程球int xNow =groupThread.get(i).getxNow();int yNow = groupThread.get(i).getyNow();g.setColor(groupThread.get(i).getColor());g.fillOval(xNow,yNow,30,30);if(xNow>(getWidth()-23)||xNow<0){//碰到左右边界;groupThread.get(i).dx = -groupThread.get(i).dx;}if(yNow>(getHeight()-23)||yNow<0){//碰到上下边界;groupThread.get(i).dy = -groupThread.get(i).dy;}groupThread.get(i).setxNow(xNow+groupThread.get(i).getdx());// 设置下一个位置;groupThread.get(i).setyNow(yNow+groupThread.get(i).getdy());}}if(isMouse){g.drawImage(new ImageIcon("boll.gif").getImage(), mxNow, myNow, 40,40, this);//鼠标的图像;}}//end paint();总体界面如下:2.逻辑设计(1).首先,我们考虑到多个小球的运动,实质上是多线程的使用,n个小球我们就同时启动n个线程去控制每个小球的运动。
因此我构造出一个类作为一个小球的线程,保存文件为bollThread.java,顾名思义,小球线程类。
相关构造方法如下:public bollThread(bollPanel my){this.myPanel = my;xStart = data.nextInt(200);//随机产生开始位置;yStart = data.nextInt(200);setxNow(xStart);////设置现在的位置;setyNow(yStart);setdx();//设置随机方向使用;注意:若不设置为随机,则所有小球将相同一个方向运动;setdy();}(2)再次,小球的出现需要有载体,这就是画板,前面界面设置中已提到过,通过让多个小球共享一个画板,以及通过线程控制小球的重绘,最后通过画板显示给用户。
(3)在第(2)点中提到的画板上我们需要实现鼠标的监听,以下给出几个重要的鼠标事件监听:public void mousePressed(MouseEvent e) {//单击启动鼠标事件;if(e.getButton()==MouseEvent.BUTTON1){copy.schedule(new task(), 0,1000);//启动定时器;for(int i =0 ;i<n;++i){Thread my = new Thread(groupThread.get(i));my.start();//启动游戏,启动小球线程;}mxNow = e.getX();myNow = e.getY();isMouse = true;if(!mouse.isAlive()){mouse.start();//启动鼠标线程;}}//end if(e.getButton()==MouseEvent.BUTTON1);}//注意按下鼠标开始游戏;public void mouseDragged(MouseEvent e) {//游戏过程中通过按住鼠标左键控制“眼睛”的移动来躲避小球;mxNow = e.getX();// TODO Auto-generated method stubmyNow = e.getY();if(mxNow>(this.getWidth()-30)||mxNow<=0||myNow>(this.getHeight()-30)||myNow <=0){//鼠标是否碰到边界;// executorThread.shutdown();this.setIsOver(true);copy.cancel();JOptionPane.showMessageDialog(null, "你撞墙了,下次小心点。
游戏结束","提示" ,JOptionPane.OK_OPTION);this.removeMouseListener(this);this.removeMouseMotionListener(this);}for(int i =0 ;i<n;++i){int xNow =groupThread.get(i).getxNow();int yNow = groupThread.get(i).getyNow();if(isPeng(xNow,yNow,mxNow,myNow)){// executorThread.shutdown();this.setIsOver(true);copy.cancel();JOptionPane.showMessageDialog(null, "if(你撞球了){"+"\n"+"挑战失败,游戏结束.}","提示" ,JOptionPane.OK_OPTION);//System.exit(0);this.removeMouseListener(this);this.removeMouseMotionListener(this);} //鼠标的上下左右边和球碰撞的情况,}}(4) 如果游戏开始后我们突然松开鼠标,让我们控制的小球(或"眼睛")停留在最后松开的点上,那么小球碰到它还会判断是否相撞吗?答案是可以的,我们可以通过编写一个鼠标线程类来实现,保存文件为mouseThread.java;让此线程在我们按下鼠标开始游戏时同时启动,在我们松开鼠标时启动判断相撞事件。
相关的构造方法如下:mouseThread(int mxNow,int myNow,List<bollThread>group,bollPanel bollpane){ this.mxNow = mxNow;//传入鼠标现在位置;this.myNow = myNow;this.groupThread = group;//传入小球线程组;this.bollpane = bollpane;//传入画板对象;}3.程序测试在程序测试中,先后测试出了,以下几个注意点:A.在判断小球与鼠标控制的小球(“眼睛”)相撞时,条件中用到两点之间的距离问题,发现条件不能是两点距离刚好等于两相撞物体半径和,此条件太苛刻,可能引起判断的失误(概率蛮高的呵呵),而应该是小于半径和。