




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、武汉理工大学华夏学院课程设计报告书课程名称:智能手机駅T牛开发题目:捕鱼达人系名:信息工程系专业班级:计算机1112姓名:梁海传学 号:10210411209指导教师:刘春燕2014年 6 月 20 日我衩理工木修华夏修院信息工程系课程设计任务书课程名称:智能手机软件开发课程设计 指导教师:凌伟班级名称:计算机Illl开课系、教研室:自动化与计算机三、课程设计目的与任务本课程的设计的目的是通过实践使同学们经历智能手机软件开发的全过程和受到 一次综合训练,以便能较全而地理解、掌握和综合运用所学的智能手机开发的知识。结 合具体的开发案例捕鱼达人,理解并初步掌握智能手机开发的主要环肖和步骤以及智能
2、手机游戏开发的知识。二、课程设计的内容与基本要求1、课程设计题目捕鱼达人2、课程设计内容要求学生根据所学的软件工程的理念,利用所学的AndrOid手机开发的知识,开 发一个智能手机游戏捕鱼达人,并针对该手机游戏软件进行需求分析,总体设计、详细设计、 编码、测试。游戏操作鼠标移动/键盘方向键一一控制炮台射击方向,点击鼠标左键/按空格键射击撒网抓 鱼,点击下方的红色+号和-号按钮/数字键1-8键/方向键t键/滑动鼠标滑轮切换炮台 游戏背景音乐设计游戏背景动画设汁游戏界面设计游戏关卡设计游戏积分榜的设计三、课程设计步骤及时间进度和场地安排本课程设计将安排在第18周,教育技术中心。具体安排如下:第一天
3、,系统开发平台搭建及主流开发匸具安装第二天,游戏界而的设讣第三天,游戏业务的设计第四天,游戏关卡的设计第五天,系统调试测试打包和验收星期一星期二星期三星期四星期五第18周第 1-8 Ij第1-8节第1-8节第1-8节第1-8节地点现教221现教221现教221现教221现教221四、课程设计考核及评分标准课程设讣考核将综合考虑学生考勤和参与度,系统设计方案正确性,系统设计和开发效 果以及课程设汁报告书的质量。具体评分标准如下:设置六个评分点(1 )设计方案正确,具有可行性、创新性;25分(2 )系统开发效果较好;25分(3 )态度认真、刻苦钻硏、遵守纪律;10分(4 )设计报告规范、课程设计报
4、告质星高、参考文献充分20分(5 )课程设计笞辩概念清晰,内容正确10分(6 )课程设计期间的课堂考勤、答疑与统筹考虑。10分 按上述六项分别记分后求和,总分按五级记分法记载最后成绩。优秀(IoO90分),良好(8089分),中等(70-79分),及格(6069分)f不及格(059分)1. 设计题目12. 开发环境13. 需求分析13.1设讣目的13.2、设计要求14. 概要设计24.1设讣原理及其分析24. 2本游戏的模块图25. 详细设计45.1游戏欢迎界面的设计45.2游戏背景的设计55. 3游戏中鱼的设讣65.4渔网的设汁85. 5游戏的平衡设计96. 测试与运行116. 1进行游戏测
5、试116. 2体力值为零的时弹出对话框。116. 3游戏结束后进行选择127. 心得体会138. 参考文献13附录:141. 设计题目捕鱼达人2. 开发环境ECIiPSe软件开发环境,PC机一台,WindOWS操作系统。3. 需求分析3.1设计目的捕鱼达人这个项目是一个娱乐性的游戏开发,该游戏可以给人们带来娱乐的同时还可以 给人感官上的享受,所以很受人们的欢迎。本次游戏的程序设计包含,java SWing组件的 合理运用,还有图像的变动达到一个动态的动画效果,线程的运用,游戏的异常处理,等方 而的知识。培养学生运用所学知识的基础理论、基本知识和基本技能,分析解决实际问题能 力的一个重要环节。它
6、与课堂教学环节彼此配合,相辅相成,在某种程度上是课堂学习的继 续、深化和检验。它的实践性和综合性是其它教学环节所不能代替的。课程设让能使学生受 到必需的综合训练,在不同程度上提高各种能力。通过课程设讣,使学生熟练掌握JaVa语 言课程中所学的理论知识,通过综合JaVa语言的基本知识来解决实际问题,加强学生分析 和解决问题的能力。3.2、设计要求框架:2 个场景,WelcomePanel, FiShGameO流程:1)WeICOmePaneI :该场景是专门用来做一个欢迎动画的。2) FiShGame :用来运行游戏的载体窗口。与用戸交流的界而,鱼儿在该WindOW窗体上游动,玩家在上面捕鱼,然
7、后计分等等。4. 概要设计4.1设计原理及其分析1. 初始化界面需要800*500大小,需要一个游戏开始欢迎界而,游戏框上显示“欢迎捕鱼达 人游戏”,3秒之后进入游戏界面,命名为“捕鱼达人”2. 在程序中,我们需要对每一条鱼进行操作(移动,游动,捕鱼,死亡,复活),所以每条 鱼我们将它泄义为一个对象的线程,便于对鱼的完美操作与控制,游戏中我们左义了 7 种小鱼和4种大鱼,每条鱼都有两条,所以鱼池中有22条鱼,鱼的数量达到了一左的饱 和。3. 鱼的每次移动,它的水平坐标改变了,所以我们需要将它移动之后的状态重画(repaintO方法)岀来,从而达到鱼是在移动的。4. 捕鱼的效果,我们被网赋一个能
8、量值,可以改变网的大小,来改变网的能量的大小,而鱼 就需要有一个血量值(大鱼的血量高,小鱼血量低),当网在鱼的范用之内的时候,点击 鼠标左键让鱼扣除相应的血量值,鼠标右键控制网的大小,点击一下改变一下网的大小, 当鱼的血量小于0的时候,鱼就会弹跳几下然后消失,达到捕鱼成功。5. 每个游戏都是需要平衡的,所以我们不能一直捕鱼下去。体力值,计分,捕鱼条数,等 数据来平衡游戏。当体力值小于0的时候就结束游戏,而捕一条鱼,加上相应鱼的分数, 而捕鱼条数上就加1,体力值也相应的回复一部分,不同的鱼分数不同,回复体力值也不 同,基本上大鱼分数高,小于分数低。最后判怎输赢就是看分数的高低。4. 2本游戏的模
9、块图分别有:鱼的模块,网的模块,鱼池的模块,游戏的模块,每一个模块相当于一个类, 鱼模块:主要实现鱼图片的加载,鱼游动效果,鱼游动,还有鱼的一些基本属性, 比如鱼的坐标,大小,还有血量值。一些基本方法,鱼的构造方法。网模块:主要实现渔网图片的加载,渔网的属性有坐标,大小的宽和髙,还有渔网的POWe r值,渔网中还有一个改变渔网大小的方法。鱼池模块:将鱼类的对象,网类的对象都在本类中进行调用,并将相应对象的图片显示 岀来,并将游戏的背景'画'岀来。欢迎模块:将欢迎的图片加载进来。图4系统模块图O rr ay : Rrt*sdlm迫©O rrages : BifFe ec
10、tm令O MdlFkh ! EdfgredInugaO speed : intO I: hl y: hlQ height; irtO idh IintQ bind; intO nx !irtO CaJd : irO疋o您:O fanJr : RandomG < ee>> Rsh(in it: irt)Q fun() : VOid IUTloVeII); VOid gelCH)! VcidWeICCmPanelO tg: BLffe e<ia <<eate>> l:CmPand() pahi(h g: GfaphiCS) : Xod KI<&
11、lt;use>>Fish6ameQnlaiMirn : Sttincfl): odQ tg; 8ffe edlaggPOOlW? O fi>he ! HSh<<use>:Q <<eate>> fd()Q rewP(): VOidQ inilNbu5eAdapt() : Xdd0 pht(in g; GfaPhiC5); Vad& abc() : dd图4.2系统类图<<use>>5. 详细设计5.1游戏欢迎界面的设计创建游戏的运行界面的框架,带有Inain ()函数的类,FishGameJava类,专门
12、用来 承载游戏的运行,在主函数中创建JFram类的一个对象,即创建WindOW视窗,然后设巻 大小,默认居中显示,大小不可以改变等功能,具体代码如下:final JFrame WelCOme =new JFrame(H欢迎光临”);WeICOme.setSize(643,435);WelCOme.SetLocationRelativeTo(InilI);WelCOme.setResizabIe(false);WelCOme.setVisible(true);图. 1游戏运行的框架创建WelcomePanel. java类,专门用来创建"画笔,(即Paint ()方法)»画出
13、要显示出来 的欢迎界而,既然是开始界面,我们还要去掉边框,还要等待几秒钟后才能进入游戏界而。所以 王某要创建个TinIer类的个对象,来合理分配时间上的任务。实现代码如下: 在 WelCOmePaneI 类中:PUbliC CIaSS WeICOmPaneI CXtendS JPaneIBUfferedlmage bg;PUbliC WeICOmPanel0try bg=ImageIO. rea(new File(ZZimages we 1 come, jpg");/加载本地的图片 CatCh (IOEXCePtiOn e) e. PrintStaCkTraCe O; PUbliC
14、VOid Paint(GraPhiCS g) /g相当于是画笔g. drawlmage (bg, O, O, null);/画图片 然后在FiShGame类中的main ()函数中创建WelCOmPaneI类的个对象,将画出来的动画在创 建好的JFrame框架上显示出来。具体代码如下:welcome. SetUndeCOrated(true)隐藏框架,大小不可变WeICOnIPaneI wel=new WeICOmPanel ();WeICOme add (Wel);WeICOme SetViSible(true); d<显示效果如下:图52欢迎图価显示5. 2游戏背景的设计创建的Poo
15、l, java类要继承JPaneI类,用Paint O的方法画岀游戏运行的效果出来, 首先画出游戏的背景岀来。具体画出的过程如WJCOmPaneI类的方法类似。然后再在FiShGame. java类中的main ()添加如卜代码:final JFrame Win = IIeW JFrame(H捕鱼达人游戏”);Win.setSize(800,500);Win.setLocationRelativeTo(null);Win .SctDcfai 山 ClOSCoPCration(JFramC .EX7LoN_C厶 OSE);POOl buyu=new Pl();Win.add(buyu);Time
16、r timer = new Timer();timer.schedule(new TimerTaSkO PUblk VOi(I n() 3秒之后,欢迎界而关闭,游戏窗口打开WeICOme.setVisible(false);WilLSetViSible(te);, 3000); buyu.action();运行后的游戏背景如下图:/调用POol类对象buyu的action O )i法图5.3游戏运行背景5. 3游戏中鱼的设计创建Fish, java类。在这个类之中,我们要创建鱼的对象,但是为了方便启动每一条 鱼,我们将Fish.java的类继承了 Thread类,这样,每一条鱼就相当于一个线程
17、,每一个 线程我们就可以对它分别进行控制,比如移动,速度,血量,当然还有鱼游动的效果。在玩 家所看见鱼儿游动的效果其实就是鱼儿游动的一张张图片在不停的变换。我们所做的鱼儿素 材只有静态的图片。根据研究,只要换的图片帧数达到23张每秒我们就会认为图片就是动 的。所以在鱼儿游动的时候我们还要调用Tread. SIeeP (1000/60)相当于1秒钟换了 60 张图片。速度上已经相当快了。这里我们在构造方法里而写出BUfferedImage类的一个数组 对象,将鱼游动的不同图片用缓冲技术将图片加载到游戏中去,加快游戏运行速度,当然由 于鱼的类型不同,所以需要写岀两个变量出来SI和s2, SI代表不
18、同种类的鱼类,s2代表 同一种鱼的不同的游动的样子。将代码写入Fish. JavaL类的构造方法中,如下: for(int i=0;i<10;i+)imagesi二Imagelo. read(new FiIe("images/fish"+sl+"_"+s2+". png"); 该构造函数是一个带参数的构造函数,Sl就是传过来的参数,鱼的种类有9种,加上大于2 种共11种鱼。鱼的移动,鱼有几个属性如下:X,y代表鱼的左上角的坐标,width, height代表当前 鱼的图片的一个宽和高。我们就对这次的实验做一个简单的要求。所有的鱼
19、儿都是从最右边 开始的。用一个RandOm的随机函数随机出鱼出场的位置: x=random. nextInt(780+width)-WidthJy=random. nextlnt(470+height)-height;SPeed=random, nextInt+3; /, 3'6这几句代码的意思是随机岀鱼出场的位置在右边,且髙 度不能超过游戏界而的髙度,而随机岀来的速度,可以使鱼儿游的快与慢。不至于所有的鱼 儿以相同频率游动。再写一个航亡P O方法,每Thread. SIeeP (1000/10)秒,鱼儿就左移 一次:-=speed;图片也相应的换一次image二imagesi+%10
20、;这里与10取余的意思是我们 每一种鱼都有10张游动的图片。当然鱼游岀界的时候,鱼儿就重新随机出新的位巻来具体实 现代码如下:PllbliC VOid run()int i=0;While(true) X-=SPCcd;i Inage=i magesi+%10;/:鱼儿每游动一下换一帧图片if(x<-width)/如果鱼过了左边界,就出场getut(); ) 该方法是用来对鱼的岀场处理,给鱼重新随机出新的位置 try TIlread .sleep( 1 OoO/10); CatCh (InternlPtedEXCePtiOn e) e.printStackTrace();)鱼的类王某已经
21、创建完毕,所以王某接下来就是要在POOI类的Piant O方法中画出 鱼,在此游戏中,王某把每一条鱼都创建了两次,使得鱼池中的鱼不至于嫌少, 代码如下:for (int i = 0; i < fishes.length; i+) FiSh f = fishesi;g.drawlmage(f.image, f.x, f.y, null);以上代码中,g相当于是Paint方法中的一个画笔,用循环的方法将各种鱼画岀来, fishes22数组代表的是22条鱼,即FiSh类的一个数组对象(或者线程)。在画板中画岀鱼 后,王某还要启动该鱼的线程:用for循环将每条鱼的线程启动:fishesi.sta
22、rt(),i取值 022。其实这样的话鱼已经可以移动了,但是,在运行岀来以后,其实鱼还没动,这是因为,画而 左格了,所以我们需要调用系统的repaint O方法,将鱼游动之后的样子画出来,通过不 停的重画,使鱼儿游动起来。在Pool类中添加action ()方法,用一个死循环,不停的重画, 然后线程停顿一下Tread. SIeeP(IOOO/10)O最后在FiShGame. java中的main()方法中用POOl 的对象调用action O方法即可。运行效果如下:图54在游戏中画出鱼5.4渔网的设计创建Net. java0与创建鱼的方法类似。渔网有x, y»表示渔网左上角的坐标,w
23、idth, height表示渔网的款和髙,power,代表渔网的能量值,渔网的网号鱼大,POWer值越大。渔 网有7中图片,用BUfferedlmage的数组将本地的7个漁.网图片都加载进来,在构造方法中写 如下主要代码:for (it i = 0J<7; i+)imagesi = ImageIO.mJ(new File(,imagesnetJ, + (i + 1)+ .png);同样的道理,在PoOl类中的Piant O方法中画出渔网,if (net.show) g.drawlmage(net.image, net.x net.width / 2, net.y nclhcight/ 2
24、, null);ShOW是渔网的一个boolean属性,当他为true时,显示渔网,否则不显示,这是因为当 我们鼠标出去游戏界而的时候,不需要显示渔网。而且在游戏中,王某的渔网是跟着鼠标 动的,鼠标在哪,我们的漁网就在哪,所以我们用鼠标监听来处理该事件,鼠标右键点击 一下,我们就换一下网,同样的网的POWer值也将改变。具体代码在POOl类中写:PUbIiC VOid initMouseAdapter() MOUSeAdaPter m = new MOUSeAdaPtero / 监听鼠标移动的方法PUbliC VOi(I mouseMovcd(MouseEvent e) /渔网的位置等于鼠标的
25、位置int X = e.getX()unt y = e.getY();net.x = x;net.y = y;PlIbIiC VOid mousePressed(MouseEvcnt e) 鼠标右键触发来改变渔网的大小/点击左键捕鱼,右键改变网的大小int n = e.getModifiers();/获得鼠标的左右位置SyStem.z/r.println(n);if (n = 4) net.power+: net.changeThcPower(net.power);PUbliC VOi(I mouseEntered(MouseEvent e) 鼠标进入,渔网显示 net.show = true
26、;PUbliC VOi(I mouseExited(MouseEvent e) 鼠标出来,渔网不显示net.show = false; ;this.addMouseListener(m);添加鼠标事件监听this.addMouseMotionListener(n);5. 5游戏的平衡设计这个游戏的基本元素都已经设计出来了。鱼池,鱼,网等都已经实现了,但毕竟这是一 个游戏,所以我们还在本游戏中添加了一些游戏的分数,鱼的条数,体力值,还有血量。大 体的就是在我们有限的体力值内,可以改变渔网的大小(鼠标右键点击,点一下,渔网变大一下,当 渔网的编号大于6时,渔网编号重新变为0),来扣除鱼的血量。当网
27、的中心位置在鱼的图片 范帀之内是,鼠标左键点击一下就扣除鱼的血量值,具体扣多少要看当前渔网的power值。 而鱼的血量是根据鱼的大小来设泄的,大于血量厚,小鱼血虽薄,当鱼死之后,鱼就会翻身 弹跳几下,实现过程是在鱼死之后根据以上鱼儿游动的效果一样,换上几張鱼被捕之后的图片即可实现。而当鱼死后,会加上相应的分数,和回复一泄的体力值。当体力值为0的时候,游戏就结朿,判断输贏就根据分数来判断。 在Fish, java定义属性有:int blood;StatiC int COunt-IStatiC int score;/鱼的血量捕鱼条数的汁数,静态的属性实现累加/捕鱼后得到的分数再在该类中添加如下方法
28、,使鱼在死之后进行翻身,达到更好的捕鱼体验,鱼死后就会CoUnt卄代表又捕到了一条鱼,而分数根据鱼的种类(index属性)的5倍。Pnvate void turnver() for(int j=0;j<3;j+) foint i=O:i<catchFish.length:!+) imue=catchFish i;try Thread.sleep(IoOO/15); CatCll (InterrUPtedEXCePtiOn e) / TODO AutoenerateCI CatCh block e.pntStackTrace();count+;score+=index *5;在POO
29、lj&va类中我们添加StatiC int PhySiCS-POWer;属性,用来记录当前的用戸体力 值。该游戏的主要操作是靠鼠标来操作的,所以添加了鼠标监听,然后通过n二 e. getModifiers()这句代码获得鼠标的左右位置,左边点击时n二4,代表我们捕鱼的动作。 点击鼠标右边,n二16,代表我们可以变换漁网的大小,在鼠标左击之后,鱼儿扣血,相应的 体力值减少,然后判断,体力值是否小于零,如果小于零就弹岀对话框,问用户是否结束。 具体实现的代码如下:PUbliC VOi(I initMouseAdapterO PUbIiC VOid mousePressed(MouseEve
30、nt e) int n = e.getModifiers()y/获得鼠标的左右位遣if (n = 4) net.power+;if (net.power = 8) net.power = 1;WPhySiCS ,<net.power) net.power-;net.changeThePower(net.power);if(n =16)/捕鱼if(physics J)OVveK=0) JOPtionPane.s力OWMeyMgeDiog(gctRootPanc(),"游戏结束了 ,r);int In=JoPtiOnPaneMoWCOMMD沏og(gctRootPane(),&qu
31、ot;是否进行下一局”); if(m=JOptionPane. YESJ)PTI0N)SyStem.<7wprintln(,f 下一局newPool();/该方法是将所有数据淸零,然后重新开始游戏else if(m=JOplionPanc.NO_OPTYoN)SyStCm .OMprintlnC'游戏结束 J;SystenieAvV(O);) elsefor(int i=Oi<fishes.lengtli+) nct.catchThe(fishesi)/ 网捕鱼PhySiCS=net.power;WPhySiCS _Power<nct.power&&p
32、hysics 丿(”必!=0)net.power=py5zc5 JyOWer net.changeThePower(net.power);)为了提高用户的体验度,我们将以上的属性都在页而上显示出来,有如下属性:当前的 网的大小或者所当前漁网的PoWer值,还有当前的体力值,还有捕鱼的条数,分数,所以我 们需要在Pool. JaVa类中的Piant O方法中添加如下代码:g SetCOIor( Color, yr? VV);FOnt font = new FOnt(H宋体” FOnt.BOLD 25)g.setFont(font);g.drawString(当前的能量大小为:” + net.po
33、wer, 0, 30);g.drawString(体力值+physics,JPOWertt 400,30 );g.setCoIor(Color.m);FOnt fontl = IIeW FOnt(H宋体”,FOnt.BOLD. 15);g.setFont(font 1);g.drawStringC,点击右键改变网的大小",0. 50);g.drawString(当前的条数为”+Fish.s曲,0 ,70);g drawstring,÷Fish score, Qf 90);6,测试与运行6.1进行游戏测试图Gl捕鱼过程6. 2体力值为零的时弹出对话框。5体力值为O游腳免了 回
34、图62游戏结束6. 3游戏结束后进行选择点击确左按钮后,再度提示,增加游戏体验度。点击'是就会重新开始一局游戏, 所有数据淸零,点击'否就会结朿游戏,而点击'取消不做任何操作。是否进谷下一局I是OO I否(M)馭伯达人游戏当前陌能量大小为体力值図w. *r .-图G 3游戏结束后选择经过以上的测试与运行,游戏的效果已经很好了,至于其他的问题暂时还没有找到。7. 心得体会这一个新星期的课程设计我相信我学到了很多。通过老师给我们带入门,我们终于看 到了游戏编程的过程。一个星期,5天的时间,我们经过老师的悉心教导,我们完成了2048, 捕鱼达人,FIaPPyBird等三个游戏
35、,英进度不可谓不快。在学习的过程中,我们充分利用了 所学的知识,将之融汇,贯通,最后得到这样的成品出来,心中不免有点小激动。在试验过程中我们对与java的SWing组建的应用更是如鱼得水,游戏的各个板块都与之 相关,比如JFrame类创建游戏运行的视窗也是相当于画板,将游戏的效果显示出来,PanneI 类画出背景,鱼,网等。还有,我对于而向对象的理念更加的淸晰,以前对于面向过程,而 向对象的概念还不是很懂,如今明白,而向对象,简而言之是万物皆对象,在我编程的过程 中,鱼是一个对象,渔网也是一个对象,还有里面的鱼池也是一个对象,甚至是游戏运行的 视窗也是JFrame的一个对象。每个对象都有自己的
36、属性,方法,单斐然还有构造器,对对象 进行初始化。在我的程序设计过程中,我充分的体会到了 “实践岀真知”这一点,书本上的知识是不 够的,只有把理论与实践相结合才能够真正的学到知识。一个游戏的设汁,不可能一步到位, 还需要不断的完善和补充。同时,游戏中还存在许多问题,有待在日后的使用中发现和解决。 编程前的深思熟虑是减少程序调试工作量的重要方法,只有进行充分考虑,才会减少调试过 程中的工作量。虽然在开始写程序之前我们做了多的准备工作,但在真正的写程序时仍然发 现许多问题,有些问题是分析时的疏漏,有些则是如果不做无论如何也想不到的。8. 参考文献1 徐迎晓.JAVA语法及网络应用设i M.淸华大学
37、岀版社.2 李尊朝苏军.JAVA语言程序设计(第二版)M.北京:中国铁道岀版社,2007. 103 李明袁晓君.JaVa计算机语言函数应用M.北京:科学岀版社,20004 黄晓东.JAVA课程设计案例精编(第二版)Ml.北京:中国水利水电出版社,2007附录:游戏运行类:PaCkage COnI IhC fishgame; import java .util. Timer;import java .util. TimerTask;import javax SWing JFrame;PUbIiC ClaSS FiShGame PUbliC StatiC VOid Inain(String arg
38、s) final JFre WelCOme =new JFrame(ZZ欢迎光临"); welcome. SetSiZe (643, 435);WeICOme SetLOCatiOnRelatiVeTO(null);WeICOme SetReSiZabIe(false);welcome. SetUndeCOrated(true);【隐藏框架,大小不可变 WeICOnIPaneI wel=new WeICOmPanel ();WelCOme add (Wel);welcome. SetViSible (true) ;/显示游戏界而final JFranle Win = new JFra
39、me (,zIlli鱼达人游戏"); win. SetSiZe(800, 500);Win SetLOCatiOnRelatiVeTO(null);win. SetDefaUItCIOSeOPeratiOn(JFranle EXlT_ON_CLOSE);POOl bu5ru=new POOIO ;Win add (bu>ru);Timer timer = new Timero ;timerschedule(new TimerTaSko PUbIiC VOid run O WeICOme SetViSible(false);Win SetViSibIe(true);, 3000)
40、;buyu. action();鱼类:PaCkage com. IhC.fishgame;import javaawt.Graphics;import java awt. image BUfferedlmage;import java io. File;import java io.IOEXCePtion;import java .util. Random;import javaxiIndgeio. Imagel;import javax SWing JPdnel;PUbIiC CIaSS FiSh extends ThreadBUfferedImage image;BUfferedImage
41、Zl images=new BUfferedlmage10;BUfferedlmagell CatChFish;it speed;/鱼的游动速度int x;int y;int height;int width;int blood;int index;/鱼的下标StatiC int COUnt;StatiC int score;RandOIn random=new RandOmO ;/随机函数生成器PUbliC Fish(int index)this index=index;if(index<8) CatChFiSh=new BUfferedlmageZ2Z;elseCatChFiSh=n
42、ew BUfferedlmage4;String sl=(index10?"0":")+index;String s2;try /image=lmagelO. read (new File(Z,imagesfishzz+sl+z,-.01. pngz,);for(int i=0;i<10;i+)s2=(i=970") + (i+l);imagesi=lmagel O. read (new File(,zimagesfishz,+sl÷zz.,z+s2+" png"); for(int j=0;j<catchFis
43、hIength;j+)CatChFiShEjJ=ImageIO. read(newFiIe(Z,imagesfish,+sl÷zz.CatCh-Ozz+(j÷l)+ " png"); CatCh (IOEXCePtiOn e) / TODO Auto-generated CatCh blocke. PrintStaCkTraCe0; /设置图片的长宽高Width=images0 getWidth();height=imagesl getHeight O;/设置图片的显示范围x=random nextlnt(780-Width)-width;5r=rand
44、om. nextlnt (470eight) -height;SPeed=random. nextInt(4)+3;/3、6 blood=index*3;PUbliC VOid run O int i=0;while(true) X-=SPeed;image=imagesi+%10;if (x<-width) /如果鱼过了左边界,就出场 getutO;if(blood<=0) turnover O; getutO;blood=index*3;try Thread. SIeeP(1000/10); CatCh (InterrUPtedEXCePtiOn e) / TODO Auto-
45、generated CatCh block e PrintStaCkTraCe O; 死鱼翻身PriVate VOid turnover O for(int j=0J<3J+÷) for (int i=0; KcatchFish Iength;i+十)image=catchFi ShIiJ;try Thread. SleeP(IOOO/15); CatCh (InterrUPtedEXCePtiOn e) / TODO Auto-generated CatCh block e.PrintStaCkTraCeO; count+;score÷=index*5;)*鱼出场地
46、方法*/ PriVate VOid getutO / TODO Auto-generated method StUb x=800;y=random nextlnt(470+height)-height;SPeed=random nextlnt (4)÷33A*6 渔网类:PaCkage com. IhC fishgame;import java awt image BUfferedlmage;import javaio. File;import java io. IoEXCePtion;import javax.iInageio. Imagel;PUbIiC CIaSS Net in
47、t x;/图片中心点int y;int width;int height;int POWer = 1;boolean show;/网是否显示BUfferedImage image;BUfferedlmageZl images = new BUfferedlmage7;PUbliC NetO try for (int i = 0; i < 7; i÷+)images i = Imagel 0 read (new FiIe(Z,imagesnet-,z + (i ÷ 1)+ " PngZZ); CatCh (IOEXCePtiOn e) System, out.
48、 Println(W网的图片加载出错");e.PrintStaCkTraCe 0; image = images;Width = imagegetWidth();height = imagegetHeight ();PUbliC VOid ChangeThePOWer(int P) image = imagesp - 1;Width = imagegetWidth();height = imagegetHeight();PUbliC VOid CatChThe(FiSh fish) if(catchn(fish)鱼掉血判断鱼是否死了fish blood-=power;if(fish,
49、 blood<=0)Pool. PhySiCS-POWer+=fish index; 判断网的中心是否在鱼的身上,是否捕上了这条鱼PriVate boolean CatChOn(FiSh fish) if(fish x<=xx<=fish x÷fish Width&&fish y+fish height>=y&&fish y=y)return true; return false; 鱼池类:PaCkage COrn IhC fishgame; import java awt Color; import java awt. FOn
50、t;import java awt. Graphics;import javaawtImage;import java awt event MOUSeAdapter;import java awt event MOUSeEVent;import java awt image BUfferedlmage;import java io. File;import java io. IOEXCePtion;import javaximageio. Imagel;import javax SWing JFrame;import javax SWing JOPtiOnPane;import javax S
51、Wing JPanel;PUbIiC ClaSS POOI extends JPaneI BUfferedImage bg;/创建i条鱼的对象Fish fishes = new Fish22j;Net net = new Net O;StatiC int PhySiCS-POWer;PUbliC POOI O try bg = ImageI0 read (new File(,zimagesbg jpg,z); CatCh (IOEXCePtiOn e) / TODO Auto-generated CatCh blocke. PrintStaCkTraCeo ; /初始化鱼 newPoolO ;
52、PUbliC VOid newPoolOfor (int i = 0; i < 9; i+÷) fishesi = new Fish(i + 1);fishes9 ÷ i = new Fish(i + 1); fishes18 = new FiSh(I3);fishes19 = new FiSh(I4);fishes20 = new FiSh(I3);fishes21 = new FiSh(I4);net POWer=1;net ChangeThePOWer(net POWer);PhyS i C S-POWer=IOO;for (int i = 0; i <
53、fishes1ength; i+) fishesi.start O;FiSh COUnt=O;FiSh SCOre=O;PUbliC VOid InitMouseAdapter O MOUSeAdaPter m = new MOUSeAdaPtero /监听鼠标移动的方法PUbliC VOid mouseMoved(MOUSeEVent e) int x = e. getX();int y = e. getY();/ SyStem OUt Println(X,z÷y);net.x = x;net. y = y; PUbliC VOid mousePressed(MOUSeEVent
54、e) /点击左键捕鱼,右键改变网的大小int n = e. getModifiers();/获得鼠标的左右位置SyStem OUt Println(n);if (n = 4) net power+;if (net POWer = 8) net POWer = 1;if (PhySiCS-POWer<net POWer)net POWer;net ChangeThePOWer(net POWer);if (n = 16) 捕鱼if (PhySiCS-POWer<=0) JOPtiOnPane. ShOWMeSSageDialOg(getRootPane O,"游戏结束了");/是否继续下i局int In=JOPtiOnPane. ShourConfirmDialog (getRootPane O,"是否进行下局; if (m=JOptionPane. YES_OPTIO) SyStenl OUt PrintlnrT 局"newPoolO; else if (In=JOPtiOnPane. NO-OPTlON) System, out. Printlnr游戏结束");System, exit(O);elsefor(int i=0;i<fishes 1ength;i+÷)net. CatC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 毒麻药考试题及答案
- 医保处方试题及答案
- 舞台塌陷面试题及答案
- 茶叶鉴赏考试题及答案
- 2025乡村医生培训考试试题库(含答案)
- 2024年河北省公务员考试申论真题及答案解析
- 初级社会工作者社工实务试题附答案
- 2024年重庆市“安全生产月”知识竞赛试题及参考答案
- 2025年高级育婴师考试试题及答案
- 树叶运动会课件
- 从临床到教育儿童中医课程的开发与推广汇报
- 第六单元碳和碳的氧化物
- 建筑施工现场危废管理办法
- 《信息报送培训》课件
- 收益法资产评估评估程序表(适用于非整年)
- 男方因病丧失劳动能力自愿离婚协议书(2篇)
- 编程积木课件教学课件
- 化工厂拆除施工方案
- 食品物流学:食品保管与储存
- 高中数学导数满分通关专题35 双变量恒成立与能成立问题概述(原卷版)
- 小儿脑瘫康复护理-日常生活活动能力训练(康复护理技术)
评论
0/150
提交评论