网络作业3五子棋

发布于 2019-04-22  49 次阅读


这次作业要求实现一个下棋的程序,服务器端可以同时连接多个客户端,并且要求采用多进程的方式来实现。服务器端电脑自己下,客户端玩家下。

由于作业要求采用多进程来实现服务器端,所以只能选用linux端。客户端界面实现采用了gtk,五子棋算法采用了估值算法。

协议设计

每条消息固定为三个字符,第一个字符为操作,后两个字符为坐标。

操作包含

enum ACTION {
ACTION_CLIENT_FIRST, //通知客户端让客户端先下
ACTION_DOWN, //落子
ACTION_FINISH_BEFORE, //客户端下子后游戏结束,第二个字符代表游戏结果
ACTION_SURRENDER, //投降,未用到
ACTION_FINISH_AFTER_LOSE, //服务器落子后,玩家输
ACTION_FINISH_AGTER_TIE //服务器落子后,平局
};

目录结构

./
├── client.cpp 客户端主文件
├── common.h 服务器端和客户端共用文件,包含了几个枚举
├── gobang.cpp 包含了五子棋的操作
├── gobang.h
├── makefile
└── server.cpp 服务器端主文件

makefile

如果直接采用命令行编译的话,使用此文件

all:server pre client
server:server.o gobang.o common.h
	g++ -o server -std=c++11 server.o gobang.o common.h
server.o:
	g++ -c -o server.o -std=c++11 server.cpp
gobang.o:
	g++ -c -o gobang.o -std=c++11 gobang.cpp
pre:
	sudo apt-get install libgtk2.0-dev
client:client.cpp common.h
	g++ -o client -std=c++11 common.h client.cpp `pkg-config --cflags --libs gthread-2.0 gtk+-2.0`
.PHONY:clean
clean:
	rm -f server.o gobang.o client.o server client

服务器端代码

https://github.com/likole/gobang_server

客户端代码

https://github.com/likole/gobang_client

关于gtk用法的简易总结

五子棋估值算法

参考https://www.cnblogs.com/maxuewei2/p/4825520.html 实现