Java课程设计报告

学院标志

安阳工学院计算机学院      JAVA课程设计报告

     蜘蛛纸牌游戏

专业班级:      09级网络工程(2)班      

学生姓名:             李瑞琳              

学生学号:      200903060016               

小组成员:     司慧晓郑亚楠司小婷杨达允

指导教师姓名:                         

目    录

1.选题目的与系统概述………………………………………………………3

2.系统可行性分析与相关技术背景分析……………………………………4

2.1系统可行性分析………………………………………………………4

2.2相关技术背景分析……………………………………………………4

3.系统设计与关键技术………………………………………………………5

3.1系统设计………………………………………………………………5

3.2关键技术………………………………………………………………5

4.系统测试与操作实施方法…………………………………………………10

4.1进入游戏运行界面……………………………………………………10

4.2 游戏的具体的操作过程………………………………………………10

4.3进入“帮助”菜单……………………………………………………11

4.4游戏中的异常处理情况………………………………………………12

5.系统设计总结与回顾………………………………………………………13

.

.

                 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公司的一个软件产品。20##年11月7日发布Eclipse 1.0版本,以后几乎每年都更新一次版本,到20##年6月22日,发布最新版本Eclipse 3.7(INDIGO)。尽管Eclipse是使用Java语言开发的,但它的用途并不仅限于Java语言。例如,支持诸如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

(2)SpiderMenuBar调用游戏框架和游戏菜单,即调用PKCard.java和AboutDialog.Java

(3) PKCard.java纸牌的调用和移动位置及纸牌属性,即调用Spider.Java

3.1.2蜘蛛游戏可以分为四个模块各项功能如下:

(1)AboutDialog.java 其作用是生成游戏的“帮助”下拉菜单

(2)PKCard.java 其作用是定义纸牌属性,包括名称、位置等相关信息。并管理所有可执行操作,如启动Flash线程、点击鼠标、释放鼠标、放置纸牌、判断可用列、用鼠标拖动纸牌、移动(x,y)个位置、令纸牌显示正面、令纸牌显示背面、将纸牌移动到点point、判断纸牌是否移动、判断card是否是正面等 。

(3)Spider.java其作用是设置游戏等级、框架属性、纸牌初始化、异常及成功处理等

(4)SpiderMenuBar.java 其作用是添加“游戏”下拉列表所有菜单选项,实现各组件的事件侦听 。主要包括三个模块:图形用户界面的构建、组件监听接口的实现、显示可执行操作的线程。

3.2关键技术

3.2.1 AboutDialog.java 中的关于”窗口

private JTextArea jt1 = new JTextArea("将电脑多次分发给你的牌按照相同的花色由大至小排列起来。直到桌面上的牌全都消失。"); //用来显示“游戏规则”对应的文本框

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(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 < 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();}}}

    3.2.4 PKCard.java放置纸牌

   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();}}}

    3.2.5 PKCard.java 判断可用列

       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; }

3.2.6 Spider.java中对鼠标事件监听程序进行初始布局

clickLabel.addMouseListener(new MouseAdapter(){

            public void mouseReleased(MouseEvent me){

                if (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.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) {}  });

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并实现

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.getC() < 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 将纸牌从大到小排好后,归并到

左下角 

          

图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.系统设计总结与回顾

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

通过本次课程设计对蜘蛛纸牌游戏的深入研究和分析,对于Eclipse 3.7有了深入的学习和了解,并对其应用有了一定的掌握。对Java语言在实际中的应用有了切身的体会,并将所学的知识在实践中得到应用,同时也巩固了Java中所学的理论知识,对于不了解的知识,又有了新的学习。同学们对于不懂的内容同学查阅相关资料以及老师们的帮助,还有同学间的相互讨论,增加了团队合作的能力。在分析源码的过程中,有些不熟悉的代码,参考了相关资料,以及老师和同学们的帮助,使得问题得以解决,在此向向帮助过我们的老师和同学表示感谢!

相关推荐