0

私はランダムに数字を選択し、それを推測するようにユーザーに求め、ユーザーの選択に基づいて(大きい、小さい...)指示を与える小さなゲームに取り組んでいます。0〜100の乱数を生成するために、次のコードを使用しています。

int random = rand() % 101;

これは正常に機能しますが、唯一の問題は、この変数が常に異なる値に再割り当てされていることです。どうすればこれを防ぐことができますか?

#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int tries;//number of tries allowed
bool win;//whether the user has won the game or not
int main(){
    string gameType;
    cout << "Please enter your game type; \"easy\", \"medium\", \"hard\", and \"expert\"." << endl;
    cin >> gameType;
    if(gameType == "easy"){
        tries = 40;
        cout << "You have 40 tries." << endl;
    }else if (gameType == "medium"){
        tries = 20;
        cout << "You have 20 tries." << endl;
    }else if (gameType == "hard"){
        tries = 10;
        cout << "You have 10 tries." << endl;
    }else if (gameType == "expert"){
        tries = 5;
        cout << "You have 5 tries.";
    }

    cout << "Please enter a number between 0 and 100." << endl;

    while (win == false){
        int random = rand() % 101;//random number generation between 0 and 100
        return(random);
        bool valid = false;//if the user's number is valid (0 >= ; <= 100)
        int usedTries = 0;//the tries that the user has used up
        int selection;
        cin >> selection;
        if (selection > 100){
            cout << "Your number cannot be above 100." << endl;
            valid = false;
        }else if (selection < 0){
            cout << "Your number cannot be below 0";
            valid = false;
        }else{
            valid = true;
        }
        if (valid == true){
            if (selection > random){//bigger than target number
                cout << "Smaller!" << endl;
                usedTries = usedTries + 1;
            }else if (selection < random){//smaller than target number
                cout << "Bigger!" << endl;
                usedTries = usedTries + 1;
            }else if (selection == random){//the user has guessed the right answer
                cout << "Yay! You win!" << endl;
                win = true;
            }
            if (usedTries >= tries){//user has used up his number of tries
                cout << "Sorry, you've lost the game. Try again later." << endl;
                win = false;//to end the loop and terminate the game
            }
        }
    }
return(0);
}
4

3 に答える 3

2

割り当てを実行したときにのみ、新しい値が割り当てられます。あなたの説明から、それはループ内で割り当てられています。おそらく、割り当てをループの外に移動したいと思うでしょう。

典型的な構造は次のようになります。

  1. コールスランド
  2. 乱数を生成する
  3. ユーザーから推測する
  4. 推測が間違っている場合は 3 へ
  5. ユーザーがもう一度行きたい場合は、goto 2
于 2012-12-17T20:26:29.933 に答える
1

他の人が指摘したように、一度だけ割り当てる必要があります。どちらの方法でも、次のように変更できます。

static int random = rand() % 101;

それは一度だけ割り当てられます。

于 2012-12-17T20:33:14.270 に答える
0

同じ結果数があり、真のラドム値が必要な場合は、関数を少なくとも 1 回srand呼び出す前に使用する必要があります。randランダムな値に渡しsrandます。現在の時間を秒単位で渡す簡単な方法です。

于 2012-12-17T20:26:47.107 に答える