所以我几乎有最多6个作为玩家的对象,它们根据骰子掷骰而移动。尽管我努力使游戏在每个游戏结束时都在每个回合中进行迭代,但该游戏仍然有效。
到目前为止,我几乎是在说:
foreach (player in players)
{
while (player.finish == false)
{
play_turn();
}
}
但是有一个while循环,它将停留在玩家1的回合上,直到他们完成游戏,然后转到玩家2。而如果我使用if而不是while,它将仅迭代游戏中的许多玩家。 ..
也许我一直在想它,任何帮助将不胜感激
答案 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);
}
}
}
创建了一个计时器;一旦结束,游戏结束。在计时器寿命范围内,每个玩家轮流玩转。