网络版五子棋程序的开发

前言

这是小的一个五子棋联网对战的小程序,可以实行网络对战。
我们的开发过程是了解五子棋的运行原理,然后开发网络部分进行实现。

开发工具

开发语言:Java
开发工具:Eclipse Neon
开发平台:Windows 10 Professional
运行测试平台:Windows 10 Professional

功能需求

本游戏是基于五子棋规则的应用程序,需要实现联网对战的功能。详细功能需求如下所示:
1. 可以登录局域网中的服务器,同步当前的玩家列表。
2. 可以在玩家列表中自由选择玩家进行挑战。
3. 双方可以通过局域网进行对战,判断先手和后手,以及游戏的胜利。
4. 可以在下棋的同时和对方进行文本的聊天。
5. 可以在下棋的过程中进行逃跑。

通信模型

本项目包括两个部分,服务器和客户端,都提供界面操作方式。客户端包含三个主要的模块:玩家列表、游戏操作区和消息区;服务器包括两个主要的模块:玩家列表和服务器消息区。

功能描述

(1)客户端部分:
玩家列表将会在用户登录服务器的时候进行更新,提供双击和下方按钮两种方式进行玩家的选择和对战。游戏区是主要的操作区,在连接玩家之后可以进行下棋游玩操作;消息区可以在连接玩家之后发送和接收消息。
(2)服务端部分:
玩家列表同步上线的玩家,服务端会检查玩家的状态,对于正在对战的玩家将会忽略,消息列表即时显示服务器的消息。

设计步骤

  1. 绘制棋盘和棋子
  2. 将鼠标移动的坐标规范化
  3. 点击具体的位置可以出现当前的棋子,黑白交替,点击的位置需要转换到棋盘矩阵中去,同时棋盘矩阵中的棋子也要转换为实际的坐标画到棋盘中去
  4. 胜利规则的判定
  5. 协议设计
  6. 客户端设计
  7. 服务端设计

Java 绘图记录

  1. 绘图需要绘制在Panel上,需要自己写一个类继承Panel,然后重写它的paint方法。
  2. drawRec画矩形。
  3. drawArc绘制圆形。
  4. paint方法使用传进的Graphic参数进行绘制。
  5. repaint方法是用来重绘面板上的图案的,实际上,repaint执行的时候,paint方法会再次执行一次,因此我们将需要绘制的语句写到paint中即可。
  6. Ellipse方法用于绘制实心的圆形。

组件使用

  1. Jlist中的构造函数中有个参数是DefaultListModel,我们使用DefaultListModel中的各种函数完成Jlist的操作。
  2. ScrollPane添加一个JList可以在初始化的时候将其作为一个参数,或者使用setViewportView(Jlist)方法添加这个Jlist。
  3. 对话框的使用:
    JOptionPane.showConfirmDialog(null,"You Win!", "Winner",JOptionPane.DEFAULT_OPTION,JOptionPane.DEFAULT_OPTION);
  4. setFixedCellWidth()JScrollPane的这个方法可以固定一行的长度,不会随着一行内容的多少而改变。
  5. 实例化JTextField()的时候参数就是这个文本域的大小,同样可以用来固定宽度,不会随着界面大小而改变。
  6. 界面整体布局可以采用BorderLayout,分开进行设计和搭配,思路清晰,而且不用固定大小设计比较简单。

设计方法

  1. 单例模式,然后将类的方法设计成为public用于实例返回。
  2. 如果一个UI组件比较难以操作,我们可以将其放到一个类当中,提供一系列的方法,可以设置其成为工具类。
  3. PrintStream非常便于设计协议,可以用作输出流,BufferedReader可以用于读取协议内容。
  4. 出现IOException则是玩家下线带来的读取inputstream异常,根据这个我们可以判定
  5. 如果一个对象通信的时候只有一个实例,可以将它的输入输出流进行封装,成为工具类,用单例模式进行操作。

Demo

  1. 这是客户端的演示效果:
    网络版五子棋程序的开发_第1张图片
  2. 这是服务器的演示效果:
    网络版五子棋程序的开发_第2张图片

开源地址

本项目的开源地址:https://github.com/jackwhitexr/WuZiQi

Reference

  1. CSDN五子棋程序
  2. 用JAVA实现五子棋网络对战系统
  3. Java实现联机五子棋
  4. 联网版五子棋
  5. 坦克大战JAVA实现
  6. JAVA绘图
  7. BeautyEye框架使用
  8. Eclipse导入

你可能感兴趣的:(网络)