我应该在 C++ 项目中为各个玩家单独分类吗?

Sel*_*ine -2 c++ optimization class

I\xe2\x80\x99m 目前正在用 C++ 开发一个基于文本的游戏,有 2 名玩家。两个玩家都具有相同的函数和相同的变量集,但是将玩家操作分为两个不同的类会更优化吗?

\n

I\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}\n
Run Code Online (Sandbox Code Playgroud)\n

检查参数 \xe2\x80\x9cplayer\xe2\x80\x9d 并相应地更改统计信息。

\n

use*_*751 5

类的确切目的是减少这种重复。您编写一次函数和变量,然后您可以根据需要轻松创建整个事物的多个副本。

您应该编写一个类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]谈论他们的领土。