如何将一个定死游戏玩家人数的游戏更改为可控制玩家人数的游戏

2018-06-14 09:48:28 +08:00
 Akiyu

简单来说上面分下来一个任务, 将一个游戏房间的玩家人数改为可由房主自行选择
但是我看到了一句让我崩溃的代码:

#define GAME_PLAYER 4;

也就是说, 这游戏压根没有考虑到可能会更改玩家人数
然后又很多地方用到了它, 例如:

bool m_bResponse[GAME_PLAYER];

像这样用于数组定义的地方有不少, 我想了想我的解决方案:

  1. 将这个宏改为变量, 但是很多数组的定义都用到了它, 那些数组都得改(类型可能得改成 vector).
  2. 不改宏, 追踪每一个数组使用的地方, 需要更改的每一处都更改(处理数组用到了超过实际玩家人数下标的代码).
  3. 重构

但是这三种方式我都不想选, 前两种麻烦易错不说, 改出来的东西坑坑洼洼的, 后面维护可能得累死我 (拆东墙补西墙...)

第三种就不是改代码了, 时间和工作量都变了, 我该如何是好...

1411 次点击
所在节点    问与答
9 条回复
whileFalse
2018-06-14 10:15:50 +08:00
即使房主能自行选择游戏人数,这个人数也是有上限的。比如说是 8.
那么你把目前的
#define GAME_PLAYER 4;
重构成
#define GAME_PLAYER_MAX 8;
房主选择的人数限制只是能够进入房间的人数而已。
msg7086
2018-06-14 10:20:24 +08:00
#define GAME_PLAYER 1024;
然后加上实际人数的变量,入口处控制一下下标上界。
across
2018-06-14 10:23:13 +08:00
觉得 2 楼的比较有操作性,不过大部分房主承载量也有限,上限 32、64 左右就差不多了吧,多了浪费空间,数组都是预分配的。
across
2018-06-14 10:26:27 +08:00
把 GamePlayer 有关的封装下,然后重载[],在重载里面控制访问,宏定义上限限制在封装类里面,外部接口再提供进一步的人数限制。
Fishdrowned
2018-06-14 11:43:14 +08:00
这样可不可以
#define GAME_PLAYER get_game_player();

没怎么玩 C,不知道这样会不会出错
Akiyu
2018-06-14 11:53:08 +08:00
@Fishdrowned
会错, 相当于
bool m_bResponse[GAME_PLAYER] -> bool m_bResponse[get_game_player()]

除非 get_game_player()是一个被 constexpr 修饰的函数
但如果是 constexpr 修饰的函数, 那就必须在编译时获得值

你无法逃过 "定义数组时, 元素数量必须是常量" 这个限制
shierji
2018-06-14 13:24:02 +08:00
先把这个值改成 9999 然后再加一套逻辑限制人数 我简直是天才 哈哈哈
shierji
2018-06-14 13:24:50 +08:00
没看评论 看来大家想法一致啊哈哈
LGA1150
2018-06-14 14:45:46 +08:00
换一个支持变量长度数组的编译器

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/462973

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX