Проверка второго пользовательского ввода не работает должным образом, и мне сказали, что у меня много ненужного кодирования - PullRequest
1 голос
/ 24 октября 2011

Это мой первый курс по программированию, и одно из моих текущих заданий - создать рабочую игру «Камень, ножницы, бумага».

У меня большая часть работы, но мой учитель сказал, что у меня много ненужного кода, но я не сказал, что это такое. Я хотел бы добиться максимальной эффективности этой работы, поскольку я не просто удовлетворен тем, что работает.

Кроме того, вторая проверка пользовательского ввода (пользователь делает выбор, программа запускается и отображает, кто выигрывает, затем просит сделать выбор снова) не работает, как первая, и я не могу понять, что пошло не так. Я смотрю на это в течение последних 2 недель и не могу понять, поэтому любая помощь приветствуется.

Код, который у меня есть, выглядит следующим образом:

namespace Assignment04
{
class Program
{
    static void Main(string[] args)
    {
        // Declare variables
        int gamesPlayed = 0, userWins = 0, computerWins = 0, draws = 0, userSelection, computerSelection;
        bool inputIsValid = false;
        // Prompt user
        Console.WriteLine("Welcome to the Rock, Paper, Scissors game!");
        Console.WriteLine("1 - Rock");
        Console.WriteLine("2 - Paper");
        Console.WriteLine("3 - Scissors");
        Console.WriteLine("4 - Quit program and view record");
        // Create a loop to validate user's selection
            do
            {
                Console.Write("Please make a selection: ");
                // loop and test using TryParse()
                while (!int.TryParse(Console.ReadLine(), out userSelection))
                {
                    // invalid data type
                    Console.WriteLine("Invalid input.");
                    Console.Write("Please make a selection: ");
                }
                // test if input is within acceptable range
                if (userSelection >= 1 && userSelection <= 4)
                {
                    inputIsValid = true;
                }
                else
                {
                    // valid integer, but out of acceptable range
                    Console.WriteLine("Number out of range.");
                }
            } while (!inputIsValid);
            // Display user's choice
            while (userSelection >= 1 && userSelection <= 3)
            {
                if (userSelection == 1)
                {
                    Console.WriteLine("\nYou have selected Rock");
                    gamesPlayed = gamesPlayed + 1;
                }
                else if (userSelection == 2)
                {
                    Console.WriteLine("\nYou have selected Paper");
                    gamesPlayed = gamesPlayed + 1;
                }
                else if (userSelection == 3)
                {
                    Console.WriteLine("\nYou have selected Scissors");
                    gamesPlayed = gamesPlayed + 1;
                }
                // Generate computer's choice
                Random randomNumber = new Random();
                computerSelection = randomNumber.Next(1, 4);
                // Display computer's choice
                if (computerSelection == 1)
                {
                    Console.WriteLine("Computer has chosen Rock");
                }
                else if (computerSelection == 2)
                {
                    Console.WriteLine("Computer has chosen Paper");
                }
                else if (computerSelection == 3)
                {
                    Console.WriteLine("Computer has chosen Scissors");
                }
                // Calculate and display who wins
                if (userSelection == computerSelection)
                {
                    draws = draws + 1;
                }
                else if (userSelection == 1 && computerSelection == 3 || userSelection == 2 && computerSelection == 1 || userSelection == 3 && computerSelection == 2)
                {
                    userWins = userWins + 1;
                }
                else if (userSelection == 1 && computerSelection == 2 || userSelection == 2 && computerSelection == 3 || userSelection == 3 && computerSelection == 1)
                {
                    computerWins = computerWins + 1;
                }
                // Display results and statistics
                Console.WriteLine("\nYou have played {0} games with {1} wins, {2} draws, and {3} losses.", gamesPlayed, userWins, draws, computerWins);
                do
                {
                    Console.Write("Please make a selection: ");
                    // loop and test using TryParse()
                    while (!int.TryParse(Console.ReadLine(), out userSelection))
                    {
                        // invalid data type
                        Console.WriteLine("Invalid input.");
                        Console.Write("Please make a selection: ");
                    }
                    // test if input is within acceptable range
                    if (userSelection >= 1 && userSelection <= 4)
                    {
                        inputIsValid = true;
                    }
                    else
                    {
                        // valid integer, but out of acceptable range
                        Console.WriteLine("Number out of range.");
                    }
                } while (!inputIsValid);
            }
            if (gamesPlayed == 0 && userSelection == 4)
            {
                Console.WriteLine("\nGoodbye");
            }
            else if (gamesPlayed > 0 && userSelection == 4)
            {
                Console.WriteLine("\nGames played = " + gamesPlayed);
                Console.WriteLine("User wins = " + userWins);
                Console.WriteLine("Computer wins = " + computerWins);
                Console.WriteLine("Draws = " + draws);
            }
        Console.ReadLine();
    }
}
}

1 Ответ

0 голосов
/ 24 октября 2011

Если вы обнаружите, что пишете почти одно и то же несколько раз, вам следует искать способы его рефакторинга. Вот пример ненужного повторного кода:

if (userSelection == 1)
{
    Console.WriteLine("\nYou have selected Rock");
    gamesPlayed = gamesPlayed + 1;
}
else if (userSelection == 2)
{
    Console.WriteLine("\nYou have selected Paper");
    gamesPlayed = gamesPlayed + 1;
}
else if (userSelection == 3)
{
    Console.WriteLine("\nYou have selected Scissors");
    gamesPlayed = gamesPlayed + 1;
}

Может быть упрощено до:

Console.WriteLine("\nYou have selected " + tools[userSelection - 1]);
gamesPlayed++;

Где инструменты определены как:

string[] tools = { "Rock", "Paper", "Scissors" };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...