C # - пытается создать консольную настольную игру, но не может заставить игру повторять цикл бесконечно - PullRequest
0 голосов
/ 28 октября 2018

Итак, у меня есть до 6 объектов, которые являются игроками, и они двигаются в зависимости от броска костей.Игра работает, хотя я изо всех сил пытаюсь заставить игру перебирать каждый ход игрока, пока игра не закончена.

До сих пор я в значительной степени говорю:

foreach (player in players)
{
     while (player.finish == false)
     {
          play_turn();
     }
}

Но с циклом while он останется на ходу игрока 1, пока они не закончат игру, а затем перейдет к игроку 2. Тогда как еслиЯ использую if, а не какое-то время, он будет повторяться только для тех игроков, которые находятся в игре ...

Возможно, я обдумал это, любая помощь будет оценена

1 Ответ

0 голосов
/ 28 октября 2018

Вы должны обернуть while вокруг foreach.while будет проверять, заканчивается ли игра на каждой итерации.В пределах foreach каждый игрок будет по очереди, пока игра не закончится.

Рассмотрим пример ниже:

using System;
using System.Collections.Generic;
using System.Threading;
using System.Timers;

namespace Sandbox
{
    public class Player
    {
        public string PlayerName { get; set; }
    }

    public class Program
    {
        public static Player _currentTurn;
        public static bool _isGameOver;
        public static System.Timers.Timer _gameTimer;

        static void Main(string[] args)
        {
            _gameTimer = new System.Timers.Timer(10000);
            _gameTimer.Elapsed += _gameTimer_Elapsed;

            var players = new List<Player>()
            {
                new Player() { PlayerName = "Player1" },
                new Player() { PlayerName = "Player2" },
                new Player() { PlayerName = "Player3" }
            };

            _gameTimer.Start();

            while (!_isGameOver)
            {
                foreach (var player in players)
                {
                    _currentTurn = player;

                    PlayTurn();
                }
            }

            Console.WriteLine("Game Over!");
        }

        private static void _gameTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            _isGameOver = true;
            _gameTimer.Stop();
        }

        public static void PlayTurn()
        {
            Console.WriteLine($"{_currentTurn.PlayerName} took their turn.");
            Thread.Sleep(1000);
        }
    }
}

Создан таймер;По окончании игра заканчивается.В пределах жизни таймера каждый из игроков по очереди.

...