简单来说上面分下来一个任务, 将一个游戏房间的玩家人数改为可由房主自行选择
但是我看到了一句让我崩溃的代码:
#define GAME_PLAYER 4;
也就是说, 这游戏压根没有考虑到可能会更改玩家人数
然后又很多地方用到了它, 例如:
bool m_bResponse[GAME_PLAYER];
像这样用于数组定义的地方有不少, 我想了想我的解决方案:
但是这三种方式我都不想选, 前两种麻烦易错不说, 改出来的东西坑坑洼洼的, 后面维护可能得累死我 (拆东墙补西墙...)
第三种就不是改代码了, 时间和工作量都变了, 我该如何是好...
1
whileFalse 2018-06-14 10:15:50 +08:00
即使房主能自行选择游戏人数,这个人数也是有上限的。比如说是 8.
那么你把目前的 #define GAME_PLAYER 4; 重构成 #define GAME_PLAYER_MAX 8; 房主选择的人数限制只是能够进入房间的人数而已。 |
2
msg7086 2018-06-14 10:20:24 +08:00
#define GAME_PLAYER 1024;
然后加上实际人数的变量,入口处控制一下下标上界。 |
3
across 2018-06-14 10:23:13 +08:00
觉得 2 楼的比较有操作性,不过大部分房主承载量也有限,上限 32、64 左右就差不多了吧,多了浪费空间,数组都是预分配的。
|
4
across 2018-06-14 10:26:27 +08:00
把 GamePlayer 有关的封装下,然后重载[],在重载里面控制访问,宏定义上限限制在封装类里面,外部接口再提供进一步的人数限制。
|
5
Fishdrowned 2018-06-14 11:43:14 +08:00
这样可不可以
#define GAME_PLAYER get_game_player(); 没怎么玩 C,不知道这样会不会出错 |
6
Akiyu OP @Fishdrowned
会错, 相当于 bool m_bResponse[GAME_PLAYER] -> bool m_bResponse[get_game_player()] 除非 get_game_player()是一个被 constexpr 修饰的函数 但如果是 constexpr 修饰的函数, 那就必须在编译时获得值 你无法逃过 "定义数组时, 元素数量必须是常量" 这个限制 |
7
shierji 2018-06-14 13:24:02 +08:00 via Android
先把这个值改成 9999 然后再加一套逻辑限制人数 我简直是天才 哈哈哈
|
8
shierji 2018-06-14 13:24:50 +08:00 via Android
没看评论 看来大家想法一致啊哈哈
|
9
LGA1150 2018-06-14 14:45:46 +08:00 via Android
换一个支持变量长度数组的编译器
|