# Logic

## 简介

游戏逻辑与选手简易调试GUI客户端

## 目标

### 基本目标

- 实现底层游戏逻辑，生成 .NET 类库
- 使用`gRPC`实现`Server`，使`Server`能够持续收发信息、处理信息，并生成 .NET 控制台应用程序`Server`。`Server`至少应实现：
  - 游戏的组队与正常运行
  - 生成回放文件，保存游戏结果
- 制作用于简易调试的`Client`，并实现基本GUI功能。可使用`WPF`、`WinForm`或其他技术。用于简易调试的客户端应至少实现：
  - 游戏直播与观战
  - 播放回放文件

### 重要目标

- 完全分离游戏引擎、游戏逻辑与通信逻辑，使得游戏引擎和通信逻辑可以供日后复用
- 简易调试客户端支持玩家手动对战
- 简易调试客户端应尽量清晰整洁，运行流畅
- 编写`MSTest`测试程序，设计测试样例，测试游戏逻辑

### 提高目标

- 使用`MAUI`制作简易调试客户端，实现跨平台的功能
- 使用`MVVM`或其他模式开发简易调试客户端

## 统一约定

- 目标平台规定使用 .NET 6，建议使用 VS 2022 进行开发。

## 注意事项

- 注意程序的鲁棒性与异常安全性，保证程序在任何极端情况下都不会崩溃。因此要求开发者对各种极端操作进检查，避免因异常导致`Server`崩溃、游戏中断。常见的错误包括：浮点数的`NaN`与`Inf`、枚举类型值非法、运算溢出、死锁、`foreach`中修改被迭代对象等。
- 注意游戏引擎、游戏逻辑、通信逻辑的相互分离，便于代码维护与复用 
- 提前规划好代码架构与分工，分工应尽量均匀合理
- 设计良好的调试接口，在开发中做好测试工作，避免BUG的积累
- 考虑程序的通用性与可拓展性，降低各模块的耦合性
- 小组成员间应多多交流，了解各自的工作进度，协调好各自的开发工作

## 特别说明

- 历年的经验表明，并发问题是最容易被忽略的问题。今年在编写多线程的程序时，必须非常关注并发问题，尽量保证程序在高并发下安全运行

## 开发人员

- 黄淞：底层逻辑
- 游笑权：Client
- 高思研：Server