java课程设计蜘蛛纸牌游戏下拉列表运算器设计课程设计报告大学论文.docx
《java课程设计蜘蛛纸牌游戏下拉列表运算器设计课程设计报告大学论文.docx》由会员分享,可在线阅读,更多相关《java课程设计蜘蛛纸牌游戏下拉列表运算器设计课程设计报告大学论文.docx(28页珍藏版)》请在冰豆网上搜索。
java课程设计蜘蛛纸牌游戏下拉列表运算器设计课程设计报告大学论文
学号
xx
xx
《面向对象程序设计》
课程设计报告
题目:
下拉列表运算器设计
专业:
xxxxx
班级:
xxx
姓名:
xx
指导教师:
xx
成绩:
xx
xxxx年x月xx日
目录
1设计内容及要求2
1.1设计内容2
1.2设计要求2
2概要设计3
2.1代码功能功能模块设计:
3
2.2程序的总体设计流程图:
3
2.3模块一的详细介绍:
3
2.3.1主要的类:
3
2.3.2主要的变量:
4
2.3.3主要的方法:
4
2.4模块二的详细介绍:
5
2.4.1主要的类:
5
2.4.2主要的变量:
5
2.4.3主要的方法:
5
2.5模块三的详细介绍:
6
2.5.1主要类介绍:
6
2.5.2主要变量:
7
2.5.3主要方法:
7
2.6模块四的详细介绍:
8
2.6.1主要的类:
8
2.6.2主要的变量:
8
2.6.3主要的方法:
8
3设计过程或程序代码9
3.1需要实现的主要功能:
9
3.2功能设计流程图:
10
3.3主要功能的代码实现:
10
3.3.1游戏菜单栏内游戏菜单及帮助菜单功能展示:
10
3.3.2主界面的设计:
11
3.3.3纸牌的初始化以及发牌操作13
3.3.4纸牌的移动以及放置18
3.3.5显示当前纸牌可行的操作:
19
3.3.6回收纸牌:
21
4设计结果与分析22
4.1运行程序:
22
4.2发布程序:
23
4.3总结:
23
5参考文献24
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类,其主要功能为生成蜘蛛纸牌游戏的框架,实现游戏中的方法,包括:
纸牌的随机生成,位置的摆放等。
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对象创建一组按钮意味着“开启”其中一个按钮时,将关闭组中的其他所有按钮。
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)取消菜单时调用。
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(intoperation)该方法用来设置单机窗体右上角的关闭图标后,程序会做出怎样的处理。
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变量表示纸牌的类型。
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()方法将纸牌移动到点point
publicvoidsetCanMove(booleancan)方法判断纸牌是否能够移动。
publicbooleanisCardFront()方法判断纸牌是否正面显示。
publicbooleanisCardCanMove()方法判断纸是否能够移动。
publicintgetCardValue()方法获得纸牌的内容值。
publicintgetCardType()方法获得纸牌的类型。
2.6模块四的详细介绍:
Spider.java文件是蜘蛛纸牌游戏的主类文件,其主要功能是生成蜘蛛纸牌游戏的框架,实现游戏中的方法,包括纸牌的随机生成、位置的摆放等。
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()方法可得到窗口的内容面板容器。
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得顺序排列时,程序会自动回收这组纸牌到回收纸牌的区域。
(5)当用鼠标单击发牌区域的纸牌时,如果10列纸牌中没有空白列,则顺序把纸牌发到每列纸牌的最下面。
否则,弹出有空位不能发牌对话框。
(6)当玩家不知道当前游戏如何进行时,可以点击菜单项显示可行的操作提示玩家下一步该移动哪一张纸牌。
(7)等级设置,玩家通过单击游戏菜单里相应的等级菜单项来设置游戏的难度等级。
游戏的默认等级是简单等级。
3.2功能设计流程图:
3.3主要功能的代码实现:
3.3.1游戏菜单栏内游戏菜单及帮助菜单功能展示:
3.3.2主界面的设计:
代码实现如下:
publicSpider(){
setTitle("蜘蛛牌");
setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
//设置框架的大小
setSize(1024,742);
//生成SpiderMenuBar对象,并放置在框架之上
setJMenuBar(newSpiderMenuBar(this));
pane=this.getContentPane();
//设置背景颜色
pane.setBackground(newColor(0,139,69));
//将布局管理器设置成为null
pane.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.initCard