好的,我的运动即将完成,并坚持如何使每个骰子掷出自己的随机生成的数字。该程序实际上可以滚动随机数,只是每次您重新滚动两个骰子时都始终滚动相同的精确数字。而且由于某些原因,我也遇到了这种简单但又挠头的问题

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;
}

最佳答案

首先:掷两个骰子,将结果存储在dice1和dice2中,然后将这些值发送到两个函数中,这些函数将该值放入名为faceValue的变量中。
逻辑上取回该值将仅返回第二个骰子值,因为这是您上一次在faceValue中输入的值。

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

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

我可以在此处发布更正后的代码,但看来您确实需要自己学习。

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

10-02 04:56
查看更多