【问题标题】:Changing foreground color for players in a C# list更改 C# 列表中玩家的前景色
【发布时间】:2021-12-05 13:21:51
【问题描述】:

我正在学习编程课程 (C#)。现在我正在做一个任务,我将创建一个 Dart 301 游戏的一个版本。

我基本上完成了游戏,但想根据正在玩的玩家更改文本颜色。这并不是真正必要的,它没有被列为你应该做的事情,但在我脑子里有了这个想法之后,我也不能放手,哈哈。我真的只是想知道怎么做,现在一直在尝试不同的解决方案。

游戏开始时,您必须选择玩多少玩家。如果它是 1 个玩家,它会与计算机对战,然后我解决了在我的 foreach 循环中添加前景色的变化 - 例如:

Console.ForegroundColor = ConsoleColor.DarkCyan;

但是当游戏中有多个玩家时,我就卡住了。

理想情况下,我想为每个加入游戏的玩家分配一种颜色。玩家通过我创建的 AddPlayer 方法添加,然后存储在 Game 类的玩家列表中。还有一个 Player 类,其中包含每个玩家的回合列表。

到目前为止我尝试过的是

  1. 为随机颜色创建方法(这并不理想,因为我希望为每个玩家分配特定颜色):
private static ConsoleColor GetRandomColor()
{
    Random randomColor = new Random();
    var consoleColors = Enum.GetValues(typeof(ConsoleColor));
    return (ConsoleColor)consoleColors.GetValue(randomColor.Next(consoleColors.Length));
}
  1. 在 foreach 循环中,然后更改列表中每个玩家的颜色
    foreach (var player in ListOfPlayers)
    {
        for (int i =0; i <= ListOfPlayers.Count -1; i++)
        {
            Console.ForegroundColor = GetRandomColor(); 
        }
        
        Console.WriteLine("\n\t{0} it's your turn! What numbers did your arrows hit? " +
                          "\n\tREMEMBER: Each turn includes three throws with a possible score of 1-20 for each arrow. \n", player);
        arrowOne = GetPlayerThrow();
        arrowTwo = GetPlayerThrow();
        arrowThree = GetPlayerThrow();
        player.AddTurn(arrowOne, arrowTwo, arrowThree);
        totalScore = player.CalculatePoints();
    }
  1. 我也尝试过不同类型的 if 和 foreach

希望我的解释没有变得太混乱。我更愿意为列表中的特定玩家分配颜色。

例如:

private List <Player> ListOfPlayers = new List <Player> ();

List item 0 如果此播放器存在,则文字将显示为 DarkYellow。

List item 1 如果此播放器存在,文本将以 DarkCyan 显示。

列表项 2 如果此播放器存在,文本将出现在 DarkMagneta 中。

列表项 3 如果此播放器存在,文本将显示为深绿色。

这是我在电脑对玩家的游戏中所做的图片:
电脑播放的时候文字是红色的,轮到玩家的时候文字是蓝色的:

【问题讨论】:

  • 创建一个ConsoleColor 数组并用所需的颜色填充它。然后在添加玩家时,为他们分配数组中的下一个颜色。您可以使用ListOfPlayers 列表中的玩家索引来选择颜色。

标签: c# list colors


【解决方案1】:

创建一个包含所需玩家数量的列表,并使用switch 为每个所需颜色分配。然后开始游戏。下面是一个例子。

public class Game {
  private List<Player> ListOfPlayers = new List<Player>();
  public Game(int nbplayers) {
     InitPlayers(nbplayers);
  }
  public void InitPlayers(int nbplayers) {
     for(int i=0; i < nbplayers; i++) {
        var player = new Player();
        switch(i) {
           case 0: { player.Color = ConsoleColor.DarkYellow; break;}
           case 1: { player.Color = ConsoleColor.DarkCyan; break;}
           case 2: { player.Color = ConsoleColor.DarkMagneta; break;}
           case 3: { player.Color = ConsoleColor.DarkGreen; break;}
        }
        ListOfPlayers.Add(player); 
     }
  }
  public void StartGame() {
     while(!ListOfPlayers.Any(p => p.TotalScore > 100) {
        StartTurn();
     }
     EndGame();
  }

  public void StartTurn() {
    //each player throw
    foreach(var player in ListOfPlayers) {
       player.Play();
    }
    //calculate each player total score
    ...
    
  }

  public void EndGame() {
     var winner;
  }
}

public class Player {
   private Random = new Random();
   public ConsoleColor Color {get; set;}
   public List<int> Throw = new List<int>();
   public int TotalScope { get; set; } = 0;
   public void Play() {
      Throw.Clear();
      for(int i=0; i < 3; i++) {
        Throw.Add(random.Next(1, 20));
      }
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 2013-12-02
    • 1970-01-01
    相关资源
    最近更新 更多