我有这个程序我已经工作了一段时间,这基本上是一个跳棋游戏,有人可以决定与玩家对战或观看计算机模拟。现在这两个代码基本上是相同的代码,除了计算机模拟采用随机值这一事实。这两个代码块都位于我的驱动程序中,我想将代码分解为两个不同的cpp文件。这样我就可以通过用户输入决定将要发生什么。
所以例如:
if(x == 1)
call the player cpp file
else if (x == 2)
call the simulation cpp
我的程序是面向对象的,但我想知道是否有办法在不创建类和定义函数的情况下从不同的文件运行代码?
答案 0 :(得分:2)
游戏应该有两个玩家。有两种类型的播放器。 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
合约编写游戏逻辑代码,而不是针对特定类型的播放器实现。
答案 1 :(得分:0)
您可以执行类似
的操作if (x == 1)
{
#include "player.cpp"
}
else if (x == 2)
{
#include "simulation.cpp"
}
让各个.cpp文件包含每个主要部分的逻辑。虽然只是将功能包装在某些函数中并从if-if-else语句中调用它们,但这有点笨拙。至少对于出现问题的函数,调试或堆栈跟踪等更容易,而不是追逐多个.cpp文件。