Sel*_*ine -2 c++ optimization class
I\xe2\x80\x99m 目前正在用 C++ 开发一个基于文本的游戏,有 2 名玩家。两个玩家都具有相同的函数和相同的变量集,但是将玩家操作分为两个不同的类会更优化吗?
\nI\xe2\x80\x99m 当前运行它的方式是在函数中使用参数,让玩家区分是哪个玩家\xe2\x80\x99s。然而,里面有很多复制粘贴,而且它的条件看起来有点混乱。它有效,它\xe2\x80\x99s只是很难阅读代码。
\n这里\xe2\x80\x99是相同函数、相同变量集的示例:
\n int territoryPrice = 10000;\n \n if (player == 1){\n if (pOneMoney >= territoryPrice){\n pOneMoney -= territoryPrice;\n pOneTerritories++;\n }\n else if (pOneMoney < territoryPrice){\n cout << "You don't have enough money!\\n\\n";\n }\n }\n else if (player == 2) {\n if (pTwoMoney >= territoryPrice){\n pTwoMoney -= territoryPrice;\n pTwoTerritories++;\n }\n else if (pTwoMoney < territoryPrice){\n cout << "You don't have enough money!\\n\\n";\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n检查参数 \xe2\x80\x9cplayer\xe2\x80\x9d 并相应地更改统计信息。
\n类的确切目的是减少这种重复。您编写一次函数和变量,然后您可以根据需要轻松创建整个事物的多个副本。
您应该编写一个类Player,然后可以从该类创建两个变量,每个变量对应一个玩家。
像这样:
struct Player {
int money = 100000;
int territories = 0;
};
Player player1;
Player player2;
Run Code Online (Sandbox Code Playgroud)
(注意我用的是 ,struct而不是class。稍后你会了解原因。在 C++ 中,结构和类是同一件事。我建议使用struct直到你学会为止)
类内的变量和函数通过.运算符引用,如下所示
std::cout << "Player 1's money: " << player1.money << std::endl;
Run Code Online (Sandbox Code Playgroud)
您可以通过使用指针来指示轮到哪个玩家来重写代码,而无需重复,然后我们可以让计算机始终查看当前玩家:
// make player be a Player* variable that points to player1 or player2.
// player->money is a shortcut for (*player).money
int territoryPrice = 10000;
if (player->money >= territoryPrice){
player->money -= territoryPrice;
player->terrorities++;
}
else if (player->money < territoryPrice){ // you don't need this 'if' by the way
cout << "You don't have enough money!\n\n";
}
Run Code Online (Sandbox Code Playgroud)
如果你想要一个有很多玩家的游戏,你甚至可以创建一个数组:Player players[6];或者如果你在游戏运行之前不知道玩家的数量,你可以使用一个可调整大小的数组,并且std::vector<Player> players;可以使用循环:
for(int i = 0; i < 6; i++)
std::cout << players[i].name << "'s score is: " << players[i].score << std::endl;
Run Code Online (Sandbox Code Playgroud)
注意:也可以通过使用数组来在没有类或指针的情况下完成此操作。你可以有int pMoney[2];,int pTerrorities[2];然后如果你做到了player0 或 1,你可以写信pMoney[player]谈论当前玩家的钱并pTerrorities[player]谈论他们的领土。