# Seastar **Repository Path**: jiesj/xcy ## Basic Information - **Project Name**: Seastar - **Description**: seaStar practice - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-07-18 - **Last Updated**: 2022-09-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: 谢成义 ## README # Golang语言实现五子棋游戏局内玩法 ## 项目介绍: 多人在线五子棋游戏,采用采用Vue, Gin, WebSocket, Redis等技术栈,前后端分离部署。用Chrome浏览器体验最佳,可打开多个网页登录多个玩家,玩家可以进行人人对局,人机对局,观战等等。 ## 功能介绍 1.用户可以进行登录注册 2.大厅聊天 3.挑战房主或旁观 4.房间聊天 5.人人对战 6.人机对战 7.观战 8.退出房间等等 ## 技术栈 前端采用vue框架,整合了: element-ui:绘制页面布局、按钮、表格、输入框、弹框等组件 canvas:绘制棋子及棋盘 vuex:存储数据传输对象(DTO),标签页信息等 vue-router:管理路由 vue-i18n:国际化 websocket:与后端通信 后端采用go语言的gin框架,整合了: melody:websocket框架,管理session go-redis:设置连接池,访问redis logrus:日志框架,整合mgorus,打印日志到本地文件 viper:设置config.yml文件为配置文件 sync.RWMutex: 设置房间的锁,解决同步问题 grpc:进行微服务之间的调用 部署、数据库服务: 1.redis:存储了玩家信息、聊天对话 2.docker进行部署 3.nginx:进行前端静态资源的部署 ## 运行 1.安装docker 2.切换到gobang目录直接输入 ```docker-compose up -d```,访问 localhost:5555即可 ## 概要设计 参考如下文档: [五子棋概要设计](https://accounts.feishu.cn/accounts/page/login?redirect_uri=https%3A%2F%2Fbytedancecampus1.feishu.cn%2Fdocs%2Fdoccn2htk3cVgRG407qveuTNSjb&user_id=7071191096327405571&device_login_id=NzEyMTUyNjAwMDg5NDIzMDUyOQ%3D%3D&disposable_login_token=eu_nc%3Av2%3A4ece225b3c50468b520525e07324e5cf32f086399429be7ea7d27fc33417d77e×tamp=1661407017&app_id=2&pwd_less_login_auth=1) ## 项目架构图 ![](Image/系统架构图.jpg) ==================================分割线,最终文档在上面,下面是日期式的记录============================ ## 文件目录介绍 gobang-mrico 为docker版的微服务版本 gobang-mcrio-local为本地连接云服务器的微服务版本 ## 基本介绍 1.此次作业是使用golang语言编写五子棋游戏局内玩法的实现,主要包括:判断是否已经五子连珠,如果五子连珠,则游戏结束。 2.此次作业采用了json形式的命令使用postman进行传输,最终的结果也会以json的格式返回。 3.此次作业还增加了创建房间,加入房间等功能。 4.2022-8-11新增: 使用JWT新增登录注册功能,新增大厅聊天和排行榜功能,完善游戏对局逻辑,进行结束时的数据统计以及数据更新 5.2022-8-15修改:使用微服务拆分了相关的服务,但是网关处有耦合 ## 核心逻辑 ### 登录注册 2022-8-11新增 新增游戏登录注册功能,用户首先登录注册才能够进行websocket连接,连接之后才能进行相关的操作 ### 大厅聊天与房间聊天 2022-8-11新增 新增大厅聊天与房间聊天功能,用户在发送消息后可以进行聊天。 ### 排行榜功能 2022-8-11新增 新增排行榜功能,用户可以查看排行榜,根据自身分数的高低来进行排序 ### 创建房间 用户在登录之后可以使用json命令进行房间的创建,代码以及结果如下: ```json { "code":5, "data":0 } ``` ![](./Image/创建房间.jpg) ### 进入房间 登录的用户可以通过对应的指令和房间号,进入对应的房间,代码和结果如下: ``` { "code": 6, "data" : { "rid": "rid", "role": "Challenge" } } ``` ### 准备 进入房间的两个玩家可以使用json进行准备,在两个人都准备之后才可以开始下棋,代码如下(注:下面的rid为房间号,请根据具体的房间号来): ``` { "code":14, "data": { "rid":"f5e71b5f-4f3d-4c8c-a670-d2d2943befca", "ready": true } } ``` ### 下棋 双方在准备好之后可以使用json格式的命令依次落子,命令如下: ```json { "code":15, "data": { "rid":"f5e71b5f-4f3d-4c8c-a670-d2d2943befca", "i": 0, "j": 1 } } ``` ### 功能介绍 1.项目运行:直接运行或者命令行输入 go run main.go。 2.使用gin框架编写的一个五子棋服务端的小demo,包括创建房间、进入房间、查看房间、下棋等功能。 3.使用第三方库logrous进行日志处理,在错误的地方打印日志,同时为了方便查看,在有些功能实现的地方也打印了日志。 4.考虑到并发的安全性,对房间进行加锁处理,以及对于存储session的sessionMap使用syn.Map。 ## 开发介绍 此次作业主要包含的结构如下: entity:主要用来存放实体,在此次作业中存放了棋子,房间、玩家,玩家详情等等 util:主要用来处理一些逻辑判断,此次作业中用来存放五子棋是否五子连珠的逻辑判断和判重判断 router:实现gin初始化,通过melody第三方库处理websocket连接 dto:数据传输对象,进行消息的传输 service:进行相关的服务,包括websocket连接,玩家、下棋、房间服务等等 bean:2022-8-11新增,实现数据库存储的接口,这样不同的数据库可以实现接口进行重载 redis:2022-8-11新增,采用redis实现bean包里面的方法,进行用户数据的存储,排行榜的存储等等。 util/jwt :2022-8-11新增,通过JWT进行登录验证,用户在登录之后可以自动生成一个JWT service/hall_service:2022-8-11新增,实现聊天信息的存储以及读取 service/leader_board_service:2022-8-11新增,实现排行榜的获取以及新数据的插入 ## TODO 1.实现商城卖棋盘的功能以及规范之前的相关功能 2.进行微服务模块的拆分。 ## 2022-8-15修改 1.将服务进行拆分,分成了四个四服务,但是网关处有很大的耦合。 2.四个服务分别为: account, leaderBorad,game,chat 3.画出系统架构图,画出了调用的逻辑 系统架构图如下: ![](../Image/系统架构图.jpg) ## 2022-8-16新增 1.增加游戏结算,游戏结束之后会将金币和钱进行统计结算 2.增加大厅聊天和房间聊天