版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
文档文档Java程序课程设计任务书一、主要容打砖块游戏是一种动作电子游戏的名称。玩家操作一根萤幕上水平的“棒子=让一颗不断弹来弹去的“球”在撞击作为过关目标消去的“砖块”的途中不会落到萤幕底下。球碰到砖块、棒子与底下以外的三边会反弹,落到底下会失去一颗球,把砖块全部消去就可以破关。二、具体要求通过图形用户界面(GraphicsUseiInterface,GUI)和线程,使用户和程序之间可以方便地进行交互。运用Swing组件,编写小应用程序游戏,加深对Java语言的理解,深入地了解图形用户界面的设计,更加熟练地运用编程软件。功能要求:(1)游戏运行需键盘的操作;(2) 游戏可统计分数:(3) 球落到底下会失去一颗,按ENTER可重新开始。开发工具:JCTeatei软件;开发技术:J2MEo三、进度安排12月28n:课程设计选题,查找参考资料12月29ri:完成打砖块游戏程序设计分析12月30n~1月3n:完成程序代码的编写1月4日~1月5口:游戏测试与完善1月6日月7口:完成课程设计报告,准备答辩四、主要参考文献(美)埃克尔著昊鹏,饶若楠等译.Jaw编程思想[J].机械工业,2005(美)GaiyJ.Biousou著珑雅文译.Jaw编程原理[J].清华大学,2004(美)MichaelMorrison著徐刚,于健,薛雷译.游戏编程入门[J].人民邮电,2005.9(美)WendyStabler著冯宝坤,曹英译.游戏编程中的数理应用[J].红旗,2005
(美)DavidBiackeeu著邱仲潘译.Java游戏编程[J].科学,2004聂庆亮编著.(美)DavidBiackeeu著邱仲潘译.Java游戏编程[J].科学,2004聂庆亮编著.Java应用开发指南[J].清华大学,2010耿祥义,跃平编著.Java面向对象程序设计[J].清华大学,2010绍方编著.Java编程实用技术与案例[J].清华大学,2000.11明口科技编著.Java编程全能词典[J].电子工业,2010[7][8][9][10]随着Java语言的不断发展和壮大,现在的Java己经广泛的应用于各个领域,包括医药,汽车工业,手机行业,游戏,等等地方。Java游戏的开发为满足人们娱乐所需而设计。本游戏为打砖块游戏,是基于Java的图形用户界面而开发的,可以放松心情的小游戏。游戏从系统操作简便、界面友好、灵活、上手即会的基本要求出发,完成整款游戏的开发。游戏更设置了暂停、计分、音乐、速度,用户信息保存等功能,可以根据自己的爱好,挑战更高难度,为用户带来愉悦的体验。本课程设计报告介绍了游戏的构想,分析,开发,实现的过程。论述了游戏的功能开发,设计构思。给出了游戏的设计步骤,游戏系统关键的设计思想;在游戏系统实现章节给出了部分功能流程和相关代码。关键词:游戏,打砖块java程序课程设计任务书II第1章引言1.1背景 1.2课程设计容13任务分工•…第二章弹砖块小游戏应用程序2.1弹砖块小游戏应用程序概述 2JJ打砖块小游戏系统任务及目的.2.2主要特色系统介绍 2.3本章小结 第3章打砖块游戏系统的设计系统需求分析系统开发及运行环境系统主要功能要求.…3.4341打砖块系统总体结构.系统数据流图 3.5本章小结第4章系统数据库设计1041数据库设计过程4.1需求分析、103.4341打砖块系统总体结构.系统数据流图 3.5本章小结第4章系统数据库设计1041数据库设计过程4.1需求分析、101042功能实现.43本章小结 1011第5章系统的具体实现125.1界面设计 5.1.1用户登录界面图.5」・2游戏主界面. 12121319195.2程序设计及调试运行521自动计时.19522在JPanel中画图••5.2.3用户注册登录系统.2021524游戏结果的存储.5.3本章小结 2223第6章结束语24致谢25参考文献26附录源代码26第1章引言1.1背景游戏是全球最大的娱乐经济项目之一,S经被命名为“第九艺术”。而由“游戏”派生出来的职业,除了软件开发外,游戏包装宣传推广、攻略指导、网络游戏管理员和职业游戏玩家等,己成为了一系列专门的岗位。面对游戏产业如此巨大的市场空间,国各大城市纷纷加大了这方面的人才培养,中国的游戏人才培训己随着游戏行业的总体发展开始逐步迈入了正轨。虽然说中国的游戏行业开始逐步的迈入了正轨,但是现今,游戏人才出现严重的瓶颈时期,高校的扩招、金融危机的侵袭直接影响着我们最关心的就业问题,但是另一方面游戏人才的缺乏乂直接制约着行业的发展,这就更加严格了对社会培训机构的稳定性和正规性的要求。在我国,游戏人才培养体系还未健全,部分开设了相关专业的高校,游由于理论和实践的脱离无法完全满足网游公司对人才的需求。所以,就中国目前的市场分析来看,加强游戏产业必须在多渠道人才培养体系上加快突破,尽快建立起多渠道人才培养体系,來满足社会对游戏人才的需求。1.2课程设计容打砖块游戏是一种动作电子游戏的名称。玩家操作一根萤幕上水平的弹板,让一颗不断弹来弹去的“球”在撞击作为过关目标消去的“砖块”的途中不会落到萤幕底下。球碰到砖块、弹板与底下以外的三边会反弹,落到底下会失去一颗球,把砖块全部消去就可以破关。游戏的功能包含以下容:基本的游戏操作用户可以通过鼠标或者键盘来操作弹板,尽量让弹球不要掉下底下。开始按钮和暂停按钮可以控制游戏的进行。宝物获得功能用户在游戏过程中,可能获得相关的宝物,可以使弹板增长一部分。速度设置功能本游戏有5个速度设置,可以根据用户的需要,调节到用户想要的速度进行游戏。音乐设置功能用户可以根据自己的喜好,选择自己喜欢的音乐,或者是关掉它。(5) 用户注册登录功能每个用户在游戏开始时都要输入用户的信息注册,登录,并记录。当用户退出游戏以后,系统将记录用户的游戏信息。(6) 计分,记时功能用户在游戏的过程中,系统将记录游戏的成绩,并保存在文件中,用户退出游戏后也可以查询成绩。1.3任务分工第二章弹砖块小游戏应用程序2.1弹砖块小游戏应用程序概述此程序设计是一个小游戏(弹砖块)的实现,主要运用了用户图形界面,程序接口和基本函数绘制來实现,事件监听(包括鼠标事件,键盘事件,响应时间)也是这个程序的特色。此程序用到了图片的引用,砖块、弹板应用了函数绘制和图片引用,弹球的设计外且安全是应用函数绘制。游戏还利用JAVAApplet实现了播放声音。再加入复选框,按钮,标签等來实现本游戏用户界面布周。总之,本游戏在用户界面的可操作性、游戏的美观度、计分计时存储结果方便都基本完善,有一定的可玩性。2.1.1打砖块小游戏系统任务及目的此小程序是为群众闲暇消遣之用,玩家在进入游戏后输入H己的大名,按游戏规则用弹球打掉弹板上的全部砖块,获得相应的分数,进入下一关,知道全部过关,游戏结束后可记录玩家分数及排行榜名次进入游戏界面,一个文本框可以选择是否记录游戏这名字,接着是“开始”、“暂停”、“重新开始”按钮以及四个复选框分别控制背景音乐、速度、模型和关卡,还有四标签记录时间、生命分数和排行榜数据。2主要特色系统介绍游戏增加了背景音乐以及碰撞音乐的设置,并用图片代替了纯粹用函数构造出的砖块,使玩家在使用此程序时更加能体验到乐趣。自主选关、模式选择和速度选择给了玩家更多的自主机动性,使得玩家可以根据自己的意愿来设定游戏难度,排行榜功能也是特色之一,玩家可以根据排行榜来了解自己玩的如何,可以有个相对的比较。2.3本章小结虽然游戏在功能和界面上不能算的上很棒,但是麻雀虽小,五脏俱全,游戏具备了弹砖块这个经典游戏锁应该具有的基本雏形。通过这一章,我们对这个游戏应该有了比较宏观的了解,我们将在这一基础上探究游戏更完美的改变。第3章打砖块游戏系统的设计这一章是打砖块游戏系统的设计,从系统需求分析开始,介绍开发环境和用到的开发工具,系统主要的功能设计,系统的数据流程图。3.1系统需求分析打砖块的设计目标为:实现打砖块游戏功能,使用背景音乐,可用键盘或者鼠标控制挡板,并对游戏时间,游戏分数进行记录并保存成绩到文本,列出成绩排行榜。实现游戏难度和游戏模型的选择,通过本关后可以选择进入下一关。得到不同宝物可以实现多种游戏功能,加强游戏可玩性。3.2系统开发及运行环境硬件平台:CPU:INTEL45o存:1024MB以上。软件平台:操作系统:WindowsXPo数据库:TXT文档。开发工具包:JDKVersionL6.2o分辨率:最佳效果1024X768像素。3系统主要功能要求本系统为了实现游戏打砖块。本系统主要实现如下功能:系统界面美观大方舒适。实现游戏一些基础信息的保存和读取。画面流畅,具有可玩性没有较大的游戏BUGo显示游戏者的游戏时间和积分。存储玩家的积分。实现多种难度的选择。实现多种砖块的排列模型。多种宝物可以实现不同的功能玩家可以输入名称#入数据库。系统最大限度地实现了易维护性和易操作性。系统运行稳定、安全可靠。实现用户的注册及注册信息的保存3.4.1打砖块系统总体结构打砖块游戏是基于基本的软件和普通硬件基础上的传统优秀游戏,一个游戏应该包括以下儿大功能,如图3.1所示打砖块系统
查询统计「查询游戏分数查询统计「查询游戏分数图3・1系统功能结构图各功能模块实现的功能为:游戏管理模块:实现基本的打砖块操作并实现游戏模型调整和游戏难度调整。查询统计:让玩家注册用户并保存它的游戏数据。实现游戏分数的查询。游戏管理模块图如图3.2所示。图3.2游戏管理功能模块图查询统计模块图如图3.3所示图3.3査询统计功能模块图3.4系统数据流图游戏信息的流向,即系统数据流图如图2.3所示。图3・3系统数据流图3.5本章小结本章是打砖块游戏的具体设计过程,有具体的需求分析、系统功能模块、系统数据流图。这里我们开始接触JAVA程序设计的最初步骤,也是很重要的一步。第4章系统数据库设计本章是打砖块的数据库设计,有了数据库,就可以对游戏的成绩,玩家进行保存,提高游戏的可玩性、竞争性1数据库设计过程数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库应用系统,使之能有效的存储数据,满足各种用户的应用需求。数据库设计方法是研究数据库及其应用系统的技术,是数据库在应用领域中的主要的研究课题。4.1»求分析打砖块的游戏存储需要两部分:一是游戏注册以及存储,二是游戏分数存储运用较为简单的java程序代码,先需要注册用户名,效果如图421将游戏数据存入一个名为score.txt的文本文档。实现效果如下图422匚登录冈'匚登录图421Cscore.txt记事本namezrtpscore:30namezzxnscore:90namerqscscore:70图4.2.2游戏信息的存储4.3本章小结本章是打砖块游戏系统的数据库开发。采用的是TXT文本°第5章系统的具体实现界面是系统和玩家之间最直接的交互界面,界面的友好性体现了程序设计的质量,界面是否便捷易懂也是程序所基本的要求。5.1界面设计5.1.1用户登录界面图
5.1.2游戏主界面1:15.1.2游戏主界面1:1上图就是进入游戏后的界面,接下来用一个框图来表现界面的说明。用户界面・.标签••行榜.际签••分数t标签:生命t标签••行榜.际签••分数t标签:生命t标签时间复选框型按钮;重新开始t按钮••暂停.界面的初始化的关键代码为:publicclassGaineextendsJFrameiiiipleiiientsRuimable,KeyListeuei;ActioiiListeiier{privateStrings=newStrmgC'打砖块游戏”);//定义组件JToolBartoolbar=newJToolBar();//工具栏JButtougstait=null;//开始按钮JButtougstop=null;//暂停按钮JButtougiestail=null;//重新开始按钮JButtousetmusic=null;//设置音乐按钮JButtousetspeed;//设置速度按钮JLabelctime=null;//计时标签JLabelclife=uull;/Z生命标签JLabelcscoie=null;//分数标签JComboBoxgniodel=null;//砖块排列模型JComboBoxsetgate=null;〃设置关卡JTextFieldsetNanie=uull;//游戏者//定义变量staticmtspeed=100,//速度(全局静态)staticbooleanisfire=true;//isfire为true时,有碰撞声staticmttoolgate=0;staticbooleanrespeed=false;mthours=0,minutes=0,seconds=0;mt111=&w=5;mtlife=3;//生命mtscore=0;//分数booleanisstop=tme;//开始暂停booleansetpaddle=true;booleansetball=true;mtmodel=1;//砖块叠放的模型0为矩形1为三角形2为倒三角形3为空三角形4为六边形//定义嵌入对象SetMusicGetMusic;//音乐窗口SetSpeedsettiiigspeed;//速度窗口FireVbicefirevoice;//声明碰撞声音类Tiiieadt=newThread(this);//定义图形Brickbnck[][]=null;//砖块Ballball=newBallQ;//球Paddlepaddle=newPaddleQ;//板块Treasure[]treasure=newTreasure[4];//宝物MyPanelpanel;//画板Bufferedhiiageimgl;〃图片Bufferedhiiageimg2;*主界面初始化函数**♦/Publicvoidinit{){initvaiiableO;GetMusic=newSetMusicQ;//开启咅乐settingspeed=newSetSpeedQ;//初始化速度设置窗口fiievoice=newFireVoiceQ;setName=newJTextField(10);//输入对话框//设置窗体setSize(800,500),setBackgiound(Coloi;white);panel=newMyPaiiel();tills.setResizable(false);tills.setLocation(200,200),ContainercoiiteutPaiie=getCoiiteutPane();coiiteutPaiie.setLayout(uewBorderLayoutQ);tills.setTitle(s),//初始化按钮gstail=newJButton("开始”);gstop=newJButtonC'暂停”);grestait=newJButton("重新开始”);setiiiusic=newJButtou("设置音乐”);setspeed=newJButtoii("设置速度");//初始化计时标签ctime=newJLabel("计时:00:00:00"),clife=uewJLabel("生命:3");cscore=newJLabel("分数:0");//初始化下拉栏String[]smodel=「模型1”,”模型2”「模型3役”模型化”模型5"};gmodel=newJCoiiiboBox(siiiodel);String[]sgate={"第1关”,“第2关丁第3关T第4关”,“第5关”};setgate=newJCoiiiboBox(sgate);//将组件添加到工具栏toolbaradd(gstart);toolbaraddSeparatorO;//添加分隔栏toolbai;add(gstop);toolbaraddSeparatorO;//添加分隔栏toolbai;add(grestart);toolbaraddSeparatorO;//添加分隔栏toolbai;add(setmusic);toolbaraddSeparatorO;//添加分隔栏toolbai;add(setspeed);toolbaraddSeparatorO;//添加分隔栏toolbai;add(gniodel);toolbaraddSeparatorO;//添加分隔栏toolbaradd(setgate);toolbaraddSeparatorO;//添加分隔栏toolbai;add(ctiine);toolbaraddSeparatorO;//添加分隔栏toolbai;add(clife),toolbaraddSeparatorO;//添加分隔栏toolbai;add(cscore);//添加组件到画板coiiteutPaiie.add(toolbar,BorderLayout.NORTH),coiiteutPaiie.add(paneLBoiderLayout.CENTER);//监听事件gstop.setEuabled(false);gstart,addActioiiListeuer(this);gstop.addActionListeuer(this);grestart.addActionListeuer(tliis);setiiiusic.addActioiiListeuer(tliis);setspeed.addActioiiListeiiei(tliis);gniodeLaddActionListener(tliis),setgate.addActionListener(tliis);setName.addActioiiListeiier(tliis);addMouseMotioiiListeiier(newMouseMove());paiieLaddKeyListeiier(tliis);paiieLrequestFocusQ,tills.setDefaultCloseOpeiation(JFranie.EXIT_ON_CLOSE),〃输入setVisible(tnie);iiith=JOptiouPaiie.showCoiifirniDialog(nulLsetNaiiie,"输入",JOptioiiPaiie.YES_NO_OPTION);System.exit(O);}else{t.startO;2程序设计及调试运行编写12个CLASS文件,#入一个包中,各个模块的程序代码都完成后,进行编译连接运行,经过反复调试,找出错误和不足,以达到游戏所需的基本功能和基本界面。这个过程比较繁琐,我们参考网络上现有的资源,并加以改进,对各个模块仔细分析备注并进行调试,做到程序简洁易懂,可读性好。尽量避免因代码不完善而导致的游戏运行中可能出现的错误。521自动计时游戏的自动计功能是非常有必要的,可以让玩家很直观地看到自己所玩的时间。下面是自动计时功能的部分关键代码:PublicStringgettimes{mthours,iiitminuts,iutseconds){//设置时间格式Stringtext;if(hours<10)text="时间:+hours;elsetext=Stniig.valueOf(hours);if(minutes<10)text=text+ +"0"+minutes;elsetext=text+ +minutes;if(seconds<10)text=text+ +"0"+seconds;elsetext=text+ +seconds;returntext;522在JPanel中画图JPaiiel是一般轻量级容器,可以向JPanel容器中放入JPanehJTextfiled,JButtoii等。Swing的JPanel支持doublebuffering的功能,使得JPanel在处理动画上更为流畅,较不会有画面闪烁的情况发生。下面是此程序运用Jpanel画图的部分主要代码:classMyPaiielextendsJPanel{protectedvoidpaintCompoiieut(Grapliicsg){Giaphics2Dg2d=(Grapliics2D)g;ctime.setText(gettiiiies(hours,minutes,seconds));//设.置时间g.di'awlniage(iingl,(iut)paddle.xpaddle,(iut)(paddle.ypaddle),(iiit)paddle.width.(int)paddle.height,null);//画板块for(iutj=O;j<bnck[0].length;j++){//画砖块for(iuti=0;i<brick.length;i++){bnck[i]|j].xBnck=i*(800/m).bnck[i]|j].yBrick=j*(200/n);if(bnck[i]|j].alive==1){g.drawliiiage(iiiig2,(iut)bnck[i]|j].xBnck,(iiit)brick[i]|j].yBnck.(iiit)brick[i]|j].width,(iiit)brick[i]|j].heigli,null);}//画球g2d,setPaint(iiewGiadientPaiut((iiit)balLxBalt(iiit)balLyBaltColorblue,(iiit)(balLxBall+balLr),(iiit)(balLvBall+balLr),Coloryellow,true)),g2d,fill(newEllipse2D.Double(balLxBaltbalLvBaltbalLi;ball』)),//画宝物g.setColor(ColoLblack);for(hitk=0;k<treasure.lengtli;k++){if(treasure[k].alive=1){g.fill3DRect{(iut)treasure[k].xtreasure.(mt)treasure[k].ytreasure.(mt)treasure[k]Avidth,(mt)treasure[k].height,true);523用户注册登录系统下面给出登录功能的主要代码publicvoidloginDialogQ{login=newJDialogQ;logiu.setTitleC登录”);logiu.setLayout{newFlowLayoutO);logiu.add(iiewJLabel("用户名:logiu.add(iiame);logiu.add(iiewJLabel("密 码:"));passwoid・setEchoChar('*');logiu.add(passwoi'd);JButtoiiconfirm=newJButton("登录");confirm.addActioiiListeiier(newActioiiListeiier(){publicvoidactioiiPerf6rmed(ActioiiEvente){newif (coiiipareUserData(iiaiiie.getText().trim(),newStnng(pass\vord.getPasswordO))){login,setVisible(false);f.setVisible(tnie);}else{JOptioiiPaiie.showMessageDialog(logiu,"用户名或密码错误!",“错误提示",JOptioiiPane.ERROR_MESSAGE);}}});logiu.add(confirm).finalJDialogregDialog=newJDialog(logiii,"注册",true);registerDialog(regDialog);JButtoiiregister=newJBiHtoii("注册");registeraddActioiiListeneiXuewActioiiListenerQ{publicvoidactioiiPerf6rmed(ActioiiEvente){regDialog.setVisible(tnie);}});logiu.add(i'egister);logiu.setSize(200,130);logiu.setResizable(false);logiu.setLocatioiiRelativelb(iiull);logiu.setVisible(tiiie);524游戏结果的存储此功能将用户游戏后的结果存入TXT文档中关键代码如下publicbooleansaveUserData(Stiingname,Stringsex,Stringpassword1,Stringpassword?){if(!password1.equals{password2))returnfalse;try{RaiidoiiiAccessFileout=newRaudoiiiAccessFileC'usertxt","rw");out.seek(out.leugthO);out.writeUTF(uanie);out.writeUTF(sex),out.writeUTF(password1);out.closeQ;}catch(lOExceptioiie){e.priutStackTraceO,returnfalse.returntrue;〃保存成绩PublicvoidsaveScore(){try{RaiidoiiiAccessFileraf=newRaudoiiiAccessFile("score.txt"/W');Strings=String.valueOf(score);rafseek{raflengtli());rafwriteBytes("naiiie:"+nan】e・getText());rafwriteBytes("score:"+s+"");}catcli(IOExceptioue){}5.3本章小结本章介绍了程序的具体实现和部分关键代码,包括自动计时,界面初始化和用Jpanel画图的部分源代码,在这里我们对本程序有了更加深入彻底的了解。第6章结束语由于市场需要,游戏的更新速度步步加快,为了适应社会的需要,社会对游戏开发人员的需求,在游戏编程的学习过程中,必须理论与实践结合,提高编程能力与水平。通过小游戏的设计,对以学过的容加深理解,对游戏开发的过程有初步的认识,为以后的游戏开发设计和更加深入的学习计算机语言打下夯实的基础。目前竞争日益激烈的行业环境,对于未來行业的前景,还是要保持乐观的心态。毕竟游戏并不是一下子就可以编写成的。需要不断的技术积累,需要团队的合作,提高了工作的效率,才算是在游戏开发的道路上成功了一半。在现在这个信息化飞速发展的道路上,要成为一名合格的编程人员,那就必须走好每一步现在的路。基于Java的打砖块小游戏,满足了用户娱乐的需求,已经达到了预期的目标。虽然该游戏大部分功能基本上己经实现,但是还是会存在一些不足:(1)游戏中存在一些BUG,游戏中弹球有时不会下落,未碰到的砖块却自动消失了。游戏的关卡太少,样式不够多样化,不能满足用户对该游戏的挑战。游戏的色彩不够多样化,色彩单一,不能给用户增加新鲜的娱乐感。对于用户信息方面,由于该程序没有涉及到数据库的相关容,在用户信息存储,用户信息更新功能方面表现欠佳。在用户信息功能的方面有待进一步改善。致谢[1][2][3]参考文献[1][2][3](美)埃克尔著昊鹏,饶若楠等译.Java编程思想[J].机械工业,2005(美)GaiyJ.B1OUSOU著珑雅文译.Jaw编程原理[J].清华大学,2004(美)MichaelMorrison著徐刚,于健,薛雷译.游戏编程入门[J].人民邮电,2005.9(美)WendyStabler著冯宝坤,曹英译.游戏编程中的数理应用[J].红旗,2005(美)克罗夫特(DavidWallaceCioft)著彭晖译.Java游戏高级编程[J].清华大学,2005(美)DavidBiackeeu(美)DavidBiackeeu著邱仲潘译.Java游戏编程[J].科学,2004聂庆亮编著.Java应用开发指南[J].清华大学,2010耿祥义,跃平编著.Java面向对象程序设计[J].清华大学,2010绍方编著.Java编程实用技术与案例[J].清华大学,2000.11明日科技编著.Java编程全能词典[J].电子工业,2010[7][8][9][10]附录源代码此游戏包含8个java文件,Ball.java,Brick.java,Paddle.java,Treasure.java,Nextnew.java,SetMusic.java,SetSpeed.java,Game.java。Ball.javapackages;〃球publicclassBall{doublexBall=10,yBall=470,doublei-20;publicBall(){Brickjavapackages;〃砖块publicclassBrick{doublexBnck=0,yBrick=0;doublewidth=60;doubleheigh=40;iutalive=0;iutistreasure=O;publicBrick。{Paddlejavapackages;〃档板publicclassPaddle{publicdoublexpaddle=320;publicdoublewidth=150;publicdoublelieigIit=20,publicdoubleypaddle=435-height;Treasurejavapackages;〃宝物publicclassTreasure{iiitalive=0;doublextreasure=O,ytreasure=O,width=104ieiglit=10;publicTreasure(){NextNewJavapackages;〃下一关mipoitjava.applet.*;mipoitjava.awt.*;importjava.awt.event.*;importjavax•swing.*;publicclassNextNewextendsIFrameiinplementsActioiiListeuei{JPaiieljpO,JButtoiiok;JButtoiiquit;publicNextNew(){supeW打砖块”);setSize(300,150);setLocatioii(300,300);setBackground(Color.white);jpO=uewJPanelQ;ok=newJButtou("确定”);quit=newJButtou("退出”);jpO.add(ok);jpO.add(quit),setLayout(uewBorderLayoutO),add("North",(iiewJPanelO).add(uewJLabel("恭喜你!过关了!")));add("Ceuter'\(new JPanelO).add(iiew JLabel("是否继续下一关?*')));add("Soutli"jpO);setVisible{tnie);OverridepublicvoidactioiiPerfdrmed(ActiouEvente){//TODOAuto-geueratedmethodstubif(e.getSource()==ok){if(e.getSource()==quit){publicstaticvoidiiiaiii(Stiiiigarg[]){NextNewgameovei-uewNextNewQ;SetMusicjavapackages;mipoitjava.applet.*;mipoitjava.awt.*;importjava.awt.event.*;mipoitjava.io.*;importjavax•swing.*;publicclassSetMusicextendsJFrameiiiipleiiientsActioiiListeiiei;IteiiiListeuer{privatemtchoice=0;publicstaticStringsl=iiewStiing("Liiiid");privatebooleanfhststart=true;JPaiieljpl,JPaiieljp2;JPaiieljp3.JLabelBackMusic;JComboBoxSelectMusic;JButtoiiMusicStop;JLabelFireVoice,JButtoiiFVOpeii;JButtoiiFVClose;JButtoiiok;publicstaticSelectMusicmusic;publicSetMusic(){//supe”设置窗口”);setSize(300450);setLocatioii(300,300);setBackground(Color.white);niusic=newSelectMusicQ;jpl=iiewJPanelQ;jp2=iiewJPanelQ;jp3=iiewJPanelQ;BackMusic=uewJLabel("背景咅乐:");SelectMusic=newJCoiiiboBoxO;;MusicStop=newJButton("关闭");SelectMusic.addlteiiiListeiiei(tliis);MusicStop.addActioiiListenei(tliis);setLayout(uewBoiderLayoutQ),FireVbice=uewJLabel("碰撞声音:和FVOpeu=newJButton("打开");FVClose=uewJButtou("关闭”);FVOpeu.addActioiiListeuer(tliis);FVClose.addActionListeuer(tliis);ok=newJButton("确定”);jp1.add(BackMusic),jp1.add(SelectMusic);jpl.add(MusicStop);MusicStop.setEuabled(false),SelectMusic.iiisenIteiiiAt("iiiusic-?\O);SelectMusic.iiisenIteiiiAt("iiiusic-2"4);SelectMusic.iiisenIteiiiAt("iiiusic-3",2);SelectMusic.iiisenIteiiiAt("iiiusic-4"3);SelectMusic.setSelectedliidex(O);add("North"jpl);jp2.add(FireVoice);jp2・add(FVOpeii);if(sl=="2.iiud"){music.Music1StopQ;}music.Music1StaitQ;if(SelectMusic•getSelectedItemO="iiiusic-3"){if(sl=="3.iiud"){music.Music1StopQ;}music.Music1StaitQ;if(SelectMusic.getSelectedItemO="iiiusic-4"){if(sl=="4.iiud"){music.Music1StopQ;}sl=**4.mid";music.Music1StaitQ;MusicStop.setEuabled(tnie);SelectMusic.setFocusable(false);SelectMusic.setEuabled(false),classSelectMusic{AudioClipml;publicvoidMusiclStait(){try{Filemusic=newFile(SetMusic.sl);ml=Applet.newAudioClip(music.toURL());ml.loopO;}catch(Exceptioiie){e.priutStackTrace(),}publicvoidMusic1StopQ{ml.stopO;classFireVbice{AudioClipm2;publicvoidMusic2Stail(){try{Filemusic=newFile("5.iiiid");m2=Applet.newAudioClip(music.toURL());m2・play();}一catch(Exceptioiie){e.priutStackTrace(),}publicvoidMusic2Stop(){ni2.stop0;SetSpeedJavapackages;mipoitjava.applet.*;mipoitjava.awt.*;importjava.awt.event.*;importjavax•swing.*;publicclassSetSpeedextendsJFrameiiiipleiiientsActioiiListeiiei;IteiiiListeiier{JPaiieljp_l;JPaiieljp_2;ButtonGioupgi'oup=newButtoiiGroup();publicstaticJRadioButtonspeed1;JRadioButtonspeed?;JRadioButtonspeed?;JRadioButtoiispeed4;JRadioButtoiispeed5;JButtouok;publicSetSpeed(){setTitleC设置速度”);setSize(500,150);setLocatioii(300,300);setBackground(Color.white);jp_l=newJPanelQ;jp_2=newJPanelQ;speedl=newJRadioButtoii("慢速");speed2=newJRadioButtoii("较慢");speed3=newJRadioButtoii("中速");speed4=newJRadioButtoii("较快");speed5=newJRadioButtoii("快速");ok=newJButtou("确定”);group.add(speedl),group.add(speed2),group.add(speed3),group.add(speed4),group.add(speed5),jp_l・add(speedl);jp_l・add(speed2);jp_l・add(speed3);jp_l・add(speed4);jp_l・add(speed5);jp_2・add(ok),setLayout(uewBoiderLayoutQ),add("North",(newJPanelO).add(uewJLabel("请选择速度等级!")));add("Ceuter"Jp_l);add("Soutli",jp_2);Speed1,addItemListenei'(tIiis);speed2.addItemListenei'(tIiis);speed3.addltemListenei'(tliis);speed4・addltemListener(this);speed5.addItemListenei'(tIiis);ok.addActioiiListener(tliis);setVisible{false),OverridepublicvoidactioiiPerfdrmed(ActiouEvente){//TODOAuto-geueratedmethodstubif(e.getSource()==ok){disposeQ;OverridepublicvoiditemStateCliaiiged(IteiiiEveute){//TODOAuto-geueratedmethodstubif(e.getIteiiiO==speedl){Gaiiie.speed=100;elseif(e.getlteiii()==speed2){Gaiiie.speed=80;if(e.getIteiiiO==speed3){Gaiiie.speed=60;if(e.getlteiii()==speed4){Gaiiie.speed=40;if(e.getlteiii()==speed5){Gaiiie.speed=20;publicstaticiiitgetspeed(inttoolgate){return(Game.speed-toolgate*5);Gamejavapackages;importjava.applet.AudioClip;importjava.awt.BordeiLayout;importjava.awt.Color;importjava.awt.Coiitaiiier;importjava.awt.GradientPaiiit;importjava.awt.Graphics,importjava.awt.Grapliics2D;importjava.awt.event.*;importjava.awt.geoiii.Ellipse2D;mipoitjava.awt.iinage.Bufferedlmage;importjava.io.File;importjava.io.IOExceptiou;mipoitjava.io.*;importjavax.imageio,IiiiageIO;importjavax.swing,event.*;importjavax.swing.*;importjava.awt.BorderLayout;importjava.awt.Checkbox;importjava.awt.CheckboxGroup,importjava.awt.Color;importjava.awt.Coiitaiiier;importjava.awtTlowLayout;importjava.awt.Font;importjava.awt.GridLayout;importjava.awt.Toolkit;mipoitjava.awt.datatransferClipboard;mipoitjava.awt.datatransferDataFlavor,mipoitjava.awt.datatransfeLStringSelectiou;mipoitjava.awt.datatransferTransferable;mipoitjava.awt.datatraiisferUiisuppoitedFlavorExceptiou;importjava.awt.event.ActioiiEveut;mipoitjava.awt.event.ActioiiListener;importjava.awt.event.IuputEvent;importjava.awt.event.KevEvent;importjava.io.File;importjava.io.FileReader,importjava.io.FileWriter;importjava.io.IOExceptiou;importjava.io.RandoniAccessFile;mipoitjava.text.SiinpleDateFoniiat;importjava.util.Date;importjavax.swiiig.Box;importjavax.swingJButton;importjavax.swingJDialog;importjavax.swingJFraiiie,importjavax.swingJLabel;importjavax.swingJMeiiu;importjavax.swingJMenuBar;importjavax.swingJMenuItem;importjavax.swiiigJOptioiiPaiie;importjavax.swingJPauel;mipoitjavax.swingJPasswordField;importjavax.swingJSci'ollPane;importjavax.swing.JTextAiea;importjavax.swingJTextField;importjavax.swiiig.KeyStroke;importjavax.swiiig.Tuner;publicclassGameextendsJFranieiinpleiiientsRunnable,KeyListeiier,ActionListeiier{privateStrings=newSuing("打砖块游戏");//定义组件JFiaiiieEJDialoglogin,addUser;JToolBartoolbar=newJToolBarQ;//工具栏JButtoiigstait=null;//开始按钮JButtoiigstop=null;//暂停按钮JButtoiigrestait=null;//重新开始按钮JButtoiisetmusic=null;//设置音乐按钮JButtoiisetspeed;〃设置速度按钮JLabelctiine=null;//计时标签JLabelclife=uuU;//生命标签JLabelcscoie=uull;//分数标签JCoiiiboBoxgiiiodel=null;//砖块排列模型JCoiiiboBoxsetgate=null,//设置关卡filialJTextFieldname=newJTextField(lO);//filialJPasswordFieldpasswoid=newJPasswordField(10);//密码//定义变量staticiiitspeed=100;//速度(全丿』静态)Staticbooleanisfire=true;//isfire为true时,有碰撞声staticiiittoolgate=0,staticbooleanrespeed=false;iuthours=0,minutes=0,seconds=0;intm=&11=5;lutlife=3;//生命iutscore=0;//分数booleanisstop=tme;//开始暂停booleansetpaddle=true;booleansetball=tiue;lutmodel=1;//砖块叠放的模型0为矩形1为三角形2为倒三角形3为空三角形4为六边形//定义嵌入对象SetMusicGetMusic;//咅乐窗口SetSpeedsettiiigspeed;//速度窗口FireVoicefirevoice;//声明碰撞声音类Tlueadt=newTliread(tliis);//定义图形Brickbnck[][]=null;//砖块Ballball=newBallQ;//球Paddlepaddle=newPaddleQ,//板块Treasure[]treasure=newTreasure[4];//宝物MyPaiielpanel;〃画板Bufferedlinagemigl;//图片Bufferedlinagemig2;/***构造函数***/publicGame(){unto;〃登陆注册界面PublicvoidlogiiiDialogO{login=newJDialogQ;logiu.setTitleC登录");logiu.setLayout{newFlowLayoutO);logiu.add(iiewJLabel("用户名:logiu.add(iiame);logiu.add(iiewJLabel("密 码:"));passwoid・setEchoChar('*');logiu.add(passwoi'd);JButtoiiconfirm=newJButton("登录");confirm.addActioiiListenei(newActioiiListeiier(){publicvoidactioiiPerfbrmed(ActioiiEveiite){newif (coiiipareUserData(iiaiiie.getText().trim(),newString(pass\vord.getPasswordO))){login,setVisible{false);f.setVisible(tnie);}else{JOptioiiPaiie.showMessageDialog(logiu,"用户名或密码错误!",“错误提示",JOptioiiPane.ERROR_MESSAGE);}}});logiu.add(coiifirm).finalJDialogregDialog=newJDialog(logiii,"注册役true);registerDialog(regDialog);JButtoiiregister=newJButtou("注册");registeraddActioiiListeneiXuewActioiiListenerQ{publicvoidactioiiPerfbrmed(ActioiiEvente){regDialog.setVisible(tnie);}});logiu.add(i'egister);logiu.setSize(200,130);logiu.setResizable(false);logiu.setLocatioiiRelativelb(null);logiu.setVisible(ti'ue);〃用户名密码的确认publicbooleancoiiipareUserData(Striugname.Stringpassword){try{RaiidoniAccessFileout=newRandoiiiAccessFile("useLtxt'\"rw");Stringfiianie,password=null;while(out.getFilePoiuterO<outJeugthQ){fiiaiiie=out.readUTFO;out.readUTFQ;取ssword=out.readUTFQ;if(fiiaiiie.equals(uame)&&fpasswoid.equals(password))returntrue;}out.closeQ;}catch(lOExceptioiie){e.priutStackTrace(),returnfalse.〃注册用户的信息publicvoidregisterDialog(fiiialJDialogregDialog){Boxboxl=Box.createVerticalBoxO;boxl.add(newJLabel(*'用户名化JLabel.RIGHT));box1.add(Box.createVerticalSti'ut{10));boxl.add(newJLabel(*'性别:",JLabel.RIGHT));box1.add(Box.createVerticalSti'ut{10));boxLadd(newJLabel("密码JLabeLRIGHT),-1);box1.add(Box.createVerticalSti'ut(10));boxLadd(newJLabel("确认密码\JLabeLRIGHT));Boxbox2=Box.createVerticalBoxO;filialJTextFielduameTextField=newJTextField(lO);box2.add(uanieIextField);box2.add(Box.createVerticalSti'ut(8)),filialCheckboxGroupcbg=newCheckboxGroupO;Boxbox21=BoxxreateHorizontalBoxQ;filialCheckboxcbl=newCIieckbox("男",cbg.true);box21.add(cbl);box21.add(iie\vCheckbox("女役cbg.false));box2.add(box21),box2.add(Box.createVerticalSti'ut(8));filialJPasswordFieldpassl=newJPasswoidField(lO);box2.add(passl),box2.add(Box.createVerticalSti'ut(8));filialJPasswordFieldpass2=newJPasswoidField(lO);box2.add(pass2).BoxbaseBox=Box.createHorizoiitalBoxO;baseBox.add(box1);baseBox・add(box2);regDialog.setLayout(newFlowLayout());regDialog.add(baseBox);JButtouconfirm=newJButtoii("确定");JButtoucancel=newJButtou("取消");regDialog.add(coufiriii);regDialog.add(cancel);regDialog.setSize(200,200),regDialog.setResizable(false);regDialog.setLocatiouRelativeTo(iiull);confiini,addActionListeiier(newActioiiListenerQ{publicvoidactioiiPerf6rmed(ActioiiEventargO){Stringsex=null;if(cbg.getSelectedCheckboxQ=cbl)sex="男";elsesex="女”;
newif(saveUserData(iiameTextField.getText().trim(),sex,new Stiiiig(pass1.getPassword()),newStnng(pass2.getPasswordO)))legDialog.setVisible(ftilse);elseJOptioiiPaiie.showMessageDialog(regDialog,"输入有误,请检查”「错误提示役JOptioiiPaiie.ERROR_MESSAGE);}});caiiceLaddActioiiListeiier(iiewActioiiListeiierO{publicvoidactioiiPerf6rmed(ActioiiEventargO){regDialog.setVisible(false),}});/***初始化变量***/publicvoidinitvaiiable(){hours=0;nunutes=0;seconds=0,speed=Setspeed・getspeed(toolgate),life=3;isstop=true;setpaddle=true;setball=true;model=0;switch(toolgate){case0:m=4;n=5;ball.i-=30;paddle.width=150;uy{img2=IniageIO.read(iiewFile("ljpg"));}catch(lOExceptionel){el.prmtStackTraceQ;}break;case1:m=8;n=5;ball.i-=20;paddle.width=120;uy{img2=ImageIO・Tead(newFile("2jpg"));}catch(lOExceptionel){e1.priiitStackTraceO;}break;default:m=16;n=5;ball.r=10;paddle.width=90;uy{img2=ImageIO・Tead(newFile("3jpg")),}catch(lOExceptionel){e1.priiitStackTraceO;}balLxBall=paddle.xpaddle+paddle.width*0.5;balLvBall=paddle.ypaddle-balLr,brick=newBnck[m][n];for(lilta=0;a<treasure.length;a++){treasure[a]=newTreasureQ,k=newiiit[4];for(lilta=0;a<kleugth;a++){k[a]=(int)(Math.randomQ*(in*ii)).for(liltj=0;j<bnck[0].length;j++){for(lilti=0;i<brickJengtli;i++){bnck[i]|j]=newBiick();bnck[i]|j].width=800/iii;bnck[i]|j].lieigli=200/ii;bnck[i]|j].alive=1;for(iiita=0;a<k.length;a++){if(i*j=k[a]){blick[i]|j].istreasure=a+1;try{iiiigl=IiiiagelO.read(newFile("ljpg"));}catch(lOExceptioiie){e.printStackTraceO,/***主界面初始化函数***/publicvoidmit(){iiiin^ariableQ;GetMusic=newSetMusicQ;//开启音乐settingspeed=newSetSpeedQ;//初始化速度设置窗口firevoice=newFireVoiceQ;//设置窗体setSize(800,500);setBackground(Color.white);panel=newMyPauelQ;tliis.setResizable(false);tliis.setLocation(200,200);ContainercoiitentPaiie=getContentPaiie(),contentPaiie.setLayout(newBorderLayoutQ);tliis.setTitle(s),//初始化按钮gstait=newJButtoii("开始”);gstop=newJButtoii("暂停");giestait=newJButtoii("重新开始”);setmusic=newJButtou("设置音乐”);setspeed=newJButtou("设置速度");//初始化计时标签ctiiiie=newJLabel("计时:00:00:00”);clife=newJLabel(”生命:3“);cscore=newJLabel("分数:0");//初始化下拉栏Striug[]smodel={”模型1","模型2","模型3”,”模型4","模型5"};giiiodel=newJComboBox(siiiodel);Striug[]sgate={"^1关T第2关丁第3关丁第4关丁第5关”};setgate=newJComboBox(sgate);//将组件添加到工具栏toolbaLadd(gstart);toolbar.addSeparatorO;//^加分隔栏toolbaLadd(gstop);toolbar.addSeparator();〃添加分隔栏toolbaLadd(gi'estail);toolbar.addSeparatorO;//^加分隔栏toolbaLadd(setiiiusic);toolbar.addSeparatorO;//^加分隔栏toolbaLadd(setspeed);toolbar.addSeparatorO;//^加分隔栏toolbaradd(giiiodel);toolbar.addSeparatorO;//^加分隔栏toolbaLadd(setgate);toolbar.addSeparatorO;//^加分隔栏toolbaLadd(ctime);toolbar.addSeparatorO;//^加分隔栏toolbaLadd(clife),toolbar.addSeparatorO;//^加分隔栏toolbaLadd(cscore);//添加组ft到画寂contentPaiie.add(toolbar,BorderLayout.NORTH),contentPaiie.add(pai
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商户入住商务合同范例
- 天津滨海汽车工程职业学院《地球物理场论I》2023-2024学年第一学期期末试卷
- 天府新区信息职业学院《装修工程概预算实训》2023-2024学年第一学期期末试卷
- 正常购买合同范例
- 广告大屏合同范例
- 汕尾锅炉陶瓷喷涂施工方案
- 欧式合同范例
- 凉皮供货协议合同范例
- 录音制作合同范例
- 《2 我向国旗敬个礼》教学实录-2024-2025学年道德与法治一年级上册统编版
- 酒店用品设备采购投标方案(技术方案)
- JCT908-2013 人造石的标准
- 员工职业生涯规划调查问卷
- 课程与教学论-全书要点(余文森版)-
- 万物之理-爱因斯坦之梦智慧树知到课后章节答案2023年下中国海洋大学
- UI设计·形考任务一
- 天津理工大学数据结构实验报告4
- 雷达原理与系统-雷达系统设计与实验
- 充电桩工程施工组织设计施工组织
- 起诉状(淘宝虚假交易)
- 论文《后疫情时代信息技术与幼儿园教育深度融合的策略研究》
评论
0/150
提交评论