版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 编号:車曲帰范哮険AnyangNormalCollege本科毕业论文(设计)题目学院专业学号姓名指导教师职称完成日期诚信承诺我谨在此承诺:本人所写的毕业论文均系本人独立完成,没有抄袭行为,凡涉及其他作者的观点和材料,均作了注释,若有不实,后果由本人承担。承诺人(签名):年月日基于java开发的蜘蛛纸牌程序设计姓名:关俊生学号:200829010213指导老师:李林国摘要:java是由SunMicrosystems公司于1995年5月推出的Java程序设计语言(以下简称Java语言)和Java平台的总称。Java是面向对象的语言。蜘蛛纸牌是一款受人喜欢的休闲游戏,微软的每一代操作系统中都装有这
2、种纸牌游戏,很多人都玩过蜘蛛纸牌,都熟悉蜘蛛纸牌游戏所需要的功能。本人做的蜘蛛纸牌游戏开发理念是基于WINDOWSXP操作系统中自带蜘蛛纸牌游戏。利用java语言实现了蜘蛛纸牌游戏的主要功能如纸牌的移动、放置、回收、重发。利用javax.swing包的类实现纸牌游戏的用户界面,通为各个菜单组件添加监视器来实现鼠标单击事件所触发的接口方法,使得用户可以单击菜单项来实现具体的功能。通过设置纸牌的等级来初始化纸牌随机分配纸牌,为用户玩纸牌游戏提供相应的等级。意义:通过自己对蜘蛛纸牌游戏的开发,使我更加热爱java语言,让我懂得和洗去了更多程序开发的知识及经验,为以后进入编程工作提供条件。关键字:ja
3、va语言、游戏背景、功能实现SpidersolitaireprogrambasedonjavadevelopmentName:GuanJunshengStudentID:200829010213Instructor:LiLinguoAbstract:javaistheJavaprogramminglanguagefromSunMicrosystems,Inc.inMay1995(hereinafterreferredtoasthegeneraltermoftheJavalanguage)andJavaplatforms.Javaisobject-orientedlanguages.Spider
4、Solitaireisapeoplelikecasualgames,eachgenerationofMicrosoftsoperatingsystemareequippedwiththiscardgame,manypeoplehaveplayedSpiderSolitaireareallfamiliarwiththefunctionalityrequiredbythespidercardgame.IdospidersolitairegamedevelopmentphilosophyisbasedontheWINDOWSXPoperatingsystemcomeswiththespidersol
5、itairegame.Javalanguagetoachievethemainfunctionofthespidersolitairegame,suchasmovementoftheplayingcards,place,recycling,re-issued.Theuseofthejavax.swingpackageclassthatimplementstheuserinterfaceofthecardgamepassforeachmenucomponenttoaddamonitortothemouseclickeventtriggeredbytheinterfacemethod,theuse
6、rcanclickthemenuitemstoachieveaspecificfunction.Toinitializethecardsbythelevelofthesetofcardsrandomlyassignedtocards,toprovidetheappropriatelevelforusersplayingsolitaire.Meaning:thespidersolitairegamedevelopment,sothatImorelovethejavalanguage,soIknowhowtowashawaythemoreknowledgeandexperienceofprogra
7、mdevelopment,andprovideconditionsforthefuturetoentertheprogrammingwork.Keywords:Javalanguage,thebackgroundofthegamefunctions目录绪论1.1游戏开发的背景知识1.2需要做的准备工作开发工具介绍java语言概述java语言的特点Eclipse开发平台介绍总体设计3.1代码功能模块的设计3.2程序总体设计流程图3.3模块一的详细介绍3.3.1主要的类3.3.2主要的变量3.3.3主要的方法3.4模块二的详细介绍3.4.1主要的类3.4.2主要的变量3.4.3主要的方法3.5模块
8、三的详细介绍3.5.1主要的类3.5.2主要的变量3.5.3主要的方法3.6模块四的详细3.6.1主要的类3.6.2主要的变量3.6.3主要的方法功能设计4.1需要实现的主要功能4.2功能设计流程图4.3主要功能的代码实现4.3.1游戏菜单栏内游戏菜单及帮助菜单功能展示4.3.2主界面的设计4.3.3纸牌的初始化以及发牌操作4.3.4纸牌的移动以及放置4.3.5显示当前纸牌可行的操作4.3.6回收纸牌程序的运行及发布5.1运行程序5.2发布程序工作总结参考文献绪论1.1游戏开发的背景知识相信很多人都玩过蜘蛛纸牌这款休闲游戏,现在随着生活水平的提高,人们拥有充分的时间来享受休闲游戏带来的快乐,越
9、来越多的人亲睐蜘蛛纸牌游戏。谈起这款游戏,大家并不陌生。从WIND0WS2000系统开始,就嵌入了蜘蛛纸牌游戏,可是随着微软系统的不段升级,蜘蛛纸牌游戏的功能业变得越来越强大,游戏的界面也更加美观。用户的体验感受也更加美好。所以,蜘蛛纸牌游戏的开发对于人类的生活娱乐更加有意义。了解蜘蛛纸牌的开发过程也是作为一名学习计算机专业大学生所应该尝试的过程。游戏的目标是以最少的移动次数将牌面中的十叠牌以及待发的五组,共计八副牌整理移除。当所有牌被移除整理到界面的左下方,游戏获胜。1.2需要做的准备工作需要做的工作有学习掌握开发程序的方法,开了解发工具,进行需求分析,根据得到的需求规格说明书设计具体的程序
10、流程图,编写程序,修改程序,运行程序,系统调试程序、测试程序,发布程序。开发工具介绍java语言概述:java是由SunMicrosystems公司于1995年5月推出的java程序设计语言和java平台的总称。用java实现的浏览器显示它的魅力:跨平台的特点使得它越来越受到许多程序员的亲睐。java除了可以开发动态的Web页还可以开发各种系统软件。现在常用的浏览器比如说360浏览器,IE浏览器中均配备有javaapplet。java平台由java虚拟机和各种java应用编程接口(简称API)构成。java应用编程接口为java提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。在操
11、作系统上安装一个java平台就可以运行任何一个java程序啦。现在java平台已经几乎嵌入到所有的操作系统党章。这样java程序就可以只编译一次,就可以在各种系统当中运行啦。java目前最新的版本是javal.7版本的。java语言的特点:java语言是一种简单的、面向对象的、分布式的、健壮的、安全的、与平台无关的、多线程、高性能的、动态程序设计语言。java语言简单易学的。java语言的语法与C语言和C+语言很接近,使得多数程序员很容易学习和使用java。另一方面,java丢弃了C+中很少使用的,很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地。java语言不
12、使用指针,并提供了自动的废料收集,使得程序员不必为内存管理而担忧。平台无关性平台无关性是指Java能运行于不同的平台。Java引进虚拟机原理,并运行于虚拟机,实现不同平台的Java接口之间。使用Java编写的程序能在世界范围内共享。Java的数据类型与机器无关,Java虚拟机(JavaVirtualMachine)是建立在硬件和操作系统之上,实现Java二进制代码的解释执行功能,提供于不同平台的接口的。安全性Java的编程类似C+,学习过C+的读者将很快掌握Java的精髓。Java舍弃了C+的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针侵入系统。Java
13、对程序提供了安全管理器,防止程序的非法访问。4面向对象Java吸取了C+面向对象的概念,将数据封装于类中,利用类的优点,实现了程序的简洁性和便于维护性。类的封装性、继承性等有关对象的特性,使程序代码只需一次编译,然后通过上述特性反复利用。程序员只需把主要精力用在类和接口的设计和应用上。Java提供了众多的一般对象的类,通过继承即可使用父类的方法。在Java中,类的继承关系是单一的非多重的,一个子类只有一个父类,子类的父类又有一个父类。Java提供的Object类及其子类的继承关系如同一棵倒立的树形,根类为Object类,Object类功能强大,经常会使用到它及其它派生的子类。分布式Java建立
14、在扩展TCP/IP网络平台上。库函数提供了用HTTP和FTP协议传送和接受信息的方法。这使得程序员使用网络上的文件和使用本机文件一样容易。健壮性Java致力于检查程序在编译和运行时的错误。类型检查帮助检查出许多开发早期出现的错误。Java自己操纵内存减少了内存出错的可能性。Java还实现了真数组,避免了覆盖数据的可能,这些功能特征大大提高了开发Java应用程序的周期。并且Java还提供了Null指针检测、数组边界检测、异常出口、Bytecode校验等功能。解释型我们知道C,C+等语言,都是针对CPU芯片进行编译,生成机器代码,该代码的运行就和特定的CPU有关。Java不像C或C+,它不针对CP
15、U芯片进行编译,而是把程序编译成称为自字节码的一种“中间代码”字节码是很接近机器码的文件,可以在提供了java虚拟机(JVM)的任何系统上被解释执行。8动态java程序的基本组成单元就是类,有些类是自己编写的,有些是从类库中引入的,而类又是运行时动态装载的,这就使得Java可以在分部环境中动态的维护程序及分类,而不像C+那样,没档期类库升级以后,如果想让程序具有新类库提供的功能,就需要修改程序,重新编译。多线程Java是支持多线程的语言。多线程是一种应用程序设计方法。线程是一大进程里分出来的,小的、独立的进程,使得在一个程序里可同时执行多个小任务。多线程带来的好处是具有更好的交互性能和实时控制
16、性能。但采用传统的程序设计语言(如:C/C+)实现多线程程序并非易事。Java实现了多线程技术,提供了简便的实现多线程的方法,并拥有一组高复杂性的同步机制。可以移植的。这种可移植性来源于体系结构中立性,另外,java还严格规定了各个基本数据类型的长度。java系统本身也具有很强的可移植性,java编译器是用java实现的,java运行环境是用ANSIC实现的。Eclipse开发平台简介:Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(Jav
17、aDevelopmentTools,JDT)。虽然大多数用户很乐于将Eclipse当作Java集成开发环境(IDE)来使用,但Eclipse的目标却不仅限于此。Eclipse还包括插件开发环境(Plug-inDevelopmentEnvironment,PDE),这个组件主要针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具。由于Eclipse中的每样东西都是插件,对于给Eclipse提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。这种平等和一致性并不仅限于Java开发工具。尽管Eclipse是使用Java
18、语言开发的,但它的用途并不限于Java语言;例如,支持诸如C/C+和COBOL等编程语言的插件已经可用,或预计将会推出。Eclipse框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。基于Eclipse的应用程序的一个突出例子是IBMRationalSoftwareArchitect,它构成了IBMJava开发工具系列的基础。EclipseIDEforJavaEEDevelopers44总体设计:31代码功能功能模块设计:蜘蛛纸牌游戏共由4个部分组成,分别是:Spider.java,SpiderMenuBar.java,PKCard.java,AboutDialog.j
19、ava。SpiderMenuBar.java包含名为SpiderMenuBar的public类,其主要功能为生成蜘蛛纸牌游戏的菜单栏,实现菜单栏中各个组件的事件侦听。主要包括3个模块:图形用户界面的构建;组件监听接口的实现:显示可执行操作的线程。PKCard.java包含名为PKCard的public类,其主要功能为:定义纸牌的属性,包括名称,位置等相关信息。并通过相关方法实现纸牌的移动等。AboutDialog.java包含名为AboutDialog的public类,其主要功能为生成蜘蛛纸牌游戏的帮助栏。Spider.java包含名为Spider的public类,其主要功能为生成蜘蛛纸牌游戏
20、的框架,实现游戏中的方法,包括:纸牌的随机生成,位置的摆放等。3.2程序的总体设计流程图:3.3模块一的详细介绍:SpiderMenuBar.java的功能是生成蜘蛛纸牌游戏的菜单栏。实现菜单栏中的各个组件的事件。3.3.1主要的类:JMenuBar类、JMenu类、JMenuItem类、JRadioButton类都是设计GUI(图形用户界面)的包javax.swing中的类。可以用import引用这些类。JMenuBar类是JComponent类的子类负责创建菜单条的。即JMenuBar类的一个实例就是一个菜单条。JMenu类是JComponent类的子类负责创建菜单组的。即JMenu类的一
21、个实例化就是一个菜单。JMenuItem类是JMenu类的父类负责创建菜单项。即JMenuItem类的一个实例化就是一个菜单项。JRadioButtonMenultem类负责一个单选按钮菜单项的实现。JRadioButtonMenultem是属于一组菜单项中的一个菜单项,该组中只能选择一个项。ButtonGroup类用于为一组按钮创建一个多斥作用域。使用相同的ButtonGroup对象创建一组按钮意味着“开启”其中一个按钮时,将关闭组中的其他所有按钮。SpiderMenuBar类是此文件的一个主类是JMenuBar的子类。Show类是Thread的子类用于创建线程。3.3.2主要的变量:jNe
22、wGame、jHelp变量分别是JMenu类创建的“游戏”、“帮助”菜单。jitemAbout、jitemOpen、jitemPlayAgain、jitemExit、jitemValid变量分别是JMenuitem类创建的“关于”、“开局”、“重新发牌”、“退出”、“显示可行操作”菜单项。jRMitemEasy、jRMitemNormal、jRMitemHard变量分别是JRadioButtonMenuitem类创建的“简单:单一花色、“中级:双花色、“高级:四花色”的单选按钮菜单项。group变量是ButtonGroup类创建的一组按钮选择对象。spider变量是Spider类创建的对象用于
23、主界面窗口的实现。将在Spider.java文件中介绍。3.3.3主要的方法:publicJMenuBar()创建新的菜单栏。publicJMenu(Stringtext)构造一个新菜单,用提供的字符串作为其文本。publicJMenuItem(Stringtext)创建带有指定文本的菜单项。publicJRadioButtonMenultem(Stringtext)创建一个带文本的单选按钮菜单项。publicButtonGroup()创建一个新的单选按钮对象组。publicvoidadd(MenuItemitem)向菜单增加由参数item指定的菜单项对象。publicvoidadd(Abst
24、ractButtonb)将单选按钮添菜单项加到组中。publicvoidadd(JMenuc)将指定的菜单添加加到菜单栏中。publicvoidaddSeparator()将新分隔符追加到菜单的末尾。所需要添加的事件处理的接口方法将在后来的模块中进行介绍。事件源即能够产生的事件的对象。监视器用于对事件源进行监视以便对发生的事件做出处理。事件源通过调用相应的方法将某个对象作为自己的监视器。这个方法是addActionListen(ActionListenerlisten)该方法中的参数是ActionListener类型的接口。因此必须用ActionListener接口的类创建的对象传递给该方法的
25、参数,使得该对象成为事件源的的监视器。监视器负责调用特定的方法处理事件,创建监视器的类必须提供处理事件的特定的方法,即实现接口方法。publicvoidaddMenuListener(MenuListenerl)添加菜单事件的侦听器。voidmenuSelected(MenuEvente)选择某个菜单时调用。voidmenuDeselected(MenuEvente)取消选择某个菜单时调用。voidmenuCanceled(MenuEvente)取消菜单时调用。3.4模块二的详细介绍:PKCard的功能是定义纸牌的属性,包括名称,位置等相关信息。并通过相关方法实现了纸牌的移动等。3.4.1主要
26、的类:JDialog类是创建对话框窗口的主要类。可以使用此类创建自定义的对话框,或者调用JOptionPane中的多个类方法来创建各种标准对话框。Jpanel类是一个面板类负责创建一个面板容器,再向这个面板添加组件,然后将面板添加到底层容器中。JTabbedPane类负责创建一个组件,它允许用户通过单击具有给定标题和/或图标的选项卡,在一组组件之间进行切换。JTextArea类负责创建一个显示纯文本的多行区域。它作为一个轻量级组件Container类负责创建一个容器对象,此容器可以包含其它组件。AboutDialog类是JDialog类的子类,负责创建一个显示对话框。3.4.2主要的变量:jM
27、ainPane、jPanell、jPanel2、变量是JPanel创建的面板容器。jtl、jt2是JTextArea类创建的文本区对象。jTabbedPane是JTabbedPane类创建的选项卡窗格对象。c变量是Container类创建的容器。3.4.3主要的方法:publicJTabbedPane()创建一个具有默认的JTabbedPane.TOP选项卡布局的空TabbedPane.publicJDialog()创建一个没有标题并且没有指定Frame所有者的无模式对话框。一个共享的、隐藏的窗体将被设置为该对话框的所有者。publicJPanel()创建具有双缓冲和流布局的新面板容器。pub
28、licJTextArea(Stringtext)构造显示指定文本为text的新的文本区。publicvoidsetTittle(Strings)设置一个标题为s的对话框。publicvoidsetSize(intwidth,intheigth)创建宽为width,高位heigth大小的对话框。publicvoidsetResizable(booleanb)设置对话框是否可调整大小。b为true时,对话框可调整大小。publicvoidsetDefaultCloseOperation(intoperation)该方法用来设置单机窗体右上角的关闭图标后,程序会做出怎样的处理。operation取D
29、ISPOSE_ON_CLOSE时/隐藏当前窗口,并释放窗体所占有的其他资源。publicvoidsetVisible(booleanb)设置框口是可见还是不可见。b取true是为可见。publicContainergetContentPane()方法可得到窗口的内容面板容器。publicvoidJTextArea.setSize(intwidth,intheigth)设置文本区的大小。publicvoidJTextArea.setEditable(booleanb)设置文本区是否可以编辑。publicvoidJTextArea.setLineWrap(booleanb)设置文本区中输入的文本是
30、否可以实现在右边界自动换行。publicvoidJTextArea.setFont(Fontf)设置文本区内的字体。publicvoidJTextArea.setForeground(Colorc)设置文本区组件的前景色。publicvoidaddTab(Stringtitle,Iconicon,Componentcomponent,Stringtip)添加由title和/或icon表示的component和tip,其中任意一个都可以为nul参数:title-此选项卡中要显示的标题,icon-此选项卡中要显示的图标,component-单击此选项卡时要显示的组件,tip-此选项卡要显示的工具提
31、示。publicvoidpack()调整此窗口的大小,以适合其子组件的首选大小和布局。3.5模块三的详细介绍:PKCard的作用是定义纸牌的属性,包括名称、位置等相关信息。并通过相关方法实现纸牌的移动。3.5.1主要类介绍:JLable类负责创建标签对象。标签用于短文本字符串或图像或二者的显示区。Thread类负责创建线程对象。MouseListener接口、MouseMotionListener接口负责处理事件源所触发的鼠标事件,包括处理鼠标按下、释放、进入、退出、单击、连击、拖动、移动所触发鼠标事件。Point类负责创建表示(x,y)坐标空间中的位置的点对象,以整数精度指定。MouseEv
32、ent类负责创建鼠标所发生的事件对象。Flash类负责创建线程对象,不断的获取下一张纸牌。PKCard类是文件的主类,实现MouseListener接口的JLable的子类。负责创建纸牌对象。3.5.2主要变量:Pointpoint变量表示纸牌的位置对象。PointinitPoint表示纸牌的初始化位置对象。intvalue变量表示纸牌的内容值。inttype变量表示纸牌的类型。Stringname变量表示纸牌的名称。Containerpane变量表示标签内主容器。booleancanMove变量表示纸牌是否可以移动,值为true时,可以移动。booleanisFront变量表示纸牌是否正面显
33、示,值为true时,则为正面显示。PKCardpreviousCard变量表示上面一张纸牌3.5.3主要方法:publicvoidflashCard(PKCardcard)方法启动Flash线程不停的获取下一张纸牌直至完成。publicvoidrun()方法为纸牌的正面设置白色图片。card.updateUI()方法将UI属性重置为当前外观的值。publicvoidmousePressed(MouseEventmp)方法按下鼠标时事件的处理方法。publicvoidmouseReleased(MouseEventmr)方法释放鼠标时事件处理的方法。publicvoidsetNextCardLo
34、cation(Pointpoint)方法放置鼠标时事件处理方法。publicintwhichColumnAvailable(Pointpoint)方法为判断可用列。publicvoidmouseDragged(MouseEventargO)方法鼠标拖动纸牌时事件处理方法。publicvoidmoving(intx,inty)方法将纸牌移动(x,y)个位置。pane.setComponentZ0rder(this,l)方法将主件移动到容器中指定的顺序索引。publicPKCard(Stringname,Spiderspider)方法纸牌的构造函数。publicvoidturnFront()方法令
35、纸牌显示正面。publicvoidturnRear()方法令纸牌显示背面。publicvoidmoveto(Pointpoint()方法将纸牌移动到点pointpublicvoidsetCanMove(booleancan)方法判断纸牌是否能够移动。publicbooleanisCardFront()方法判断纸牌是否正面显示。publicbooleanisCardCanMove()方法判断纸是否能够移动。publicintgetCardValue()方法获得纸牌的内容值。publicintgetCardType()方法获得纸牌的类型。3.6模块四的详细介绍:Spider.java文件是蜘蛛纸牌
36、游戏的主类文件,其主要功能是生成蜘蛛纸牌游戏的框架,实现游戏中的方法,包括纸牌的随机生成、位置的摆放等。3.6.1主要的类:JFrame类及其子类负责创建的对象称为窗体。JLable类负责创建标签对象。标签用于短文本字符串或图像或二者的显示区。Container类负责创建一个容器对象,此容器可以包含其它组件。PKCard类负责创建纸牌对象。Hashtable类实现一个哈希表,该哈希表将键映射到相应的值。3.6.2主要的变量:publicstaticfinalintEASY=1;代表“简单”等级。publicstaticfinalintNATURAL=2代表“普通”等级。publicstatic
37、finalintHARD=3代表“难”等级。privateintgrade二Spider.EASY设定初始等级为简单等级;privateContainerpane变量为Container类创建的面板容器。privatePKCardcard变量为PKCard类创建的纸牌数组口。privateJLableclickLablel变量为JLable类创建的右下角发牌区的鼠标点击响应区域。privateJLablegroudLable变量为JLable类创建的背景框数组。Hshtabletable变量为Hashtable类创建的一个哈希表对象,用于存储键值数据对。privateintc变量为纸牌的数量。
38、privateintn变量为纸牌的等级。privateinta变量为纸牌所在的列号。privateintfinish变量为纸牌从小到大排列成功的次数。3.6.3主要的方法:publicvoidsetTittle(Strings)设置一个标题为s的窗体。publicvoidsetVisible(booleanb)设置框体是可见还是不可见。b取true是为可见。publicvoidsetSize(intwidth,intheigth)创建宽为width,高位heigth大小的窗体。publicvoidsetDefaultCloseOperation(intoperation)该方法用来设置单机窗体
39、右上角的关闭图标后,程序会做出怎样的处理。operation取EXIT_ON_CLOSE时结束窗体所在的应用程序。publicvoidsetMenuBar(MenuBarmb)将此窗体的菜单栏设置为指定的菜单栏。publicvoidpane.setBackground(Colorc)设置面板的背景颜色。publicvoidpane.setLayout(布局对象)设置面板的布局。publicContainergetContentPane()方法可得到窗口的内容面板容器。publicvoidsetBounds(inta,intb,intweidth,intheigth)设置出现在屏幕中的组件距离屏
40、幕的左面a个像素,距屏幕上面b个像素,组件宽为weidth,高为heigth。publicvoidnewGame()方法开始新游戏。publicintgetC()方法返回纸牌的数量。publicvoidsetGrade(intgrade)方法设置纸牌游戏的等级。publicvoidinitCards()方法进行初始化纸牌publicvoidrandomCards()方法令纸牌随机分配。publicvoidsetNA()方法设置还原纸牌游戏。publicvoidsetCardsLocation()方法设置待展开纸牌级表面初始化纸牌的位置。publicvoidshowEnableOperator(
41、)方法进行显示是否有可以移动的纸牌。publicvoiddeal()方法开始运行游戏。publicPKCardgetPreviousCard(PKCardcard)方法获取当前纸牌上面的那一张纸牌。publicPKCardgetNextCard(PKCardcard)方法获取当前纸牌的下面的那一张纸牌。publicPointgetLastCardLocation(intn)方法获取第n列纸牌最后一张纸牌的位置。publicPointgetGroundLabelLocation(intn)方法获取第n列纸牌的背景框架的位置。publicvoidsetGroundLabelZOrder()放置gr
42、oundLable组件。将组件groundLable移动到容器中指定的顺序索引。顺序(105+i)确定了绘制组件的顺序;具有最咼顺序的组件将第一个绘制,具有最低顺序的组建将最后一个绘制。在组建重叠的地方,具有较低顺序的组建将覆盖具有较高顺序的组件。publicvoidhaveFinish(intcolumn)判断纸牌的摆放是否成功。功能设计:41需要实现的主要功能:游戏主界面的设计包括背景颜色、框架大小、玩牌区域、发牌区域、回收纸牌的区域组件的设置。点击鼠标、释放鼠标、拖动鼠标时纸牌需要实现的事件处理程序。移动放置一组或者单个纸牌时。需要纸牌按照由小到大的顺序排列,并列类型相同。当某列的纸牌按
43、照从A到K得顺序排列时,程序会自动回收这组纸牌到回收纸牌的区域。当用鼠标单击发牌区域的纸牌时,如果10列纸牌中没有空白列,则顺序把纸牌发到每列纸牌的最下面。否则,弹出有空位不能发牌对话框。当玩家不知道当前游戏如何进行时,可以点击菜单项显示可行的操作提示玩家下一步该移动哪一张纸牌。等级设置,玩家通过单击游戏菜单里相应的等级菜单项来设置游戏的难度等级。游戏的默认等级是简单等级。4.2功能设计流程图:4.3主要功能的代码实现:4.3.1游戏菜单栏内游戏菜单及帮助菜单功能展示:4.3.2主界面的设计:代码实现如下:publicSpider()setTitle(蜘蛛牌);setDefaultCloseO
44、peration(javax.swing.JFrame.EXIT_ON_CLOSE);/设置框架的大小setSize(1024,742);/生成SpiderMenuBar对象,并放置在框架之上setJMenuBar(newSpiderMenuBar(this);pane=this.getContentPane();/设置背景颜色pane.setBackground(newColor(0,139,69);/将布局管理器设置成为nullpane.setLayout(null);clickLabel=newJLabel();clickLabel.setBounds(883,606,121,96);设
45、置发牌区组件的位置pane.add(clickLabel);clickLabel.addMouseListener(newMouseAdapter()publicvoidmouseReleased(MouseEventme)if(c60)Spider.this.deal(););this.initCards();this.randomCards();this.setCardsLocation();为纸牌设置位置groundLabel=newJLabel10;创建背景框组件数组intx=20;for(inti二0;i10;i+)groundLabeli=newJLabel();创建背景框组件gr
46、oundLabeli.setBorderjavax.swing.BorderFactory.createEtchedBorderjavax.swing.border.EtchedBorder.RAISED);groundLabeli.setBounds(x,25,71,96);设置组件的大小x+=101;this.pane.add(groundLabeli);向容器添加组件this.setVisible(true);this.deal();运行程序,从发牌去发出一组纸牌4.3.3纸牌的初始化以及发牌操作代码实现如下:publicvoidinitCards()/如果纸牌已被赋值,即将其从框架的面
47、板中移去if(cards0!=null)for(inti二0;i104;i+)pane.remove(cardsi);intn二0;/通过难度等级,为n赋值if(this.grade=Spider.EASY)n=1;elseif(this.grade=Spider.NATURAL)n=2;elsen=4;/为card赋值for(inti二1;i二8;i+)for(intj二1;j二13;j+)cards(i-1)*13+j-1=newPKCard(i%n+1)I+j,this);假设n=1,此时i%n的值为0,贝则1%n+1的值为1,所以创建的图片应该是1-1到1-13全是黑桃,为同一花色,n
48、等于其它值时类似。如图所示:简单,单一花色:中级,双咼级,四花色:/随机纸牌初始化this.randomCards();将纸牌的顺序打乱/*纸牌随机分配*/publicvoidrandomCards()PKCardtemp=null;/随机生成牌号for(inti二0;i52;i+)inta=(int)(Math.random()*104);intb=(int)(Math.random()*104);temp=cardsa;cardsa=cardsb;cardsb=temp;设置纸牌的位置publicvoidsetCardsLocation()table=newHashtable();c=0;
49、finish=0;n=0;a=0;intx=883;inty=580;坐标位于界面的右下角区域/初始化待展开的纸牌for(inti二0;i6;i+)for(intj二0;j5;i)for(intj二0;j=104)continue;值超过104则退出本次循环pane.add(cardsn);将索引值所指的纸牌添加到面板容器cardsn.turnRear();将纸牌转到背面去cardsn.moveto(newPoint(x,y);将纸牌移动的固定的位置上去table.put(newPoint(x,y),cardsn);将纸牌及其对应的位置存入到哈希表中x+=101;背景框间隔的X值为101x=2
50、0;X坐标回到原先的位置处y-=5;Y坐标会向下移动5个单位,表示第二行纸牌的初始化开始游我劑助方法:游戏运行publicvoiddeal()this.setNA();/判断10列中是否空列for(inti=0;i10;i+)if(this.getLastCardLocation(i)二二null)JOptionPane.showMessageDialog(this,有空位不能发牌!,提示,JOptionPane.WARNING_MESSAGE);return;intx=20;for(inti二0;i10;i+)PointlastPoint二this.getLastCardLocation(i
51、);/这张牌应“背面向上”if(c=0)lastPoint.y+=5;当还没有发过牌时,每列的纸牌中y坐标相差5个单位。/这张牌应“正面向上”elselastPoint.y+=20;否则是两张正面显示纸牌差值table.remove(cardsc+i.getLocation();cardsc+i.moveto(lastPoint);table.put(newPoint(lastPoint),cardsc+i);cardsc+i.turnFront();cardsc+i.setCanMove(true);/将组件card移动到容器中指定的顺序索引。this.pane.setComponentZO
52、rder(cardsc+i,1);Pointpoint二newPoint(lastPoint);if(cardsc+i.getCardValue()=1)intn二cardsc+i.whichColumnAvailable(point);point.y-二240;PKCardcard=(PKCard)this.table.get(point);if(card!=null&card.isCardCanMove()this.haveFinish(n);判断纸牌是否可以回收以及回收的总次数x+=101;c+=10;4.3.4纸牌的移动以及放置代码实现如下:用鼠标拖动纸牌publicvoidmouse
53、Dragged(MouseEventarg0)if(canMove)intx=0;inty二0;Pointp=argO.getPoint();x=p.xpoint.x;y=p.ypoint.y;this.moving(x,y);方法:放置纸牌publicvoidsetNextCardLocation(Pointpoint)PKCardcard=main.getNextCard(this);if(card!=null)if(point二二null)card.setNextCardLocation(null);main.table.remove(card.getLocation();card.setLocation(card.initPoint);main.table.put(card.initPoint,card);else
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 2664-2026男西服、大衣
- 物业项目副经理个人述职报告(3篇)
- 销售年中个人工作述职报告(3篇)
- 2026北师大二下分苹果公开课课件
- 新苏教版科学五年级上册1-2《光的反射》教学设计
- Unit 1 Friendship Section 4 Extending and developing competencies Cross-curricular connection 教学设计2026-2027学年沪教版英语七年级上册
- 2026四下数学平均数条形统计图课件
- 2026四下数学第五单元获奖课件
- 危重病的观察及护理
- 新教材高考语文一轮复习第一部分专题二第二节分析新闻的文体特征和主要表现手法课件新人教版
- 第7课《培养德智体美劳全面发展的社会主义建设者和接班人》课件(共37张)
- 2026秋新北师大版二年级上册小学数学教学计划附教学进度表
- 2026墨西哥电信行业市场供需分析及投资评估规划分析研究报告
- SHA1-42(08)-2025 上海市市政工程养护维修估算指标 第八册 道路综合杆工程
- 起重机械使用单位安全管理制度
- 灯塔猪场建设方案设计
- 2025天津东疆综合保税区管理委员会招聘10人笔试历年备考题库附带答案详解
- 化工行业实验室管理制度
- 2024-2025学年中职数学基础模块上册语文版教学设计合集
- 机动车驾驶员培训理论科目一考核题库完整版500题(含答案)
- 借款合同纠纷诉讼和解协议书
评论
0/150
提交评论