2016-09-22 25 views
0

我在課堂上負責使用c#和do/while,if/else循環創建隨機數生成猜謎遊戲。這個任務看起來很簡單,然而,我遇到了問題,因爲我應該通過提示用戶「輸入想要猜測的最大值」來啓動遊戲。 我不能讓我的程序正常工作,因爲每次運行它時,無論輸入什麼值,都表示「選擇1和0之間的值」用戶選擇最大值的猜測遊戲

我附加了我的exe文件。

 Random generator = new Random(); 
     bool truth = true; 
     int MaxRange = Convert.ToInt32(truth); ; 
     int userguess = 0; 
     int outputnumber = generator.Next(MaxRange); 

     do 
     { 
      Console.WriteLine(" Enter a max number you want to guess from!", MaxRange); 
      Console.ReadLine(); 

      Console.WriteLine("please make a guess between 1 and {0}", outputnumber); 

      if (userguess != outputnumber) 
      { 
       userguess = Convert.ToInt32(Console.Read()); 

       if (userguess < outputnumber) 
       { 
        Console.WriteLine("That is not correct, Guess again"); 
        Console.ReadLine(); 
       } 
       if(userguess > outputnumber) 
       { 
        Console.WriteLine("That is not correct, Guess again"); 
        Console.ReadLine(); 
       } 
       else if (userguess == outputnumber) 
       { 
console.writeline("That is correct, the number is {0}, outputnumber); 
       } 
      } 
     } while (truth == false); 
     } 
    } 
} 
+0

因爲你沒有任何形式的'if'塊內的代碼。它會打印每次。 –

+0

也許我是盲目的......但我沒有看到任何你設置'真相'到'錯誤'的地方。讓我拿我的其他眼鏡 – Zuzlx

+0

我沒有看到你設置用戶響應的最大數量。我不知道你如何將一個布爾轉換爲最大範圍的int。我建議TryParse用於最大範圍和用戶猜測,以確保他們輸入了一個int。 – Tony

回答

3

你的代碼有很多錯誤,但我會通過在他們旁邊寫註釋來看看主要的錯誤。

Random generator = new Random(); 
bool truth = true; 

//extra semicolon on next line, 
//doesn't make sense to convert a boolean to get your initial max range, 
//just give it an initial value, perhaps 0 
int MaxRange = Convert.ToInt32(truth); ; 
int userguess = 0; 

//the generator can't get the correct outputnumber yet because MaxRange hasn't 
//been set by the user's input yet 
int outputnumber = generator.Next(MaxRange); 

do 
{ 
    //this won't get the user input because the parameters in WriteLine() 
    //that come after the string are for inserting into the string, not recieving input 
    Console.WriteLine(" Enter a max number you want to guess from!", MaxRange); 

    //need to set Console.ReadLine() to a variable for it to be saved 
    //should be MaxRange = Console.ReadLine(); (though that will throw an error if the user inputs anything except numbers) 
    Console.ReadLine(); 

    //outputnumber hasn't been set to a true generated number yet 
    Console.WriteLine("please make a guess between 1 and {0}", outputnumber); 

    //outputnumber could be renamed to be more clear, I would suggest randomNumber 
    //userguess is still 0 during the first loop, need to get the user's guess before comparing to the random number 
    //also, could simplify these if/else statements to just a couple of them 
    //you're also going to need a while loop somewhere in here to continue having the user 
    //guess until they get it right 
    if (userguess != outputnumber) 
    { 
     //should use Console.ReadLine() 
     userguess = Convert.ToInt32(Console.Read()); 

     if (userguess < outputnumber) 
     { 
      Console.WriteLine("That is not correct, Guess again"); 
      Console.ReadLine(); 
     } 
     if(userguess > outputnumber) 
     { 
      Console.WriteLine("That is not correct, Guess again"); 
      Console.ReadLine(); 
     } 
     else if (userguess == outputnumber) 
     { 
//not indented correctly, missing correct capitalization and missing the right quotes on the string to be wrote 
console.writeline("That is correct, the number is {0}, outputnumber); 
     } 
    } 
//should just be while (true); 
} while (truth == false); 
} 

} 

}

0

這有很多不妥之處。

您正在生成一個使用'真值'作爲最大值的數字,而不是在您從用戶處獲得輸入後生成數字。

您還需要在得到正確的數字後將true設置爲false。

你可能也希望他們有相同數量的多個猜測,所以你需要移動輸入的最大範圍的「做」

開始上面採取措施,通過您的代碼行的讀取時間並考慮如何將變量設置在不同的點等。

1

對於開發新手來說可能是壓倒性的,很明顯,你沒有完全想到這個問題和你的解決方案。有時候開發新算法有助於評論您將使用的步驟,然後開始開發。他們可能是模糊的指導或更詳細的步驟,但您會發現這是一個有益的練習,尤其是在處理複雜問題時。

下面是一個示例,您可以使用它來重寫代碼並重試。我也建議使用int.TryParse()而不是convert。

// loop 1 
// get users expected max range 
// if not int 
//  display message about invalid input 
// if int 
//  break loop 1 to start guessing 
// end loop 1 
// generate random number for user to guess 
// loop 2 
// prompt user for their guess 
// parse input and verify int 
// if not int 
//  display message about invalid input 
//  continue loop 2 skipping eval code to reprompt for input 
// evaluate their guess 
// if matches 
//  show success message 
//  break loop 2 
// else 
//  show failure message 
0

謝謝大家!我做了一些小調整,現在我幾乎完美了。我仍然得到的唯一錯誤是,在成功運行它時,會詢問用戶是否要再次播放。如果他們說是,遊戲使他們從之前選擇的最大值開始玩,而不是輸入新的值。

命名空間Trythisagain { 類節目 {

public static int SelectedNumber = 0; 
    public static Random ran = new Random(); 
    public static bool GameOver = false; 
    public static int UserMaxValue = 0; 



    static void Main(string[] args) 

    { 
     int UserNumber; 
     SelectedNumber = ran.Next(0, UserMaxValue); 

     do 
     { 


      Console.WriteLine("Enter a max number you want to guess from!"); 
      UserMaxValue = Convert.ToInt32(Console.ReadLine()); 

     do 
      { 


       Console.WriteLine("Select a number between 1 and {0}!", UserMaxValue); 
       UserNumber = Convert.ToInt32(Console.ReadLine()); 
       GuessNumber(UserNumber); 

     } while (GameOver == false); 
     } while (GameOver == false); 

    } 




    public static void GuessNumber(int UserNumber) 

    { 

     int playagain = 0; 

     if (UserNumber < SelectedNumber) 
      Console.WriteLine("Your Number is Wrong! Please try Again!"); 
     else if (UserNumber > SelectedNumber) 
      Console.WriteLine("Your Number is Wrong! Please Try Again!"); 
     else 
     { 

      Console.WriteLine("Yay! You got the right number! Press 1 to play again press 2 to quit"); 
      playagain = Convert.ToInt32(Console.ReadLine()); 

      while (playagain != 1 && playagain != 2) 

      { 
       Console.WriteLine("Please Only Select 1 to play again or 2 to quit!"); 
       playagain = Convert.ToInt32(Console.ReadLine()); 

      } 

      if (playagain.Equals(2)) 
       GameOver = true; 

      else 
       SelectedNumber = ran.Next(0, UserMaxValue); 
     } 
    } 
} 

}

+0

經過進一步檢查,似乎隨機值通常是0,這是不應該被允許的。另外,當你再次玩你輸入的最大值通常是你需要猜測的「隨機數」 –