如何在C中管理大量变量?

时间:2017-04-04 15:08:30

标签: c

在生命游戏的实现中,我需要处理用户事件,执行一些常规(如定期)处理并绘制到2D画布。细节不是特别重要。我只想说我需要跟踪大量( - )数量的变量。这些是:表示系统状态的结构(活细胞),图形库提供的结构指针,当前缩放级别,原点坐标,我确信其他几个。

在main函数中,有一个像这样的游戏循环:

// Setup stuff
while (!finished) {
    while (get_event(&e) != 0) {
        if (e.type == KEYBOARD_EVENT) {
            switch (e.key.keysym) {
            case q:
            case x:
            // More branching and nesting follows

此刻的最大嵌套级别为5.很快就会变得无法管理且难以阅读,尤其是在小屏幕上。然后解决方案是将其拆分为多个功能。类似的东西:

while (!finished {
    while (get_event(&e) !=0) {
        handle_event(state, origin_x, origin_y, &canvas, e...) //More parameters

这是问题的症结所在。子程序必须能够访问状态(由原点,画布,活细胞等表示)才能运行。明确地传递它们是容易出错的(子程序期望它们的顺序)并且也很难读取。除此之外,具有潜在10个以上参数的函数对我来说是一个其他设计缺陷的症状。然而,我能想到的替代方案似乎没有任何改善。

总结:

  1. 接受游戏循环中的深度嵌套。
  2. 使用很多参数定义函数。
  3. 将(相关的)相关参数整理到结构中 - 这实际上只隐藏了问题,特别是因为参数只是松散相关。
  4. 定义表示具有文件范围的应用程序状态的变量(例如static int origin_x;)。如果不是因为全球变量通常都是一个糟糕的想法,那么这将是我的首选。 如果我想在未来显示同一个Game of Life实例的两个视图,那么文件范围看起来不再那么吸引人了。
  5. 这个问题也适用于我认为稍微更笼统的术语:如何安全地以可读的方式传递复杂程序的状态?

    编辑: 我的动机不是速度,效率或性能或类似的东西。如果由于在这里做出的选择,代码需要花费20%的时间来运行,那就好了。我主要对6个月内不太可能混淆我并导致最轻微头痛的事情感兴趣。

0 个答案:

没有答案