2017-07-26 85 views
-1

在我的程序中,用户设置了一系列数字供计算机猜测。然后,用户必须猜测计算机选择了哪个数字,从5开始猜测。在我的功能程序中有几个问题,我不明白如何解决。这些错误包括:猜测数字游戏程序运行不正常

- 剩下的猜测数始终保持为0.它不会从5开始,每次单击btnCheck按钮时减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. 您已经声明GuessesLeftcheckCorrectGuess()这意味着它的多数民众赞成重新定义每次调用函数时的局部变量。 Futhermore,因为你在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. 使用您的变量。你刚才在checkGuess()它们定义为UserGuessLowValueHighValue

当心,你只需要功能拆分为三个独立的功能,如果这段代码很可能是在其他地方调用。否则,堆栈中的每个函数都会导致更多的内存和性能命中。 checkCorrectGuess()属于该类别,因此不必要。

此外,您正在newGame()功能而不是checkGuess()打印您的反馈给用户。这看起来像是一个疏忽。

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