1

私は非常に単純なハングマン ゲームを作成し、2 つのファイルを使用しています。Program.cs と WordList.cs。

メニューは次のとおりです。

  1. 単語を追加

  2. 単語以外のリストを表示

  3. 遊ぶ

  4. 出口

コンソールに書かれた単語を単語のリストに入れる方法を知りたいです。したがって、メニュー項目 1 を選択すると、最大 5 つの単語を入力して単語リストに入れることができるはずです。私は少し道に迷ったので、誰かが助けてくれることを本当に願っています。私はC#の初心者と言う必要があります:)プログラムが各文字をどのように検索するかはまだわかりませんが、最初にこの問題に対処してください...

これがprogram.csのコードです

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

class Hangman
{
    static void Main()
    {
        Console.ForegroundColor = ConsoleColor.Red;
        Console.Title = "C# Hangman";
        Console.WriteLine("Welcome To C# Hangman!");

        //MENU

        char MenuChoice;       

        Console.Write("\n\t1) Add words");
        Console.Write("\n\t2) Show list of words");
        Console.Write("\n\t3) Play");
        Console.Write("\n\t4) Quit\n\n");

        Console.Write("\n\tChoose 1-4: ");        //Choose meny item
        MenuChoice = Convert.ToChar(Console.ReadLine());

            switch (MenuChoice)
            {
                case '1':

                    break;
                case '2':
                    WordList showing = new WordList();
                    showing.ListOfWords();
                    Console.Write("\n\tList of words\n\n");


                    break;


                case '3':   //Running game

                    int guesses;
                    Console.Write("\n\tHow many faults can you have: ");
                    guesses = Convert.ToInt32(Console.ReadLine());
                    Console.Write("\n\tAwesome, let´s play!\n");


                    String input;
                    bool wrong;
                    int NumberOfTries = 0;


                    do
                    {
                        Console.WriteLine("\n\n\tWrong guesses: " + NumberOfTries + " / " + guesses + "\n");
                        Console.WriteLine("\n\tGuessed letters:\n");
                        Console.WriteLine("\n\tWord:\n");
                        Console.Write("\n\n\tGuess letter: ");
                        input = Console.ReadLine();
                        Console.Write("\n\n\t ");

                        wrong = !input.Equals("t") &&
                              !input.Equals("e") &&
                              !input.Equals("s") &&
                              !input.Equals("t"); 
                        if (wrong)
                        {
                            NumberOfTries++;
                            Console.WriteLine("\n\tWrong letter " + "Try again!");
                        }
                        if (wrong && (NumberOfTries > guesses - 1))
                        {
                            Console.WriteLine("\n\tYou have failed " + guesses + ". End of game!\n");
                            break;
                        }

                    } while (wrong);
                    if (!wrong)
                        Console.WriteLine("\n\tWhohoo!");

                    break;

                case '4':

                    Console.WriteLine("\n\tEnd game?\n\n");
                    break;
            }

    }

}

そして、これがWordList.csのコードです

using System;
using System.Collections.Generic;

class WordList
{
    public void ListOfWords()
    {

        List<string> words = new List<string>(); // List

        words.Add("test");         // Contains: test
        words.Add("dog");          // Contains: test, dog
        words.Insert(1, "shit"); // Contains: test, shit, dog

        words.Sort();
        foreach (string word in words) // Display for verification
        {
            Console.WriteLine(word);

        }

}
}
4

4 に答える 4

3

You could use Console.ReadLine()

        string word = "";
        while (word != null && !word.Equals("DONE"))
        {
            word = Console.ReadLine();
            wordList.Add(word);
        }
于 2013-04-19T12:01:25.013 に答える
3

表示宣言をスイッチの外に移動して、このようにアプリを拡張します

var showing = new WordList();
switch (MenuChoice)
        {
            case '1':
                showing.AddWord(Console.ReadLine())
                break;
            case '2':
                showing = new WordList();
                showing.ListOfWords();
                Console.Write("\n\tList of words\n\n");

単語リストを拡張して単語を保持し、新しい単語を追加する方法を追加します

class WordList
{
   private words = new List<string>();
   'keep the constructor but move declaration

   public void AddWord(string word)
   {

    words.Add(word);
   }

実際、いくつかのリファクタリングを使用すると、クラスのワードリストを削除し続け、リストを Program.cs に保持することができますが、リファクタリングとしてそれ以上のものを実際に使用できます。

私はあなたのコードを完全に修正しようとします(現在コンパイラを持っていないので、マイナーな構文の問題を非難しないでください(通常はVB.netを使用してください))

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

class Hangman
{
    static void Main()
    {
        Console.ForegroundColor = ConsoleColor.Red;
        Console.Title = "C# Hangman";
        Console.WriteLine("Welcome To C# Hangman!");

        //MENU

        char MenuChoice;       

        Console.Write("\n\t1) Add words");
        Console.Write("\n\t2) Show list of words");
        Console.Write("\n\t3) Play");
        Console.Write("\n\t4) Quit\n\n");

        Console.Write("\n\tChoose 1-4: ");        //Choose meny item
        MenuChoice = Convert.ToChar(Console.ReadLine());
        WordList showing = new WordList();
            switch (MenuChoice)
            {
                case '1':
                    var input = Console.ReadLine();
                    showing.AddWord(input);
                    break;
                case '2':

                    showing.ListOfWords();
                    Console.Write("\n\tList of words\n\n");


                    break;


                case '3':   //Running game

                    int guesses;
                    Console.Write("\n\tHow many faults can you have: ");
                    guesses = Convert.ToInt32(Console.ReadLine());
                    Console.Write("\n\tAwesome, let´s play!\n");


                    String input;
                    bool wrong;
                    int NumberOfTries = 0;


                    do
                    {
                        Console.WriteLine("\n\n\tWrong guesses: " + NumberOfTries + " / " + guesses + "\n");
                        Console.WriteLine("\n\tGuessed letters:\n");
                        Console.WriteLine("\n\tWord:\n");
                        Console.Write("\n\n\tGuess letter: ");
                        input = Console.ReadLine();
                        Console.Write("\n\n\t ");

                        wrong = !input.Equals("t") &&
                              !input.Equals("e") &&
                              !input.Equals("s") &&
                              !input.Equals("t"); 
                        if (wrong)
                        {
                            NumberOfTries++;
                            Console.WriteLine("\n\tWrong letter " + "Try again!");
                        }
                        if (wrong && (NumberOfTries > guesses - 1))
                        {
                            Console.WriteLine("\n\tYou have failed " + guesses + ". End of game!\n");
                            break;
                        }

                    } while (wrong);
                    if (!wrong)
                        Console.WriteLine("\n\tWhohoo!");

                    break;

                case '4':

                    Console.WriteLine("\n\tEnd game?\n\n");
                    break;
            }

    }

}

そして、これがWordList.csのコードです

using System;
using System.Collections.Generic;

class WordList
{
    private List<string> words = new List<string>();

    public void ListOfWords()
    {
        words.Add("test");         // Contains: test
        words.Add("dog");          // Contains: test, dog
        words.Insert(1, "shit"); // Contains: test, shit, dog

        words.Sort();
        foreach (string word in words) // Display for verification
        {
            Console.WriteLine(word);

        }

    }

    public void AddWord(string value){
        words.Add(value);
      }
}
于 2013-04-19T12:05:56.990 に答える
1

単語はスペースで区切られているため、次のようにユーザーに単語のリストを入力させることが
these are four wordsできます:

string input = Console.ReadLine();
// input == "these are four words"

リストの作成が非常に簡単になりました

string[] words1 = input.Split(new char[] { ' ' }, // Splits the words by space
                             StringSplitOptions.RemoveEmptyEntries);
// words1 = { "these", "are", "four", "words" }

が絶対に必要な場合は、最後List<string>に追加するだけです。.ToList()

List<string> words2 = input.Split(new char[] { ' ' },
                                 StringSplitOptions.RemoveEmptyEntries).ToList();
于 2013-04-19T12:12:19.890 に答える