Skip to content
This repository has been archived by the owner on Apr 17, 2024. It is now read-only.

Latest commit

 

History

History

CAPI

CAPI

简介

C++ 通信组件以及选手接口

目标

基本目标

  • 基于 Protobuf 和 HpSocket,为客户端提供 C++ 通信组件
  • 为选手提供游戏接口

重要目标

  • 确定好通信的方式,保证通信的高效
  • 修正 THUAI4 信息重复发送的问题
  • 将通信逻辑与游戏逻辑彻底分开,以供日后复用
  • 支持多终端游戏、观战等,尽量不对客户端人数、观战人数等做出任何假定,游戏人数完全由服务器决定
  • 去除往年遗留下来的以 Agent 作为通信中介的方式,改为客户端直连服务器
  • 改进选手接口,思考如何强制禁止选手一直占用 CPU 而导致 CPU 占用过大的问题。可选的改进方案:将选手操作改为以返回值的形式返回,等等

提高目标(饼)

  • 提供其他语言(如 Python、C#、Java 等)的选手接口
  • ……(未完待画)

统一约定

  • 语言:C++(主要)、C(次要)
  • 代码应当能够同时运行在 Windows 10 平台和 Linux 平台上。Windows 平台下采用 MSVC 作为编译工具,Linux 平台采用 GCC 作为编译工具
  • Windows 下的开发工具使用 Visual Studio 2019 或 Visual Studio 2022,语言标准采用 C++17 和 C17 (MSVC 编译选项 /std:c++17; /std:c17),并且应同时在 x64 平台的 Debug 与 Release 模式下正确编译并运行
  • Linux 下 C 语言编译工具使用 gcc,语言标准为 -std=c17;C++ 编译工具使用 g++,语言标准为 -std=c++17。优化选项为 -O2,生成 64 位程序 -m64,并编写相应的 Makefile

注意事项

  • 与其他组共同商定通信协议
  • Visual Studio 新建的 C++ 代码文件默认字符编码是 GB2312、默认缩进方式是 TAB,应该注意手动改成 UTF-8 和 空格缩进
  • 了解 Visual Studio 的项目属性配置,例如第三方库的链接、预定义宏等
  • 使用现代 C++ 进行编程,尽量避免裸指针,多使用引用和智能指针
  • 了解 C、C++ 预处理、编译、链接的基本概念
  • 注意模块化、单元化,降低各个类、各个模块之间的耦合。特别注意避免相互依赖、环形依赖的问题
  • 遵循头文件(.h.hpp)的编写规范
    • 杜绝头文件相互包含与环形包含
    • 头文件中最好同时写 #pragma once 以及保护宏,而 cpp 中不要写这两个东西
    • 头文件中禁止 using namespace std!!!也不允许在任何自定义的名字空间中 using namespace std!!!
    • 头文件和 cpp 文件各司其职,代码写在改写的位置
    • 禁止 include .cpp 或 .c 文件
  • 避免忙等待,注意线程安全,做好线程同步

开发人员

  • ……(自己加)