C#-尝试创建控制台游戏,但无法让游戏无限循环地循环

时间:2018-10-28 03:05:22

标签: c# for-loop if-statement while-loop

所以我几乎有最多6个作为玩家的对象,它们根据骰子掷骰而移动。尽管我努力使游戏在每个游戏结束时都在每个回合中进行迭代,但该游戏仍然有效。

到目前为止,我几乎是在说:

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

但是有一个while循环,它将停留在玩家1的回合上,直到他们完成游戏,然后转到玩家2。而如果我使用if而不是while,它将仅迭代游戏中的许多玩家。 ..

也许我一直在想它,任何帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

您必须将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);
        }
    }
}

创建了一个计时器;一旦结束,游戏结束。在计时器寿命范围内,每个玩家轮流玩转。