Skip to content

This is GOMOKU for Distributed System class Project, Enjoy Yourself 😄

Notifications You must be signed in to change notification settings

Hoit-23o2/GOMOKU

Repository files navigation

HOIT-GOMOKU 设计文档

成 员:

潘延麒-180110516

胡智胜-180110518

卓腾龙-180110501

DEMO地址:http://121.36.74.1:3000/

GITHUB地址:https://github.com/Hoit-23o2/GOMOKU

1. 系统概貌

本项目是一个联网五子棋,有单人游戏和多人游戏两种模式,采用B/S架构,对于PC端和移动端都能完美适配。下面是本项目运行截图:

image-20210409115328273

image-20210409115440755

image-20210409115751870

image-20210409115957226

image-20210409120059896

2. 系统结构

image-20210409115003976

3. 客户端与服务器通信方式

详细消息格式请参考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代码进行判断,而非服务器,服务器不保存每个房间的游戏进度;

4. 系统部署

4.1 必要依赖

  • nodejs version >= 10.0
  • npm
  • react-js
  • libwebsocket

4.2 部署方式

  • 项目结构

    GOMOKU
    |__gomokuClient
    |__gomokuServer
    
  • 启动服务器

    cd gomokuServer
    make server
    ./server
  • 启动web服务

    cd gomokuClient
    npm start
    
    # 接着便可在3000端口进入游戏

About

This is GOMOKU for Distributed System class Project, Enjoy Yourself 😄

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published