2017-07-26 9 views
-1

私のプログラムでは、ユーザーが推測するコンピュータの数値の範囲を設定します。ユーザーはコンピュータが選択した数字を推測しなければなりません。私の機能しているプログラムにはいくつかの問題がありますが、修正方法はわかりません。これらのエラーには、次のものが含まれます:推測番号ゲームプログラムが正常に機能していません

- 残っている推測の数は常に0のままです。btnCheckボタンをクリックするたびに5から開始せず1ずつ減少します。

- 新しい推測番号のためにbtnCheckボタンをクリックするたびに、高すぎたり低すぎたりと推測した場合は同じままです。

- 私がbtnNewGameを押すと、低い値と高い値のテキスト入力に挿入した値はクリアされません。

- 数値範囲として設定した数値に基づいて、コンピュータがランダムな整数を生成する方法はありますか?

下記のコードを改訂することは大変ありがたいです。あなたの質問に答えるために

// This line makes the button, btnCheckGuess wait for a mouse click 
// When the button is clicked, the checkGuess function is called 
btnCheckGuess.addEventListener(MouseEvent.CLICK, checkGuess); 

// This line makes the button, btnNewGame wait for a mouse click 
// When the button is clicked, the newGame function is called 
btnNewGame.addEventListener(MouseEvent.CLICK, newGame); 

// Declare Global Variables 
var computerGuess:String; // the computer's guess 
var Statement:String; // Statement based on your outcome 


// This is the checkGuess function 
// e:MouseEvent is the click event experienced by the button 
// void indicates that the function does not return a value 
function checkGuess(e:MouseEvent):void 
{ 
    var LowValue:Number; // the user's low value 
    var HighValue:Number; // the user's high value 
    var UserGuess:Number;  // the user's guess 
    var CorrectGuess:int;  // the correct number 
    var FirstGuess:String; //the user's guess 

    // get the user's range and guess 
    LowValue = Number(txtinLow.text); 
    HighValue = Number(txtinHigh.text); 
    UserGuess = Number(txtinGuess.text); 


    // determine the number of the user 
    GuessesLeft = checkCorrectGuess(FirstGuess); 
    lblNumber.text = GuessesLeft.toString(); 
    lblStatement.text = "You have guessed " + Statement.toString() + "\r"; 

    } 

// This is function checkColoursCorrect 
// g1– the user's guess 
function checkCorrectGuess(g1:String):int 
{ 
    var GuessesLeft:int = 5; // How many guesses are left 

    if (g1 != computerGuess) 
    { 
     GuessesLeft - 1; 
    } 

    else 
    { 
     GuessesLeft = 0; 
    } 

    return GuessesLeft; 
} 


// This is the newGame function 
// e:MouseEvent is the click event experienced by the button 
// void indicates that the function does not return a value 
function newGame(e:MouseEvent):void 
{ 
    var Guess1:int;  // computer's guess in numbers 
    var UserGuess1:int;  // user's guess in numbers 
    Guess1 = randomWholeNumber(100,1); //It is not (100,1). How do I change this to the range the user put? 
    UserGuess1 = randomWholeNumber(100,1); //It is not (100,1). How do I change this to the range the user put? 


if (Guess1 > UserGuess1) { 
    Statement = "TOO HIGH"; 
} else if (Guess1 < UserGuess1) { 
    Statement = "TOO LOW"; 
} else if (Guess1 == UserGuess1) { 
    Statement = "CORRECTLY"; 
} 

txtinGuess.text = ""; 
lblStatement.text = ""; 
} 
// This is function randomWholeNumber 
// highNumber – the maximum value desired 
// lowNumber – the minimum value desired 
// returns – a random whole number from highNumber to lowNumber inclusive 
function randomWholeNumber(highNumber:int,lowNumber:int):int //How do I make a whole random number based on the range the user made? 
{ 
    return Math.floor((highNumber - lowNumber + 1) * Math.random() + lowNumber); 
} 

答えて

2

...

  1. あなたはそのあなたが関数を呼び出すたびに再定義されていますローカル変数を意味しているcheckCorrectGuess()GuessesLeftを宣言しました。さらに、var FirstGuess:String;(初期化されていない非参照のstring変数)を渡しているため、(g1 != computerGuess)はfalseを返すので、答えは常に0になります。
  2. GuessesLeft - 1;は結果を変数に保存しません。 GuessesLeft = GuessesLeft - 1などの代入演算子を使用するか、必要な場合は単にGuessesLeft--と入力する必要があります。 GuessesLeft -= 1と書くと、左から右を差し引き、左の変数に値を代入することもできます。 See AS3 Operators...
  3. すでに値をTextFieldsに割り当てています。単にnewGame()内のプロセスを繰り返し、txtinLow.text = ""(高と同じ)
  4. 変数を使用してください。あなたはLowValueUserGuessとして以前checkGuess()でそれらを定義し、HighValue

はコードのその部分が他の場所と呼ばれる可能性がある場合にのみ、別の関数に機能を分割する必要があることに注意して。それ以外の場合は、スタック上のすべての関数がより多くのメモリヒットとパフォーマンスヒットを招きます。 checkCorrectGuess()はそのカテゴリに該当するため、不要です。

また、checkGuess()の代わりにnewGame()関数のフィードバックをユーザーに出力しています。それは見落としのようだった。

btnCheckGuess.addEventListener(MouseEvent.CLICK, checkGuess); 
btnNewGame.addEventListener(MouseEvent.CLICK, newGame); 

// Global Variables 
var computerGuess:int; 
var remainingGuesses:int; 

newGame(); 

function newGame(e:MouseEvent):void { 
    // Reset our guess limit 
    remainingGuesses = 5; 

    // Generate a new number 
    computerGuess = random(int(txtinLow.text), int(txtinHigh.text)); 

    // Reset our readouts. 
    txtinGuess.text = ""; 
    lblStatement.text = ""; 
} 

function checkGuess(e:MouseEvent):void { 
    var guess:int = int(txtinGuess.text); 
    var msg:String; 

    if (guess == computerGuess) { // Win 
     remainingGuesses = 0; // Zero our count 
     msg = "CORRECT"; 
    } else { // Missed 
     remainingGuesses--; // Decrement our count 

     if (guess > computerGuess) { 
      msg = "TOO HIGH"; 
     } else if (guess < computerGuess) { 
      msg = "TOO LOW"; 
     } 
    } 

    lblNumber.text = remainingGuesses.toString(); 
    lblStatement.text = "You have guessed " + msg; 
} 

function random(low:int, high:int):int { 
    return Math.floor((high - low + 1) * Math.random() + low); 
} 
関連する問題