您好我正在服用C ++,而且我是初学者。我们可以选择为我们的节目选择骰子游戏。我选择了一款符合以下规则的游戏:
选择一个数字并掷骰子。每次滚动该数字时,您都会获得一分。当你滚动那个号码时,你又转了一圈。当该数字未滚动时,转弯结束。每次滚动数字时标记计数。第一名以10分的一定分获胜。
过去两天我一直在研究这个问题,我很沮丧。任何帮助是极大的赞赏。我们正在使用类和构造函数。我的主要问题是能够在两个球员之间来回走动。我尝试使用do while循环,但它并没有真正帮助。这是我的代码:
//骰子游戏
#include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;
class Die
{
private:
int num;
public:
Die(); //Default constructor because it doesn't require arguments
void roll();
int getNum();
void gameRules();
};
class Players
{
private:
int player1Num;
int player2Num;
public:
void playerTurn();
};
void Die::gameRules()
{
cout << " ****Welocome to Madawi's Dice Game ****\n\n ";
cout << "Here are the rules:\n\n ";
cout << "This is a two player game, so grab a buddy!\n\n ";
cout << "\t1.)Please choose a number from 1-6\n\n ";
cout << "\t2.)Then roll the dice, if it lands on the number";
cout << "\tyou chose, you get a point and go again\n\n ";
cout << "\t3.)If you choose a number and it doesn't land on";
cout << "\tthe number you chose,you don't recieve a point, ";
cout << "\tand the second player goes\n\n ";
cout << "\t4.)The first person to get to 5 points first wins!\n\n ";
cout << "ENJOY!!! Let's begin:\n\n ";
}
Die::Die()
{
num = 1; //Initialize so that the values start at one
srand((unsigned)time(NULL));
}
void Die::roll()
{
num = rand()%6 + 1;
}
int Die::getNum()
{
return num;
}
void Players::playerTurn()
{
Die die1;
cout << "Hello player 1! Please choose a number from 1-6:\n";
cin >> player1Num;
cout << "You've chosen the number " << player1Num << endl;
die1.roll(); //rolls the dice
cout << die1.getNum() << endl; //displays number rolled
if (player1Num == die1.getNum())
{
cout << "Good job player 1! You got the same number\n ";
player1Points++; //Keeps track of player 1's score
if(player1Points == 5)
{
cout << "Congratulations player 1 you've won the game!\n";
cout << "Thanks for playing!\n ";
}
}
else
{
cout << "Sorry the numbers didn't match up\n ";
cout << "Player 2 its your turn\n ";
cout << "Player 2 please choose a number ";
cin >> player2Num;
cout << "You've chosen the number " << player2Num << endl;
die1.roll();
cout << die1.getNum() << endl;
if(player2Num == die1.getNum())
{
cout << "Good job player 2! You got the same number\n ";
player2Points++; //Keeps track of player 2's points
cout << "Player 2 its your turn again, please choose a number:\n ";
cin >> player2Num;
die1.roll();
cout << die1.getNum() << endl;
}
if(player2Points == 5)
{
cout << "Congratulations player 1 you've won the game!\n";
cout << "Thanks for playing!\n ";
}
}
}
int main()
{
Die dice1;
Players player1;
Players player2;
dice1.gameRules(); //Says the game rules
player1.playerTurn(); //Player makes a selection
return 0;
}
答案 0 :(得分:0)
您需要更改架构:
class Players
{
private:
int player1Num;
int player2Num;
public:
void playerTurn();
};
int main()
{
Die dice1;
Players player1;
Players player2;
//...
}
如上所述,您有4名玩家。每个Players
班级都有2个玩家编号。
决定。您是否有一个包含所有玩家并控制它们的类,或者您是否拥有单个玩家类并让main
函数控制玩家?
答案 1 :(得分:0)
您应该创建辅助函数void makeTurn(int player);
并使用它来为任何玩家进行移动。它应该包含带有滚动和评分的do-while循环。
伪代码:
function makeTurn(playerNumber):
display "Player " + playerNumber + "turn"
do
roll = rollDice();
if (roll == playersChoice[playerNumber])
display "You scored one point!"
playersPoints[playerNumber]++;
else
display "Sorry, you have failed :("
break //End the loop
while true //Do infinitely (till break)
end function
另外,我没有看到球员课程的原因。使用数组来包含玩家得分和选择,然后您可以轻松地将其扩展到更多玩家。如果您认为它是播放器的 实例 ,那么您应该只有得分和选择字段,并且播放器移动应该是我提供的代码中的makeMove函数你之前,只使用本地字段而不是playerChoice和playersPoints数组。