基于Eclipse+J2se平台的蜘蛛纸牌游戏程序设计.docx
《基于Eclipse+J2se平台的蜘蛛纸牌游戏程序设计.docx》由会员分享,可在线阅读,更多相关《基于Eclipse+J2se平台的蜘蛛纸牌游戏程序设计.docx(38页珍藏版)》请在冰豆网上搜索。
基于Eclipse+J2se平台的蜘蛛纸牌游戏程序设计
佛山科学技术学院
《可视化编程技术》课程设计报告
基于Eclipse+J2se平台的蜘蛛纸牌游戏程序设计
学生姓名:
符彩玉
学号:
20140910132
年级专业:
14级教育技术学1班
指导老师:
容汝佳
学院:
人文与教育学院
广东★佛山
提交日期:
2016年12月
目录
1.前言………………………………………………………………………………2
2.概要设计…………………………………………………………………………3
2.1开发环境……………………………………………………………………3
2.2蜘蛛纸牌功能…………………………………………………………………3
2.3界面设计……………………………………………………………………3
2.4类的框架结构图……………………………………………………………4
3.详细设计………………………………………………………………………4
3.1使用的java类的说明……………………………………………………4
3.2类的主要方法………………………………………………………………5
3.2.1处理按了运算符后的计算……………………………………………5
3.2.2处理输入字符…………………………………………………………6
3.2.3进制的转换……………………………………………………………6
3.2.4设计总体认识…………………………………………………………7
3.2.5程序流程图……………………………………………………………8
4.运行结果…………………………………………………………………………8
5.测试分析…………………………………………………………………………9
5.1程序运行情况………………………………………………………………9
5.2程序异常处理………………………………………………………………9
6.源程序……………………………………………………………………………9
参考文献……………………………………………………………………………25
设计总结……………………………………………………………………………25
摘要:
本程序是通过java语言编写的一个知蜘蛛纸牌游戏,实现了游戏的难度选择、开局、重新发牌以及可视化的相关操作界面。
并通过设计鼠标事件,引入线程,构建游戏程序框架完成了对该游戏的难度选择、开局、发牌、显示可执行操作的各个基本功能,具有非常强大的娱乐性。
关键字:
java、蜘蛛纸牌、方法、事件、操作界面
1前言
随着科学技术的不断发展,计算机已经成为我们工作学习和生活中不可缺少的工具。
文本编辑器是个人计算机最司空见惯的应用程序了,在学习了Java语言之后,我决定使用Java语言编写一个简单的蜘蛛纸牌,可以实现简单的运算功能,满足日常基本的工作学习和娱乐需要。
Java是由Sun公司开发的新一代纯面向对象的网络编程语言。
其目标是建立一种在任意种机器、任一种操作系统的网络环境中运行的软件,实行所谓的“程序写一次,到处运行”的目标。
正因为如此,Java已成为当今Internet上最流行、最受欢迎的一种程序开发语言。
Java开发小组把Java按特性分为基本版、移动版、企业版,每个版本有一个软件开发包。
Java基本版本叫Java2标准版(Java2StandardEdition,J2SE),它包含建立Java应用程序或者是Applet所需的应用程序编程接口(API)。
Java2移动版(TheJava2MobileEdition,J2ME)包含创建无线Java应用程序的API。
还有Java2企业版(TheJava2Enterprise,J2EE)是J2SE的增强版本,包含建立多层架构应用程序API。
Java语言是由C++语言发展起而来的,是一种彻底的面向对象的程序设计语言。
作为一种纯面向对象的程序设计语言,它非常适合大型软件的开发。
Java语言去掉了C++语言的一些容易引起错误的特性。
Java语言的特点有:
面向对象、跨平台、安全性、多线程和图形功能强。
2概要设计
2.1开发环境
开发平台:
Eclipse
开发工具:
JDK
2.2蜘蛛纸牌功能
该游戏通过鼠标操作,将电脑多次分发的纸牌,按照相同的花色由大到小排列起来,直到桌面上的纸牌全都消失,即为胜利。
包括如下功能:
(1)开局:
任何时候可以重新开始一盘新的游戏。
(2)重新发牌:
当需要发牌时,单击界面右下的未发牌叠,执行发牌操作时,界面上方的牌叠位都会发一张牌。
(3)显示可行操作:
提示当前可行操作。
(4)难度选择:
包括简单(单色)、中级(双色)、高级(四色)。
(5)退出:
结束游戏。
(6)帮助:
对软件的简单介绍和编制说明
2.3界面设计
图2.3蜘蛛纸牌界面板
2.4类的框架结构图
SpiderMenu.class如图2.4A所示:
Spider.class如图2.4B所示
AboutDialog.class如图2.4C所示
PKCard.class 如图2.4D所示
图2.4A图2.4B
图2.4C图2.4D
3详细设计
3.1蜘蛛纸牌使用的Java类的说明
3.1.1JDialog类是创建对话框窗口的主要类。
可以使用此类创建自定义的对话框,或者调用JOptionPane中的多个类方法来创建各种标准对话框。
3.1.2Jpanel类是一个面板类负责创建一个面板容器,再向这个面板添加组件,然后将面板添加到底层容器中。
3.1.3AboutDialog类是JDialog类的子类,负责创建一个显示对话框。
3.1.4JMenuBar类的一个实例就是一个菜单条。
JMenu类是JComponent类的子类负责创建菜单组的。
即JMenu类的一个实例化就是一个菜单。
JMenuItem类是JMenu类的父类负责创建菜单项。
即JMenuItem例化就是一个菜单项。
3.2类的主要方法
3.2.1纸牌移动放置操作:
//用鼠标拖动纸牌
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); }
} /*
* 方法:
放置纸牌 */
public void setNextCardLocation(Point point) { PKCard card = main.getNextCard(this); if (card !
= null) { if (point == null) {
card.setNextCardLocation(null);
main.map.remove(card.getLocation());// 先从HashMap中删除card card.setLocation(card.initPoint); // 为card设置新的坐标
main.map.put(card.initPoint, card); // 再将card添加到
HashMap中 } else { point = new Point(point); point.y += 20;
card.setNextCardLocation(point); point.y -= 20;
main.map.remove(card.getLocation()); card.setLocation(point);
main.map.put(card.getLocation(), card); card.initPoint = card.getLocation();
}
}
}
3.2.2纸牌随机分配
public void randomCards() {// 将纸牌的顺序打乱,否则牌号的将是从A到K的出
现规律 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;
}
}
3.2.3右下角发牌区纸牌的初始化代码:
int x = 883;// 将坐标定位到右下角发牌区 int y = 580;
for (int i = 0; i < 6; i++) {// 初始化右下角发牌区的纸牌,共6叠
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的位置及相关信息存入
map.put(new Point(x, y), cards[n]);
}
x += 10; // 共6叠纸牌,最上面一叠纸牌的x坐标为883,再往下,x依次增加
10
}
3.2.4设计的总体认识
1.JAVA设计的摘要
2.JAVA设计的目录结构
3.JAVA设计的概要和详细设计
4.JAVA设计的版权意识
5.JAVA设计需要编译的环境
6.JAVA设计的实用性
3.2.5程序流程图
图3绘制蜘蛛纸牌方法PAD图
4运行结果
4.1游戏菜单栏内游戏菜单及帮助菜单功能展示:
4.2不同难度等级
单一花色(简单)
双花色(中级)
7.四花色(高级)
4.3有空位时不能发牌:
4.4游戏结束时收牌:
5测试分析
5.1程序异常处理:
游戏过程中,如果移动纸牌时,中间有空位时,单击发牌,会弹出“提示对话框”。
publicvoiddeal()
{
this.setNA();
//判断10列中是否空列
for(inti=0;i<10;i++){
if(this.getLastCardLocation(i)==null){
JOptionPane.showMessageDialog(this,"有空位不能发牌!
","提示",
JOptionPane.WARNING_MESSAGE);
return;
}
}
6程序清单:
以下是主菜单界面的主要代码:
importjavax.swing.JMenuBar;
importjavax.swing.JMenu;
importjavax.swing.JMenuItem;
importjavax.swing.JRadioButtonMenuItem;
importjavax.swing.ButtonGroup;
publicclassSpiderMenuBarextendsJMenuBar{
//生成spider框架对象
Spidermain=null;
//生成菜单组
JMenujNewGame=newJMenu("游戏");
JMenujHelp=newJMenu("帮助");
//生成菜单项
JMenuItemjItemAbout=newJMenuItem("关于");
JMenuItemjItemOpen=newJMenuItem("开局");
JMenuItemjItemPlayAgain=newJMenuItem("重新发牌");
//生成单选框
JRadioButtonMenuItemjRMItemEasy=newJRadioButtonMenuItem("简单:
单一花色");
JRadioButtonMenuItemjRMItemNormal=newJRadioButtonMenuItem("中级:
双花色");
JRadioButtonMenuItemjRMItemHard=newJRadioButtonMenuItem("高级:
四花色");;
JMenuItemjItemExit=newJMenuItem("退出");
JMenuItemjItemValid=newJMenuItem("显示可行操作");
/**
**构造函数,生成JMenuBar的图形界面
*/
publicSpiderMenuBar(Spiderspider){
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);
ButtonGroupgroup=newButtonGroup();
group.add(jRMItemEasy);
group.add(jRMItemNormal);
group.add(jRMItemHard);
jHelp.add(jItemAbout);
this.add(jNewGame);
this.add(jHelp);
//为组件添加事件监听并实现
//“开局”
jItemOpen.addActionListener(newjava.awt.event.ActionListener(){
publicvoidactionPerformed(java.awt.event.ActionEvente){
main.newGame();
}
});
//“重新发牌”
jItemPlayAgain.addActionListener(newjava.awt.event.ActionListener(){
publicvoidactionPerformed(java.awt.event.ActionEvente){
if(main.getC()<60){
main.deal();
}
}
});
//"显示可行操作"
jItemValid.addActionListener(newjava.awt.event.ActionListener(){
publicvoidactionPerformed(java.awt.event.ActionEvente){
newShow().start();
}
});
//“退出”
jItemExit.addActionListener(newjava.awt.event.ActionListener(){
publicvoidactionPerformed(java.awt.event.ActionEvente){
main.dispose();
System.exit(0);
}
});
//“简单级别”默认已选
jRMItemEasy.setSelected(true);
//“简单级别”
jRMItemEasy.addActionListener(newjava.awt.event.ActionListener(){
publicvoidactionPerformed(java.awt.event.ActionEvente){
main.setGrade(Spider.EASY);
main.initCards();
main.newGame();
}
});
//“中级”
jRMItemNormal.addActionListener(newjava.awt.event.ActionListener(){
publicvoidactionPerformed(java.awt.event.ActionEvente){
main.setGrade(Spider.NATURAL);
main.initCards();
main.newGame();
}
});
//“高级”
jRMItemHard.addActionListener(newjava.awt.event.ActionListener(){
publicvoidactionPerformed(java.awt.event.ActionEvente){
main.setGrade(Spider.HARD);
main.initCards();
main.newGame();
}
});
jNewGame.addMenuListener(newjavax.swing.event.MenuListener(){
publicvoidmenuSelected(javax.swing.event.MenuEvente){
if(main.getC()<60){
jItemPlayAgain.setEnabled(true);
}
else{
jItemPlayAgain.setEnabled(false);
}
}
publicvoidmenuDeselected(javax.swing.event.MenuEvente){}
publicvoidmenuCanceled(javax.swing.event.MenuEvente){}
});
//“关于”
jItemAbout.addActionListener(newjava.awt.event.ActionListener(){
publicvoidactionPerformed(java.awt.event.ActionEvente){
newAboutDialog();
}
});
}
/**
**构造线程:
显示可以执行的操作
*/
classShowextendsThread{
publicvoidrun(){
main.showEnableOperator();
}
}
游戏等级、框架属性、纸牌初始化、异常处理及成功处理代码:
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.util.*;
publicclassSpiderextendsJFrame{
//整型变量,表示难度等级为:
简单
publicstaticfinalintEASY=1;
//整型变量,表示难度等级为:
普通
publicstaticfinalintNATURAL=2;
//整型变量,表示难度等级为:
难
publicstaticfinalintHARD=3;
//设定初始难度等级为简单
privateintgrade=Spider.EASY;
privateContainerpane=null;
//生成纸牌数组
privatePKCardcards[]=newPKCard[104];
privateJLabelclickLabel=null;
privateintc=0;
privateintn=0;
privateinta=0;
privateintfinish=0;
Hashtabletable=null;
privateJLabelgroundLabel[]=null;
publicstaticvoidmain(String[]args){
Spiderspider=newSpider();
spider.setVisible(true);
}
/**
**构造函数
*/
publicSpider(){
//改变系统默认字体
Fontfont=newFont("Dialog",Font.PLAIN,12);
java.util.Enumerationkeys=UIManager.getDefaults().keys();
while(keys.hasMoreElements()){
Objectkey=keys.nextElement();
Objectvalue=UIManager.get(key);
if(valueinstanceofjavax.swing.plaf.FontUIResource){
UIManager.put(key,font);
}
}
setTitle("蜘蛛牌");
setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
//设置框架的大小
setSize(1024,742);
//生成SpiderMenuBar对象,并放置在框架之上
setJMenuBar(newSpiderMenuBar(this));
pane=this.getContentPane();
//设置背景颜色
pane.setBackground(newColor(0,112,26));
//将布局管理器设置成为null
pane.