欢迎来到天天文库
浏览记录
ID:11313660
大小:749.50 KB
页数:26页
时间:2018-07-11
《java课程设计蜘蛛纸牌游戏下拉列表运算器设计课程设计报告大学论文.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
计算机学院《面向对象程序设计》课程设计报告学号xxxx《面向对象程序设计》课程设计报告题目:下拉列表运算器设计专业:xxxxx班级:xxx姓名:xx指导教师:xx成绩:xxxxxx年x月xx日25 计算机学院《面向对象程序设计》课程设计报告目录1设计内容及要求21.1设计内容21.2设计要求22概要设计32.1代码功能功能模块设计:32.2程序的总体设计流程图:32.3模块一的详细介绍:32.3.1主要的类:32.3.2主要的变量:42.3.3主要的方法:42.4模块二的详细介绍:52.4.1主要的类:52.4.2主要的变量:52.4.3主要的方法:52.5模块三的详细介绍:62.5.1主要类介绍:62.5.2主要变量:72.5.3主要方法:72.6模块四的详细介绍:82.6.1主要的类:82.6.2主要的变量:82.6.3主要的方法:83设计过程或程序代码93.1需要实现的主要功能:93.2功能设计流程图:103.3主要功能的代码实现:103.3.1游戏菜单栏内游戏菜单及帮助菜单功能展示:103.3.2主界面的设计:113.3.3纸牌的初始化以及发牌操作133.3.4纸牌的移动以及放置183.3.5显示当前纸牌可行的操作:193.3.6回收纸牌:214设计结果与分析224.1运行程序:224.2发布程序:234.3总结:235参考文献2425 计算机学院《面向对象程序设计》课程设计报告1设计内容及要求1.1设计内容相信很多人都玩过蜘蛛纸牌这款休闲游戏,现在随着生活水平的提高,人们拥有充分的时间来享受休闲游戏带来的快乐,越来越多的人亲睐蜘蛛纸牌游戏。谈起这款游戏,大家并不陌生。从WINDOWS2000系统开始,就嵌入了蜘蛛纸牌游戏,可是随着微软系统的不段升级,蜘蛛纸牌游戏的功能业变得越来越强大,游戏的界面也更加美观。用户的体验感受也更加美好。所以,蜘蛛纸牌游戏的开发对于人类的生活娱乐更加有意义。了解蜘蛛纸牌的开发过程也是作为一名学习计算机专业大学生所应该尝试的过程。游戏的目标是以最少的移动次数将牌面中的十叠牌以及待发的五组,共计八副牌整理移除。当所有牌被移除整理到界面的左下方,游戏获胜。1.2设计要求需要做的工作有学习掌握开发程序的方法,开了解发工具,进行需求分析,根据得到的需求规格说明书设计具体的程序流程图,编写程序,修改程序,运行程序,系统调试程序、测试程序,发布程序。2概要设计2.1代码功能功能模块设计:蜘蛛纸牌游戏共由4个部分组成,分别是:Spider.java,SpiderMenuBar.java,PKCard.java,AboutDialog.java。SpiderMenuBar.java包含名为SpiderMenuBar的public类,其主要功能为生成蜘蛛纸牌游戏的菜单栏,实现菜单栏中各个组件的事件侦听。主要包括3个模块:图形用户界面的构建;组件监听接口的实现:显示可执行操作的线程。PKCard.java包含名为PKCard的public类,其主要功能为:定义纸牌的属性,包括名称,位置等相关信息。并通过相关方法实现纸牌的移动等。AboutDialog.java包含名为AboutDialog的public类,其主要功能为生成蜘蛛纸牌游戏的帮助栏。Spider.java包含名为Spider的public类,其主要功能为生成蜘蛛纸牌游戏的框架,实现游戏中的方法,包括:纸牌的随机生成,位置的摆放等。25 计算机学院《面向对象程序设计》课程设计报告2.2程序的总体设计流程图:2.3模块一的详细介绍:SpiderMenuBar.java的功能是生成蜘蛛纸牌游戏的菜单栏。实现菜单栏中的各个组件的事件。2.3.1主要的类:JMenuBar类、JMenu类、JMenuItem类、JRadioButton类都是设计GUI(图形用户界面)的包javax.swing中的类。可以用import引用这些类。JMenuBar类是JComponent类的子类负责创建菜单条的。即JMenuBar类的一个实例就是一个菜单条。JMenu类是JComponent类的子类负责创建菜单组的。即JMenu类的一个实例化就是一个菜单。JMenuItem类是JMenu类的父类负责创建菜单项。即JMenuItem类的一个实例化就是一个菜单项。JRadioButtonMenuItem类负责一个单选按钮菜单项的实现。JRadioButtonMenuItem是属于一组菜单项中的一个菜单项,该组中只能选择一个项。ButtonGroup类用于为一组按钮创建一个多斥作用域。使用相同的ButtonGroup对象创建一组按钮意味着“开启”其中一个按钮时,将关闭组中的其他所有按钮。25 计算机学院《面向对象程序设计》课程设计报告SpiderMenuBar类是此文件的一个主类是JMenuBar的子类。Show类是Thread的子类用于创建线程。2.3.2主要的变量:jNewGame、jHelp变量分别是JMenu类创建的“游戏”、“帮助”菜单。jItemAbout、jItemOpen、jItemPlayAgain、jItemExit、jItemValid变量分别是JMenuItem类创建的“关于”、“开局”、“重新发牌”、“退出”、“显示可行操作”菜单项。jRMItemEasy、jRMItemNormal、jRMItemHard变量分别是JRadioButtonMenuItem类创建的“简单:单一花色”、“中级:双花色”、“高级:四花色”的单选按钮菜单项。group变量是ButtonGroup类创建的一组按钮选择对象。spider变量是Spider类创建的对象用于主界面窗口的实现。将在Spider.java文件中介绍。2.3.3主要的方法:publicJMenuBar()创建新的菜单栏。publicJMenu(Stringtext)构造一个新菜单,用提供的字符串作为其文本。publicJMenuItem(Stringtext)创建带有指定文本的菜单项。publicJRadioButtonMenuItem(Stringtext)创建一个带文本的单选按钮菜单项。publicButtonGroup()创建一个新的单选按钮对象组。publicvoidadd(MenuItemitem)向菜单增加由参数item指定的菜单项对象。publicvoidadd(AbstractButtonb)将单选按钮添菜单项加到组中。publicvoidadd(JMenuc)将指定的菜单添加加到菜单栏中。publicvoidaddSeparator()将新分隔符追加到菜单的末尾。所需要添加的事件处理的接口方法将在后来的模块中进行介绍。事件源即能够产生的事件的对象。监视器用于对事件源进行监视以便对发生的事件做出处理。事件源通过调用相应的方法将某个对象作为自己的监视器。这个方法是addActionListen(ActionListenerlisten)该方法中的参数是ActionListener类型的接口。因此必须用ActionListener接口的类创建的对象传递给该方法的参数,使得该对象成为事件源的的监视器。监视器负责调用特定的方法处理事件,创建监视器的类必须提供处理事件的特定的方法,即实现接口方法。publicvoidaddMenuListener(MenuListenerl)添加菜单事件的侦听器。voidmenuSelected(MenuEvente)选择某个菜单时调用。voidmenuDeselected(MenuEvente)取消选择某个菜单时调用。voidmenuCanceled(MenuEvente)取消菜单时调用。25 计算机学院《面向对象程序设计》课程设计报告2.4模块二的详细介绍:PKCard的功能是定义纸牌的属性,包括名称,位置等相关信息。并通过相关方法实现了纸牌的移动等。2.4.1主要的类:JDialog类是创建对话框窗口的主要类。可以使用此类创建自定义的对话框,或者调用JOptionPane中的多个类方法来创建各种标准对话框。Jpanel类是一个面板类负责创建一个面板容器,再向这个面板添加组件,然后将面板添加到底层容器中。JTabbedPane类负责创建一个组件,它允许用户通过单击具有给定标题和/或图标的选项卡,在一组组件之间进行切换。JTextArea类负责创建一个显示纯文本的多行区域。它作为一个轻量级组件Container类负责创建一个容器对象,此容器可以包含其它组件。AboutDialog类是JDialog类的子类,负责创建一个显示对话框。2.4.2主要的变量:jMainPane、jPanel1、jPanel2、变量是JPane1创建的面板容器。jt1、jt2是JTextArea类创建的文本区对象。jTabbedPane是JTabbedPane类创建的选项卡窗格对象。c变量是Container类创建的容器。2.4.3主要的方法:publicJTabbedPane()创建一个具有默认的JTabbedPane.TOP选项卡布局的空TabbedPane.publicJDialog()创建一个没有标题并且没有指定Frame所有者的无模式对话框。一个共享的、隐藏的窗体将被设置为该对话框的所有者。publicJPanel()创建具有双缓冲和流布局的新面板容器。publicJTextArea(Stringtext)构造显示指定文本为text的新的文本区。publicvoidsetTittle(Strings)设置一个标题为s的对话框。publicvoidsetSize(intwidth,intheigth)创建宽为width,高位heigth大小的对话框。publicvoidsetResizable(booleanb)设置对话框是否可调整大小。b为true时,对话框可调整大小。publicvoidsetDefaultCloseOperation(int25 计算机学院《面向对象程序设计》课程设计报告operation)该方法用来设置单机窗体右上角的关闭图标后,程序会做出怎样的处理。operation取DISPOSE_ON_CLOSE时//隐藏当前窗口,并释放窗体所占有的其他资源。publicvoidsetVisible(booleanb)设置框口是可见还是不可见。b取true是为可见。publicContainergetContentPane()方法可得到窗口的内容面板容器。publicvoidJTextArea.setSize(intwidth,intheigth)设置文本区的大小。publicvoidJTextArea.setEditable(booleanb)设置文本区是否可以编辑。publicvoidJTextArea.setLineWrap(booleanb)设置文本区中输入的文本是否可以实现在右边界自动换行。publicvoidJTextArea.setFont(Fontf)设置文本区内的字体。publicvoidJTextArea.setForeground(Colorc)设置文本区组件的前景色。publicvoidaddTab(Stringtitle,Iconicon,Componentcomponent,Stringtip)添加由title和/或icon表示的component和tip,其中任意一个都可以为nul参数:title-此选项卡中要显示的标题,icon-此选项卡中要显示的图标,component-单击此选项卡时要显示的组件,tip-此选项卡要显示的工具提示。publicvoidpack()调整此窗口的大小,以适合其子组件的首选大小和布局。2.5模块三的详细介绍:PKCard的作用是定义纸牌的属性,包括名称、位置等相关信息。并通过相关方法实现纸牌的移动。2.5.1主要类介绍:JLable类负责创建标签对象。标签用于短文本字符串或图像或二者的显示区。Thread类负责创建线程对象。MouseListener接口、MouseMotionListener接口负责处理事件源所触发的鼠标事件,包括处理鼠标按下、释放、进入、退出、单击、连击、拖动、移动所触发鼠标事件。Point类负责创建表示(x,y)坐标空间中的位置的点对象,以整数精度指定。MouseEvent类负责创建鼠标所发生的事件对象。Flash类负责创建线程对象,不断的获取下一张纸牌。PKCard类是文件的主类,实现MouseListener接口的JLable的子类。负责创建纸牌对象。2.5.2主要变量:Pointpoint变量表示纸牌的位置对象。PointinitPoint表示纸牌的初始化位置对象。intvalue变量表示纸牌的内容值。inttype变量表示纸牌的类型。25 计算机学院《面向对象程序设计》课程设计报告Stringname变量表示纸牌的名称。Containerpane变量表示标签内主容器。booleancanMove变量表示纸牌是否可以移动,值为true时,可以移动。booleanisFront变量表示纸牌是否正面显示,值为true时,则为正面显示。PKCardpreviousCard变量表示上面一张纸牌2.5.3主要方法:publicvoidflashCard(PKCardcard)方法启动Flash线程不停的获取下一张纸牌直至完成。publicvoidrun()方法为纸牌的正面设置白色图片。card.updateUI()方法将UI属性重置为当前外观的值。publicvoidmousePressed(MouseEventmp)方法按下鼠标时事件的处理方法。publicvoidmouseReleased(MouseEventmr)方法释放鼠标时事件处理的方法。publicvoidsetNextCardLocation(Pointpoint)方法放置鼠标时事件处理方法。publicintwhichColumnAvailable(Pointpoint)方法为判断可用列。publicvoidmouseDragged(MouseEventargO)方法鼠标拖动纸牌时事件处理方法。publicvoidmoving(intx,inty)方法将纸牌移动(x,y)个位置。pane.setComponentZOrder(this,1)方法将主件移动到容器中指定的顺序索引。publicPKCard(Stringname,Spiderspider)方法纸牌的构造函数。publicvoidturnFront()方法令纸牌显示正面。publicvoidturnRear()方法令纸牌显示背面。publicvoidmoveto(Pointpoint()方法将纸牌移动到点pointpublicvoidsetCanMove(booleancan)方法判断纸牌是否能够移动。publicbooleanisCardFront()方法判断纸牌是否正面显示。publicbooleanisCardCanMove()方法判断纸是否能够移动。publicintgetCardValue()方法获得纸牌的内容值。publicintgetCardType()方法获得纸牌的类型。2.6模块四的详细介绍:Spider.java文件是蜘蛛纸牌游戏的主类文件,其主要功能是生成蜘蛛纸牌游戏的框架,实现游戏中的方法,包括纸牌的随机生成、位置的摆放等。25 计算机学院《面向对象程序设计》课程设计报告2.6.1主要的类:JFrame类及其子类负责创建的对象称为窗体。JLable类负责创建标签对象。标签用于短文本字符串或图像或二者的显示区。Container类负责创建一个容器对象,此容器可以包含其它组件。PKCard类负责创建纸牌对象。Hashtable类实现一个哈希表,该哈希表将键映射到相应的值。2.6.2主要的变量:publicstaticfinalintEASY=1;代表“简单”等级。publicstaticfinalintNATURAL=2代表“普通”等级。publicstaticfinalintHARD=3代表“难”等级。privateintgrade=Spider.EASY设定初始等级为简单等级;privateContainerpane变量为Container类创建的面板容器。privatePKCardcard[]变量为PKCard类创建的纸牌数组[]。privateJLableclickLable1变量为JLable类创建的右下角发牌区的鼠标点击响应区域。privateJLablegroudLable[]变量为JLable类创建的背景框数组。Hshtabletable变量为Hashtable类创建的一个哈希表对象,用于存储键值数据对。privateintc变量为纸牌的数量。privateintn变量为纸牌的等级。privateinta变量为纸牌所在的列号。privateintfinish变量为纸牌从小到大排列成功的次数。2.6.3主要的方法:publicvoidsetTittle(Strings)设置一个标题为s的窗体。publicvoidsetVisible(booleanb)设置框体是可见还是不可见。b取true是为可见。publicvoidsetSize(intwidth,intheigth)创建宽为width,高位heigth大小的窗体。publicvoidsetDefaultCloseOperation(intoperation)该方法用来设置单机窗体右上角的关闭图标后,程序会做出怎样的处理。operation取EXIT_ON_CLOSE时结束窗体所在的应用程序。publicvoidsetMenuBar(MenuBarmb)将此窗体的菜单栏设置为指定的菜单栏。publicvoidpane.setBackground(Colorc)设置面板的背景颜色。publicvoidpane.setLayout(布局对象)设置面板的布局。publicContainergetContentPane()方法可得到窗口的内容面板容器。25 计算机学院《面向对象程序设计》课程设计报告publicvoidsetBounds(inta,intb,intweidth,intheigth)设置出现在屏幕中的组件距离屏幕的左面a个像素,距屏幕上面b个像素,组件宽为weidth,高为heigth。publicvoidnewGame()方法开始新游戏。publicintgetC()方法返回纸牌的数量。publicvoidsetGrade(intgrade)方法设置纸牌游戏的等级。publicvoidinitCards()方法进行初始化纸牌publicvoidrandomCards()方法令纸牌随机分配。publicvoidsetNA()方法设置还原纸牌游戏。publicvoidsetCardsLocation()方法设置待展开纸牌级表面初始化纸牌的位置。publicvoidshowEnableOperator()方法进行显示是否有可以移动的纸牌。publicvoiddeal()方法开始运行游戏。publicPKCardgetPreviousCard(PKCardcard)方法获取当前纸牌上面的那一张纸牌。publicPKCardgetNextCard(PKCardcard)方法获取当前纸牌的下面的那一张纸牌。publicPointgetLastCardLocation(intn)方法获取第n列纸牌最后一张纸牌的位置。publicPointgetGroundLabelLocation(intn)方法获取第n列纸牌的背景框架的位置。publicvoidsetGroundLabelZOrder()放置groundLable组件。将组件groundLable移动到容器中指定的顺序索引。顺序(105+i)确定了绘制组件的顺序;具有最高顺序的组件将第一个绘制,具有最低顺序的组建将最后一个绘制。在组建重叠的地方,具有较低顺序的组建将覆盖具有较高顺序的组件。publicvoidhaveFinish(intcolumn)判断纸牌的摆放是否成功。3设计过程或程序代码3.1需要实现的主要功能:(1)游戏主界面的设计包括背景颜色、框架大小、玩牌区域、发牌区域、回收纸牌的区域组件的设置。(2)点击鼠标、释放鼠标、拖动鼠标时纸牌需要实现的事件处理程序。(3)移动放置一组或者单个纸牌时。需要纸牌按照由小到大的顺序排列,并列类型相同。(4)当某列的纸牌按照从A到K得顺序排列时,程序会自动回收这组纸牌到回收纸牌的区域。25 计算机学院《面向对象程序设计》课程设计报告(5)当用鼠标单击发牌区域的纸牌时,如果10列纸牌中没有空白列,则顺序把纸牌发到每列纸牌的最下面。否则,弹出有空位不能发牌对话框。(6)当玩家不知道当前游戏如何进行时,可以点击菜单项显示可行的操作提示玩家下一步该移动哪一张纸牌。(7)等级设置,玩家通过单击游戏菜单里相应的等级菜单项来设置游戏的难度等级。游戏的默认等级是简单等级。3.2功能设计流程图:3.3主要功能的代码实现:3.3.1游戏菜单栏内游戏菜单及帮助菜单功能展示:25 计算机学院《面向对象程序设计》课程设计报告3.3.2主界面的设计:代码实现如下:publicSpider(){setTitle("蜘蛛牌");setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);//设置框架的大小setSize(1024,742);//生成SpiderMenuBar对象,并放置在框架之上25 计算机学院《面向对象程序设计》课程设计报告setJMenuBar(newSpiderMenuBar(this));pane=this.getContentPane();//设置背景颜色pane.setBackground(newColor(0,139,69));//将布局管理器设置成为nullpane.setLayout(null);clickLabel=newJLabel();clickLabel.setBounds(883,606,121,96);\设置发牌区组件的位置pane.add(clickLabel);clickLabel.addMouseListener(newMouseAdapter(){publicvoidmouseReleased(MouseEventme){if(c<60){Spider.this.deal();}}});this.initCards();this.randomCards();this.setCardsLocation();\为纸牌设置位置groundLabel=newJLabel[10];\创建背景框组件数组intx=20;for(inti=0;i<10;i++){groundLabel[i]=newJLabel();\创建背景框组件groundLabel[i].setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.RAISED));groundLabel[i].setBounds(x,25,71,96);\设置组件的大小x+=101;this.pane.add(groundLabel[i]);\向容器添加组件}this.setVisible(true);this.deal();\运行程序,从发牌去发出一组纸牌...25 计算机学院《面向对象程序设计》课程设计报告3.3.3纸牌的初始化以及发牌操作代码实现如下:publicvoidinitCards(){//如果纸牌已被赋值,即将其从框架的面板中移去if(cards[0]!=null){for(inti=0;i<104;i++){pane.remove(cards[i]);}}intn=0;//通过难度等级,为n赋值if(this.grade==Spider.EASY){n=1;}elseif(this.grade==Spider.NATURAL){n=2;}else{n=4;}25 计算机学院《面向对象程序设计》课程设计报告//为card赋值for(inti=1;i<=8;i++){for(intj=1;j<=13;j++){cards[(i-1)*13+j-1]=newPKCard((i%n+1)+"-"+j,this);假设n=1,此时i%n的值为0,则1%n+1的值为1,所以创建的图片应该是1-1到1-13全是黑桃,为同一花色,n等于其它值时类似。}}如图所示:简单,单一花色:中级,双高级,四花色://随机纸牌初始化this.randomCards();\将纸牌的顺序打乱}/****纸牌随机分配*/publicvoidrandomCards(){PKCardtemp=null;//随机生成牌号for(inti=0;i<52;i++){inta=(int)(Math.random()*104);intb=(int)(Math.random()*104);temp=cards[a];cards[a]=cards[b];25 计算机学院《面向对象程序设计》课程设计报告cards[b]=temp;}}设置纸牌的位置publicvoidsetCardsLocation(){table=newHashtable();c=0;finish=0;n=0;a=0;intx=883;inty=580;\坐标位于界面的右下角区域//初始化待展开的纸牌for(inti=0;i<6;i++){for(intj=0;j<10;j++){intn=i*10+j;pane.add(cards[n]);//将card转向背面cards[n].turnRear();//将card放在固定的位置上cards[n].moveto(newPoint(x,y));//将card的位置及相关信息存入table.put(newPoint(x,y),cards[n]);}x+=10;\x的值循环一次增10,表示下一叠纸牌的位置}x=20;25 计算机学院《面向对象程序设计》课程设计报告y=4:\坐标位于上方的玩牌区域最左边一个背景框的位置。初始化表面显示的纸牌for(inti=10;i>5;i--){for(intj=0;j<10;j++){intn=i*10+j;\生成索引值if(n>=104)continue;\值超过104则退出本次循环pane.add(cards[n]);\将索引值所指的纸牌添加到面板容器cards[n].turnRear();\将纸牌转到背面去cards[n].moveto(newPoint(x,y));\将纸牌移动的固定的位置上去table.put(newPoint(x,y),cards[n]);\将纸牌及其对应的位置存入到哈希表中x+=101;背景框间隔的X值为101}x=20;X坐标回到原先的位置处y-=5;Y坐标会向下移动5个单位,表示第二行纸牌的初始化开始}}方法:游戏运行publicvoiddeal(){this.setNA();//判断10列中是否空列for(inti=0;i<10;i++){if(this.getLastCardLocation(i)==null){JOptionPane.showMessageDialog(this,"有空位不能发牌!","提示",JOptionPane.WARNING_MESSAGE);return;}}intx=20;for(inti=0;i<10;i++){25 计算机学院《面向对象程序设计》课程设计报告PointlastPoint=this.getLastCardLocation(i);//这张牌应“背面向上”if(c==0){lastPoint.y+=5;\当还没有发过牌时,每列的纸牌中y坐标相差5个单位。}//这张牌应“正面向上”else{lastPoint.y+=20;否则是两张正面显示纸牌差值}table.remove(cards[c+i].getLocation());cards[c+i].moveto(lastPoint);table.put(newPoint(lastPoint),cards[c+i]);cards[c+i].turnFront();cards[c+i].setCanMove(true);//将组件card移动到容器中指定的顺序索引。this.pane.setComponentZOrder(cards[c+i],1);Pointpoint=newPoint(lastPoint);if(cards[c+i].getCardValue()==1){intn=cards[c+i].whichColumnAvailable(point);point.y-=240;PKCardcard=(PKCard)this.table.get(point);if(card!=null&&card.isCardCanMove()){this.haveFinish(n);\判断纸牌是否可以回收以及回收的总次数}}x+=101;}c+=10;}25 计算机学院《面向对象程序设计》课程设计报告3.3.4纸牌的移动以及放置代码实现如下:用鼠标拖动纸牌publicvoidmouseDragged(MouseEventarg0){if(canMove){intx=0;inty=0;Pointp=arg0.getPoint();x=p.x-point.x;y=p.y-point.y;this.moving(x,y);}}方法:放置纸牌publicvoidsetNextCardLocation(Pointpoint){PKCardcard=main.getNextCard(this);if(card!=null){if(point==null){25 计算机学院《面向对象程序设计》课程设计报告card.setNextCardLocation(null);main.table.remove(card.getLocation());card.setLocation(card.initPoint);main.table.put(card.initPoint,card);}else{point=newPoint(point);point.y+=20;card.setNextCardLocation(point);point.y-=20;main.table.remove(card.getLocation());card.setLocation(point);main.table.put(card.getLocation(),card);card.initPoint=card.getLocation();}}}3.3.5显示当前纸牌可行的操作:代码实现如下:返回值:void方法:显示可移动的操作publicvoidshowEnableOperator(){intx=0;out:while(true){Pointpoint=null;PKCardcard=null;do{if(point!=null){n++;}point=this.getLastCardLocation(n);while(point==null){point=this.getLastCardLocation(++n);if(n==10)n=0;x++;if(x==10)breakout;}card=(PKCard)this.table.get(point);}while(!card.isCardCanMove());while(this.getPreviousCard(card)!=null25 计算机学院《面向对象程序设计》课程设计报告&&this.getPreviousCard(card).isCardCanMove()){card=this.getPreviousCard(card);}if(a==10){a=0;}for(;a<10;a++){if(a!=n){Pointp=null;PKCardc=null;do{if(p!=null){a++;}p=this.getLastCardLocation(a);intz=0;while(p==null){p=this.getLastCardLocation(++a);if(a==10)a=0;if(a==n)a++;z++;if(z==10)breakout;}c=(PKCard)this.table.get(p);}while(!c.isCardCanMove());if(c.getCardValue()==card.getCardValue()+1){card.flashCard(card);try{Thread.sleep(800);}catch(InterruptedExceptione){e.printStackTrace();}c.flashCard(c);a++;if(a==10){n++;}breakout;}}}n++;25 计算机学院《面向对象程序设计》课程设计报告if(n==10){n=0;}x++;if(x==10){breakout;}}}3.3.6回收纸牌:代码实现如下:返回值:void方法:判断纸牌的摆放是否完成publicvoidhaveFinish(intcolumn){Pointpoint=this.getLastCardLocation(column);PKCardcard=(PKCard)this.table.get(point);do{this.table.remove(point);card.moveto(newPoint(20+finish*10,580));//将组件移动到容器中指定的顺序索引。pane.setComponentZOrder(card,1);//将纸牌新的相关信息存入Hashtablethis.table.put(card.getLocation(),card);card.setCanMove(false);point=this.getLastCardLocation(column);if(point==null)card=null;elsecard=(PKCard)this.table.get(point);}while(card!=null&&card.isCardCanMove());finish++;//如果8付牌全部组合成功,则显示成功的对话框25 计算机学院《面向对象程序设计》课程设计报告if(finish==8){JOptionPane.showMessageDialog(this,"恭喜你,顺利通过!","成功",JOptionPane.PLAIN_MESSAGE);}if(card!=null){card.turnFront();card.setCanMove(true);}}}4设计结果与分析4.1运行程序:将文件Spider.java、SpiderMenuBar.java、PKCard.java、AboutDialog.java及所需要的images图像文件保存到同一个文件中。利用javac命令对文件进行编译,使用的命令如下:25 计算机学院《面向对象程序设计》课程设计报告JavacSpider.java之后利用java命令执行程序,使用的命令如下:JavaSpider具体运行过程如图所示:4.2发布程序:要发布此应用程序,需要将应用程序打包。使用jar.exe,可以吧应用程序涉及的类和图片压缩成一个jar文件,这样就可以发布程序啦。首先编写一个清单文件,名为MANIFEST.MF,其代码如下:Manifest-Version:1.0Created-By:1.6.0(SunMicrosystemsInc.)Main-Class:Spider将此清单文件保存起来然后,使用如下命令生成jar文件:JarcfmSpider.jarMANIFEST.MF*.class其中参数c表示要生成一个新的jar文件;f表示要生成的jar文件的名字;m表示要生成的清单文件的名字。如果机器安装过WinRAR解压软件,并将.jar文件与解压缩软件做了关联,那么Spider.java文件的类型是WinRAR,使得java程序无法运行。因此,在发布软件时还应该再写一个有如下内容的bat文件(Spider.bat):Javaw-jarSpider.jar然后可以通过双击Spider.bat来运行程序。25 计算机学院《面向对象程序设计》课程设计报告4.3总结:通过这次java蜘蛛纸牌程序设计的实现使我感觉到用java这种面向对象语言开发程序更加便捷、简单。这也是java语言的魅力所在,也是java语言受到大多数程序员首选开发语言的原因。本程序设计是我自己耗时一个多月的时间才设计出来的,虽然付出了许多辛苦,但是觉得自己的努力没有白费,当看到自己开发的程序能够运行时,内心很有成就感。其次,所开发的蜘蛛纸牌游戏的功能实现尚有不足,有些功能的实现经过自己反复琢磨才有所理解。本游戏的开发所实现的都是我们通常接触到得功能,也是基础的功能。如纸牌的初始化、移动、放置、发牌、回收等等。高级的功能如纸牌提示的声音、统计信息、显示动画等功能的实现是自己力不能及的,望以后自己慢慢研究。需要注意的开发过程中的问题:1.向纸牌游戏菜单栏添加监视器及处理事件的方法的实现2.鼠标单击、释放、拖动、移动、放置纸牌时的事件处理方法的实现。3.帮助栏功能的实现。4.纸牌的初始化、发牌、回收等功能算法实现的过程。5参考文献[1]耿祥义张跃平.Java面向对象程序设计[M].北京清华大学出版社2009.11.[2]庞丽萍阳富名.计算机操作系统第二版[M].北京清华大学出版2010.08.25 计算机学院《面向对象程序设计》课程设计报告25
此文档下载收益归作者所有
举报原因
联系方式
详细说明
内容无法转码请点击此处