JAVA 课程设计蜘蛛纸牌报告终极修改版

合集下载

蜘蛛纸牌详细设计说明书

蜘蛛纸牌详细设计说明书

蜘蛛纸牌概要设计说明书南昌航空大学软件学院2011年10月1.引言1.1编写目的1.1编写目的本详细设计说明书是针对蜘蛛纸牌游戏的课程作业而编写。

目的是对该软件进行详细设计,在概要设计的基础上进一步明确系统结构,详细地介绍系统的各个模块,为进行后面的实现和测试作准备。

本详细设计说明书的预期读者为本项目小组的成员以及对该系统感兴趣,在以后想对系统进行扩展和维护的人员。

1.2背景a.待开发的系统的名称:蜘蛛纸牌游戏软件b.本项目的任务提出者: 周璇、罗书惟、罗剑、王天宇开发者:周璇、罗书惟、罗剑、王天宇用户:所有对该软件感兴趣,并且对该游戏熟悉的用户]1.3定义AboutDialog:游戏关于类;Frame1:游戏界面设计;PKCard:扑克牌的排列算法;Spider:游戏规则;SpiderMenuBar:游戏菜单栏1.4参考资料《Java实用教程》清华大学出版社张跃平耿祥义著《Java实用教程》2. 系统的结构3.模块1(Frame1)设计说明3.1模块描述实现用户界面的类,含有1个类3种方法,是本系统中最简单的代码3.2功能实现用户友好界面。

3.3性能负责接受用户输入,显示系统输出,其他模块功能的协调调用。

3.4输入项选择游戏的难度系数(简单、中等、高等)、显示可行性操作、统计战况、发牌、保存游戏等。

3.5输出项得出游戏的结果界面。

3.6接口import javax.swing.JMenuBar;import javax.swing.JMenu;import javax.swing.JMenuItem;import javax.swing.JRadioButtonMenuItem;import javax.swing.ButtonGroup。

3.7注释设计ImageIcon icon = new ImageIcon("images/测试.gif"); //gif,jpg 格式能用,bmp格式不能用3.8 限制条件扑克牌的图画格式只能是gif,jpg。

java课程设计 蜘蛛纸牌游戏设计课程设计报告

java课程设计 蜘蛛纸牌游戏设计课程设计报告

《面向对象程序设计》课程设计报告题目: 下拉列表运算器设计专业: xxxxx班级: xxx姓名: xx指导教师: xx成绩:xxxxxx 年 x 月xx 日xx目录1设计内容及要求 (2)1.1 设计内容 (2)1.2 设计要求 (2)2概要设计 (2)2.1代码功能功能模块设计: (2)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主要变量: (6)2.5.3主要方法: (7)2.6模块四的详细介绍: (7)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总结: (24)5参考文献 (24)1设计内容及要求1.1 设计内容相信很多人都玩过蜘蛛纸牌这款休闲游戏,现在随着生活水平的提高,人们拥有充分的时间来享受休闲游戏带来的快乐,越来越多的人亲睐蜘蛛纸牌游戏。

谈起这款游戏,大家并不陌生。

从WINDOWS2000系统开始,就嵌入了蜘蛛纸牌游戏,可是随着微软系统的不段升级,蜘蛛纸牌游戏的功能业变得越来越强大,游戏的界面也更加美观。

Java课程设计报告蜘蛛纸牌游戏

Java课程设计报告蜘蛛纸牌游戏

目录1. 选题目的与系统概述 (2)2. 系统可行性分析与相关技术背景分析 (3)2.1系统可行性分析 (3)2.2相关技术背景分析 (3)3. 系统设计与关键技术 (4)3.1系统设计 (4)3.2关键技术 (5)4.系统测试与操作实施方法 (9)4.1进入游戏运行界面 (9)4.2 游戏的具体的操作过程 (9)4.3进入“帮助”菜单 (10)4.4游戏中的异常处理情况 (11)5.系统设计总结与回顾 (12)6.附录 (13)6.1 AboutDialog.java (13)6.2 PKCard.java (14)6.3 Spider.java (20)6.4 Spider M enuBar.java (29)1.选题目的与系统概述随着经济全球一体化的逐步加剧,人们的生活节奏越来越快。

蜘蛛纸牌游戏的一种,旨在让工作学习之后疲惫的玩家有一个轻愉快的放松方式。

与普通的纸牌相比,降低了一点难度。

游戏简单级别由8组A-K的清一色黑桃牌面组成,取消了红黑相间的游戏规则,更突然出强化了玩家在安排事物方面的能力。

蜘蛛纸牌游戏实现了与Windows系列操作系统中自带的蜘蛛纸牌游戏类似的功能。

该游戏程序中采用Windows系列中游戏的图片,运用Java语言设计了线程、鼠标事件、纸牌的装载、图形界面的构造、组件监听接口的实现、生成蜘蛛纸牌游戏的框架、实现游戏中的方法,是一种休闲益智游戏。

2.系统可行性分析与相关技术背景分析2.1系统可行性分析蜘蛛纸牌游戏规则是:(1)将电脑分发给你的牌按照相同的花色又打至小排列起来,直到桌面上的牌全都消失。

(2)可执行的牌必须为明牌(3)单牌移动规则(4)多拍移动规则游戏分三个等级:(1)简答:单一花色;(2)中级:双花色;(3)四花色。

2.2相关技术背景分析2.2.1蜘蛛纸牌游戏是基于Eclipse平台的Java程序。

Eclipse的背景如下:Eclipse最初是IBM公司的一个软件产品。

Spider——蜘蛛纸牌java程序设计3

Spider——蜘蛛纸牌java程序设计3

import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;public class Spider extends JFrame{//整型变量,表示难度等级为:简单public static final int EASY = 1;//整型变量,表示难度等级为:普通public static final int NATURAL = 2;//整型变量,表示难度等级为:难public static final int HARD = 3;//设定初始难度等级为简单private int grade = Spider.EASY;private Container pane = null;//生成纸牌数组private PKCard cards[] = new PKCard[104];private JLabel clickLabel = null;private int c = 0;private int n = 0;private int a = 0;private int finish = 0;Hashtable table = null;private JLabel groundLabel[] = null;public static void main(String[] args){Spider spider = new Spider();spider.setVisible(true);}/****构造函数*/public Spider(){setTitle("蜘蛛牌");setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);//设置框架的大小setSize(1024, 742);//生成SpiderMenuBar对象,并放置在框架之上setJMenuBar(new SpiderMenuBar(this));pane = this.getContentPane();//设置背景颜色pane.setBackground(new Color(0, 112, 26));//将布局管理器设置成为nullpane.setLayout(null);clickLabel = new JLabel();clickLabel.setBounds(883, 606, 121, 96);pane.add(clickLabel);clickLabel.addMouseListener(new MouseAdapter(){public void mouseReleased(MouseEvent me){if (c < 60){Spider.this.deal();}}});this.initCards();this.randomCards();this.setCardsLocation();groundLabel = new JLabel[10];int x = 20;for (int i = 0; i < 10; i++){groundLabel[i] = new JLabel();groundLabel[i].setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.RAISE D));groundLabel[i].setBounds(x, 25, 71, 96);x += 101;this.pane.add(groundLabel[i]);}this.setVisible(true);this.deal();this.addKeyListener(new KeyAdapter(){class Show extends Thread{public void run(){Spider.this.showEnableOperator();}}public void keyPressed(KeyEvent e){if (finish != 8) if (e.getKeyCode() == KeyEvent.VK_D && c < 60){ Spider.this.deal();}else if (e.getKeyCode() == KeyEvent.VK_M){new Show().start();}}});}/****开始新游戏*/public void newGame(){this.randomCards();this.setCardsLocation();this.setGroundLabelZOrder();this.deal();}/****返回值:int**返回牌的数量*/public int getC(){return c;}/****设置等级*/public void setGrade(int grade){this.grade = grade;}/****纸牌初始化*/public void initCards(){//如果纸牌已被赋值,即将其从框架的面板中移去if (cards[0] != null){for (int i = 0; i < 104; i++){pane.remove(cards[i]);}}int n = 0;//通过难度等级,为n赋值if (this.grade == Spider.EASY){n = 1;}else if (this.grade == Spider.NA TURAL){n = 2;}else{n = 4;}//为card赋值for (int i = 1; i <= 8; i++){for (int j = 1; j <= 13; j++){cards[(i - 1) * 13 + j - 1] = new PKCard((i % n + 1) + "-" + j,this);}}//随机纸牌初始化this.randomCards();}/****纸牌随机分配*/public void randomCards(){PKCard temp = null;//随机生成牌号for (int i = 0; i < 52; i++){int a = (int) (Math.random() * 104);int b = (int) (Math.random() * 104);temp = cards[a];cards[a] = cards[b];cards[b] = temp;}}/****设置还原*/public void setNA(){a = 0;n = 0;}/****设置纸牌的位置*/public void setCardsLocation(){table = new Hashtable();c = 0;finish = 0;n = 0;a = 0;int x = 883;int y = 580;//初始化待展开的纸牌for (int i = 0; i < 6; i++){for (int j = 0; j < 10; j++){int n = i * 10 + j;pane.add(cards[n]);//将card转向背面cards[n].turnRear();//将card放在固定的位置上cards[n].moveto(new Point(x, y));//将card的位置及相关信息存入table.put(new Point(x, y), cards[n]);}x += 10;}x = 20;y = 45;//初始化表面显示的纸牌for (int i = 10; i > 5; i--){for (int j = 0; j < 10; j++){int n = i * 10 + j;if (n >= 104) continue;pane.add(cards[n]);cards[n].turnRear();cards[n].moveto(new Point(x, y));table.put(new Point(x, y), cards[n]);x += 101;}x = 20;y -= 5;}}/****返回值:void**方法:显示可移动的操作*/public void showEnableOperator(){int x = 0;out: while (true){Point point = null;PKCard card = 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) break out;}card = (PKCard) this.table.get(point);}while (!card.isCardCanMove());while (this.getPreviousCard(card) != null&& this.getPreviousCard(card).isCardCanMove()){ card = this.getPreviousCard(card);}if (a == 10){a = 0;}for (; a < 10; a++){if (a != n){Point p = null;PKCard c = null;do{if (p != null){a++;}p = this.getLastCardLocation(a);int z = 0;while (p == null){p = this.getLastCardLocation(++a);if (a == 10) a = 0;if (a == n) a++;z++;if (z == 10) break out;}c = (PKCard) this.table.get(p);}while (!c.isCardCanMove());if (c.getCardValue() == card.getCardValue() + 1){card.flashCard(card);try{Thread.sleep(800);}catch (InterruptedException e){e.printStackTrace();}c.flashCard(c);a++;if (a == 10){n++;}break out;}}}n++;if (n == 10){n = 0;}x++;if (x == 10){break out;}}}/***返回值:void**方法:游戏运行*/public void deal(){this.setNA();//判断10列中是否空列for (int i = 0; i < 10; i++){if (this.getLastCardLocation(i) == null){JOptionPane.showMessageDialog(this, "有空位不能发牌!", "提示",JOptionPane.W ARNING_MESSAGE);return;}}int x = 20;for (int i = 0; i < 10; i++){Point lastPoint = this.getLastCardLocation(i);//这张牌应“背面向上”if (c == 0){lastPoint.y += 5;}//这张牌应“正面向上”else{lastPoint.y += 20;}table.remove(cards[c + i].getLocation());cards[c + i].moveto(lastPoint);table.put(new Point(lastPoint), cards[c + i]);cards[c + i].turnFront();cards[c + i].setCanMove(true);//将组件card移动到容器中指定的顺序索引。

蜘蛛纸牌课程设计

蜘蛛纸牌课程设计

蜘蛛纸牌课程设计一、课程目标知识目标:1. 学生能理解蜘蛛纸牌游戏的规则与基本策略;2. 学生能运用加减乘除运算,完成纸牌的排序;3. 学生掌握概率的基本概念,并运用到游戏策略中。

技能目标:1. 学生通过蜘蛛纸牌游戏,提高逻辑思维和问题解决能力;2. 学生能够运用所学知识,制定有效的游戏策略;3. 学生在游戏中,锻炼耐心、细心和观察力。

情感态度价值观目标:1. 学生在游戏中体验成功与失败,培养面对挑战的积极态度;2. 学生通过团队合作,学会相互尊重、沟通与协作;3. 学生认识到学习数学的乐趣,激发对数学学科的兴趣。

分析课程性质、学生特点和教学要求,将目标分解为以下具体学习成果:1. 学生能够独立完成蜘蛛纸牌游戏的基本操作;2. 学生能够在规定时间内完成游戏,并达到一定的分数;3. 学生能够总结游戏策略,并与同伴分享;4. 学生在游戏中展现出积极的态度,愿意接受挑战,并从失败中吸取经验;5. 学生在团队中积极参与讨论,乐于帮助他人,共同解决问题。

二、教学内容本章节教学内容围绕蜘蛛纸牌游戏,结合课程目标,选择以下内容:1. 蜘蛛纸牌游戏规则介绍与基本操作:- 游戏界面与纸牌布局;- 纸牌的移动规则;- 游戏的胜利条件。

2. 蜘蛛纸牌游戏策略:- 加减乘除运算在纸牌排序中的应用;- 概率知识在制定策略中的作用;- 逻辑思维与问题解决能力培养。

3. 教学大纲安排:- 第一节课:介绍蜘蛛纸牌游戏规则与基本操作;- 第二节课:讲解加减乘除运算在纸牌排序中的应用;- 第三节课:探讨概率知识在制定游戏策略中的作用;- 第四节课:总结游戏策略,分享经验,进行团队合作。

4. 教材章节及内容:- 第四章:概率与统计;- 第五章:问题解决与逻辑思维。

5. 教学内容进度安排:- 第一节课:完成蜘蛛纸牌游戏规则与基本操作的学习;- 第二节课:掌握加减乘除运算在纸牌排序中的应用;- 第三节课:学会运用概率知识制定游戏策略;- 第四节课:总结经验,进行团队合作,提高问题解决能力。

(完整版)Java毕业课程设计蜘蛛纸牌李娜

(完整版)Java毕业课程设计蜘蛛纸牌李娜

Java课程设计——蜘蛛纸牌游戏1 引言1.1 背景相信很多人都玩过蜘蛛纸牌这款休闲游戏,现在随着生活水平的提高,人们拥有充分的时间来享受休闲游戏带来的快乐,越来越多的人亲睐蜘蛛纸牌游戏。

谈起这款游戏,大家并不陌生。

从WINDOWS2000系统开始,就嵌入了蜘蛛纸牌游戏,可是随着微软系统的不段升级,蜘蛛纸牌游戏的功能业变得越来越强大,游戏的界面也更加美观。

用户的体验感受也更加美好。

所以,蜘蛛纸牌游戏的开发对于人类的生活娱乐更加有意义。

本游戏通过java语言编写,实现了游戏的难度选择、开局、重新发牌以及可视化的相关操作界面。

并通过设计鼠标事件,引入线程,构建游戏程序框架完成了对该游戏的难度选择、开局、发牌、显示可执行操作的各个基本功能。

1.2 目标该游戏通过鼠标操作,将电脑多次分发的纸牌,按照相同的花色由大到小排列起来,直到桌面上的纸牌全都消失,即为胜利。

包括如下功能:(a)难度选择:包括简单(单色)、中级(双色)、高级(四色)。

(b)开局:任何时候可以重新开始一盘新的游戏。

(c)发牌。

(d)显示可行操作:提示当前可行操作。

(e)简单的帮助文档:对软件的简单介绍和编制说明。

2 开发工具介绍2.1 java语言概述java是由Sun Microsystems公司于1995年5月推出的java程序设计语言和java平台的总称。

用java实现的浏览器显示它的魅力:跨平台的特点使得它越来越受到许多程序员的亲睐。

java除了可以开发动态的Web 页还可以开发各种系统软件。

java平台由java虚拟机和各种java应用编程接口(简称API)构成。

java应用编程接口为java提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。

在操作系统上安装一个java平台就可以运行任何一个java程序啦。

现在java平台已经几乎嵌入到所有的操作系统中。

这样java程序就可以只编译一次,就可以在各种系统当中运行。

2.2 java语言的特点java语言是一种简单的、面向对象的、分布式的、健壮的、安全的、与平台无关的、多线程、高性能的、动态程序设计语言。

Java课程设计蜘蛛纸牌李娜-推荐下载

Java课程设计蜘蛛纸牌李娜-推荐下载

对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电通,力1根保过据护管生高线0产中不工资仅艺料可高试以中卷解资配决料置吊试技顶卷术层要是配求指置,机不对组规电在范气进高设行中备继资进电料行保试空护卷载高问与中题带资22负料,荷试而下卷且高总可中体保资配障料置各试时类卷,管调需路控要习试在题验最到;大位对限。设度在备内管进来路行确敷调保设整机过使组程其高1在中正资,常料要工试加况卷强下安看2与全22过,22度并22工且22作尽2下可护1都能关可地于以缩管正小路常故高工障中作高资;中料对资试于料卷继试连电卷接保破管护坏口进范处行围理整,高核或中对者资定对料值某试,些卷审异弯核常扁与高度校中固对资定图料盒纸试位,卷置编工.写况保复进护杂行层设自防备动腐与处跨装理接置,地高尤线中其弯资要曲料避半试免径卷错标调误高试高等方中,案资要,料求编5试技写、卷术重电保交要气护底设设装。备备4置管高调、动线中试电作敷资高气,设料中课并3技试资件且、术卷料拒管中试试调绝路包验卷试动敷含方技作设线案术,技槽以来术、及避管系免架统不等启必多动要项方高方案中式;资,对料为整试解套卷决启突高动然中过停语程机文中。电高因气中此课资,件料电中试力管卷高壁电中薄气资、设料接备试口进卷不行保严调护等试装问工置题作调,并试合且技理进术利行,用过要管关求线运电敷行力设高保技中护术资装。料置线试做缆卷到敷技准设术确原指灵则导活:。。在对对分于于线调差盒试动处过保,程护当中装不高置同中高电资中压料资回试料路卷试交技卷叉术调时问试,题技应,术采作是用为指金调发属试电隔人机板员一进,变行需压隔要器开在组处事在理前发;掌生同握内一图部线纸故槽资障内料时,、,强设需电备要回制进路造行须厂外同家部时出电切具源断高高习中中题资资电料料源试试,卷卷线试切缆验除敷报从设告而完与采毕相用,关高要技中进术资行资料检料试查,卷和并主检且要测了保处解护理现装。场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。

课程设计蜘蛛纸牌报告终极修改版

课程设计蜘蛛纸牌报告终极修改版

课程设计蜘蛛纸牌报告终极修改版轻工大学数学与计算机学院 Java 程序设计课程设计报告专业:信息与计算科学班级:信计1402 学号:姓名:徐雄飞指导教师:贾瑜1 课程设计目的与要求课程设计是在学习Java程序设计之后的实践教学环节。

该实践教学是软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧。

要求学生在设计中逐步提高程序设计能力,培养科学的软件工作方法。

学生通过课程设计在下述各方面得到锻炼:1、能根据实际问题的具体情况,结合面向对象的基本理论和基本技巧,正确分析问题,并能设计出解决问题的有效算法与程序。

2、提高程序设计和调试能力。

学生通过上机实习,验证自己设计的算法和程序的正确性。

学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改,进一步提高程序设计水平。

2 设计内容2、1 蜘蛛纸牌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类,其主要功能为:定义纸牌的属性,包括名称,位置等相关信息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

武汉轻工大学数学与计算机学院Java 程序设计课程设计报告专业:信息与计算科学班级:信计1402学号:***********名:***指导教师:**1 课程设计目的与要求课程设计是在学习Java程序设计之后的实践教学环节。

该实践教学是软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧。

要求学生在设计中逐步提高程序设计能力,培养科学的软件工作方法。

学生通过课程设计在下述各方面得到锻炼:1、能根据实际问题的具体情况,结合面向对象的基本理论和基本技巧,正确分析问题,并能设计出解决问题的有效算法与程序。

2、提高程序设计和调试能力。

学生通过上机实习,验证自己设计的算法和程序的正确性。

学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改,进一步提高程序设计水平。

2 设计内容2.1 蜘蛛纸牌2.1.1 程序基本功能蜘蛛纸牌游戏通过鼠标操作,将电脑多次分发的纸牌,按照相同的花色由大到小排列起来,直到桌面上的纸牌全都消失,即为胜利。

包括如下功能:(a)难度选择:包括简单(单色)、中级(双色)、高级(四色)。

(b)开局:任何时候可以重新开始一盘新的游戏。

(c)发牌。

(d)显示可行操作:提示当前可行操作。

(e)简单的帮助文档:对软件的简单介绍和编制说明。

2.1.2 程序设计方案和原理蜘蛛纸牌游戏共由4个部分组成,分别是:Spider.java,SpiderMenuBar.java,PKCard.java,AboutDialog.java,SpiderMenuBar.java包含名为SpiderMenuBa r的public类,其主要功能为生成蜘蛛纸牌游戏的菜单栏,实现菜单栏中各个组件的事件侦听。

主要包括3个模块:图形用户界面的构建;组件监听接口的实现:显示可执行操作的线程。

PKCard.java。

包含名为PKCard的public类,其主要功能为:定义纸牌的属性,包括名称,位置等相关信息。

并通过相关方法实现纸牌的移动等。

AboutDialog.java 。

包含名为AboutDialog的public类,其主要功能为生成蜘蛛纸牌游戏的帮助栏。

Spider.java 。

包含名为Spider的public类,其主要功能为生成蜘蛛纸牌游戏的框架,实现游戏中的方法,包括:纸牌的随机生成,位置的摆放等。

程序流程图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;/****初始化“游戏”菜单栏*/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() { 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) { 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 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.getPreviousCard(this);}/****释放鼠标*/public void mouseReleased(MouseEvent mr){Point point = ((JLabel) mr.getSource()).getLocation();//判断可行列int n = this.whichColumnAvailable(point);if (n == -1 || n == this.whichColumnAvailable(this.initPoint)){ this.setNextCardLocation(null);main.table.remove(this.getLocation());this.setLocation(this.initPoint);main.table.put(this.initPoint, this);return;}point = main.getLastCardLocation(n);boolean isEmpty = false;PKCard card = null;if (point == null){point = main.getGroundLabelLocation(n);isEmpty = true;}else{card = (PKCard) main.table.get(point);}if (isEmpty || (this.value + 1 == card.getCardV alue())){ point.y += 40;if (isEmpty) point.y -= 20;this.setNextCardLocation(point);main.table.remove(this.getLocation());point.y -= 20;this.setLocation(point);main.table.put(point, this);this.initPoint = point;if (this.previousCard != null){this.previousCard.turnFront();this.previousCard.setCanMove(true);}this.setCanMove(true);}else{this.setNextCardLocation(null);main.table.remove(this.getLocation());this.setLocation(this.initPoint);main.table.put(this.initPoint, this);return;}point = main.getLastCardLocation(n);card = (PKCard) main.table.get(point);if (card.getCardValue() == 1){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.y -= 20;main.table.remove(card.getLocation());card.setLocation(point);main.table.put(card.getLocation(), card);card.initPoint = card.getLocation();}}}/****返回值:int**方法:判断可用列*/public int whichColumnAvailable(Point point){ int x = point.x;int y = point.y;int a = (x - 20) / 101;int b = (x - 20) % 101;if (a != 9){if (b > 30 && b <= 71){a = -1;}else if (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 || b >= 96){a = -1;}}return a;}public void mouseEntered(MouseEvent arg0){}public void mouseExited(MouseEvent arg0){}/****用鼠标拖动纸牌*/public void mouseDragged(MouseEvent arg0){if (canMove){int x = 0;int y = 0;Point p = arg0.getPoint();x = p.x - point.x;y = p.y - point.y;this.moving(x, y);}}/****返回值:void**方法:移动(x,y)个位置*/public void moving(int x, int y){PKCard card = main.getNextCard(this);Point p = this.getLocation();//将组件移动到容器中指定的顺序索引。

相关文档
最新文档