2024年2月19日发(作者:)
课程设计蜘蛛纸牌报告终极修改版
轻 工 大 学数学与计算机学院 Java 程序设计 课程设计报告专 业:
信息与计算科学 班 级:
信计1402 学 号:
姓 名:
徐雄飞 指导教师:
贾瑜1 课程设计目的与要求 课程设计是在学习Java程序设计之后的实践教学环节。该实践教学是软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧。要求学生在设计中逐步提高程序设计能力,培养科学的软件工作方法。学生通过课程设计在下述各方面得到锻炼:
1、能根据实际问题的具体情况,结合面向对象的基本理论和基本技巧,正确分析问题,并能设计出解决问题的有效算法与程序。
2、提高程序设计和调试能力。学生通过上机实习,验证自己设计的算法和程序的正确性。学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改,进一步提高程序设计水平。2
设计内容
2、1 蜘蛛纸牌
第 1 页 共 12 页
2、1、1 程序基本功能 蜘蛛纸牌游戏通过鼠标操作,将电脑多次分发的纸牌,按照相同的花色由大到小排 列起来,直到桌面上的纸牌全都消失,即为胜利。包括如下功能:
(a)难度选择:包括简单(单色)、中级(双色)、高级(四色)。
(b)开局:任何时候可以重新开始一盘新的游戏。
(c)发牌。
(d)显示可行操作:提示当前可行操作。
(e)简单的帮助文档:对软件的简单介绍和编制说明。
2、1、2 程序设计方案和原理蜘蛛纸牌游戏共由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 页 共 12 页
2、1、3 程序的代码实现 SpiderMenuBar、javaSpiderMenuBar、java的作用是生成蜘蛛游戏的菜单,实现菜单栏中各个组件的事件倾听。其代码如下:import javax、swing、JMenuBar;import javax、swing、JMenu;import javax、swing、JMenuItem;import javax、swing、JRadioButtonMenuItem;import javax、swing、ButtonGroup;public class SpiderMenuBar extends
JMenuBar{ //生成spider框架对象 Spider main = null; //生成菜单组 JMenu jNewGame = new JMenu("游戏"); JMenu jHelp
= new JMenu("帮助"); //生成菜单项 JMenuItem jItemAbout =
new JMenuItem("关于"); JMenuItem jItemOpen = new
JMenuItem("开局"); JMenuItem jItemPlayAgain = new
JMenuItem("重新发牌"); //生成单选框 JRadioButtonMenuItem
jRMItemEasy = new JRadioButtonMenuItem("简单:单一花色");
JRadioButtonMenuItem jRMItemNormal = new
JRadioButtonMenuItem("中级:双花色");
JRadioButtonMenuItem jRMItemHard = new
JRadioButtonMenuItem("高级:四花色");; JMenuItem
jItemExit = new JMenuItem("退出"); JMenuItem jItemValid =
new JMenuItem("显示可行操作"); /** **构造函数,生成JMenuBar的图形界面 */ public SpiderMenuBar(Spider
spider){ this、main = spider; /** **初始化“游戏”菜单栏
第 3 页 共 12 页
*/ jNewGame、add(jItemOpen); jNewGame、add(jItemPlayAgain); jNewGame、add(jItemValid);
jNewGame、addSeparator(); jNewGame、add(jRMItemEasy);
jNewGame、add(jRMItemNormal); jNewGame、add(jRMItemHard);
jNewGame、addSeparator(); jNewGame、add(jItemExit);
ButtonGroup group = new ButtonGroup(); group、add(jRMItemEasy); group、add(jRMItemNormal); group、add(jRMItemHard); jHelp、add(jItemAbout); this、add(jNewGame); this、add(jHelp);//为组件添加事件监听并实现 //“开局”jItemOpen、addActionListener(new java、awt、event、ActionListener()
{ public void actionPerformed(java、awt、event、ActionEvent e)
{ main、newGame(); } }); //“重新发牌”jItemPlayAgain、addActionListener(new java、awt、event、ActionListener()
{ public void actionPerformed(java、awt、event、ActionEvent e)
{ if(main、getC()
<60){ main、deal(); } } }); //"显示可行操作"jItemValid、addActionListener(new java、awt、event、ActionListener()
第 4 页 共 12 页
{ public void actionPerformed(java、awt、event、ActionEvent e)
{ new Show()、start(); } }); //“退出”jItemExit、addActionListener(new java、awt、event、ActionListener()
{ public void actionPerformed(java、awt、event、ActionEvent e)
{ main、dispose(); System、exit(0); } });//“简单级别”默认已选jRMItemEasy、setSelected(true); //“简单级别”jRMItemEasy、addActionListener(new java、awt、event、ActionListener()
{ public void actionPerformed(java、awt、event、ActionEvent e)
{ main、setGrade(Spider、EASY); main、initCards();
main、newGame(); } }); //“中级”jRMItemNormal、addActionListener(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)
第 5 页 共 12 页
{ main、setGrade(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(javax、swing、event、MenuEvent e)
{} public void menuCanceled(javax、swing、event、MenuEvent e)
{} }); //“关于”jItemAbout、addActionListener(new
java、awt、event、ActionListener()
{ public void actionPerformed(java、awt、event、ActionEvent e)
{ new AboutDialog(); } }); } /** **构造线程:显示可以执行的操作 */ class Show extends Thread{ public void
run(){ main、showEnableOperator(); } } }PKCard、javaPKCard,java的作用是定义纸牌的属性,包括名称,位置等相关信息。并通过相关方法实现了纸牌的移动等。其代码如下:import java、awt、*;import java、awt、event、*;import
javax、swing、*;public class PKCard extends JLabel
第 6 页 共 12 页
implements MouseListener, MouseMotionListener{ //纸牌的位置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; PKCard 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、sleep(200);}catch (InterruptedException
e){e、printStackTrace();}if (is){this、card、turnFront();is = !is;}else{this、card、setIcon(icon);is
= !is;}// 根据当前外观将card的UI属性重置card、updateUI();}}} /** **点击鼠标 */public void
mousePressed(MouseEvent mp){ point = mp、getPoint();
main、setNA(); this、previousCard = main、第 7 页 共 12 页
getPreviousCard(this); } /** **释放鼠标 */public void
mouseReleased(MouseEvent mr){Point point = ((JLabel)
mr、getSource())、getLocation();//判断可行列int n =
this、whichColumnAvailable(point);if (n ===20;this、setNextCardLocation(point);main、table、remove(this、getLocation());point、y=240;card = (PKCard)
main、table、get(point);if (card != null && card、isCardCanMove()){main、haveFinish(n);}}}/* **方法:放置纸牌 */public void setNextCardLocation(Point point){PKCard
card = 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{point = new Point(point);point、y
+=20;card、setNextCardLocation(point);point、y20)
/;int b = (x1;}else if (b >71){a++;}}else if
(b >71){a =1){Point p = main、getLastCardLocation(a);if
(p == null)
p = main、getGroundLabelLocation(a);b = y96 ||
b >=96){a = point、x;y = p、y - point、y;this、moving(x,
y);}} /** **返回值:void **方法:移动(x,y)个位置
*/public void moving(int x, int y){ PKCard card = main、第 8 页 共 12 页
getNextCard(this); Point p = this、getLocation(); //将组件移动到容器中指定的顺序索引。p ane、setponentZOrder(this,1); //在Hashtable中保存新的节点信息main、table、remove(p); p、x += x; p、y += y; this、setLocation(p); main、table、put(p, this); if (card !=
null)
card、moving(x, y); } public void
mouseMoved(MouseEvent arg0){ } /** **构造函数 */ public
PKCard(String name, Spider spider){ super(); this、type =
new Integer(name、substring(0,1))、intValue(); this、value = new Integer(name、substring(2))、intValue();
this、name = name; this、main = spider; this、pane =
this、main、getContentPane(); this、addMouseListener(this); this、addMouseMotionListener(this); this、setIcon(new
ImageIcon("images/rear、gif")); this、setSize(71,96);
this、setVisible(true); } /** **返回值:void **方法:令纸牌显示正面 */public void turnFront(){ this、setIcon(new
ImageIcon("images/" + name + "、gif")); this、isFront =
true; } /** **返回值:void **方法:令纸牌显示背面
*/public void turnRear(){ this、setIcon(new
ImageIcon("images/rear、gif")); this、isFront = false;
第 9 页 共 12 页
this、canMove = false; } /** **返回值:void **方法:将纸牌移动到点point */public void moveto(Point point){ this、setLocation(point); this、initPoint = point; } /** **返回值:void **方法:判断牌是否能移动 */public void
setCanMove(boolean can){ this、canMove = can; PKCard card
= main、getPreviousCard(this); if (card != null && card、isCardFront()){ if (!can){ if (!card、isCardCanMove()){ return;} else{card、setCanMove(can);}}
else{ if (this、value +1 == card、getCardValue()
&& this、type == card、getCardType()){card、setCanMove(can);}else{card、setCanMove(false);} } } } /**
**返回值:boolean **方法:判断card是否是正面 */public
boolean isCardFront(){ return this、isFront; } /* **返回值:boolean **方法:返回是否能够移动 */public boolean
isCardCanMove(){ return this、canMove; } /** **返回值:int **方法:获得card的内容值 */public int
getCardValue(){ return value; } /** **返回值:int **方法:获得card的类型 */public int getCardType(){ return
type; }}AboutDialog、javaAboutDialog、java的主要功能是生成蜘蛛纸牌游戏的帮助栏。其代码如下:import javax、swing、*;import java、awt、*;/* **“关于”窗口 */public class
AboutDialog extends JDialog{JPanel jMainPane = new
第 10 页 共 12 页
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的纸牌游戏,图片权属于原作者所有!");
/* **构造函数 */public AboutDialog(){setTitle("蜘蛛牌");setSize(300,200);setResizable(false);setDefaultCloseOperation (WindowConstants、DISPOSE_ON_CLOSE); Container c
= this、getContentPane();jt
1、setSize(260,200);jt
2、setSize(260,200);jt
1、setEditable(false);jt
2、setEditable(false);jt
1、setLineWrap(true); jt
2、setLineWrap(true); jt
1、setFont(new Font("楷体_GB2312", java、awt、Font、BOLD,13));jt
1、setForeground(Color、blue);jt
2、setFont(new Font("楷体_GB2312", java、awt、Font、BOLD,13));jt
第 11 页 共 12 页
2、setForeground(Color、black);jPanel
1、add(jt1);jPanel
2、add(jt2);jTabbedPane、setSize(300,200);jTabbedPane、addTab("游戏规则", null,
jPanel1, null);jTabbedPane、addTab("声明", null, jPanel2,
null);jMainPane、add(jTabbedPane);c、add(jMainPane);pack();this、setVisible(true);}} Spider、javaSpider、java文件是蜘蛛纸牌游戏的主类文件,其主要功能是生成蜘蛛纸牌游戏的框架,实现游戏中的方法,包括纸牌的随机生成,位置的摆放等。其代码如下:mport java、awt、*;import java、awt、event、*;import javax、swing、*;import java、util、*;public class Spider extends
JFrame{//整型变量,表示难度等级为:简单public static
final int EASY
第 12 页 共 12 页


发布评论