骰子游戏,使每个模具滚动不同

时间:2013-09-12 14:45:35

标签: c++ dice

好吧,我刚刚完成了我的练习,并坚持如何让每个骰子滚动他们自己的随机生成的数字。该程序确实滚动随机数,只是每次你重新掷骰子时,总是滚动相同的数字。而且这个简单但头疼的问题发生了,出于某种原因,我也有

cout << "Adding both dices up you rolled a total of: " << totalScore() << "." << endl;

我的同伴也告诉我,我的faceValue是非法值,应该设置为合法值。我并没有完全明白他的意思,我确信它会在我的成绩中取得一些成绩(不是很多)。

#include "stdafx.h"
#include <iostream>
#include <string>
#include <ctime>  
using namespace std;    

class PairOfDice
{


private:

int diceOne;
int diceTwo;
int score;
int faceVaule;

public:

PairOfDice(){
    srand(time(NULL));
    roll();

}

void roll(){
    diceOne = (rand() % 6) + 1;
    diceTwo = (rand() % 6) + 1;
    setdiceOne(diceOne);
    setdiceTwo(diceTwo);
}


void setdiceOne(int value){

    faceVaule = value;

}

int getdiceOne(){

    return faceVaule;

}

void setdiceTwo(int value){

    faceVaule = value;

}

int getdiceTwo(){
    return faceVaule;

}

void totalScore(){

    score = diceOne + diceTwo;
}

void display(){

    cout << "The first Dice rolled a " << getdiceOne() << " ." << endl;

    cout << "The second Dice rolled a " << getdiceTwo() << " ." << endl;
    // adding both dices gives an: No operator " < < " matches these operands
    cout << "Adding both dices up you rolled a total of: " << totalScore() << "." << endl;
}


};

int _tmain(int argc, _TCHAR* argv[])
{

PairOfDice game;

game.roll();
game.display();
game.totalScore();


return 0;
}

1 个答案:

答案 0 :(得分:5)

首先:滚动两个骰子,将结果存储在dice1和dice2中,然后将这些值发送到两个函数,将值放入名为faceValue的变量中。 合理地获取值将仅返回第二个骰子值,因为这是您最后在faceValue中输入的内容。

这就是为什么两个骰子都显示相同的值。

现在出现错误:你的totalScore函数返回一个空格,而&lt;&lt;运营商期望某种类型。 totalScore函数添加两个骰子(顺便说一下正确的值)并将结果放入得分中,但不记得,得分中的值。

你的代码非常混乱。您不应该有一个成员变量(faceValue)持有两个不同值的副本。你根本不应该有这个成员。只需使用diceOne和diceTwo值即可。 当设置值(= rand()%6 + 1)时,不应该通过调用set-function再次设置它们:创建一个正确的set-function(因为这个不正确)并将随机设置为在那里的参数,或者像你已经在构造函数中直接设置成员变量diceOne和diceTwo。不要两者都做。 当返回两个骰子的总和时,为什么不直接返回这个总和(提示:函数totalScore应该返回一些int类型)。为什么要将求和结果放入成员变量中?没有必要这样做。

我可以在这里发布更正后的代码,但似乎你自己必须自己学习。

编辑:顺便说一下:如上所述,学会使用调试器。你很快就会发现我告诉你的事情是正确的。您会注意到faceValue首先获取diceOne的值,然后获取diceTwo的值,永远不会获得diceOne值。