Java程序设计实验报告2(弹球游戏)[1]1
Visual Basic弹球游戏实验报告
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课程设计弹球一、教学目标本章节的教学目标旨在让学生掌握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实现简单的弹球游戏本⽂实例为⼤家分享了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弹球小游戏课程设计
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编程逻辑控制,讲解循环结构和条件语句的使用- 第四课时:游戏设计与编程实现,分步骤实现弹球小游戏- 第五课时:游戏优化与扩展,对游戏进行调试优化,培养学生的创新思维教学内容参考教材相关章节,结合课程目标和学生的实际水平进行系统性地组织和安排。
Java弹球游戏实验报告—chen汇编
课程设计报告题目弹球小游戏姓名方成学号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课程设计
红色反弹球java课程设计一、课程目标知识目标:1. 学生能理解Java编程中面向对象的基本概念,包括类、对象、方法和属性。
2. 学生能掌握Java中事件处理机制,特别是键盘事件。
3. 学生能运用Java中的循环结构和条件语句实现游戏逻辑。
4. 学生了解并应用二维数组管理游戏界面中对象的状态。
技能目标:1. 学生通过编写代码,能够实现一个简单的“红色反弹球”游戏,包括球的移动、边界检测以及与挡板的互动。
2. 学生能够运用调试工具检查和修正程序中的错误,提高解决问题的能力。
3. 学生能够通过小组合作,进行项目规划和代码整合,增强团队协作能力。
情感态度价值观目标:1. 学生培养对编程的兴趣,激发探究精神和创造力。
2. 学生在项目实施中体验团队合作的重要性,学会相互尊重和沟通。
3. 学生通过编程实践,培养坚持不懈和勇于面对挑战的品质。
4. 学生能够在游戏中融入社会主义核心价值观,例如通过合作完成任务,体现集体主义精神。
本课程设计针对高年级学生,考虑其逻辑思维和编程能力已有一定基础,旨在通过具体的游戏项目设计,将Java编程知识与实践相结合,提高学生解决复杂问题的能力,并在过程中培养积极的学习态度和价值观。
目标设定具体明确,便于后续教学活动和评估的开展。
二、教学内容1. 面向对象基础:- 类的定义与使用- 对象的创建与操作- 方法的定义与调用- 属性的概念与应用2. 事件处理机制:- 键盘事件监听- 事件处理器的编写- 响应键盘输入3. 游戏逻辑实现:- 球的移动与方向控制- 边界检测- 球与挡板的碰撞处理4. 二维数组应用:- 游戏界面布局- 数组操作实现状态更新5. 循环结构与条件语句:- 游戏循环实现- 条件判断与游戏规则应用6. 项目实践:- 游戏需求分析- 代码编写与调试- 团队合作与分工教学内容依据课程目标,结合教材相关章节进行选择和组织。
教学大纲将按照以下进度安排:第一课时:面向对象基础及事件处理机制介绍第二课时:游戏逻辑分析,二维数组应用第三课时:循环结构与条件语句,实现球的基本移动第四课时:完善游戏功能,进行团队合作编写和调试第五课时:项目展示,总结反馈教学内容确保科学性和系统性,旨在帮助学生将理论知识与实践相结合,提高编程技能。
(完整版)《JAVA程序设计》实验报告
福建师范大学协和学院本科实验报告课程名称:JA V A程序设计系别:专业:班级:学号:学生姓名:2011年月日实验项目列表《JA V A程序设计》实验相关说明实验要求:1.明确实验课是课程的重要组成部分,与理论课有着同等地位,是培养自身的实验技能与创新能力的重要途径;2.在实验课前,对实验的目的、要求和基本内容,实验的重点和难点,应进行预习与讨论,确定实施措施,并编写好程序;3.了解实验室的规章制度和安全用电常识、实验设备损坏赔偿制度等,加强安全意识,爱惜实验设备;4.实验课期间不得擅自离开实验室或从事与本实验无关的活动,按时按质完成实验作业,培养创造性思维,努力提高自身的实践能力;5.每次实验应提交实验结果,指导老师将结合实验操作过程给予综合评分(对于有创造性的实验成果酌情给予加分),作为期末考试成绩的一部分。
实验须知:1.每次实验完成之后,学生须填写实验报告,并上交。
报告内容包括:实验目的、实验内容、实验步骤、思路分析或流程图、程序源代码、实验中未解决的问题、屏幕出错提示代码、出错原因、解决方法及实验心得等内容。
不交实验报告的学生,本次实验成绩为0分。
2.若有拷贝现象,程序代码雷同的学生实验成绩一律为0分。
3.每次实验任务必须在2-6节课内完成,并经过实验指导老师检查才能得分。
没能按时完成的同学,本次实验成绩为0分。
福建师范大学协和学院《JA V A程序设计》课程实验报告班级:______学号:_________________姓名:_____________成绩:教师签字:实验一简单输入/输出项目设计一、实验目的1、了解Java运行环境的安装与配置。
2、了解程序的基本结构,编辑、编译与运行方法。
3、掌握方法的调用、异常的处理。
二、实验环境(主要仪器设备和软件)1、操作系统Windows XP2、JA V A开发包JSDK1.63、代码编辑器Jcreart3.24、数据库管理系统MySQL5.05、数据库可视化管理平台CapVideo8.06、Web服务器TomCat5.07、JA V A开发工具MyEclipse7.08、微机三、实验内容1、Java开发包的下载与安装;2、环境变量的设置;3、安装配套开发软件;4、熟悉各类软件的使用;5、以下内容至少任选一项完成:选项一:编写一个应用程序绘制一个如下的操作菜单。
弹珠小游戏课程设计实验报告
摘要:这个小程序是关于弹珠的小游戏,游戏比较简单,以小球的速度来区分游戏的难易。
该小程序是用左右键控制游戏的开始和挡板的方向,不让小球落到底端,当然,小球的速度越快,该游戏的难度也就越大。
此程序利用C#程序编写,在visual studio 2005的环境下进行调试运行的。
弹珠原理:碰撞基本都是参照“反射定理”的,就是出射角=入射角,但是做碰撞时需要角度。
碰撞的运动和球的方向有关,球的方向有好几种。
有8向的,也有4向的。
保证小球横向上在允许范围之内运动,当触发时就反方向运动,和当出了球拍的可击打范围就停止运行了。
对于该程序开发,必须达到以下要求:1、熟悉.NET开发环境,能够使用C#语言在.NET平台上独立设计、开发WINDOWS应用程序。
2、掌握C#语言的异常处理技术,能够使用.NET各种调试方法调试代码,掌握帮助的使用方法。
3、掌握常用控件以及控件的常用属性的使用方法。
4、界面要做到简洁易懂,具有人性化等特点。
5、程序没有在使用过程中不存在任何的问题。
6、可选功能应全面,可以实施速度的选择,游戏的是否继续,还有记录的保存。
目录摘要: (1)目录 (2)一、................................................................ 题目说明2二、总体设计 (3)2.1.系统开发平台 (3)三、详细说明 (3)3.1系统实施 (3)四、遇到的问题和解决方法 (19)五、课程设计总结 (20)六、参考文献 (21)附录(源程序代码) (21)一、题目说明当今用简单的代码编写的小游戏越来越受人们的欢迎,所以对于小游戏的开发也成为了各大编程人士的最爱。
我选择弹珠游戏这个课题,用代码控制游戏的等级,运用不同的函数来控制球的速度和方向,游戏简单而有趣。
二、总体设计2.1.系统开发平台系统采用Microsoft Visual Studio 2005三、详细说明在此弹球游戏中,对于球与挡板的位置,借助于x与y坐标的调整来实现统计,从而确定球落在板上后球的下一次方向。
java小球碰撞、学生信息管理系统实训报告
北京联合大学实训报告课程(项目)名称:Java程序设计实训(双语)学院:师范学院专业:计算机班级:学号: 2010 姓名:成绩:2013年6月17实训一小球的碰撞试验一、实训任务与目的实训任务:使用多线程编程和图形界面的画图,编写一个或多个在长方形盒子中反弹的小球。
要求:界面设计、颜色选取等可能美观。
有能力的同学可以设计图形界面的操作按钮,用于改变球的颜色、反弹速度,开始和结束按钮等。
本任务要求4节课完成。
实训目的:1、掌握Swing图形用户界面编程以及事件处理等,掌握java绘图技术。
2、掌握多线程编程的基本原理,能使用Runnable、ExecutorService等接口进行线程的创建、启动等工作。
3、培养独立查找资料,并解决问题的能力。
二、原理通过Ball类来进行对球的设计,有对于增加球的速度,返回球的当前速度,球球移动到边界事的处理球颜色的随机处理,球速度的随机处理等,使得运行时的界面和球的各种运动状态都能良好。
每一个球都是通过一个线程来进行控制,其中还对球的碰撞进行了分析和处理,通过对线程中小球的之间距离和半径和的比较对碰撞情况做了比较好的处理,Balliards还设定了各个全局常量,设置了小球的最小最大速度,最小最大尺寸,球的数目,窗体的宽度和长度等。
三、实训内容与步骤代码如下:package shixun1;import java.awt.Color;import java.awt.Graphics;import java.util.Random;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import javax.swing.JFrame;import javax.swing.JPanel;public class Ball extends JPanel implements Runnable {int y = 200,x=70,a;Color l0=Color.YELLOW;Color l1=Color.BLACK;Color l2=Color.RED;Color l3=Color.BLUE;Color l4=Color.GREEN;public void paint(Graphics g) { super.paintComponent(g);g.setColor(l0);g.drawRect(20, 20, 360, 360); g.setColor(l1);g.fillOval(y, x, 20, 20);g.setColor(l2);g.fillOval(40, y, 20, 20);g.setColor(l3);g.fillOval(x, y, 20, 20);g.setColor(l4);g.fillOval(x, 90, 20, 20);}public void run() {while (true) {try {{if( a==0){ l0=Color.GREEN;l1=Color.CYAN;l2=Color.YELLOW;l3=Color.ORANGE;l4=Color.GRAY;Random ll= new Random();int ld=ll.nextInt(15)+1;x-=1;y += 1;Thread.sleep(ld);if(x==20)a=1;}else if(a==1){ l0=Color.RED;l1=Color.BLUE;l2=Color.RED;l3=Color.BLACK;l4=Color.PINK;Random ll= new Random();int lmb=ll.nextInt(4)+1;x+=1;y += 1;Thread.sleep(lmb);if(y==360)a=2;}else if(a==2){ l0=Color.BLUE;l1=Color.darkGray;l2=Color.WHITE;l3=Color.GREEN;l4=Color.MAGENTA;Random ll= new Random();int ld=ll.nextInt(10)+1;x+=1;y -= 1;Thread.sleep(ld);if(x==360)a=3;}else if(a==3){ l0=Color.YELLOW;l1=Color.GREEN;l2=Color.BLUE;l3=Color.RED;l4=Color.ORANGE;Random ll= new Random();int lmb=ll.nextInt(6)+1;x-=1;y -= 1;Thread.sleep(ld);if(y==20)a=0;}}} catch (InterruptedException e) {e.printStackTrace();}repaint();}}public static void main(String args[]) {Ball panel = new Ball();ExecutorService threadExecutor =Executors.newCachedThreadPool(); threadExecutor.execute(panel);// create a new frame to hold the panel JFrame application = new JFrame();// set the frame to exit when it is closedapplication.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);application.add(panel); // add the panel to the frameapplication.setSize(400, 420); // set the size of the frameapplication.setVisible(true);} // end main}下面为运行时的图形界面:按钮设计代码:package shixun1;import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;public class BallButton extends JFrame {JButton start, stop;Thread threadExecutor;BallButton() {super("碰撞的小球--liudan29");final Ball ld = new Ball();this.add(ld, BorderLayout.CENTER);JPanel btn = new JPanel();start = new JButton("开始");stop = new JButton("停止");btn.add(start);btn.add(stop);ActionListener handler1 = null;ActionListener handler = null;start.addActionListener(handler1);stop.addActionListener(handler);start.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { start.setEnabled(false);threadExecutor = new Thread(ld); threadExecutor.start();stop.setEnabled(true);}});stop.addActionListener(new ActionListener() {@SuppressWarnings("deprecation")public void actionPerformed(ActionEvent event) { start.setEnabled(true);threadExecutor.stop();stop.setEnabled(false);}});add(btn, BorderLayout.NORTH);this.setSize(450, 500);this.setVisible(true);}public static void main(String[] args) {new BallButton();}}开始状态下运行的界面:停止状态下运行的界面:实训中的问题和解决方法(1)停止按钮不能控制小球(2)小球碰壁后颜色没有变化在遇到问题时,我首先会先向班上基础知识扎实的同学请教,如果在同学的帮助下还不能解决的问题我就会向老师求助,最终在大家的共同努力下程序加以完善总结在几天的实训中我真正体会到这几点。
java实现简单的弹球游戏
java实现简单的弹球游戏弹球游戏实现原理: 隔⼀定时间(⼩于1秒)重新绘制图像,因为Graphics类是⼀个抽象类,创建⼦类的时候需要把所有涉及的⽅法都得重写,所以这⾥使⽤的是创建Canvas的⼦类,只需要重写它的paint()⽅法来实现。
这⾥我们⽤了键盘监听事件、Timer类等。
游戏说明: 该弹球游戏中的⼩球会随着时间增加速度且速度最多是横向速度和垂直速度为10。
当⼩球的y坐标(垂直坐标)⼤于球拍的y坐标(垂直坐标)即判断游戏结束。
控制台显⽰的是⼩球的x⽅向的速度和y⽅向的速度。
import java.awt.*;import java.util.Random;import javax.swing.Timer;import java.awt.event.*;public class PinBall{private Frame f=new Frame("弹球游戏");Random rand=new Random();//桌⾯的宽度以及⾼度private final int TABLE_WIDTH=300;private final int TABLE_HEIGHT=400;//球拍的宽度以及⾼度以及⽔平位置、垂直位置private final int RACKET_WIDTH=60;private final int RACKET_HEIGHT=20;private int racketX=rand.nextInt(24)*10;private int racketY=300;//⼩球的⼤⼩、运⾏速度、坐标private final int BALL_SIZE=16;private int ySpeed=1;private double xyRate=1;private int xSpeed=(int)(xyRate*ySpeed);private int ballX=rand.nextInt(284);private int ballY=1;//创建画布private MyCanvas tableArea=new MyCanvas();//定义时间类Timer timer;//游戏是否结束的旗标private boolean isLose=false;//设置游戏等级private int time_times=1;public void init(){tableArea.setPreferredSize(new Dimension(TABLE_WIDTH,TABLE_HEIGHT));f.add(tableArea);//定义键盘监听器KeyAdapter keyProcessor=new KeyAdapter(){public void keyPressed(KeyEvent ke){if(ke.getKeyCode()==KeyEvent.VK_LEFT){if(racketX>0)racketX-=10;}if(ke.getKeyCode()==KeyEvent.VK_RIGHT){if(racketX<TABLE_WIDTH-RACKET_WIDTH)racketX+=10;}}};f.addKeyListener(keyProcessor);//tableArea.addKeyListener(keyProcessor);ActionListener taskPerformer=evt->{//⼩球碰到左边框或右边框if(ballX<=0||ballX>=TABLE_WIDTH-BALL_SIZE){xSpeed=-xSpeed;}if(ballY>racketY-BALL_SIZE&&(ballX<racketX||ballX>racketX+RACKET_WIDTH-BALL_SIZE)){timer.stop();isLose=true;tableArea.repaint();}else if(ballY<=0||(ballY>=racketY-BALL_SIZE&&ballX>racketX&&ballX<=racketX+RACKET_WIDTH)){ySpeed=-ySpeed;}ballY+=ySpeed;ballX+=xSpeed;tableArea.repaint();if((xSpeed<10&&xSpeed>-10)&&(ySpeed<10&&ySpeed>-10)){time_times++;}if(time_times==10){if(xSpeed>0){xSpeed++;}else{xSpeed--;}if(ySpeed>0){ySpeed++;}else{ySpeed--;}time_times-=10;System.out.println(xSpeed+" "+ySpeed);}};timer=new Timer(100,taskPerformer);timer.start();f.pack();f.setVisible(true);}class MyCanvas extends Canvas{public void paint(Graphics g){if(isLose){g.setColor(new Color(255,0,0));g.setFont(new Font("Times",Font.BOLD,30));g.drawString("游戏结束",50,200);}else{g.setColor(new Color(240,240,80));g.fillOval(ballX,ballY,BALL_SIZE,BALL_SIZE);g.setColor(new Color(80,80,200));g.fillRect(racketX,racketY,RACKET_WIDTH,RACKET_HEIGHT); }}}public static void main(String[] args){new PinBall().init();}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
基于Java多线程的弹球游戏程序
• 18•Java 程序设计语言提供了用户使用的多任务并发执行的能力的支持。
处在可执行状态中的应用程序称为进程。
线程是比进程更小的执行单元,一个进程可以分为若干个线程,形成多条执行路线,完成多项操作。
弹球游戏程序应用Java 多线程,完成不同颜色、不同运行速度、不同大小的弹球,每个弹球的运动由一个各自独立的线程控制。
在多线程教学中,为了能够更好地实现教学目标以及教学工作的开展。
通过弹球游戏图形化编程,降低编程难度,减少挫折感、激发学生的学习积极性。
1 引言弹球游戏程序应用Java 语言提供的多线程支持,在程序中完成多种弹球的实现。
通过形象的图形化编程,降低编程难度,减少挫折感、激发学生的学习积极性,并且能更好地实现教学目标的设计以及教学工作的开展。
2 弹球游戏的实现弹球游戏的实现的主要功能:左上9球:从左上方弹出9个颜色随机、大小速度相同、间隔时间90-590ms 的小球;右上单球:从右上方弹出1个颜色、大小、速度随机的小球;左下7彩球:从左下方弹出7个大小、速度、间隔时间相同的7彩小球;右下9球:从右下方弹出9个颜色、大小、速度、间隔时间相同的小球;梦幻9球:产生9个颜色、发球位置、大小、速度随机的小球;昨夜星辰:产生9个发球位置、大小、速度随机的白色小球;其他说明:弹球线程数量为运动小球数量,当线程数量超过200,建议不要再增加弹球数量,窗口标题显示运动小球数量,小球弹出后,大约1min 自动消失。
多线程弹球的实现: class Ball extends Thread { private Color color;private int xsize = 10;//弹球大小 private int ysize= 10; private int x = 0;//弹球位置 private int y = 0;private int dx = 2;//弹球移动步长 private int dy = 2; private Graphics g;// 设置标题要用到private Bounce b;基于Java多线程的弹球游戏程序福建船政交通职业学院信息与智慧交通学院 林恒建public Ball(Bounce b, Color co) { color = co; this.b = b;g = canvas.getGraphics();}//画出弹球public void drawD() {g.setColor(color);g.setXORMode(canvas.getBackground()); g.fillOval(x, y, xsize, YSIZE);}public void draw() { g.setColor(color);g.fillOval(x, y, xsize, ysize);g.setXORMode(canvas.getBackground());}//按步长移动弹球,在窗体边界回弹public void move() { g.fillOval(x, y, xsize, ysize); x += dx; y += dy;if (x < 0) {x = 0; dx = -dx; }// 只在每次事件发生时重新计算窗体内画布的宽和高canvasWidth ,canvasHeight// 让运动更流畅。
弹跳的小球java课程设计
弹跳的小球java课程设计。
一、课程目标知识目标:1. 学生能理解Java编程中面向对象的基本概念,包括类、对象、属性和方法的定义与使用。
2. 学生能够掌握Java中的基本图形绘制方法,以及如何使用事件监听器处理用户的交互。
3. 学生能够理解动画实现的基本原理,包括帧率和时间间隔的处理。
技能目标:1. 学生能够独立编写一个简单的Java程序,实现弹跳小球的动画效果。
2. 学生能够运用所学知识,设计和优化程序结构,使小球弹跳逻辑清晰,代码可读性强。
3. 学生能够通过调试程序,解决基本的编程错误,提高问题解决能力。
情感态度价值观目标:1. 学生通过编程实践,培养逻辑思维能力和解决问题的耐心。
2. 学生在学习过程中,体会到编程带来的成就感,激发对计算机科学的兴趣和热情。
3. 学生能够在团队协作中发挥个人优势,学会分享与交流,培养合作精神。
课程性质:本课程为信息技术课程,旨在通过具体的编程实践活动,让学生掌握Java编程的基本知识,培养其编程能力和创新思维。
学生特点:考虑到学生年级特点,他们对编程有一定的好奇心,但可能缺乏实际操作经验,因此课程设计需循序渐进,注重实践操作。
教学要求:教学中应注重理论与实践相结合,鼓励学生动手实践,注重个体差异,提供个性化指导,确保每位学生都能达到课程设定的学习目标。
二、教学内容1. 面向对象编程基础:- 类的定义与使用- 对象的创建与操作- 属性的定义与访问- 方法的定义与调用2. Java图形用户界面(GUI)编程:- JFrame窗口的创建与设置- 组件的添加与布局- 事件监听器与事件处理- 基本图形绘制方法3. 动画实现原理:- 帧率的概念与设置- 时间间隔控制- 位置与运动轨迹的计算- 动画的刷新与更新4. 弹跳小球项目实践:- 设计小球类及其属性、方法- 实现小球移动与弹跳逻辑- 处理边界碰撞与响应- 优化代码结构与性能教学内容依据课程目标进行选择和组织,注重科学性和系统性。
java课程设计——红色小弹球
JA V A课程设计报告题目红色小球反弹程序院系信工院班级14计本1学号**********姓名赵佳目录摘要 (3)1、概述 (4)1.1题目简介 (4)1.2功能分析 (4)1.3功能实现 (4)1.3.1颜色选择功能的实现 (4)1.3.2速度选择功能的实现 (4)1.3.3小球出现的位置的功能实现 (5)1.3.4开始/添加功能的实现 (5)1.3.5暂停功能的实现 (5)1.3.5清除功能的实现 (6)2、程序的分析与设计 (7)2.1程序分析 (7)2.2程序设计 (7)2.2.1main方法用于程序测试 (7)2.2.2小球运动线程 (7)2.2.3小球的画板 (8)2.2.4添加小球 (8)2.2.5绘制画板 (8)2.2.6小球类 (9)2.2.7获取小球的形状 (9)2.2.8获取小球的颜色 (9)3、系统实现 (10)3.1实现代码 (10)3.2测试结果 (10)4、总结 (12)附录2 (15)摘要JA V A是目前最流行的软件开发语言之一,称为网络上的“世界语”。
JA V A 适合开发基于多媒体、与平台无关、用面向对象的方法进行的基于Internet、Intranet、Extranet的Applet和应用程序。
它具有简单高效、面向对象、不依赖机器结构的特点,支持多线程、分布和并发机制。
用JA V A开发的应用软件在可移植性、健壮性、安全性等方面大大优于已存在的其他编程语言。
JA V A是一门包含多种知识的学科,提供了丰富的类库,能最大限度地利用网络。
JA V A可广泛用于面向对象的事件描述、处理面向对象的企业型的应用开发,还应用于Internet 系统管理、Web页面设计、Internet可视化软件开发等方面。
在学习的过程中我学到了许多以前没有学到的概念和新鲜资讯。
运用这些知识可以完成老师交给我的课程设计任务。
1、概述1.1题目简介用java语言,使用Eclipse工具来进行编辑运行一个简单红色反弹球程序。
java桌面弹球
BallService处理了这个游戏中的大部分业务功能,包括游戏的开始,游戏的结束 类
名
BallFrame是创建一个JFrame BallFrame 类名 主界面,设置主界面的标题、
长与宽、画板等属性,并且为增加键盘事件监听器以及创立一个 initialize():void ; 方法 getBallPanel(): Timer每隔一小段时间去刷新画板,主要有初始化界面与画板两 BallPanel; 个方法,如下:
砖块类是BallComponet的一个子类,提供一个以图片路径,道具类型 类
Brick
magic :Magic = null ; 的道具,可能使挡板变长;2代表此砖块里面有 属 ShortMagic类型的道具,可 性 disable :boolean = 能使挡板变短;其他表示没有道具。在游戏中当小球和砖块碰撞时砖块就被消 false;
stick ),此抽象方法是实现道具的效果功能,magicDo方法里传一个Stick 类 型的参数用来完成道具的功能,使得挡板在接住道具之后变长或者变短,变长
类名 Magic(abstract)
方法 magicDo():void
变短的处理当然首先需要获得挡板的原有宽度preWidth,再进行处理,这也是
magicDo():void
BallService ,处理小球的运动,挡板的移动,初始化砖块和道具,判断游戏中的图片元素是否有碰
撞,设置挡板的长度、判断用户是否通关以及把图片绘制到画板等功能。涉及到的方法 stick : Stick = null ; ball : Ball = 如下: null ; void run() 小球进行运动 width : int heigth :int ; void setStickPos( KeyEvent ke ) 改变挡板的坐标位置 属性 bricks :Brick[][] = null ; setBallPos() 改变小球的坐标位置 ballFrame :BallFrame = null ; boolean isHitBrick( Brick brick ) 测试小球与砖块是否有碰撞,参数brick gameOver:BallComponent = null ; 是指砖块。 won : BallComponent =null ; isHitStick( BallComponent image ) 测试某元素与挡板是否有碰撞 run() : void ; setStickPos() : void setMagicPos() 改变道具的坐标位置 void ; void setStickWidth( Magic magic ) isHitBrick() 根据道具( magic )的类型去设置改变挡 : boolean ; 板的长度。 isHitStick():boolean ; 方法 boolean isWon() 判断玩家是否已经过关 setMagicPos() :void ; draw():void ; Brick[][] createBrickArr( String path, int xSize, int ySize ) ; 创建砖块,返 setStickWidth() :void isWon():boolean ; 回一个Brick类型的数组,参数path是指砖块的图片, xSize与ySize 是数组的长度 createBrickArr() :Brick[][] ; void draw( Graphics g ) 画图,方法中是使用 Graphics 对象g去 画图
Java基于swing实现的弹球游戏代码分析
Java基于swing实现的弹球游戏代码这篇文章主要介绍了Java基于swing实现的弹球游戏代码,包含了窗体界面设计与游戏的逻辑功能处理,具有不错的参考借鉴价值,需要的朋友可以参考下本文实例讲述了Java基于swing实现的弹球游戏代码。
分享给大家供大家参考。
主要功能代码如下:复制代码代码如下:package Game;import java.awt.Graphics;import java.awt.Insets;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.ArrayList;import java.util.Random;import javax.swing.ButtonGroup;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JRadioButtonMenuItem;/*** 游戏界面类** @author Administrator**/public class Game extends javax.swing.JFrame {private static final long serialVersionUID = 1L;private static Game UI;private Graphics g;private Listener ml;public javax.swing.JLabel text_field;public javax.swing.JProgressBar pBar;private String command;public ArrayList<MyThread> list = new ArrayList<MyThread>();private javax.swing.JToggleButton button;public static void main(String args[]) {UI = new Game();UI.initUI();}/*** 初始化窗体的方法*/public void initUI() {// 设置标题this.setTitle("是高手就坚持10s");// 设置大小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);// 创建进度条对象pBar = new javax.swing.JProgressBar(0, 330);// 创建按钮对象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(newjavax.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(newjavax.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(pBar);this.add(text_field);// 的到菜单条JMenuBar bar = creatMenuBar();// 为窗体设置菜单条this.setJMenuBar(bar);// 设置窗体的可见性this.setVisible(true);}/*** 创建菜单条的方法** @return*/public JMenuBar creatMenuBar() {// 创建菜单条对象JMenuBar bar = new JMenuBar();// 创建菜单对象JMenu menu_menu = new JMenu("菜单");JMenu difficulty_menu = new JMenu("难度");JMenu help_menu = new JMenu("帮助");// 创建菜单选项对象JMenuItem star_item = new JMenuItem("开始");JMenuItem exit_item = new JMenuItem("退出");JMenuItem help_item = new JMenuItem("游戏说明");JMenuItem about_item = new JMenuItem("关于");// 创建单选选项JRadioButtonMenuItem easy_item = new JRadioButtonMenuItem("简单");JRadioButtonMenuItem middle_item = new JRadioButtonMenuItem("中等");JRadioButtonMenuItem hard_item = new JRadioButtonMenuItem("困难");// 创建一个按钮组ButtonGroup group = new 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 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);}if (command.equals("游戏说明")) {JOptionPane.showMessageDialog(null,"移动鼠标,用挡板接球,如果接不住,就算输了……\n游戏可以选择难度,包括简单、中等、困难");}if (command.equals("关于")) {JOptionPane.showMessageDialog(null,"这是一个用Java编写的小游戏……\n制作人:沈冠军\n时间:2010年8月\n版权所有,翻版必究!");}}};// 添加动作监听器star_item.addActionListener(listener);exit_item.addActionListener(listener);easy_item.addActionListener(listener);middle_item.addActionListener(listener);hard_item.addActionListener(listener);help_item.addActionListener(listener);about_item.addActionListener(listener);// 将菜单选项对象添加到菜单对象上menu_menu.add(star_item);menu_menu.add(exit_item);help_menu.add(help_item);help_menu.add(about_item);// 将菜单对象添加到菜单条上bar.add(menu_menu);bar.add(difficulty_menu);bar.add(help_menu);// 返回菜单条对象return bar;}/*** 创建线程对象的方法** @param speed* :速度**/public void creatBall(int speed, int num) {Random ran = new Random();if (ml == null) {g = UI.getGraphics();ml = new Listener(g);UI.addMouseListener(ml);UI.addMouseMotionListener(ml);}for (int i = 0; i < num; i++) {int x = ran.nextInt(600) + 10;int y = ran.nextInt(300) + 100;MyThread th = new MyThread(g, ml, UI, x, y, speed);list.add(th);h.start();}}/*** 得到命令的方法*/public String getCommand() {return command;}}复制代码代码如下:package Game;import java.awt.Color;import java.awt.Graphics;import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent;/*** 鼠标监听器的类** @author Administrator**/public class Listener extends MouseAdapter { private Graphics g;private int x = 5, y = 620;private int width = 100, height = 10;public Listener(Graphics g) {this.g = g;}public void mouseMoved(MouseEvent e) { // 设置画布对象颜色synchronized (this.g) {g.setColor(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;}}。
Java程序设计实验报告2(弹球游戏)[1]1
《Java语言程序设计》课程设计实习报告题目:班级:学号:姓名:同组人员:****: **一、实验目的1、掌握Swing图形用户界面编程以及事件处理等, 掌握java绘图技术。
掌握多线程编程的基本原理, 能使用Runnable、ExecutorService等接口进行线程的创建、启动等工作。
培养独立查找资料, 并解决问题的能力。
二、实验任务设计并编程实现弹球游戏:用户能通过GUI组件指定生成小球的数量, 每个小球将从随机的位置出现, 并具有随机颜色, 随机速度以及随机的运动方向, 小球沿初始方向匀速运动, 当碰到窗口边缘时, 小球将依据受力原理改变运动方向(可简化考虑, 受力只改变小球的运动方向, 小球仍按照初始速度匀速运动, 且不考虑小球之间的碰撞)。
1、鼠标在界面中显示为方块状, 玩家需按住鼠标来回移动以避开运动的小球及屏幕四周, 如果鼠标碰到任一小球或者窗口四周, 则游戏结束。
2、程序需提供计时功能, 并最终显示玩家能坚持多少秒。
(1)程序要求:(2)具备相应界面, 并通过事件编程, 实现相应的GUI组件功能。
使用多线程技术, 在程序窗口区域绘制小球, 并以线程控制小球的移动, 实现动画效果。
实现鼠标与屏幕四周, 以及与小球的碰撞检测。
三、开发工具与平台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个线程去控制每个小球的运动。
实验二 弹球程序的实现
上机实验须知实验名称:弹球程序的实现实验目的:掌握Flash中坐标系统的应用以及帧延迟循环的应用,在此基础上,将简单的物理运动公式应用在Flash中,并利用剪辑嵌套技术将运动封装在剪辑中。
实验环境:1)高档微机2)Windows操作系统中文版3)Flash CS3 Professional中文版实验原理:通过控制Flash剪辑对象的坐标x和y即可改变对象在舞台上的位置。
而使用帧跳转模式,则可以将一部分关键代码重复执行。
若在关键代码中运用物理运动公式,就可以实现简单的运动效果。
若帧跳转模式在剪辑内部实现,那么就可以保证运动的独立性,也就是实现运动效果的封装。
实验内容:在Flash CS3中,创建一个小球,并设计让它模拟在重力条件下的弹跳运动。
其中重力和阻尼系数可以任意设置。
选做:让作品中出现100个这样的弹球。
实验步骤:1)打开Flash CS3 Professional,选择【文件】|【新建】,或者按Ctrl+N,弹出新建文档对话框。
选择“Flash文档(ActionScript3.0)”,按确定新建一个Flash文档。
1)设置文档尺寸为800×600,背景为黑色,帧频率为50。
点击“确定”按钮。
2)将图层1改名为“弹球”,然后在弹球图层绘制一个小球。
选中小球,设置小球的宽高都为40,然后按F8,将其转化为元件,类型为影片剪辑,中心位置为几何中心。
3)选中这个弹球,在属性面板中设置实例名称为ball。
4)点击弹球图层第3帧,然后按F5插入非关键帧。
这样ball对象在三帧内都有效。
5)新建图层,改名为action。
然后在其第1帧进行程序的初始化,输入代码1。
(代码清单附于实验文档最后,请自行完成代码编写部分,这里给出的代码仅为参考!)6)点击action图层的第2帧,按F6插入关键帧,在这一帧放置被重复执行的关键代码。
输入代码2。
提示:当在拖动状态下,通过前后时刻的坐标计算当前的速度。
当在非拖动状态下,则根据加速度修改速度、根据速度计算下一时刻坐标,根据坐标位置进行反弹、碰撞损失等计算,然后将坐标赋值给ball对象。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《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个线程去控制每个小球的运动。
因此我构造出一个类作为一个小球的线程,保存文件为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.在判断小球与鼠标控制的小球(“眼睛”)相撞时,条件中用到两点之间的距离问题,发现条件不能是两点距离刚好等于两相撞物体半径和,此条件太苛刻,可能引起判断的失误(概率蛮高的呵呵),而应该是小于半径和。