Java swing + socket 写的一个五子棋网络对战游戏

自从开始接触Swing以来,就喜欢写写各种管理系统,写多了就萌生了一种类似于实时在线对战的游戏,经过一番构思后就开始着手设计这个网络对战版本的五子棋了。
游戏代码包含两部分,常规的C/S模式(C代表客户端,S代表服务端)
下载代码后先启动服务器,服务器正常启动后,你会在控制台看到相关的日志(这里注意,服务器是没有做界面管理的),接着启动客户端(可以启动多个客户端),连接服务器后点击菜单栏联网、对战、匹配等操作

游戏效果图:
欢迎大家支持新自的研游戏:中国象棋

Java swing + socket 写的一个五子棋网络对战游戏_第1张图片

下载在线客户端版本试玩:

链接:https://pan.baidu.com/s/1-Bt8tcuZGkVj-jFxN4YDbg 密码:w2oy
要求:jdk环境 1.6或以上
使用方式:环境正常安装后,解压下载的文件,点击 startClient.bat 就可以打开了
备注:若你只开一个客户端,进行匹配的话可能没人跟你玩,建议不是为了技术纯测试的话与你和你的朋友一起对战

阅读本文前,您需要了解:

  • java swing(好像是废话)
  • socket
  • json
  • 多线程(不多,计时用了一下)

1:服务端与客户端数据交互如何约定?

在c/s程序的设计之初,如何按照约定的方式进行数据交互一直是一个需要解决的问题,在我这个程序中,有一个常量类定义如下,这是我与客户端进行的一个约定,任何请求都会含有一个基础数据(key),而所做的工作就是这个基础数据(key)所对应的基础数据(value)
package cn.xt.net;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

public class Const {
	

	public static final int PORT = 7001; // 监听端口
	
	// 基础数据(key)
	public static final String ID = "id";
	public static final String MSG = "msg";

	// 基础数据(value)
	public static final String ID_STATUS_ERROR = "idError"; // 错误信息
	public static final String ID_STATUS_INIT = "初始化客户端"; // 向服务器请求初始化
	public static final String ID_STATUS_PP = "匹配玩家";
	public static final String PP_SUCCESS = "匹配成功";
	public static final String ID_STATUS_PUT = "传送落子位置";
	public static final String ID_STATUS_GET = "获取落子位置";
	public static final String ID_STATUS_OVER = "对局结束";
	public static final String ID_STATUS_MSG = "聊天消息";
	public static final String ID_STATUS_BACK = "请求悔棋";
	public static final String ID_STATUS_FAIL = "认输";
	public static final String ID_STATUS_HANDSNAKE = "初次握手";
	public static final String ID_STATUS_BACK_RESULT = "请求悔棋结果";
	public static final String ID_STATUS_OVERTIME = "游戏超时";
	public static final String SIZE = "棋盘长度";
	public static final String EXISTS = "该用户名已存在系统中";
	public static final String USER_NAME = "userName";
	public static final String INIT_SUCCESS = "初始化成功";
	public static final String X = "x";
	public static final String Y = "y";
	public static final String STATUS = "status"; // 当前棋子的状态
	public static final String COLOR = "落子颜色";
	public static final String SYSTEM_MSG = "系统消息";

	// key - value
	public static final String MY = "my"; // 玩家
	public static final String YOU = "you"; // 对家
	public static final String FIRST = "先手方"; // 1:先手; 0:后手
	
	// 属于页面的专属数据
	private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
	
	public static String getId() {
		return getSysDate() + "-" + UUID.randomUUID().toString();
	}
	
	public static String getSysDate(){
		return sdf.format(new Date());
	}

//	public static void main(String[] 

你可能感兴趣的:(Java,java,swing,socket)