java弹弹球实验报告_Java程序设计实验报告弹球游戏

这篇实验报告详细介绍了使用Java Swing库开发弹球游戏的过程,包括图形用户界面设计、事件处理、多线程编程以及碰撞检测。玩家可以通过GUI指定小球数量,小球具有随机位置、颜色和速度。游戏结束后,程序会显示玩家坚持的时间。报告强调了线程管理和碰撞检测的重要性,并分享了在开发过程中遇到的问题和解决方案。
摘要由CSDN通过智能技术生成

41528d3028836879cd698677c3999917.gifJava程序设计实验报告弹球游戏

Java 程序设计实验报告题 目 弹球游戏 姓 名 学 号 学 院 数计学院 专 业 软件工程 年 级 2009 级 指导教师 2010 年 4 月 16 日一、实验目的1、掌握 Swing 图形用户界面编程以及事件处理等,掌握 java 绘图技术。2、掌握多线程编程的基本原理,能使用 Runnable、cutorService 等接口进行线程的创建、启动等工作。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;// cutorThread = cutors.newCachedThreadPool();//创建线程池;mouse = new mouseThread(mxNow,myNow,groupThread,this);//启动鼠标线程;this.setIsOver(false);//游戏开始线程条件的判断;for(int i =0 ;i(getWidth()-23)||xNow(getHeight()-23)||yNow(this.getWidth()-30)||mxNow(this.getHeight()-30)||myNowgroup,bollPanel bollpane){this.mxNow = mxNow;//传入鼠标现在位置;this.myNow = myNow;this.groupThread = group;//传入小球线程组;this.bollpane = bollpane;//传入画板对象;}3.程序测试在程序测试中,先后测试出了,以下几个注意点:A.在判断小球与鼠标控制的小球(“眼睛” )相撞时,条件中用到两点之间的距离问题,发现条件不能是两点距离刚好等于两相撞物体半径和,此条件太苛刻,可能引起判断的失误(概率蛮高的呵呵) ,而应该是小于半径和。B在小球碰撞或控制的小球(”眼睛“)碰到边界游戏结束时,已经停止了线程,小球竟然还能动,而且是缓慢移动,但是判断是否碰撞及边界问题都能正常执行,与我所意料的完全相反,到现在也不知道是怎么回事,只能在 paint() 里进行条件判断,只让 bollPanel 留下最后一次的个小球及“眼睛”位置。C.这是最后才调试出来的,也是这个游戏中较难注意到的。就是一些 boolean 变量的设置:private boolean isTime;//定时器是否启动;private boolean isGroupThread;//所有小球 线程组是否启动;private boolean isMouseThread;//鼠标线 程是否启动;private boolean isMouse;//鼠标事件是否启动;private boolean isOver;//游戏是否结束;刚开始时并没有注意到这些,如果我点击鼠标左键开始游戏时,启动了小球线程,这时要设置变量 isGroupThread = true标志小球线程组已启动,释放鼠标启动鼠标线程时,isMouseThread = true让鼠标线程来控制与小球相撞的判断,定时器也在这时响应启动 isTime =true 开始计时,若不设置这些的话,将发生以下本质上的共同错误::等我释放鼠标后想再次控制小球,就必须在一次启动鼠标事件,这时将重新启动一次计时器,重新启动一次小球线程组,重新启动鼠标线程;这样的结果是导致游戏的结果不确定性,没碰到小球(实际上已碰撞)它就检测碰撞结束游戏。以及计时器的计时紊乱等。具体调试后的相关代码实现见附录.。五、实验总结通过这次的程序设计,我更加明白了学以致用的道理,对线程的应用使得我更好更快的掌握了线程的本质,同时,在此次的程序设计中,经过不断地调试,是我明白了一个程序或项目要做到“精致” ,是是需要花多大的精力和耐心,总之,学以致用,会将学到的知识应用到实际中才是学之根本。此次实验也更了解到了线程的知识,比如:一个线程 stop 后,不能再用start 启动,而应当重新实例化,在 start()。也就是说线程的状态转换过程(新建-就绪 -运行 -阻塞-死忙)是不可逆的 ,这是个人理解,至少从本实验中可以得到验证。最后,感谢老师的指导和同学

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值