You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

使用文档.md 10 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. # 使用文档
  2. 本文档仅供Windows选手参考,Linux,macOS选手仿照本文档即可。
  3. [TOC]
  4. ## 不应当使用Windows特性的库,不建议使用.h结尾的库,建议使用标准库
  5. - 不要使用conio.h,Windows.h
  6. ## 请注意下载器不更新AI.py,AI.cpp和脚本
  7. - [最新版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)
  8. ## C++接口使用说明
  9. - Windows:先查看`.\win\CAPI\cpp\`文件夹下是否有`lib`文件夹,没有则https://cloud.tsinghua.edu.cn/d/6972138f641d4e81a446/ 下载并复制粘贴
  10. - Linux:首先自行安装`gRPC`,具体方法可以参考官方教程https://grpc.io/docs/languages/cpp/quickstart/。
  11. - 然后在`CAPI\cpp\API\src\AI.cpp`中编写代码
  12. - 选手不应当修改`AI.cpp`中原来有的代码,除了`void AI::play(IStudentAPI& api)`和`void AI::play(ITrickerAPI& api)`,及修改asynchronous的返回值
  13. - 每帧执行一次`AI::play(IStudentAPI& api)`或`AI::play(ITrickerAPI& api)`(除非执行该函数超过一帧50ms),获取的信息都是这一帧的开始的状态
  14. - 选手可以在`AI.cpp`内`void AI::play`外新增函数和变量
  15. - Windows:然后用Visual Studio打开`CAPI\cpp\CAPI.sln`编译,注意使用Debug模式
  16. - Linux:用`cmake`,对`CAPI\cpp\CMakeLists.txt`进行编译
  17. - Windows:最后使用`RunCpp.cmd`执行比赛代码
  18. - Linux:最后使用`RunCpp.sh`执行比赛代码
  19. ## Python接口使用说明
  20. - 首先在Python环境下运行`GeneratePythonProto.cmd`,以安装必要的包、并生成对应的grpc python文件
  21. - 然后在`CAPI\python\PyAPI\AI.py`中编写代码
  22. - 选手不应当修改`AI.py`中原来有的代码,除了`StudentPlay(self, api: IStudentAPI)`和`TrickerPlay(self, api: ITrickerAPI)`,及修改asynchronous的返回值
  23. - 每帧执行一次`AI::play(IStudentAPI& api)`或`AI::play(ITrickerAPI& api)`(除非执行该函数超过一帧50ms),获取的信息都是这一帧的开始的状态
  24. - 选手可以在`AI.py`内新增函数和变量
  25. - Windows:最后通过运行`RunPython.cmd`执行比赛代码
  26. - Linux:通过运行`RunPython.sh`执行比赛代码
  27. ## cmd脚本的参数修改
  28. 右键点击`.cmd`或`.bat`文件之后,选择编辑就可以开始修改文件。通过在一行的开头加上`::`,可以注释掉该行。
  29. ## 游戏基本启动方式(For Debug)
  30. 1. 首先启动Server:`RunServerForDebug.cmd`
  31. 2. 再启动Client:Python使用`RunPython.cmd`,C++使用`RunCpp.cmd`
  32. 3. Windows环境下可以启动WPF客户端`RunGUIClient.cmd`观看比赛
  33. - 下面逐一解释其中参数
  34. ### 启动服务器(RunServer)
  35. 启动服务器:`RunServer.cmd`,其内部参数可自主设定
  36. Server脚本中参数格式一般如下:
  37. ```shell
  38. --ip 0.0.0.0 --port 8888 --studentCount 4 --trickerCount 1 --gameTimeInSecond 600 --fileName video --mapResource ".\map\map1_final.txt"
  39. ```
  40. `--ip`是服务器ipv4地址
  41. - 在不同电脑间体验游戏时需要修改`--ip`这一参数,默认值为0.0.0.0
  42. - 对于windows选手,在连接同一wifi(如Tsinghua-Secure)的情况下,打开终端输入`ipconfig`,找到IPv4地址即可
  43. `--port`是服务器端口
  44. - 自己规定,默认值为8888
  45. `--studentCount`为本局学生个数
  46. - 取值为0,1,2,3,4,默认值为4
  47. `--trickerCount`为本局捣蛋鬼个数
  48. - 取值为0,1,默认值为1
  49. `--gameTimeInSecond`为本局最大游戏时长
  50. - 可自主设定,默认值为600(秒)
  51. `--fileName`为回放文件的保存名称
  52. `--mapResource`为地图文件存放的相对(该脚本)路径
  53. - 不写则为默认地图
  54. ### 启动Client(RunPython或RunCpp)
  55. `RunCpp.cmd`或`RunPython.cmd`的脚本参数格式如下:
  56. ```shell
  57. start .\CAPI\cpp\x64\Debug\API.exe -I 127.0.0.1 -P 8888 -p 0 -o -d -w
  58. ```
  59. 或者
  60. ```shell
  61. start python .\CAPI\python\PyAPI\main.py -I 127.0.0.1 -P 8888 -p 0 -d -o -w
  62. ```
  63. `start .\CAPI\cpp\x64\Debug\API.exe`或者`start python .\CAPI\python\PyAPI\main.py`为运行该目录下的程序(C++)/代码(python)
  64. - 可以用不同的代码编译不同的exe(**也可以不**),需要自己更改以上路径,对于Python,需要copy整个PyAPI,具体如下图
  65. ![RunCppCmd](https://raw.githubusercontent.com/shangfengh/THUAI6/new/resource/RunCppCmd.png)
  66. ![RunPython](https://raw.githubusercontent.com/shangfengh/THUAI6/new/resource/RunPython.png)
  67. - 比赛最终要提交5份代码(可以5份一样的,现在的AI.cpp/AI.py支持一份代码对不同的PlayerID执行不同操作)
  68. `-I`为服务器IP,一般本地为`127.0.0.1`,联机的话是服务器的IP
  69. `-P`为服务器端口,一般为8888
  70. `-p`为玩家id,一般学生为0~3,捣蛋鬼为4
  71. - 请注意学生序号要从0开始,如果学生数量为n,不应当出现id大于等于n的学生
  72. `-d`为保存Debug日志文件(在`/logs/`下)
  73. `-o`为将日志输出到屏幕上
  74. `-w`只在开启`-o`的情况下生效,此时屏幕上只输出警告或报错(而日志文件依然完整保存)。
  75. ### 启动WPF客户端(RunClient)
  76. 通过`RunGUIClient.cmd`,可以打开WPF客户端,其内部参数可自主设定,设定方式:右键-打开更多选项-编辑
  77. ```shell
  78. --port 8888 --characterID 4 --type 2 --occupation 1
  79. ```
  80. `--ip`是服务器ipv4地址
  81. - 默认值为127.0.0.1,其余内容与Server相同,在不同电脑间连接时ip应相同
  82. `-port`是服务器端口
  83. - 默认值为8888,其余内容与Server相同,在不同电脑间连接时port应相同
  84. `--characterID`为玩家id
  85. - 学生取值为0,1,2,3,捣蛋鬼取值为4,characterID > 2023则是观战模式
  86. - 请注意学生序号要从0开始,如果学生数量为n,不应当出现id大于等于n的学生
  87. - 应当使`RunGUIClient.cmd`与 `RunPython.cmd`(或`RunCpp.cmd`)中学生、捣蛋鬼数量之和符合`RunServer.cmd`的要求
  88. - 如果不启动`RunPython.cmd`(或`RunCpp.cmd`),则`RunGUIClient.cmd`中学生、捣蛋鬼数量应当符合`RunServer.cmd`的要求
  89. `--type`为玩家类型
  90. - 学生取值为1,捣蛋鬼取值为2
  91. `--occupation`为职业选择,参考下表
  92. #### 职业对应表:
  93. * 学生
  94. | 参数 | 职业类型 |
  95. | ---- | ------------------------------- |
  96. | 1 | Athlete |
  97. | 2 | Teacher |
  98. | 3 | StraightAStudent |
  99. | 4 | Robot |
  100. | 5 | TechOtaku |
  101. | 6 | Sunshine |
  102. * 捣蛋鬼
  103. | 参数 | 职业类型 |
  104. | ---- | ------------ |
  105. | 1 | Assassin |
  106. | 2 | Klee |
  107. | 3 | ANoisyPerson |
  108. | 4 | Idol |
  109. #### 观看回放文件
  110. 通过WPF客户端,还可以观看比赛回放。在`RunGUIClient.cmd`中,将参数改为
  111. ```shell
  112. start cmd /k win64\Client.exe --cl --playbackFile .\video.thuaipb --playbackSpeed 2
  113. ```
  114. 即可观看回放文件。其中`--playbackFile`后面的参数为回放文件的路径,`--playbackSpeed`后面的参数为回放速度,取值为1~10,1为正常速度,10为最快速度。
  115. ## WPF简易调试界面
  116. ![client](https://raw.githubusercontent.com/eesast/THUAI6/dev/resource/clientsmaller.png)
  117. ### 界面介绍
  118. * 固定方块:红色方块代表墙,绿色方块代表草,灰色方块代表窗户,黄色带锁标志的方块代表门,浅橙红色代表隐藏校门
  119. * 动态方块:蓝色方块代表大门,橙色方块代表箱子,粉色方块代表教室,上面的数字均代表进度
  120. * 物件:橙色圆代表捣蛋鬼,紫色圆代表学生,且上面的编号对应学生的ID,灰色表示Robot,它的编号表示所属的TechOtaku
  121. * 道具对应表如下
  122. | 道具类型 | UI |
  123. | ---------------------- | --- |
  124. | Key3 | 🔑3 |
  125. | Key5 | 🔑5 |
  126. | Key6 | 🔑6 |
  127. | AddSpeed | ⛸ |
  128. | AddLifeOrClairaudience | 🏅 |
  129. | AddHpOrAp | ♥ |
  130. | ShieldOrSpear: | 🛡 |
  131. | RecoveryFromDizziness | 🕶 |
  132. * UI:左侧为UI,表示游戏内各类信息
  133. ### 实机体验之键鼠操作
  134. 仅当以玩家身份启动`RunGUIClient.cmd`时可以使用
  135. | 键位 | 效果 |
  136. | ------------ | ---------------------------------------------- |
  137. | W/NumPad8 | (Both)向上移动 |
  138. | S/NumPad2 | (Both)向下移动 |
  139. | D/NumPad6 | (Both)向右移动 |
  140. | A/NumPad4 | (Both)向左移动 |
  141. | J | (Tri)攻击,方向向上 |
  142. | 鼠标双击某点 | (Tri)攻击,方向与从Tricker指向该点的向量相同 |
  143. | K | (Stu)开始学习 |
  144. | R | (Stu)开始唤醒(陷入沉迷状态的同伴) |
  145. | T | (Stu)开始勉励(学习毅力下降的同伴) |
  146. | G | (Stu)发出毕业请求 |
  147. | H | (Stu)申请毕业(或称为开校门) |
  148. | O | (Both)开(教学楼)门 |
  149. | P | (Both)关(教学楼)门 |
  150. | U | (Both)翻窗 |
  151. | I | (Both)翻箱子 |
  152. | E | (Both)结束当前行动,回到Idle状态 |
  153. | F | (Both)随机捡起一个在周围的道具 |
  154. | C | (Both)随机扔下一个已经持有的道具 |
  155. | V | (Both)随机使用一个已经持有的道具 |
  156. | B | (Both)使用0号技能 |
  157. | N | (Both)使用1号技能 |
  158. | M | (Both)使用2号技能 |