五子对战

  • 其实在做这个之前呢,我做个一个三子棋的一个小项目,当时玩的还是可以,但是并没有实现太复杂,只是单纯的设计为在本地编译成可执行程序,电脑端的落子都是随机的。当时只是实现了可以人机对战的形式,判断输赢。
  • 三子棋的完成是在VS 2013下面完成的,今天这个项目呢,就比较实在了,是在Linux下完成的,花费了比较多的时间来研究。下面就由我来一一介绍吧。
  • 三子棋了解:https://blog.csdn.net/qq_41562665/article/details/82962428

在做这个项目之前,需要做以下准备工作。

  • 了解RPC
  1. RPC主要是为了解决下面两个问题:
    解决分布式系统中,服务之间的调用问题。
    远程调用时,能够像本地调用一样方便,让调用者感知不到远程调用的逻辑。
  2. RPC调用和普通本地调用有什么区别
    本地调用:

    远程过程调用:
  • rpc和本地过程(函数)调用的区别:
    ① 本地过程调用,就是我们平时所写的函数接口调用。
    ② 本地过程调用的方法实现在本地,而远程过程调用不光方法实现在远端,甚至执行过程都在远端主机,本地只拿一个结果。

  • 为什么使用rpc框架?
    1、要实现网络通信,就要解决:
    ① 网络通信的问题(通过tcp/udp协议搞定)
    ② 协议的定制
    ③ 为了考虑数据格式的问题,就得考虑序列化和反序列化
    2、为了把重点高度集中在五子棋的业务逻辑上,所以才使用了rest_rpc.rest_rpc是一个轻量化的rpc框架,市面上还有一些其他的rpc框架,如百度开源的rpc框架sofa-bprpc。
    rest_rpc是写得比较轻的,只要下载下来就能使用,但是也有一些基本的要求,它的语法用了c++11和c++17的特性,所以我们要编译成功,就需要使用高版本的编译器(gcc7.1以上)。
    3、rpc底层用了boost库的网络代码,boost库的serverI/O解决网络问题,rpc只专注于远程过程调用,我们只写游戏逻辑,这样实现这个游戏起来就相对比较简单了。

  • 工具安装

  1. 安装cmake
    安装教程:https://blog.csdn.net/fancyler/article/details/78009812
  2. 安装高版本gcc
    安装教程:https://www.jianshu.com/p/76fb9b6a781b
  3. 安装boost库
    安装教程:https://www.cnblogs.com/xiehongfeng100/p/4375613.html?tdsourcetag=s_pctim_aiomsg

设计游戏:

整个游戏是需要有注册,登录,匹配,玩游戏(棋盘获取,棋子获取,落子信息,判断输赢),退出几个功能的,当然有了这样一些机制,很多功能都是可以继续增加的。

  • 服务端的管理各个信息的类设计
  1. 游戏大厅信息管理
    Hall.hpp
class Hall
{
private:PlayerManager pm; //玩家信息RoomManager rm; //房间信息vector<vector<uint32_t> > match_pool; //匹配池int match_num;pthread_mutex_t match_lock;pthread_cond_t match_cond;
};
  1. 游戏玩家信息
    Player.hpp
typedef enum
{OFFLINE = 0,ONLINE,MATCHING,PLAYING,
}status_t;class Player
{
private: //相当于数据库,以及表string name;string passwd;uint32_t id; //int win;int lose;int tie; //平局status_t st;uint32_t room_id;
};
  1. 游戏房间信息
    Room.hpp
#define BLACK 'X'
#define WHITE 'O'
#define SIZE 9class Room
{
private:uint32_t one;uint32_t two;char piece[2];uint32_t current;char board[SIZE][SIZE];char result; // X, O, E, Npthread_mutex_t lock;
};
  1. 游戏玩家管理
    PlayerManage.hpp
class PlayerManager
{
private:unordered_map<uint32_t, Player> player_set;uint32_t assign_id;pthread_mutex_t lock;
};
  1. 游戏房间管理
    RoomManage.hpp
class RoomManager
{
private:unordered_map<uint32_t, Room> room_set;uint32_t  assign_id;pthread_mutex_t lock;
};

网络对战五子棋(附带源码,可以直接下载使用)相关推荐

  1. 微信小程序视频教程合集 附带源码、PPT下载

    微信小程序 视频系列教程完整版,课程中用到的源码附在帖子最后. 1.1课程介绍,定个小目标 1.2开发文档简读,了解全貌 1.3CMS原型,我们的初期目标 1.4微信WEB开发者工具安装 2.1创建项 ...

  2. 【Python游戏】可以实现双人对战游戏,类似拳皇可以选英雄的 绝对好玩 | 附带源码

    前言 本游戏的类型有点像大家小时候玩过的拳皇,可以进行游戏人物的选择,相信我绝对好玩!!! 废话不多说吧,大家记得给小编点个赞哈,一键三连才是小编更新的动力!! 相关文件 想学Python的小伙伴可以 ...

  3. 网络对战五子棋(来一起PK鸭)

    网络对战五子棋(来一起PK鸭) 一.本地调用和RPC调用的区别 首先了解一下RPC~ RPC主要是解决了两个问题: 解决了分布式系统中,服务之间的调用问题 尤其是在远程调用的时候,可以让调用者感受不到 ...

  4. 【181018】VC++ 网络对战五子棋游戏(服务端+用户端)

    VC++ 网络对战五子棋游戏(服务端+客户端),编译后先开启服务器端,服务端管理着各个用户之间的数据传递,用户端是多个的.就像游戏大厅一样.用户登录了后服务端将向用户端发送当前所有在线玩家列表数据.由 ...

  5. 保姆级别 附带源码 Django集成channels(一)实现简单聊天功能

    目录 前言 不想看我瞎BB可以直接跳到这里 1.WebSocket 1.1 ajax轮询 1.2 long poll 1.3 Websocket 2.Channels 2.1 WSGI 2.2 ASG ...

  6. C#网络编程服务器端程序实现源码浅析

    C#网络编程服务器端程序实现源码是怎么样的呢?让我们来看看其中重要的一部分: 由于在此次程序中我们采用的结构是异步阻塞方式,所以在实际的程序中,为了不影响服务器端程序的运行速度,我们在程序中设计了一个 ...

  7. Python基于改进YOLOv5的烟叶病害检测系统(附带源码)

    Python基于改进YOLOv5的烟叶病害检测系统(附带源码) 1.背景 2.前言 3.烟叶数据集的采集 4.烟叶数据集的标注 5.烟叶检测训练&识别效果 6.病害数据集的采集 7.病害数据集 ...

  8. 入门机器学习?好好看看《智能问答与深度学习》随书附带源码

    目录 <智能问答与深度学习>随书附带源码 安装依赖软件 下载源码 执行示例程序 取得帮助 第二章 机器学习基础 第三章 自然语言处理基础 第四章 深度学习初步 第五章 词向量实现及应用 第 ...

  9. 网络科技公司官网源码网站建设官网建站公司模板

    模板介绍: (电脑+手机端)[2023新版升级]高端大气网络科技公司官网源码网站建设官网企业建站小程序开发企业官源码  网站源码下载PbootCMS内核开发的网站模板,该模板适用于网站建设.小程序建设 ...

  10. SpringMVC异常处理机制详解[附带源码分析]

    SpringMVC异常处理机制详解[附带源码分析] 参考文章: (1)SpringMVC异常处理机制详解[附带源码分析] (2)https://www.cnblogs.com/fangjian0423 ...

最新文章

  1. 用 .NET Memory Profiler 跟踪.net 应用内存使用情况--基本应用篇
  2. [声明]关于春节回家期间不能更新Blog的说明
  3. 资本|五大科技巨头并购投资布局分析
  4. c语言静态图片做成动态效果,如何使静态图片做成动态效果?怎么让静态图片动起来...
  5. threejs 用 ExtrudeGeometry 画管线
  6. 太赞了!智能语音技术年终报告:谢磊教授、王赟博士、罗艺博士…
  7. 在安装mysql出现的错误以及解决方法
  8. 推理集 —— 特殊的工具
  9. mysql主从复制浅析(一)
  10. Java面试题附答案(面试必会)
  11. MATLAB画qpsk的矢量图,matlab仿真QPSK.doc
  12. ppt 母版的设置(一篇看懂)
  13. html svg单击事件,html5 svg 中元素点击事件添加方法
  14. 网络工程师考试知识点[必考知识点]--必看
  15. python考拉兹猜想_考拉兹猜想的变体
  16. Excel 中固定行标题和列标题
  17. 算术分解定理取根号的注意点
  18. 《基民天下》学习笔记——长期持有和波段操作
  19. JRebel has expired Jrebel过期解决!!
  20. 第七周 项目四 队列数组

热门文章

  1. Delphi外挂制作
  2. 肥学献礼——自动写诗
  3. android factorymode下回路测试无声音问题解析
  4. Setup Factory 提示 Invalid start mode : archive filename 的解决办法
  5. mysql怎么安装安全补丁_讲解SQL Server安装sp4补丁报错的解决方法_MySQL
  6. 817c语言程序设计,全国名校C语言程序设计考研真题汇编
  7. 2021-07-18
  8. linux检测扩容卡,怎么检测SD卡是否被扩容过?对SD卡进行扩容检测的方法
  9. 如何查看sql2000 sp4是否安装成功 及sp4补丁安装
  10. java jdom解析html_Javaweb中使用Jdom解析xml的方法