1、Java课程设计报告蜘蛛纸牌游戏1. 选题目的与系统概述22. 系统可行性分析与相关技术背景分析32.1系统可行性分析32.2相关技术背景分析33. 系统设计与关键技术43.1系统设计43.2关键技术54.系统测试与操作实施方法94.1进入游戏运行界面9 4.2 游戏的具体的操作过程94.3进入“帮助”菜单104.4游戏中的异常处理情况115系统设计总结与回顾126附录13 6.1 AboutDialog.java13 6.2 PKCard.java14 6.3 Spider.java20 6.4 SpiderMenuBar.java29 1.选题目的与系统概述随着经济全球一体化的逐步加剧,人
2、们的生活节奏越来越快。蜘蛛纸牌游戏的一种,旨在让工作学习之后疲惫的玩家有一个轻愉快的放松方式。与普通的纸牌相比,降低了一点难度。游戏简单级别由8组A-K的清一色黑桃牌面组成,取消了红黑相间的游戏规则,更突然出强化了玩家在安排事物方面的能力。蜘蛛纸牌游戏实现了与Windows系列操作系统中自带的蜘蛛纸牌游戏类似的功能。该游戏程序中采用Windows系列中游戏的图片,运用Java语言设计了线程、鼠标事件、纸牌的装载、图形界面的构造、组件监听接口的实现、生成蜘蛛纸牌游戏的框架、实现游戏中的方法,是一种休闲益智游戏。 2.系统可行性分析与相关技术背景分析2.1系统可行性分析 蜘蛛纸牌游戏规则是:(1)
3、 将电脑分发给你的牌按照相同的花色又打至小排列起来,直到桌面上的牌全都消失。(2) 可执行的牌必须为明牌(3) 单牌移动规则(4) 多拍移动规则游戏分三个等级:(1)简答:单一花色;(2)中级:双花色;(3)四花色。2.2相关技术背景分析2.2.1蜘蛛纸牌游戏是基于Eclipse平台的Java程序。Eclipse的背景如下: Eclipse最初是IBM公司的一个软件产品。2001年11月7日发布Eclipse 1.0版本,以后几乎每年都更新一次版本,到2011年6月22日,发布最新版本Eclipse 3.7(INDIGO)。尽管Eclipse是使用Java语言开发的,但它的用途并不仅限于Jav
4、a语言。例如,支持诸如C/C+、COBOL和Eiffel等编程语言的插件已经可用。Eclipse平台的主要任务是为开发者提供能够使用各种工具无缝集成的机制和需要遵守的规则。Eclipse的特点是:(1)基于Java、开发源码的可扩展平台;(2)一个免费得Java IDE(Java 集成开发环境)。2.2.2本课程设计是在最新版本Eclipse 3.7(INDIGO)下运行,进入界面如下: 3.系统设计与关键技术3.1系统设计3.1.1蜘蛛游戏可以分为四个模块,它们之间的关系如下:(1)Spider.Java游戏开始的主函数,调用中及实现游戏中的方法,即调用 SpiderMenuBar.java
5、(2)SpiderMenuBar调用游戏框架和游戏菜单,即调用PKCard.java和AboutDialog.Java(3) PKCard.java纸牌的调用和移动位置及纸牌属性,即调用Spider.Java3.1.2蜘蛛游戏的流程图如图3-1所示。 图3-13.1.3蜘蛛游戏可以分为四个模块各项功能如下:(1)AboutDialog.java 其作用是生成游戏的“帮助”下拉菜单(2)PKCard.java 其作用是定义纸牌属性,包括名称、位置等相关信息。并管理所有可执行操作,如启动Flash线程、点击鼠标、释放鼠标、放置纸牌、判断可用列、用鼠标拖动纸牌、移动(x,y)个位置、令纸牌显示正面、
6、令纸牌显示背面、将纸牌移动到点point、判断纸牌是否移动、判断card是否是正面等 。(3)Spider.java其作用是设置游戏等级、框架属性、纸牌初始化、异常及成功处理等(4)SpiderMenuBar.java 其作用是添加“游戏”下拉列表所有菜单选项,实现各组件的事件侦听 。主要包括三个模块:图形用户界面的构建、组件监听接口的实现、显示可执行操作的线程。3.2关键技术 3.2.1 AboutDialog.java 中的“关于”窗口private JTextArea jt1 = new JTextArea(将电脑多次分发给你的牌按照相同的花色由大至小排列起来。直到桌面上的牌全都消失。)
7、; /用来显示“游戏规则”对应的文本框private JTextArea jt2 = new JTextArea(该游戏中,纸牌的图片来自于Windows XP的纸牌游戏,图片权属于原作者所有!); /用来显示“声明”对应的文本框 3.2.2 PKCard.java当有空位的时候,启动Flash线程,继续进行发牌。public void flashCard(PKCard card) new Flash(card).start(); /不停的获得下一张牌,直到完成 if(main.getNextCard(card) != null) card.flashCard(main.getNextCard
8、(card); class Flash extends Thread private PKCard card = null; public Flash(PKCard card) this.card = card; 3.2.3 PKCard.java中点击“游戏”-“显示可行操作”后,可以连续的纸牌会闪烁一下,即一张是图片本身一张是白色图片。这里有线程的run()方法来实现。 public void run() boolean is = false; ImageIcon icon = new ImageIcon(images/white.gif); for (int i = 0; i 30 &
9、b 71) a+; else if (b 71) a = -1; if (a != -1) Point p = main.getLastCardLocation(a); if (p = null) p = main.getGroundLabelLocation(a); b = y - p.y; if (b = 96) a = -1; return a; 3.2.6 Spider.java中对鼠标事件监听程序进行初始布局clickLabel.addMouseListener(new MouseAdapter() public void mouseReleased(MouseEvent me) i
10、f (c 60) Spider.this.deal(); ); 3.2.7 SpiderMenuBar.java“游戏”下拉菜单中游戏级别设置jRMItemEasy.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) main.setGrade(Spider.EASY); main.initCards(); main.newGame(); ); /“简单级别”默认设置jRMItemNormal.addActionListen
11、er(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) main.setGrade(Spider.NATURAL); main.initCards(); main.newGame(); );/“中级”jRMItemHard.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) main.se
12、tGrade(Spider.HARD); main.initCards(); main.newGame(); );/“高级”jNewGame.addMenuListener(new javax.swing.event.MenuListener() public void menuSelected(javax.swing.event.MenuEvent e) if(main.getC() 60) jItemPlayAgain.setEnabled(true); else jItemPlayAgain.setEnabled(false); public void menuDeselected(ja
13、vax.swing.event.MenuEvent e) public void menuCanceled(javax.swing.event.MenuEvent e) );3.2.8 SpiderMenuBar.java 中显示可行操作功能控制jItemValid.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) new Show().start(); );3.2.9 为组件添加事件监听addActionListener
14、并实现jItemOpen.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) main.newGame(); );/“开局”3.2.10“重新发牌”功能控制jItemPlayAgain.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) if(main.g
15、etC() 60) main.deal(); ); 4.系统测试与操作实施方法4.1进入游戏运行界面。如图4-1所示。图4-1“游戏”下拉菜单列表4.2 游戏的具体的操作过程(1)开始时,为“简单”级别,花色为黑桃,如图4-2所示。(2)将纸牌从大到小将纸牌排列,当从K到A排好序后,游戏将所有牌归并到界面的左下方,如图4-2到图4-5所示。(3)当第八次归并完毕后,游戏自动弹出“成功”对话框,如图4-6所示。(4)设置为“中级”的开局后的界面,如图4-7 所示。 (5)设置为“高级”的开局后的界面,如图4-8所示。 图4-2进入“开局”初始化界面 图4-3 将纸牌从大到小排好后,归并到左下角
16、图4-4 第二次归并后 图4-5第三次归并后 图4-6 第八次归并完毕后,游戏自动弹出“成功”对话框 图4-7 设置为“中级”的开局后界面 图4-8设置为“高级”的开局后界面4.3进入“帮助”菜单点击“帮助”下拉菜单的“关于”会弹出“蜘蛛牌”对话框,如图4-9所示。单击“游戏规则”如图4-10所示。单击“声明”图4-11所示。 图4-9“帮助”下拉菜单“关于” 图4-10“游戏规则”下的编辑框 图4-11“声明”下的编辑框 4.4游戏中的异常处理情况游戏过程中,如果移动纸牌时,中间有空位时,单击发牌,会弹出“提示对话框”。如图4-12所示。图4-12纸牌的异常处理 5系统设计总结与回顾蜘蛛纸牌
17、游戏实现了与Windows系列操作系统中自带的蜘蛛纸牌游戏类似的功能。该游戏程序中采用Windows系列中游戏的图片,运用Java语言设计了线程、鼠标事件、纸牌的装载、图形界面的构造、组件监听接口的实现、生成蜘蛛纸牌游戏的框架、实现游戏中的方法,是一种休闲益智游戏。通过本次课程设计对蜘蛛纸牌游戏的深入研究和分析,对于Eclipse 3.7有了深入的学习和了解,并对其应用有了一定的掌握。对Java语言在实际中的应用有了切身的体会,并将所学的知识在实践中得到应用,同时也巩固了Java中所学的理论知识,对于不了解的知识,又有了新的学习。同学们对于不懂的内容同学查阅相关资料以及老师们的帮助,还有同学间
18、的相互讨论,增加了团队合作的能力。在分析源码的过程中,有些不熟悉的代码,参考了相关资料,以及老师和同学们的帮助,使得问题得以解决,在此向向帮助过我们的老师和同学表示感谢! 6.附 录源代码:6.1 AboutDialog.javaimport javax.swing.*;import java.awt.*;/*“关于”窗口*/ public class AboutDialog extends JDialog private static final long serialVersionUID = 1L;/Add default serial version ID JPanel jMainPan
19、e = new JPanel(); JTabbedPane jTabbedPane = new JTabbedPane(); private JPanel jPanel1 = new JPanel(); private JPanel jPanel2 = new JPanel(); private JTextArea jt1 = new JTextArea(将电脑多次分发给你的牌按照相同的花色由大至小排列起来。直到桌面上的牌全都消失。); /用来显示“游戏规则”对应的文本框 private JTextArea jt2 = new JTextArea(该游戏中,纸牌的图片来自于Windows XP
20、的纸牌游戏,图片权属于原作者所有!); /用来显示“声明”对应的文本框 /*构造函数*/ public AboutDialog() setTitle(蜘蛛牌); setSize(300,200); setResizable(false);/设置是否可调整大小,初始值设为false setDefaultCloseOperation (WindowConstants.DISPOSE_ON_CLOSE); /setDefaultCloseOperation()是用来设定窗口被关闭时候(比如点击了右上角的x)的行为的。 Container c = this.getContentPane(); jt1.
21、setSize(300,300);/设置“游戏规则”下文本框大小 jt2.setSize(300,300);/设置“声明”下文本框的大小 jt1.setEditable(false);/设置文本框是否可以编辑,这里设置为false jt2.setEditable(false); jt1.setLineWrap(true); jt2.setLineWrap(true); jt1.setFont(new Font(楷体, java.awt.Font.BOLD, 20);/中文字体:楷体,字形:黑体,字号:13 jt1.setForeground(Color.blue);/设置“游戏规则”下文本的字
22、体颜色,可以设置为black(黑)、blue(蓝)、 cyan(蓝绿)、darkGray(深灰)、gray(灰)、green(绿)、lightGray(浅灰)、orange(橘黄)、pink(粉红)、red(红)、white(白)、yellow(黄)等java.awt.Color中13中标准颜色之一jt2.setFont(new Font(楷体, java.awt.Font.BOLD, 20); jt2.setForeground(Color.red); jPanel1.add(jt1); jPanel2.add(jt2); jTabbedPane.setSize(300,200); jTab
23、bedPane.addTab(游戏规则, null, jPanel1, null); jTabbedPane.addTab(声明, null, jPanel2, null); jMainPane.add(jTabbedPane); c.add(jMainPane); pack(); this.setVisible(true); 6.2 PKCard.javaimport java.awt.*;import java.awt.event.*;import javax.swing.*;public class PKCard extends JLabel implements MouseListen
24、er, MouseMotionListener private static final long serialVersionUID = 1L;/Add default serial version ID /纸牌的位置 Point point = null; Point initPoint = null; int value = 0; int type = 0; String name = null; Container pane = null; Spider main = null; boolean canMove = false; boolean isFront = false; PKCa
25、rd previousCard = null; public void mouseClicked(MouseEvent arg0) public void flashCard(PKCard card) /启动Flash线程 new Flash(card).start(); /不停的获得下一张牌,直到完成 if(main.getNextCard(card) != null) card.flashCard(main.getNextCard(card); class Flash extends Thread private PKCard card = null; public Flash(PKCard card) this.card = card; /*线程的run()方法-为纸牌的正面设置白色图片*/ public void run() boolean is = false; ImageIcon icon = new ImageIcon(images/white.gif); for (int i = 0; i 4; i+) try Thread.s
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1