猜数字游戏程序无法正常工作



在我的程序中,用户设置一个数字范围供计算机猜测。然后,用户必须猜测计算机选择哪个数字,猜测限制从 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);
}

要回答您的问题...

  1. 您已在checkCorrectGuess()中声明了GuessesLeft,这意味着它是一个局部变量,每次调用函数时都会重新定义该变量。 此外,因为你传入的是var FirstGuess:String;(一个未初始化的、未引用的string变量(,(g1 != computerGuess)返回 false,答案总是 0。
  2. GuessesLeft - 1;不会将结果保存回变量。 您需要使用赋值运算符(如GuessesLeft = GuessesLeft - 1(或简单地键入GuessesLeft--如果您只想递减。 你也可以写GuessesLeft -= 1从左边减去右边,并将值分配给左边的变量。请参阅 AS3 运算符...
  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);
}

最新更新