基于Eclipse+J2se平台的蜘蛛纸牌游戏程序设计.docx

上传人:b****1 文档编号:20106371 上传时间:2023-04-25 格式:DOCX 页数:38 大小:260.76KB
下载 相关 举报
基于Eclipse+J2se平台的蜘蛛纸牌游戏程序设计.docx_第1页
第1页 / 共38页
基于Eclipse+J2se平台的蜘蛛纸牌游戏程序设计.docx_第2页
第2页 / 共38页
基于Eclipse+J2se平台的蜘蛛纸牌游戏程序设计.docx_第3页
第3页 / 共38页
基于Eclipse+J2se平台的蜘蛛纸牌游戏程序设计.docx_第4页
第4页 / 共38页
基于Eclipse+J2se平台的蜘蛛纸牌游戏程序设计.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

基于Eclipse+J2se平台的蜘蛛纸牌游戏程序设计.docx

《基于Eclipse+J2se平台的蜘蛛纸牌游戏程序设计.docx》由会员分享,可在线阅读,更多相关《基于Eclipse+J2se平台的蜘蛛纸牌游戏程序设计.docx(38页珍藏版)》请在冰豆网上搜索。

基于Eclipse+J2se平台的蜘蛛纸牌游戏程序设计.docx

基于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.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 判决书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1