安卓程序设计报告
更新时间:2023-10-22 11:08:01 阅读量: 综合文库 文档下载
弹球游戏
物联一班 谢鑫 20100740123
一、实验目的
1、掌握Swing图形用户界面编程以及事件处理等,掌握java绘图技术。 2、掌握多线程编程的基本原理,能使用Runnable、ExecutorService等接口进行线程的创建、启动等工作。
二、实验任务
设计并编程实现弹球游戏:
用户能通过GUI组件指定生成小球的数量,每个小球将从随机的位置出现,并具有随机颜色,随机速度以及随机的运动方向,小球沿初始方向匀速运动,当碰到窗口边缘时,小球将依据受力原理改变运动方向(可简化考虑,受力只改变小球的运动方向,小球仍按照初始速度匀速运动,且不考虑小球之间的碰撞)。 鼠标在界面中显示为方块状,玩家需按住鼠标来回移动以避开运动的小球及屏幕四周,如果鼠标碰到任一小球或者窗口四周,则游戏结束。
程序需提供计时功能,并最终显示玩家能坚持多少秒。
三、设计思路
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);//将画板放入JFrame createMenu();//创建菜单; 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 Paint()方法如下构造: public void paint(Graphics g){ if(!this.getIsOver()) //如果游戏还没结束; { super.paint(g);//清除原先的图像 g.setColor(Color.RED); g.setFont(new Font(\宋体\ g.drawString(\你已坚持:\计时器的显示; for(int i = 0;i g.drawImage(new ImageIcon(\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 public void mouseDragged(MouseEvent e) {//游戏过程中通过按住鼠标左键控制“眼睛”的移动来躲避小球; mxNow = e.getX();// TODO Auto-generated method stub myNow = 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, \你撞墙了,下次小心点。。。游戏结束\提示\ this.removeMouseListener(this); this.removeMouseMotionListener(this); } for(int i =0 ;i 了){\挑战失败,游戏结束.}\提示\ //System.exit(0); this.removeMouseListener(this); this.removeMouseMotionListener(this); } //鼠标的上下左右边和 球碰撞的情况, } } (4) 如果游戏开始后我们突然松开鼠标,让我们控制的小球(或\眼睛\)停留在最后松开的点上,那么小球碰到它还会判断是否相撞吗?答案是可以的,我们可以通过编写一个鼠标线程类来实现,保存文件为mouseThread.java;让此线程在我们按下鼠标开始游戏时同时启动,在我们松开鼠标时启动判断相撞事件。 相关的构造方法如下: mouseThread(int mxNow,int myNow,List 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开始计时,若不设置这些的话,将发生以下本质上的共同错误: :等我释放鼠标后想再次控制小球,就必须在一次启动鼠标事件,这时将重新启动一次计时器,重新启动一次小球线程组,重新启动鼠标线程;这样的结果
正在阅读:
安卓程序设计报告10-22
国际私法案例题集及答案03-11
施工进度计划的编制方法题库1-0-804-28
机械设备维修基础知识10-14
《数据结构与算法》实验指导书05-15
《数据结构与算法》实验指导书05-15
停电应急预案03-07
2015级上大学物理习题04-07
当课代表真不容易作文600字06-29
2015年银行时事政治热点10.1307-18
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 安卓
- 程序设计
- 报告
- 中国近当代文学鉴赏
- 苏教版六年级数学上册《期末测试试卷》(附答案)
- 初中化学第一次月考试题2
- 中国B2C电子商务的物流模式研究
- 考研数学强化班高等数学讲义一至三章
- 雅思高分作文精华集锦
- 鲁科版物理同步习题:选修3-2
- 2014年上半年布病发病情况分析及处理措施
- 机原习题解答(第8章)
- 数字图像处理 实验二
- 三年级上册科学教学工作计划
- 15.阿特斯阳高光伏电站电网故障保厂用电应急预案
- 哈工大2009春季钢结构基本原理及设计试题
- 2013幼儿游戏与玩具参考答案
- 正弦信号发生器设计 - 图文
- 新中国成立以来经济发展成就
- 整顿和规范矿产资源开发秩序工作先进集体和先进个人名单
- 商品房买卖合同纠纷起诉书答辩状代理词
- 信息安全题库
- 情绪管理教案