用C++编写程序模拟实现以下游戏: 现有两人玩猜拳游戏,每人可用拳头表示3种物体(石头、剪刀、布)中的一种,游戏胜负规则如下: 1)石头对剪刀:石头赢; 2)剪刀对布:剪刀赢; 3)布对石头:布赢。
时间: 2024-10-18 22:17:37 浏览: 35
为了在C++中模拟这种猜拳游戏,我们可以创建两个类Player代表两名玩家,每名玩家都有三种选择之一。我们将设计一个主类Game来管理游戏流程。下面是简单的实现步骤:
1. 首先,定义Player类,包含三种手势的枚举类型和随机选择手势的方法。
```cpp
enum class Gesture { Rock, Scissors, Paper };
class Player {
private:
Gesture gesture;
public:
Player() : gesture(Gesture::Rock) {} // 默认为石头
Gesture chooseGesture() {
static const int choices[] = {Gesture::Rock, Gesture::Scissors, Gesture::Paper};
return choices[rand() % 3]; // 随机选择
}
Gesture getGesture() const { return gesture; }
};
```
2. 创建Game类,负责接收玩家输入,生成双方手势,并根据规则判断胜负。
```cpp
bool compareHands(Player& player1, Player& player2) {
if (player1.getGesture() == player2.getGesture()) {
return false; // 平局
} else {
switch (player1.getGesture()) {
case Gesture::Rock:
return player2.getGesture() == Gesture::Scissors;
case Gesture::Scissors:
return player2.getGesture() != Gesture::Rock && player2.getGesture() != Gesture::Paper;
case Gesture::Paper:
return player2.getGesture() == Gesture::Rock;
default:
assert(false); // 无法到达这里,因为枚举类型只包含3种情况
}
}
}
void playGame(Player& player1, Player& player2) {
player1.chooseGesture(); // 第一名玩家选择
player2.chooseGesture(); // 第二名玩家选择
bool winner = compareHands(player1, player2);
if (winner) {
std::cout << "玩家1获胜 (" << player1.getGesture().name() << ") vs " << player2.getGesture().name() << ")" << std::endl;
} else {
std::cout << "平局 (" << player1.getGesture().name() << ") vs (" << player2.getGesture().name() << ")" << std::endl;
}
}
```
3. 在main函数中,实例化两个玩家并开始游戏。
```cpp
int main() {
Player player1, player2;
playGame(player1, player2);
return 0;
}
```
阅读全文