2017-05-13 12 views
-1

私はC#コンソールアプリケーションで事前定義された2次元配列である非常に単純な迷路ゲームを作ろうとしています。プレーヤーは矢印キーを使用して移動します。プレイヤーは[0,0]コーディネーションで始まり、残りは白で、赤で色分けされています。 プレーヤーが矢印キーを使用して移動すると、新しい調整の色が赤に変わります。私はどのように2 Dimensions配列(配列は文字列として定義されている)の特定の調整で設定されている文字列の色を変更することができますかと思います。 あなたが手伝ってくれたら嬉しいです。C#で2次元配列のコーディングを塗りつぶす

 static void Main(string[] args) 
    { 
     Stack MyStack = new Stack(); 
     string[,] arr = new string[5, 5] { { "1", "0", "0", "0", "0" }, { "1", "0", "0", "0", "0" }, { "1", "0", "0", "0", "0" }, { "1", "1", "0", "0", "0" }, {"1", "1", "1", "1", "1" }}; 

     var rowCount = arr.GetLength(0); 
     var colCount = arr.GetLength(1); 
     for (int row = 0; row < rowCount; row++) 
     { 
      for (int col = 0; col < colCount; col++) 
       Console.Write(String.Format("{0}\t", arr[row, col])); 
      Console.WriteLine(); 
     } 
     Console.ReadLine(); 
    } 
+0

あなたは、その座標のコンソールの背景色について話していますか? –

+0

実際にはテキストの色はありません –

+0

あなたの最初のステップは、最初にテキストを色付けする方法を理解することです。次に、インタラクティブな表示技術を考え出す必要があります。上のコードはそれのために働くつもりはありません。次に、表示する色を表示するために配列内を追跡する必要があります。これを行うにはさまざまな方法がありますが、最も簡単で効果的なIMHOは、その情報と文字を表示するユーザー定義型を配列に格納することです。尋ねられたあなたの質問はあまりにも広すぎます。最終的に良い解決策で見つかるであろうコードはここには1行もありません。 –

答えて

0

ここには簡単な解決策があります。あなたはそれを必要なだけ変更することができます。

using System; 

struct Index 
{ 
    public int i; 
    public int j; 
} 
public class Node 
{ 
    public int Value { get; set; } 
    public ConsoleColor Color { get; set; } 
    public Node(int value, ConsoleColor color = ConsoleColor.White) 
    { 
     Value = value; 
     Color = color; 
    } 
} 
public class Maze 
{ 
    private readonly int _size; 
    private Node[,] _maze; 
    private Index _currentIndex; 

    public Maze(int size) 
    { 
     _size = size; 
     _maze = new Node[_size, _size]; 
    } 

    private void Initialize() 
    { 
     int k = 1; 
     for (int i = 0; i < _size; i++) 
      for (int j = 0; j < _size; j++) 
       _maze[i, j] = new Node(k++); 
     _maze[0, 0].Color = ConsoleColor.Red; 
    } 

    private void Print() 
    { 
     Console.WriteLine("Use the direction keys to move starting at (0,0). I'll not move until you enter a valid direction.\nYou can only move within the maze.\nYou cannot move to a red spot.\n\nPress ESC to quit.\n\n"); 

     for (int i = 0; i < _size; i++) 
     { 
      for (int j = 0; j < _size; j++) 
      { 
       Node node = _maze[i, j]; 
       Console.ForegroundColor = node.Color; 
       Console.Write(string.Format("{0:00}",node.Value)); 
       Console.ResetColor(); 
       Console.Write(" "); 
      } 
      Console.WriteLine(); 
     } 
    } 
    public void Run() 
    {   
     Initialize(); 
     Print(); 
     ConsoleKey key; 
     do 
     { 
      key = Console.ReadKey().Key; 
      ValidateMove(key); 
      Console.Clear(); 
      Print(); 
     } while (key != ConsoleKey.Escape); 
    } 


    private void ValidateMove(ConsoleKey key) 
    { 
     Index tmp = _currentIndex; 
     switch (key) 
     { 
      case ConsoleKey.UpArrow: 
       --tmp.i; 
       if(Validate(tmp)) 
       { 
        _maze[tmp.i, tmp.j].Color = ConsoleColor.Red; 
        _currentIndex = tmp; 
       } 
       break; 
      case ConsoleKey.DownArrow: 
       ++tmp.i; 
       if (Validate(tmp)) 
       { 
        _maze[tmp.i, tmp.j].Color = ConsoleColor.Red; 
        _currentIndex = tmp; 
       } 
       break; 
      case ConsoleKey.LeftArrow: 
       --tmp.j; 
       if (Validate(tmp)) 
       { 
        _maze[tmp.i, tmp.j].Color = ConsoleColor.Red; 
        _currentIndex = tmp; 
       } 
       break; 
      case ConsoleKey.RightArrow: 
       ++tmp.j; 
       if (Validate(tmp)) 
       { 
        _maze[tmp.i, tmp.j].Color = ConsoleColor.Red; 
        _currentIndex = tmp; 
       } 
       break; 
      default: 
       break; 
     } 
    } 

    private bool Validate(Index index) => (index.i < _size && index.i >= 0 && index.j < _size && index.j >= 0 && _maze[index.i, index.j].Color != ConsoleColor.Red); 

    public static void Main() 
    { 
     Maze maze = new Maze(5); 
     maze.Run(); 
    } 
} 
関連する問題