|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- # 使用文档
-
- 本文档仅供Windows选手参考,Linux,macOS选手仿照本文档即可。
- [TOC]
-
- ## 不应当使用Windows特性的库,不建议使用.h结尾的库,建议使用标准库
- - 不要使用conio.h,Windows.h
-
- ## 请注意下载器不更新AI.py,AI.cpp和脚本
- - [最新版AI.cpp云盘](https://cloud.tsinghua.edu.cn/lib/54b4eb7b-956e-474c-b932-7b1ac29a9267/file/AI.cpp) 和[AI.py云盘](https://cloud.tsinghua.edu.cn/lib/54b4eb7b-956e-474c-b932-7b1ac29a9267/file/AI.py)
-
- ## C++接口使用说明
-
- - Windows:先查看`.\win\CAPI\cpp\`文件夹下是否有`lib`文件夹,没有则https://cloud.tsinghua.edu.cn/d/6972138f641d4e81a446/ 下载并复制粘贴
- - Linux:首先自行安装`gRPC`,具体方法可以参考官方教程https://grpc.io/docs/languages/cpp/quickstart/。
- - 然后在`CAPI\cpp\API\src\AI.cpp`中编写代码
- - 选手不应当修改`AI.cpp`中原来有的代码,除了`void AI::play(IStudentAPI& api)`和`void AI::play(ITrickerAPI& api)`,及修改asynchronous的返回值
- - 每帧执行一次`AI::play(IStudentAPI& api)`或`AI::play(ITrickerAPI& api)`(除非执行该函数超过一帧50ms),获取的信息都是这一帧的开始的状态
- - 选手可以在`AI.cpp`内`void AI::play`外新增函数和变量
- - Windows:然后用Visual Studio打开`CAPI\cpp\CAPI.sln`编译,注意使用Debug模式
- - Linux:用`cmake`,对`CAPI\cpp\CMakeLists.txt`进行编译
- - Windows:最后使用`RunCpp.cmd`执行比赛代码
- - Linux:最后使用`RunCpp.sh`执行比赛代码
-
- ## Python接口使用说明
-
- - 首先在Python环境下运行`GeneratePythonProto.cmd`,以安装必要的包、并生成对应的grpc python文件
- - 然后在`CAPI\python\PyAPI\AI.py`中编写代码
- - 选手不应当修改`AI.py`中原来有的代码,除了`StudentPlay(self, api: IStudentAPI)`和`TrickerPlay(self, api: ITrickerAPI)`,及修改asynchronous的返回值
- - 每帧执行一次`AI::play(IStudentAPI& api)`或`AI::play(ITrickerAPI& api)`(除非执行该函数超过一帧50ms),获取的信息都是这一帧的开始的状态
- - 选手可以在`AI.py`内新增函数和变量
- - Windows:最后通过运行`RunPython.cmd`执行比赛代码
- - Linux:通过运行`RunPython.sh`执行比赛代码
-
- ## cmd脚本的参数修改
- 右键点击`.cmd`或`.bat`文件之后,选择编辑就可以开始修改文件。通过在一行的开头加上`::`,可以注释掉该行。
-
- ## 游戏基本启动方式(For Debug)
-
- 1. 首先启动Server:`RunServerForDebug.cmd`
- 2. 再启动Client:Python使用`RunPython.cmd`,C++使用`RunCpp.cmd`
- 3. Windows环境下可以启动WPF客户端`RunGUIClient.cmd`观看比赛
- - 下面逐一解释其中参数
-
- ### 启动服务器(RunServer)
-
- 启动服务器:`RunServer.cmd`,其内部参数可自主设定
-
- Server脚本中参数格式一般如下:
-
- ```shell
- --ip 0.0.0.0 --port 8888 --studentCount 4 --trickerCount 1 --gameTimeInSecond 600 --fileName video
- ```
-
- `--ip`是服务器ipv4地址
-
- - 在不同电脑间体验游戏时需要修改`--ip`这一参数,默认值为0.0.0.0
- - 对于windows选手,在连接同一wifi(如Tsinghua-Secure)的情况下,打开终端输入`ipconfig`,找到IPv4地址即可
-
- `--port`是服务器端口
-
- - 自己规定,默认值为8888
-
- `--studentCount`为本局学生个数
-
- - 取值为0,1,2,3,4,默认值为4
-
- `--trickerCount`为本局捣蛋鬼个数
-
- - 取值为0,1,默认值为1
-
- `--gameTimeInSecond`为本局最大游戏时长
-
- - 可自主设定,默认值为600(秒)
-
- `--fileName`为回放文件的保存名称
-
- ### 启动Client(RunPython或RunCpp)
-
- `RunCpp.cmd`或`RunPython.cmd`的脚本参数格式如下:
-
- ```shell
- start .\CAPI\cpp\x64\Debug\API.exe -I 127.0.0.1 -P 8888 -p 0 -o -d -w
- ```
- 或者
- ```shell
- start python .\CAPI\python\PyAPI\main.py -I 127.0.0.1 -P 8888 -p 0 -d -o -w
- ```
-
- `start .\CAPI\cpp\x64\Debug\API.exe`或者`start python .\CAPI\python\PyAPI\main.py`为运行该目录下的程序(C++)/代码(python)
- - 可以用不同的代码编译不同的exe(**也可以不**),需要自己更改以上路径,对于Python,需要copy整个PyAPI,具体如下图
- 
- 
- - 比赛最终要提交5份代码(可以5份一样的,现在的AI.cpp/AI.py支持一份代码对不同的PlayerID执行不同操作)
-
- `-I`为服务器IP,一般本地为`127.0.0.1`,联机的话是服务器的IP
-
- `-P`为服务器端口,一般为8888
-
- `-p`为玩家id,一般学生为0~3,捣蛋鬼为4
- - 请注意学生序号要从0开始,如果学生数量为n,不应当出现id大于等于n的学生
-
- `-d`为保存Debug日志文件(在`/logs/`下)
-
- `-o`为将日志输出到屏幕上
-
- `-w`只在开启`-o`的情况下生效,此时屏幕上只输出警告或报错(而日志文件依然完整保存)。
-
- ### 启动WPF客户端(RunClient)
-
- 通过`RunGUIClient.cmd`,可以打开WPF客户端,其内部参数可自主设定,设定方式:右键-打开更多选项-编辑
-
- ```shell
- --port 8888 --characterID 4 --type 2 --occupation 1
- ```
-
- `--ip`是服务器ipv4地址
-
- - 默认值为127.0.0.1,其余内容与Server相同,在不同电脑间连接时ip应相同
-
- `-port`是服务器端口
-
- - 默认值为8888,其余内容与Server相同,在不同电脑间连接时port应相同
-
- `--characterID`为玩家id
-
- - 学生取值为0,1,2,3,捣蛋鬼取值为4,characterID > 2023则是观战模式
- - 请注意学生序号要从0开始,如果学生数量为n,不应当出现id大于等于n的学生
- - 应当使`RunGUIClient.cmd`与 `RunPython.cmd`(或`RunCpp.cmd`)中学生、捣蛋鬼数量之和符合`RunServer.cmd`的要求
- - 如果不启动`RunPython.cmd`(或`RunCpp.cmd`),则`RunGUIClient.cmd`中学生、捣蛋鬼数量应当符合`RunServer.cmd`的要求
-
- `--type`为玩家类型
-
- - 学生取值为1,捣蛋鬼取值为2
-
- `--occupation`为职业选择,参考下表
-
- #### 职业对应表:
-
- * 学生
-
- | 参数 | 职业类型 |
- | ---- | ------------------------------- |
- | 1 | Athlete |
- | 2 | Teacher |
- | 3 | StraightAStudent |
- | 4 | Robot(目前未实现所有功能) |
- | 5 | TechOtaku(目前未实现所有功能) |
- | 6 | Sunshine |
-
- * 捣蛋鬼
-
- | 参数 | 职业类型 |
- | ---- | ------------ |
- | 1 | Assassin |
- | 2 | Klee |
- | 3 | ANoisyPerson |
- | 4 | Idol |
-
- #### 观看回放文件
-
- 通过WPF客户端,还可以观看比赛回放。在`RunGUIClient.cmd`中,将参数改为
-
- ```shell
- start cmd /k win64\Client.exe --cl --playbackFile .\video.thuaipb --playbackSpeed 2
- ```
-
- 即可观看回放文件。其中`--playbackFile`后面的参数为回放文件的路径,`--playbackSpeed`后面的参数为回放速度,取值为1~10,1为正常速度,10为最快速度。
-
-
- ## WPF简易调试界面
-
- 
-
- ### 界面介绍
-
- * 固定方块:红色方块代表墙,绿色方块代表草,灰色方块代表窗户,黄色带锁标志的方块代表门,浅橙红色代表隐藏校门
-
- * 动态方块:蓝色方块代表大门,橙色方块代表箱子,粉色方块代表教室,上面的数字均代表进度
-
- * 物件:橙色圆代表捣蛋鬼,紫色圆代表学生,且上面的编号对应学生的ID,灰色表示Robot,它的编号表示所属的TechOtaku
-
- * 道具对应表如下
-
- | 道具类型 | UI |
- | ---------------------- | --- |
- | Key3 | 🔑3 |
- | Key5 | 🔑5 |
- | Key6 | 🔑6 |
- | AddSpeed | ⛸ |
- | AddLifeOrClairaudience | 🏅 |
- | AddHpOrAp | ♥ |
- | ShieldOrSpear: | 🛡 |
- | RecoveryFromDizziness | 🕶 |
-
- * UI:左侧为UI,表示游戏内各类信息
-
- ### 实机体验之键鼠操作
-
- 仅当以玩家身份启动`RunGUIClient.cmd`时可以使用
-
- | 键位 | 效果 |
- | ------------ | ---------------------------------------------- |
- | W/NumPad8 | (Both)向上移动 |
- | S/NumPad2 | (Both)向下移动 |
- | D/NumPad6 | (Both)向右移动 |
- | A/NumPad4 | (Both)向左移动 |
- | J | (Tri)攻击,方向向上 |
- | 鼠标双击某点 | (Tri)攻击,方向与从Tricker指向该点的向量相同 |
- | K | (Stu)开始学习 |
- | R | (Stu)开始唤醒(陷入沉迷状态的同伴) |
- | T | (Stu)开始勉励(学习毅力下降的同伴) |
- | G | (Stu)发出毕业请求 |
- | H | (Stu)申请毕业(或称为开校门) |
- | O | (Both)开(教学楼)门 |
- | P | (Both)关(教学楼)门 |
- | U | (Both)翻窗 |
- | I | (Both)翻箱子 |
- | E | (Both)结束当前行动,回到Idle状态 |
- | F | (Both)随机捡起一个在周围的道具 |
- | C | (Both)随机扔下一个已经持有的道具 |
- | V | (Both)随机使用一个已经持有的道具 |
- | B | (Both)使用0号技能 |
- | N | (Both)使用1号技能 |
- | M | (Both)使用2号技能 |
|