当前位置: 网学 > 设计下载 > Java类作品 > 正文

JAVA课程设计(五子棋)小游戏的设计

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 佚名 来源: 网络 发布时间: 13/05/09

文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。网学的各位小编整理了Java类作品-JAVA课程设计(五子棋)小游戏的设计的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!

QQ交谈客服咨询,网学网竭诚为您服务,本站永久域名:myeducs.cn

 

3 程序设计开发
 
 
3.1 程序设计思路
 
实现一个用户可以Internet上任何地方的不同机上进行游戏,使用多线程和网络套接字数据流的分布式五子棋游戏,根据要完成的功能,本程序采用多客户服务方式。服务器创建服务器Socket,始终处于监听等待状态。客户端是动作的发起者,何时发出申请由客户端决定。客户端向服务器发出申请,服务器给予响应,客户端发出申请后立即可从Socket通道去取服务方的结果。服务器接受两个客户端连接后开始一个线程,不断接受客户端发来的数据,并把处理后的数据传送给客户端。服务器可以创建任意多局(图3-1)。

服 务 器
游戏局1
游戏局N
……
客户端1
客户端2
客户端M
客户端N
……
……
3-1 系统框架
Fig.3-1 Frame of System

 
在对服务器与客户端的设计开发之前,为了使开发方便,将服务器与客户端之间用以通信的变量规定好。通过编写一个接口GameConstant(),在其中定义各个常量的值:
       public static int PLAYER1 = 1;
       public static int PLAYER2 = 2;
       public static int PLAYER1_WON = 1;
       public static int PLAYER2_WON = 2;
       public static int DRAW = 3;
       public static int CONTINUE = 4;
       public static int STOP = 100;
       public static int GAMEPORT = 8000; 
服务器和客户端在设计时继承接口GameConstant()里面的所有数据。
 
 
3.2 服务器的设计与实现
 
为了使界面友好,服务器使用图形组件,创建成一个可以显示游戏信息的框架。在框架中创建一个包含文本区的滚动窗格,并在文本区显示游戏信息(图3-2)。
3-2 服务器界面
Fig.3-2 Interface of Game-server
要建立服务器,需要创建一个服务器Socket,并把它附加到一个端口上,服务器通过这个端口监听连接请求。端口标识Socket上的TCP服务。网络的类存放在java.net包中,引入包后通过实现一个ServerSocket的实例就可以创建一个服务器Socket,并把它附加到一个端口(GAMEPORT)上:
 
      ServerSocket serverSocket = new ServerSocket (GAMEPORT);
 
然后,服务器使用下列语句开始监听连接请求:
 
Socket player1 = serverSocket.accept ();
Socket player2 = serverSocket.accept ();
 
服务器开始等待,直到客户提出连接请求。连接建立后,服务器通过数据输入流从客户端接收信息,并且通过数据输出流把相应的标记发送给客户端。
 
new DataOutputStream(player1.getOutputStream()).writeInt(PLAYER1);
new DataOutputStream(player2.getOutputStream()).writeInt(PLAYER2);
 
当客户端满足开局条件时,就开启一个线程处理客户之间数据,同时继续监听其它客户端的连接请求。
 
多线程是Java的一个特点,多线程可以使程序反应更快、交互性更强,并能提高执行效率。创建一个新的线程的生命周期如下状态: 新建,就绪,运行,阻塞,死亡。
在Java中,提供了多种控制线程的方法,在服务器中用到的主要以下几种:
 
             public void run ()
Java运行系统调用这个方法来执行线程。在用户线程类中,必须覆盖这个方法并且提供线程执行的代码。
             public void start ()
该方法启动线程,它引起对run()方法的调用。客户类中的可运行对象调用该方法。
服务器程序采用类HandleGame继承Thread类来实现对线程的调用,同时对run ()方法覆盖。
以下是HandleGame () 类里面主要的数据域和方法:
      private char[][] cell: Char类型数组用来记录玩家的标记。
 
private DataInputStream isFromPlayer1;
      private DataOutputStream osToPlayer1;
      private DataInputStream isFromPlayer2;
      private DataOutputStream osToPlayer2;
      :四个数据流用来实现与两个玩家之间信息的传递。
 
public HandleGame (Socket player1, Socket player2):
构造函数,两个参数用以接收传递过来的Socket对象。
public void run():对继承Thread类中的run ()方法进行覆盖。
private boolean isFull() :判断是否满格。
private boolean isWon(int row,int column,char token):
判断新标记的单元格是否使一方获胜。
 
游戏局一旦建立起来,服务器便于工作交替地从客户端那里接收数据。从客户端接收到数据后,服务器判断游戏状态,并根据结果进行相关操作,直至游戏结束。
 
 
3.3 客户端的设计与实现
 
客户端负责与玩家的交互。因此要创建一个界面,包括一个20*20的下棋区域,当玩家选定单元格或接收到别的玩家选定的单元格时,用不同的标记显示;两个显示游戏名称和游戏状态的标签和两个菜单栏上的按键用以进行控制,如图3-3:
 
图3-3 客户端界面
Fig.3-3 Interface of Game-client
 
这里客户程序设计成一个Java Applet,用户可以在Web浏览器里运行。当用户打开GameClient.html文件时,浏览器调用init ()方法对界面进行初始化。点击Start时开启一个线程和服务器连接,通过数据流进行数据交换。
 
       connectToServer = new Socket("localhost", GAMEPORT);
       isFromServer = new DataInputStream(connectToServer.getInputStream());
       osToServer = new DataOutputStream(connectToServer.getOutputStream());
 
下面是类GameClient的主要方法和数据:
       public class GameClient extends JApplet
                  implements Runnable, ActionListener, GameConstants
 
{
              private boolean myTurn = false;    :标记是否轮到自己下棋
           private char myToken = '' '';     :标记自己的棋子
           private char otherToken = '' '';     :标记对手的棋子
   
           private Cell[][] cell = new Cell[20][20];    :生成20*20个单元格
   
           private int rowSelected;    :记录所选单元格的行
           private int columnSelected;    :记录所选单元格的列
   
           private boolean continueToPlay = true;
              private boolean waiting = true; 
:记录游戏进行中的状态
      
              public void init():初始化用户界面,打开网页时由浏览器调用
   
public void actionPerformed(ActionEvent e):
覆盖ActionListener接口里面actionPerformed ()方法,用来处理用户点击菜单栏引起的操作。
   
         public void run()
覆盖Runnable接口里的run ()方法,用以对游戏过程中的数据传输,处理,控制。
     }
     
在客户程序的类中,由于它继承了Applet类,所以不能再通过声明Thread类的扩展来实现,只能通过实现Java提供的一个Runnable接口,进行线程的创建和运行。Runnable接口的实现是非常简单的,它只包含run ()方法,使用时只要将该方法覆盖。
从游戏设计来看,单元格是处理鼠标点击事件和显示标记的GUI对象。在这里使用的是面板,设置单元格Cell为JPanel的子类。将Cell类声明为内部类,可以直接使用GameClient类中定义的变量与方法,使程序简洁明了。
 
Cell类中包含以下主要数据和方法:
       public class Cell extends JPanel implements MouseListener
       {
              private int row;   
          private int column;
          private char token = '' '';
         
          public Cell(int row, int column){}:构造函数
       
       public void paintComponent(Graphics g){}
Graphics对象g是由Java运行系统自动创建,这个对象控制信息的绘制方式。可以使用定义在Graphics类中的多种画法绘制字符串的几何图形。
     
       public void mouseClicked(MouseEvent e){}
       public void mouseExited(MouseEvent e){}
       public void mouseEntered(MouseEvent e){}
      public void mouseReleased(MouseEvent e){}
       public void mousePressed(MouseEvent e){}
              :接口MouseListener中的方法。
       }
 
 
3.4 程序的运行
 
首先将编写好的程序使用Java编译器编译,生成以class为扩展名的类文件,然后使用Java解释器分别运行服务器和客户端。客户端发出连接,服务器接收后开启线程对游戏进行控制,游戏结束时关闭线程。具体流程如图3-4所示:

玩家一
 
1.        初始化用户界面
2.        向服务器请求连接,并从服务器获知所用棋子的标记。
 
 
 
 
3.        从服务器得到开始标志。
4.        等待玩家标记单元格,并向服务器发送单元格的行号和列号。
5.        从服务器接收游戏状态。
6.        如果状态是WIN,显示是胜者,如果玩家二获胜,接收玩家二的最后一步走棋信息。中断循环。
7.        如果状态是DRAW,显示游戏结束,中断循环。
8.         如果状态是CONTINUE,接收玩家二选定的单元格的行号和列号,标记玩家二选定的单元格。
服务器
 
创建一个服务器套接字。
接收第一个玩家的连接请求,并且通知玩家他是玩家一,使用标记“X”。
接收第二个玩家的连接请求,并且通知玩家他是玩家二,使用标记“O”。启动对局线程。
 
处理对局:
1.   告诉玩家一开始游戏。
2.   接收玩家一选定单元格的行和列。
3.   判断游戏状态(STOP,WIN,DRAW,CONTINUE)。如果玩家一退出,向玩家二发送状态(STOP),退出。
4.   如果玩家一获胜,给两个玩家都发送状态(PLAYER1_WON),并且向玩家二发送玩家一的走棋信息。退出。
5.   如果状态是CONTINUE,通知玩家二轮他走棋,并且向玩家二发送玩家一最新选定单元格的行和列。
6.   接收玩家二选定的单元格的行和列。
7.   如果玩家二退出,向玩家一发送状态(STOP),退出。
8.   如果玩家二获胜,给两个玩家都发送状态(PLAYER2_WON),并且向玩家一发送玩家二的走棋信息。退出。
9. 如果状态是CONTINUE,发送状态,并且向玩家一发送玩家二最近选定的单元格的行和列。
 
玩家二
 
1.   初始化用户界面
 
 
 
2.   向服务器请求连接,并从服务器获知所用棋子的标记。
 
 
 
 
 
3.   从服务器接收游戏状态。
4.   如果状态是WIN,显示是胜者,如果玩家一获胜,接收玩家一的最后一步走棋信息。中断循环。
5.   如果状态是CONTINUE,接收玩家一选定的单元格的行号和列号,标记玩家一选定的单元格。
6.   等待玩家标记单元格,并向服务器发送单元格的行号和列号。
 
 

3-4 运行流程
Fig.3-4 Flow Chart
4 小结
 
 
随着计算机和网络技术的不断发展,信息技术给人们带来的帮助越来越大,单独一台计算机已经不能满足人们的需求,网络正在成为大多数人群生产、生活中密不可分的一部分。Java作为一种分布式和可移植的计算机语言,在网络软件开发上有着特别的优点。它开发方便、快捷,安全性高,对以往复杂的功能,尤其是网络通信等方面,实现起来简洁明了,在网络编程领域有着巨大的发展潜力。在当今网络经济飞速发展的时代,Java技术的平台无关性、可重用性、模块化等特点大大减少了重复劳动,无论是开发用于Internet浏览的网站还是功能复杂的网络应用系统,Java都可以提供有力的支持。相信只要合理地利用Java技术,必定可以在电子商务、大型网站建设中发挥日益重要的作用。
本站发布的计算机毕业设计均是完整无错的全套作品,包含开题报告+程序+论文+源代码+翻译+答辩稿PPT

本文选自计算机毕业设计http://myeducs.cn
论文文章部分只是部分简介,如需了解更多详情请咨询本站客服!QQ交谈QQ3710167

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号