成 员:
潘延麒-180110516
胡智胜-180110518
卓腾龙-180110501
DEMO地址:http://121.36.74.1:3000/
GITHUB地址:https://github.com/Hoit-23o2/GOMOKU
本项目是一个联网五子棋,有单人游戏和多人游戏两种模式,采用B/S架构,对于PC端和移动端都能完美适配。下面是本项目运行截图:
详细消息格式请参考HOIT-GOMOKU接口文档
通信方式采用websocket,消息封装格式采用JSON格式。一般的消息格式为{"type":x, ... },服务器根据type值的不同判断每次收到的消息的类型。
每当一个用户打开正在运行HOIT-GOMOKU的url地址后,服务器返回的网页js代码里便会打开一个websocket同服务器进行连接,接着:
- **请求房间列表:**如果用户点击“多人游戏”,则浏览器便会通过websocket向服务器发送“请求房间列表”消息,服务器收到该消息便会将当前所有存在的房间的{房间id,房间名称,房间简介}封装为JSON数据返回给浏览器,由浏览器进行解析后展示给用户房间列表;
- **请求加入房间:**如果用户点击了一个已存在的房间,浏览器便会向服务器发送“请求加入房间id为x的房间”消息,接着服务器便会把该用户的websocket同该房间id绑定在一起(通过C++中的map映射建立起<用户,房间id>的映射关系);
- **请求创建房间:**如果用户点击“创建房间”,同时填写好了“房间名”和“房间简介”,浏览器便会向服务器发送“请求创建房间名为name,房间简介为desc的房间”,服务器收到此条消息后,便会新建一个房间,同时为该房间分配一个新的房间id,并在<房间id,房间结构体>map中建立起该房间的映射关系;
- **游戏开始:**每当一个房间凑齐了两位玩家后,服务器便会向两位用户发送“游戏开始”的消息,该消息中还带有“是否先手”来告诉该用户是否该先手下棋;
- **下 棋:**在游戏开始后,用户在属于自己的回合中点击一个未下棋的格子后,浏览器便会通过js代码获取到用户下棋的坐标(x, y),接着便将该下棋的消息发送给服务器,服务器在收到"用户x在横坐标x,纵坐标y的地方下了一颗棋子"消息后便将该消息转发给另一个用户;
- **离开游戏:**当一个用户掉线时,服务器会检测到用户的连接关闭,此时会向另一个用户发送“对手已离开”的消息;同样地,用户退出房间时,会主动向服务器发送“已离开”的消息,服务器此时只会转发该消息给他的对手;
- **游戏结束:**当游戏满足结束条件时,由浏览器中的js代码进行判断,而非服务器,服务器不保存每个房间的游戏进度;
- nodejs version >= 10.0
- npm
- react-js
- libwebsocket
-
项目结构
GOMOKU |__gomokuClient |__gomokuServer
-
启动服务器
cd gomokuServer make server ./server
-
启动web服务
cd gomokuClient npm start # 接着便可在3000端口进入游戏