Правильно ли работает мой FOR LOOP и, если нет, как это исправить? Игра Кирпичи с компьютером - PullRequest
0 голосов
/ 13 января 2019

Поскольку я изучаю программирование с использованием C #, я пытаюсь решить следующую проблему, для меня это выглядит немного сложно, пожалуйста, помогите: Дано n кирпичей. Вы и компьютер делаете ходы попеременно. За ход можно взять 1, 2 или 3 кирпича. Тот, кому нечего взять - проигрывает. Реализуйте игру с помощью компьютера. Компьютер делает ходы случайным образом (без анализа выигрышной стратегии), однако, если у него есть ход, который выиграл последним, он делает это.

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BricksGame
{
class Program
{
    static void Main(string[] args)
    {
        CH();
        Console.WriteLine("To exit please press any key ...");
        Console.ReadKey();

    }
    public static void CH()
    {
        Console.WriteLine("Please enter the number of bricks: \n");
        int n = int.Parse(Console.ReadLine());

        for (int i = n; i > 0; i--)
        {
            Console.WriteLine("\nHow many bricks to take (1, 2 or 3)?");
            int user = int.Parse(Console.ReadLine());
            n = n - user;
            if (i < 1)
            {
                Console.WriteLine("\nComputer lost!");
            }
            else
            {
                Random rn = new Random();
                int comp = rn.Next(1, 4);
                Console.WriteLine("\nComputer took:" + comp);
                if (i < 1)
                {
                    Console.WriteLine("\nYou lost!");
                }
            }
        }
    }
}
}

Здесь выкладываю переработанный код

        do
        {
            Console.WriteLine("\nHow many bricks to take (1, 2 or 3)?");
            int user = int.Parse(Console.ReadLine());
            n = n - user;
            Console.WriteLine("The remaining number of bricks is: {0}", n);
            if (n < 1)
            {
                Console.WriteLine("\nComputer lost!");
            }
            else
            {
                Random rn = new Random();
                int comp;
                if (n <= 3)
                {
                    comp = n; //For computer to take the remaining bricks
                }
                else
                {
                    comp = rn.Next(1, 4);
                }
                n = n - comp;
                Console.WriteLine("The remaining number of bricks is: {0}", n);
                Console.WriteLine("\nComputer took:" + comp);
                if (n < 1)
                {
                    Console.WriteLine("\nYou lost!");
                }
            }
        } while (n > 0);   
    }
}

}

1 Ответ

0 голосов
/ 13 января 2019
do
    {
        Console.WriteLine("\nHow many bricks to take (1, 2 or 3)?");
        int user = int.Parse(Console.ReadLine());
        n = n - user;
        if (n < 1)
        {
            Console.WriteLine("\nComputer lost!");
        }
        else
        {
            Random rn = new Random();
            int comp;
            if(n <= 3)
            {
                comp = n; //For computer to take the remaining bricks
            }
            else
            {
                comp = rn.Next(1, 4);
            }
            n = n - comp;
            Console.WriteLine("\nComputer took:" + comp);
            if (n < 1)
            {
                Console.WriteLine("\nYou lost!");
            }
        }
    } while(n > 0);

Поместите это вместо вашего цикла for. Не проверял, извините, я написал здесь напрямую, не открывая Visual Studio, поэтому, пожалуйста, попробуйте, если это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...