2015-12-09 42 views
1

我正在嘗試創建一個使用字典文本文件的單詞猜測遊戲。遊戲應該在用戶猜猜這個單詞之前從用戶那裏得到這個單詞應該有多長時間的輸入。如果用戶在3次之後未能猜出,則顯示答案。我用一個朋友推薦的列表來閱讀字典,因爲它很大。C#使用文本文件猜測遊戲

我的問題是,我怎樣才能讀取列表,爲猜謎遊戲選擇一個單詞?我看到前面

{ 
    static int letterLength, LettersLeft, wrongGuess; 
    public static void Main(string[] args) 
    { 
     string input = System.IO.File.ReadAllText("dictionary.txt"); 
     string[] terms = input.Split(); 

     List<string> list = new List<string>(); 

     for (int num = 0; num < terms.Length; num++) 
      list.Add(terms[num]); 

     int wordToGuess = GetLengthOfWordToGuess(); 

     List<string> fixedlist = new List<string>(); 
     for (int num = 0; num < list.Count; num++) 
     { 
      string tempword = list[num]; 

      if (tempword.Length == wordToGuess) 
       fixedlist.Add(tempword); 
     } 

     for (int num = 0; num < fixedlist.Count; num++) 
      Console.WriteLine(fixedlist[num]); 


     Console.WriteLine("Welcome to the guessing game"); 

     letterLength = GetLengthOfWordToGuess(); 

     Console.Clear(); 

//Not Working from here on. 

     string wordGuess = GetWordToGuess(); 
     char[] maskedWord = GetHiddenLetters(wordGuess, '-'); 
     LettersLeft = wordGuess.Length; 
     char userGuess; 
     wrongGuess = 3; 

     while (wrongGuess > 0 && LettersLeft > 0) 
     { 
      DispayCharacters(maskedWord); 
      Console.WriteLine("Enter a Letter"); 
      userGuess = char.Parse(Console.ReadLine()); 
      maskedWord = CheckGuess(userGuess, wordGuess, maskedWord); 

     } 
     Console.WriteLine("Well done! Thanks for Playing."); 
     Console.ReadLine(); 

    } 
    static string GetWordToGuess() 
    { 

     Random word = new Random(); 
     int wordNumber = word.Next(0, 9); 
     string[] words = { "" }; 
     string selectWord = words[wordNumber]; 
     return selectWord; 


    } 

    static char [] GetHiddenLetters(string word, char mask) 
    { 
     char[] hidden = new char[word.Length]; 
     for (int i = 0; i < word.Length; i++) 
     { 
      hidden[i] = mask; 
     } 
     return hidden; 
    } 
    static void DispayCharacters(char [] characters) 
    { 
     foreach(char letter in characters) 
     { 
      Console.Write(letter); 
      Console.WriteLine(); 
     } 
    } 
    static int GetLengthOfWordToGuess() 
    { 
     Console.WriteLine("Input length of word to guess"); 
     int selectWord = int.Parse(Console.ReadLine()); 
     return selectWord; 
    } 

    static char [] CheckGuess (char letterToCheck, string word, char [] characters) 
    { 
     bool wrong = true; 
     if(wrongGuess > 0) 
     { 
      for (int i = 0; i < word.Length; i++) 
      { 
       if (word[i] == letterToCheck) 
       { 
        characters[i] = word[i]; 
        LettersLeft--; 
        wrong = false; 
       } 
      } 
     } 
    } 



} 
+0

什麼是「/不從這裏開始工作」。意思? –

+0

作爲未來您想發佈的問題的一個提示,這裏有一些快速提示。 1.留下問候語,我知道這聽起來很不錯,但它妨礙了人們回答你真正的問題。 2.在發佈您的問題之前,嘗試調試程序並查看是否可以找到問題(或者至少縮小問題範圍)。 3.包含一部分引用的文件(在你的案例中是dictionary.txt)。 4.這是有益的,如果你清楚地說明你的問題,讓人們知道你在找什麼(或改寫這是一個問題,因爲我已經在編輯爲你做)在你的字典文件 –

+0

多少個字? – Quantumplate

回答

0

的一個主要問題是,你的GetWordToGuess功能無法正常運行,可能會引發IndexOutOfRangeException。 原因是你正在將單詞數組實例化爲一個數組,其中只有一個空字符串,但是你引用了一個介於0和9之間的索引,除非生成的隨機數爲0,否則該索引不會存在於該數組中

要解決這個問題,您應該通過您已經創建的fixedlist列表,並使用該列表而不是words陣列。你應該確保生成一個介於0和fixedlist.Count-1之間的隨機數,這樣你就不會遇到同樣超出範圍的異常。因此該功能應該是這個樣子:

static string GetWordToGuess(List<string> fixedlist) 
    { 

     Random word = new Random(); 
     int wordNumber = word.Next(0, 9); 
     string[] words = { "" }; 
     string selectWord = words[wordNumber]; 
     return selectWord; 
    } 

而且,它現在代表,包括你的代碼不編譯,因爲CheckGuess功能不返回char[]因爲它說,它應該。我相信你的意思做的就是在結尾處一個return characters;線(這很可能只是一個複製粘貼問題,當你把你的代碼在你的問題,但我想我會提到它,以防萬一)。

作爲一個側面說明有一些與你的代碼類似於聲明的東西你不使用的小問題,但由於它們不破你的節目,我不想經歷和解決這些問題。