还剩22页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
J__A语言实现连连看游戏
1.课程设计目的J__a语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点面向对象的__方法是当今世界最流行的__方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承学会J__a程序__的环境搭建与配置,并在实际运用中学习和掌握J__a程序__的全过程进一步熟悉掌握J__a程序设计语言的基础内容,如用户图形界面设计、J__a多线程编程、Applet程序的设计、文件和网络输入输出流编程、J__a数据库编程等通过亲自动手写程序,一方面拓展知识面,一方面锻炼调试能力
2.设计方案论证
2.1设计思路
2.
1.1用户可以通过__菜单中的“开始游戏”选项,开始新游戏程序程序会载入__,并通过特定的算法排列__,并标记__,以便判断__是否相同记录__坐标,以方便计算__是否可以相连确定__大小,以确定用户__的是那张__
2.
1.2用户选择两张一样的__,通过鼠标进行选取,如果用户两次__的__不相同,那么系统认为用户没有点(鼠标记数归0),以完成用户以后的选取工作如果用户选择的是相同的__,那么系统会消除这两张__,并使鼠标记数为0,并消除这两张__的标记,使里面的__被标记在外面以便用户可以进行以后的选择
2.
1.3用户也可使通过使用“__”功能进行消除__方法是__菜单中的“__”选项使用,__后如果界面上有两张可以相连的相同__就随机消除两张可以相连的相同的__
2.
1.4__数目是有限的,默认数目为三,每使用一次“__”功能,__数目就会自动减一,当__数目为零时(使用三次“__”功能)并且用户想再次使用__时,系统会弹出对话框提示用户,并把菜单中“__”选项变为灰色(用户不可使用)
2.
1.5当系统开始游戏后,系统会在后台记录时间,如果在用户还没有消除所有__时,系统时间到了,那么系统会弹出对话框,提示用户,时间到了,游戏失败
2.
1.6当用户__确定后,系统还会弹出对话框询问用户是否重新开始,用户选择“是”时,系统会开始新游戏;当用户选择“否”时,系统会返回开始界面;当用户选择“取消”时,系统会返回提示时间到的界面
2.
1.6如果在时间未到时,用户使所有的__都消失(两两消除,直到最后一对),系统会提示用户游戏以通过,点“确定”后回到开始界面
2.2设计方法在设计连连看小游戏是,需要编写6个J__a源文件__inFrame.j__a,Ches__utton.j__a,__pUI.j__a,Settings.j__a,ArrayPoint.j__a,__p.j__a
2.
2.1__inFrame.j__a主窗口部分定义了程序用函数,实现了程序菜单(initMenuBar)的使用
2.
2.2Ches__utton.j__a按键部分定义按键的位置,代表的值
2.
2.3__pUI.j__a游戏部分判断__的__,判断两__是否可连,是否相同判断是否胜利实现__功能
2.
2.4Settings.j__a数组确定了游戏各种参数属性
2.
2.5ArrayPoint.j__a取值部分定义__的值
2.
2.6__p.j__a算法部分通过算法确定两张__是否连通
2.3功能模块此设计共有以下几个功能模块
2.
3.1开始游戏程序会载入__,并通过特定的算法排列__,并标记__,以便判断__是否相同记录__坐标,以方便计算__是否可以相连确定__大小,以确定用户__的是那张__
2.
3.2使用“__”用户__菜单中的“__”选项使用,__后如果界面上有两张可以相连的相同__就随机消除两张可以相连的相同的__
2.
3.3限制__“数目”__默认数目为三,每使用一次“__”功能,__数目就会自动减一,当__数目为零时(使用三次“__”功能)并且用户想再次使用__时,系统会弹出对话框提示用户,并把菜单中“__”选项变为灰色(用户不可使用)
2.
3.4对用户游戏时的判断用户选择两张一样的__,通过鼠标进行选取,如果用户两次__的__不相同,那么系统认为用户没有点(鼠标记数归0),以完成用户以后的选取工作如果用户选择的是相同的__,那么系统会消除这两张__,并使鼠标记数为0,并消除这两张__的标记,使里面的__被标记在外面以便用户可以进行以后的选择
2.4流程图如下图2主函数流程图YNNYNYNYYN图3游戏进行流程图图4使用__流程图图5计算时间流程图
2.5类、方法、属性说明成员变量成员变量描述变量类型名称行数intROWS列数intCOLUMNS__后缀名stringRELEX每局所花时间(秒)intPERTIME判断的时间间隔intPER__的使用次数intBOMBCOUNT方法方法名功能备注MenuBar实用程序菜单无备注Bomb设置__无备注Point定义按键的位置无备注Chesses初步定义游戏界面,功能无备注Timer时间限制无备注
3.设计结果与分析用户可以通过__菜单中的“开始游戏”选项,开始新游戏程序程序会载入__,并通过特定的算法排列__,并标记__,以便判断__是否相同记录__坐标,以方便计算__是否可以相连确定__大小,以确定用户__的是那张__图6开始游戏后画面用户选择两张一样的__,通过鼠标进行选取,如果用户两次__的__不相同,那么系统认为用户没有点(鼠标记数归0),以完成用户以后的选取工作如果用户选择的是相同的__(如第八行第二列和第八行第三列),那么系统会消除这两张__,并使鼠标记数为0,并消除这两张__的标记,使里面的__被标记在外面以便用户可以进行以后的选择图7消除三对后画面用户也可使通过使用“__”功能进行消除__方法是__菜单中的“__”选项使用,__后如果界面上有两张可以相连的相同__就随机消除两张可以相连的相同的__(如第一行第一列河第一行第四列)图8使用__后画面__数目是有限的,默认数目为三,每使用一次“__”功能,__数目就会自动减一,当__数目为零时(使用三次“__”功能)并且用户想再次使用__时,系统会弹出对话框提示用户,并把菜单中“__”选项变为灰色(用户不可使用)图9__使用光后画面当系统开始游戏后,系统会在后台记录时间,如果在用户还没有消除所有__时,系统时间到了,那么系统会弹出对话框,提示用户,时间到了,游戏失败图10时间到时的画面当用户__确定后,系统还会弹出对话框询问用户是否重新开始,用户选择“是”时,系统会开始新游戏;当用户选择“否”时,系统会返回开始界面;当用户选择“取消”时,系统会返回提示时间到的界面图11__确定时的画面如果在时间未到时,用户使所有的__都消失(两两消除,直到最后一对),系统会提示用户游戏以通过,点“确定”后回到开始界面图12通关画面
4.设计体会通过这次课程设计我学到了不少东西,也发现了大量的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固因而,通过课程设计之后,把以前所学过的知识重新温故有些在设计过程中已解决,有些还有待今后慢慢学习,只要认真学就会有更多的收获总之这次课程设计使我更多的掌握了所学的知识,并运用到实践上,了解了j__a的重要性,对以后的学习起了重要作用在设计的过程中我遇到了很到问题,不过在老师和同学们的帮助和自己的思考下还是很好的完成了这此课程设计还让我懂得了写程序不能闭门造车,要努力拓宽知识面,开阔视野,拓展思维
5.____
[1]印旻.J__a语言与面向对象程序设计[M]北京:清华大学出版社,
2005.4:58-72
[2]朱站立、沈伟.J__a程序设计实用教程[M]北京:电子工业出版社
2007.5:82-95
[3]朱福喜、尹为民、余振坤等.J__a语言与面向对象程序设计[M]第2版.武汉:武汉大学出版社,
2006.1123-130
[4]艾力江.J__a2范例入门与提高 [M]北京: 清华大学出版社
6.附录__inFrame.j__a importj__a.awt.BorderLayout;importj__a.awt.event.ActionEvent;importj__a.awt.event.ActionListener;importj__ax.swing.JFrame;importj__ax.swing.JMenu;importj__ax.swing.JMenuBar;importj__ax.swing.JMenuItem;importj__ax.swing.JOptionPane;importj__ax.swing.JPanel;importj__ax.swing.SwingUtilities;importj__ax.swing.Timer;importcn.elva.Settings;importcn.elva.model.__p;publicclass__inFrameextendsJFrame{privatestaticfinallongserialVersionUID=1L;privateintbombCount=Settings.BOMBCOUNT;privateJPaneljContentPane=null;privateJMenuBarmenuBar=null;privateJMenufileMenu=null;privateJMenuItemreloadItem=null;privateJMenuItemstartItem=null;privateJMenuItembombItem=null;privateJMenuItemexitItem=null;private__pUI__pUI=null;privatelongstartTime;privatelongendTime;privateTimertimer=null;privateJMenuBarinitMenuBar{ifmenuBar==null{menuBar=newJMenuBar;fileMenu=newJMenu文件;startItem=newJMenuItem开始游戏;startItem.addActionListenernewActionListener{publicvoidactionPerformedActionEvente{reload;}};reloadItem=newJMenuItem重来一次;reloadItem.addActionListenernewActionListener{publicvoidactionPerformedActionEvente{reload;}};exitItem=newJMenuItem退出;exitItem.addActionListenernewActionListener{publicvoidactionPerformedActionEvente{System.exit0;}};fileMenu.addstartItem;fileMenu.addreloadItem;fileMenu.addbombItem;fileMenu.addexitItem;menuBar.addfileMenu;}returnmenuBar;}publicstaticvoid__inString[]args{SwingUtilities.invokeLaternewRunnable{publicvoidrun{__inFramethisClass=new__inFrame;thisClass.setDefaultCloseOperationJFrame.EXIT_ON_CLOSE;thisClass.setVisibletrue;}};}public__inFrame{super;initialize;}privatevoidinitialize{this.setSize900900;this.setTitlellk;this.setJMenuBarinitMenuBar;//this.setContentPanegetJContentPane;this.setTitle连连看;}privatevoidreload{__pUI=new__pUI;startTime=System.currentTimeMillis/1000;endTime=startTime+Settings.PERTIME;jContentPane=newJPanel;jContentPane.setLayoutnewBorderLayout;jContentPane.add__pUI;this.setContentPanejContentPane;this.validate;__p.LEFTCOUNT=Settings.ROWS*Settings.COLUMNS;initTimer;bombItem.setEnabledtrue;bombCount=Settings.BOMBCOUNT;}privatevoidinitTimer{ActionListeneractionListener=newActionListener{publicvoidactionPerformedActionEvente{startTime=System.currentTimeMillis/1000;ifstartTime==endTime{JOptionPane.showMessageDialog__inFrame.this时间到了!!;intresult=JOptionPane.showConfirmDialog__inFrame.this重玩一次AgainJOptionPane.YES_NO_CAN__L_OPTION;ifresult==JOptionPane.YES_OPTION{reload;}else{jContentPane.setVisiblefalse;validate;}}}};timer=newj__ax.swing.Timer1000actionListener;timer.start;}}Ches__utton.j__apublicclassChes__uttonextendsJButton{protectedArrayPointpoint=null;publicChes__uttonintrowintcolintvalue{thisnewArrayPointrowcolvalue;}publicChes__uttonArrayPointpoint{this.point=point;Stringname=Resour__/+point.getValue+Settings.RELEX;URLurl=Ches__utton.class.getResour__name;I__geIconicon=newI__geIconurl;this.setIconicon;}publicChes__utton{thisnewArrayPoint000;}publicArrayPointgetPoint{returnpoint;}publicvoidsetPointArrayPointpoint{this.point=point;}}__pUI.j__aimportj__a.awt.GridLayout;importj__a.awt.event.ActionEvent;importj__a.awt.event.ActionListener;importj__ax.swing.JOptionPane;importj__ax.swing.JPanel;importcn.elva.Settings;importcn.elva.model.ArrayPoint;importcn.elva.model.__p;publicclass__pUIextendsJPanelimplementsActionListener{privatestaticfinallongserialVersionUID=1L;privateChes__utton[]chesses=null;private__p__p=new__p;privatebooleantwo=false;privateArrayPointpriviousPoint;privateArrayPointcurrPoint;public__pUI{super;initialize;}privatevoidinitialize{initChesses;GridLayoutgridLayout=newGridLayoutSettings.ROWS+2Settings.COLUMNS+2;gridLayout.setHgap2;gridLayout.setVgap2;this.setLayoutgridLayout;this.setSize300200;forintrow=0;rowSettings.ROWS+2;row++{forintcol=0;colSettings.COLUMNS+2;col++{addchesses[row*Settings.COLUMNS+2+col];}}}privatevoidinitChesses{int[][]values=__p.get__p;this.chesses=newChes__utton[Settings.ROWS+2*Settings.COLUMNS+2];forintrow=0;row10;row++{forintcol=0;col10;col++{intindex=row*Settings.COLUMNS+2+col;chesses[index]=newChes__uttonrowcolvalues[row][col];chesses[index].addActionListenerthis;ifrow==0||row==Settings.ROWS+2-1||col==0||col==Settings.COLUMNS+2-1{chesses[index].setVisiblefalse;}}}}publicvoidclearCheeseArrayPointpriviousPointArrayPointcurrPoint{int[][]values=__p.get__p;values[priviousPoint.getI][priviousPoint.getJ]=0;values[currPoint.getI][currPoint.getJ]=0;intindex1=priviousPoint.getI*Settings.COLUMNS+2+priviousPoint.getJ;intindex2=currPoint.getI*Settings.COLUMNS+2+currPoint.getJ;chesses[index1].setVisiblefalse;chesses[index2].setVisiblefalse;if__p.LEFTCOUNT==0{JOptionPane.showMessageDialogthis恭喜您通过!!;}}publicvoidactionPerformedActionEvente{Ches__uttonbutton=Ches__uttone.getSour__;ArrayPointp=button.getPoint;iftwo{currPoint=p;if__p.__tchthis.priviousPointthis.currPoint{clearCheesethis.priviousPointthis.currPoint;}two=false;}else{this.priviousPoint=p;two=true;}}publicvoidbomb{int[][]values=__p.get__p;ArrayPointp1=null;ArrayPointp2=null;forintrow=1;rowSettings.ROWS+1;row++{forintcol=1;colSettings.COLUMNS+1;col++{ifvalues[row][col]!=0{p1=newArrayPointrowcolvalues[row][col];forinti=1;iSettings.ROWS+1;i++{forintj=1;jSettings.COLUMNS+1;j++{ifvalues[i][j]!=0{p2=newArrayPointijvalues[i][j];}else{continue;}//System.out.printlnp1+|+p2;if__p.__tchp1p2{clearCheesep1p2;return;}}}}}}}}Settings.j__apackagecn.elva;publicinte_____Settings{publicstaticfinalintROWS=8;publicstaticfinalintCOLUMNS=8;publicstaticfinalStringRELEX=.gif;publicstaticfinalintPERTIME=600;publicstaticfinalintPER=1;publicstaticfinalintBOMBCOUNT=3;}ArrayPoint.j__apackagecn.elva.model;publicclassArrayPoint{protectedinti;protectedintj;protectedintvalue;publicArrayPointintiintjintvalue{this.i=i;this.j=j;this.value=value;}publicStringtoString{returni++j++value;}publicintgetI{returni;}publicvoidsetIinti{this.i=i;}publicintgetJ{returnj;}publicvoidsetJintj{this.j=j;}publicintgetValue{returnvalue;}publicvoidsetValueintvalue{this.value=value;}}__p.j__apackagecn.elva.model;importj__a.util.Random;importcn.elva.Settings;publicclass__p{publicstaticintLEFTCOUNT=Settings.ROWS*Settings.COLUMNS;privateint[][]__p=newint[Settings.ROWS+2][Settings.COLUMNS+2];privateint__xKinds=4;public__p{init;}publicint[][]get__p{return__p;}privatevoidinit{int[]tempArr=newint[Settings.ROWS*Settings.COLUMNS];intlen=tempArr.length;forinti=0;ilen/__xKinds;i++{tempArr[i*4]=i+1;tempArr[i*4+1]=i+1;tempArr[i*4+2]=i+1;tempArr[i*4+3]=i+1;}randomtempArr;forinti=1;iSettings.ROWS+1;i++{forintj=1;jSettings.COLUMNS+1;j++{this.__p[i][j]=tempArr[i-1*Settings.COLUMNS+j-1];}}}privatevoidrandomint[]array{Randomrandom=newRandom;intlen=array.length;forinti=len;i0;i--{intj=random.nextInti;inttemp=array[i-1];array[i-1]=array[j];array[j]=temp;}}publicbooleanoneLineWithoutValueArrayPointp1ArrayPointp2{ifhorizon__tchp1p2{returntrue;}elseifvertical__tchp1p2{returntrue;}returnfalse;}publicbooleanoneLineArrayPointp1ArrayPointp2{ifp
1.value!=p
2.value{returnfalse;}ifoneLineWithoutValuep1p2{returntrue;}returnfalse;}publicbooleanvertical__tchArrayPointp1ArrayPointp2{ifp
1.j!=p
2.j{returnfalse;}ifp
1.ip
2.i{ArrayPointtemp=null;temp=p1;p1=p2;p2=temp;}intspa__Count=p
2.i-p
1.i;ifspa__Count==1p
1.value==p
2.value{returntrue;}forinti=p
1.i+1;ip
2.i;i++{ArrayPointpoint=newArrayPointip
1.j__p[i][p
1.j];ifpoint.value!=0{returnfalse;}}returntrue;}publicbooleanhorizon__tchArrayPointp1ArrayPointp2{ifp
1.i!=p
2.i{returnfalse;}ifp
1.jp
2.j{ArrayPointtemp=null;temp=p1;p1=p2;p2=temp;}intspa__Count=p
2.j-p
1.j;ifspa__Count==1p
1.value==p
2.value{returntrue;}forinti=p
1.j+1;ip
2.j;i++{ArrayPointp=newArrayPointp
1.ii__p[p
1.i][i];ifp.value!=0{returnfalse;}}returntrue;}privatebooleanisSameOneArrayPointp1ArrayPointp2{ifp
1.i==p
2.ip
1.j==p
2.j{returntrue;}else{returnfalse;}}publicbooleanoneConnerWithoutValueArrayPointp1ArrayPointp2{ArrayPointp1H=newArrayPointp
1.ip
2.j__p[p
1.i][p
2.j];ArrayPointp1V=newArrayPointp
2.ip
1.j__p[p
2.i][p
1.j];ifhorizon__tchp1p1Hp1H.value==0{ifthis.vertical__tchp1Hp2{returntrue;}}ifvertical__tchp1p1Vp1V.value==0{ifhorizon__tchp1Vp2{returntrue;}}returnfalse;}publicbooleanoneConnerArrayPointp1ArrayPointp2{ArrayPointp1H=newArrayPointp
1.ip
2.j__p[p
1.i][p
2.j];ArrayPointp1V=newArrayPointp
2.ip
1.j__p[p
2.i][p
1.j];ifp
1.value!=p
2.value{returnfalse;}ifoneConnerWithoutValuep1p2{returntrue;}returnfalse;}publicbooleantwoConnerArrayPointp1ArrayPointp2{ifp
1.value!=p
2.value{returnfalse;}intcount=0;ArrayPointtemp=null;forintcol=p
1.j-1;col=0;col--{temp=newArrayPointp
1.icol__p[p
1.i][col];iftemp.value==0this.oneLineWithoutValuep1temp{ifthis.oneConnerWithoutValuetempp2{returntrue;}}else{break;}}count=Settings.COLUMNS+2-p
1.j;forintcol=p
1.j;colSettings.COLUMNS+2;col++{temp=newArrayPointp
1.icol__p[p
1.i][col];iftemp.value==0oneLineWithoutValuep1temp{ifoneConnerWithoutValuetempp2{returntrue;}}}count=p
1.i;forintrow=count-1;row=0;row--{temp=newArrayPointrowp
1.j__p[row][p
1.j];iftemp.value==0oneLineWithoutValuep1temp{ifoneConnerWithoutValuetempp2{returntrue;}}}forintrow=p
1.i+1;rowSettings.ROWS+2;row++{temp=newArrayPointrowp
1.j__p[row][p
1.j];iftemp.value==0oneLineWithoutValuep1temp{ifoneConnerWithoutValuetempp2{returntrue;}}}returnfalse;}publicboolean__tchArrayPointp1ArrayPointp2{ifthis.isSameOnep1p2returnfalse;ifoneLinep1p2{__p[p
1.i][p
1.j]=0;__p[p
2.i][p
2.j]=0;LEFTCOUNT-=2;returntrue;}ifoneConnerp1p2{__p[p
1.i][p
1.j]=0;__p[p
2.i][p
2.j]=0;LEFTCOUNT-=2;}iftwoConnerp1p2{__p[p
1.i][p
1.j]=0;__p[p
2.i][p
2.j]=0;LEFTCOUNT-=2;returntrue;}returnfalse;}开始程序开始游戏接收用户__是否使用__是否二次__消除__计数两张__是否相同消除两张一样的可以相连的__两张__是否可以相连消除用户__的两张__消除__计数是否还有图片未消除结束。