帮助分解代码

Help with breaking up code?

本文关键字:代码 分解 帮助      更新时间:2023-10-16

我有一个程序,我已经工作了一段时间,这基本上是一个跳棋游戏,有人可以决定与玩家比赛或观看计算机模拟。这两个代码基本上是一样的,除了计算机模拟取的是随机值。这两个代码块都位于我的驱动程序中,我想将代码分解为两个不同的cpp文件。通过这种方式,我让用户输入决定将要发生什么。

所以例如:

if(x == 1)
  call the player cpp file
else if (x == 2)
  call the simulation cpp   

我的程序是面向对象的,但我想知道是否有一种方法可以从不同的文件运行代码,而无需创建类和定义函数?

游戏应该有两个玩家。有两种类型的玩家。一个CpuPlayer和一个HumanPlayer.

class Player {
  public:
    virtual Move getNextMove() = 0;
};

class HumanPlayer : public Player {
  public:
    HumanPlayer() {}
    Move getNextMove() {
      // get move from user interface
      return move;
    }
};
class CpuPlayer : public Player {
  public:
    CpuPlayer() {}
    Move getNextMove() {
      // get move from some sort of logic...
      return move;
    }
};

class MyGame {
  public:
    void setPlayer1(Player &player1instance) {
      player1 = &player1instance;
    }
    void setPlayer2(Player &player2instance) {
      player2 = &player2instance
    }
  private:
    Player* player1;
    Player* player2;
}

你对一个玩家编码。如果玩家1是人类,玩家2也是人类,那么"移动"是由某种人类界面决定的。如果玩家1是人,玩家2是CPU,那么玩家1就是UI,玩家2就是CPU。如果玩家1是一个CPU,而玩家2是一个人,情况则相反。如果两个玩家都是CPU,那么你就有了模拟效果。

所以,如果你有某种开始菜单来引导你的游戏,这应该很容易。只要确保你的游戏逻辑是基于Player合同,而不是基于特定类型的玩家执行。

你可以这样做

if (x == 1)
{
    #include "player.cpp"
}
else if (x == 2)
{
    #include "simulation.cpp"
}

并让单个.cpp文件包含每个主要部分的逻辑。这有点笨拙,只是将功能包装在一些函数中,然后从if-if-else语句中调用它们。至少对于函数,如果出现问题,将更容易调试或执行堆栈跟踪等,而不是在多个.cpp文件中进行跟踪。