2013-10-23 40 views
0

我的一位教授給了我們一個創建隨機數猜測遊戲的項目。遊戲的要求是它至少有一個公共屬性和一個公共方法,然後是循環的實際規則。遊戲還必須包含至少兩個類。我會列出我現有的代碼,希望有人能指引我朝着正確的方向發展。運行時,它只運行有關規則的console.writeline消息。然後停止。循環不會迭代,而我放置在非測試類中的「方法」。自從一開始我就一直在爲這門課而苦苦掙扎,因爲我之前沒有編程經驗。我見過的這個遊戲的大部分例子都只涉及一個類。所以我不完全確定我應該在另一箇中放置什麼,或者如何將它們分爲兩類,哪些代碼放在哪裏。隨機數字遊戲與兩個類,不迭代。建議?

我的代碼如下,首先是非測試類。

using System; 

namespace numbergame 
{ 
class mysteryNumber 
{ 
    public int myRand {get; set;} 
    public int playerGuess { get; set; } 

    public void DisplayMessage() 
    { 
     Console.WriteLine("The most important rule of the Number Guessing Game is that \nyou can't talk about the Number Guessing Game."); 
    } 

下一個代碼是我的代碼和主要方法。

using System; 

namespace numbergame 
{ 
    class mysteryNumberTest 
    { 
     static void Main(string[] args) 
     { 
      int myRand; 
      int guessCounter = 1; 
      int playerGuess = 0; 

      Console.WriteLine("The number you must choose is a number between \n1 and 100. Your attempts remaining will be \nshown upon incorrect guess. The number of attempts it took you will be\n shown upon correct guess."); 


      Random randomNumbers = new Random(); 
      myRand = randomNumbers.Next(1, 100); 

      { 
       while (guessCounter < 5) ; 
       Console.WriteLine("Feeling lucky, punk? Guess your number: "); 
       playerGuess = Convert.ToInt32(Console.ReadLine()); 

       { 
        if (playerGuess == myRand) 
         Console.WriteLine("Congratulations! You're a real winner!\n"); 
        Console.WriteLine("The number of attempts it took you was: {0}", guessCounter); 
        { 
         guessCounter = guessCounter + 10; } 
         if (playerGuess != myRand) 
         { guessCounter += 1; } 
         Console.WriteLine("No. You have made {1} attempts.\nYou have {2} attempts left.", guessCounter, (5 - guessCounter)); 
        if (guessCounter >= 6) 
         Console.WriteLine("The number of guesses was exceeded."); 
       } 
      } 
     } 
    } 
} 

第一個非測試類中的實例變量和自動化屬性看起來好像沒有任何用處。 DisplayMessage()方法似乎也可能實際上不起作用。

但我不知道。我不知道爲什麼我的循環沒有開始,當它開始時,我有一種感覺,我的猜測可能不會增加我想要的方式,因爲我在上週的練習中遇到了這個問題。

任何幫助表示讚賞。 :(

+1

你的代碼似乎有很多不必要的匿名範圍正在使用,好像它屬於已經移動的控制語句,比如你的'while(guessCounter <5);'語句(它不會'實際上做任何事情)。我建議你自己仔細閱讀你的代碼。 – Dai

回答

0

你忘了一些{}的它會出現

它去

while (test) 
{ // <- Notice the bracket 
//Code to repeat 5 times goes here. 
} // <- it closes 

。另外:如果你希望它重複5次,初始化guessCounter 0

+0

我還可以看到其他一些錯誤。學習如何使用循環和條件,並停止來到StackOverflow爲你做功課。至少谷歌它首先。 – Oldfrith

0

第一件事,就像戴說的那樣,有很多匿名範圍,你根本不需要。

現在讓我們看看你的老師問了什麼,他想要2班1公共財產,1公共財產OD。我的猜測是,公共方法驗證輸入的數字是否有效?

此外,循環聲明如下:

while(bCondition == true) 
{ 
    // your code here 
} 

注意如何申報您的環路而(guessCounter < 5);(通知結束的指示)。這就是爲什麼它沒有「進入」循環。

現在,這樣的事情會更好地工作:

while(numberGuesses < 5) 
{ 
    // We've entered the loop. 
    // We now want to know if the guess is good. If it is, tell the player then leave 
    // the loop 
    if(playerGuess == yourNumber) 
    { 
     Console.WriteLine("You guessed it right! Right after {0} guesses!", numberGuesses); 
     break; // Break leaves the loop it is in. Therefore our 'while'. 
    } 

    // No need for else instruction since you can't be here with the good guess 
    // do what you must do here when he got it wrong 

} 

至於你的公共方法和屬性,無法真正幫助你在那裏,因爲我不明白他爲什麼會要2班的總額。但是,考慮這樣做:

anyNumber++; // correspond to : anyNumber = anyNumber + 1; 
// or 
anyNumber += aNumber; // where a number can be any number. (anyNumber = anyNumber + aNumber) 

所以你可以做numberGuesses ++;在循環結束時。至於其他方面,我會假設你應該試着在紙上畫一張你怎麼看的,或者你的老師會怎麼看。

0

我會用只讀屬性創建第二類,該屬性會在構造器中用隨機數進行初始化。事情是這樣的:

public class Mystery 
{ 

    private static Random R = new Random(); 

    private int _number; 
    public int Number 
    { 
     get { return _number; } 
    } 

    public Mystery() 
    { 
     _number = R.Next(1, 101); // 1 to 100 INCLUSIVE 
    } 

    public void DisplayMessage() 
    { 
     Console.WriteLine("The most important rule of the Number Guessing Game is that \nyou can't talk about the Number Guessing Game."); 
     Console.WriteLine("The number you must choose is a number between \n1 and 100. Your attempts remaining will be \nshown upon incorrect guess. The number of attempts it took you will be\n shown upon correct guess."); 
    } 

} 

需要注意的是,如果你想介於1和100(含),則)的第二個參數Random.Next(應該是101,而不是100。

現在,您可以創建一個這個類在Main()中的實例並使用如下形式:

static void Main(string[] args) 
    { 
     int guessCounter = 1; 
     int playerGuess = 0; 

     Mystery mystery = new Mystery(); 
     mystery.DisplayMessage(); 

     while (guessCounter < 5) 
     { 
      Console.WriteLine("Feeling lucky, punk? Guess your number: "); 
      playerGuess = Convert.ToInt32(Console.ReadLine()); 
      if (playerGuess == mystery.Number) 
      { 
       Console.WriteLine("Congratulations! You're a real winner!\n"); 
       Console.WriteLine("The number of attempts it took you was: {0}", guessCounter); 
      } 
      else 
      { 
       // ... do something else in here ...      
      } 
     } 
    } 

我不完全按照規則猜測是什麼時候不正確。在一個地方你添加10,而在另一個地方你添加1.我會讓你找出「......在這裏做一些其他的事情......」部分。