2016-04-19 13 views
-3

私は現在、さまざまなゲームボードを含む多くのファイルが与えられているプロジェクトに取り組んでいます。ボードはすべて正方形(高さと幅が同じ)ですが、サイズが異なります。小さな例では、(15回15)ここで見ることができます:(チェス盤のように)グリッドにファイルを読み込むC#

.-------------. 
|xx x xxxxxx | 
| xx xxx x| 
| xxx xxxx | 
| xx xxx x| 
| xxxx x x x | 
|xx xxx x xx| 
| xx @ x xx| 
| x x xx x| 
| x x xx | 
| xxx xx xxx | 
| xx xx x| 
| xxxxxx xxx | 
|xx  x x x| 
'-------------' 

私は、これらのファイルは、2次元配列に取得したいので、私は、ゲームボードとしてそれらを使用することができます。

しかし、私は読んで、2次元配列にファイルを変換する助けが必要です。これまでのところ私は(マクシミリアンゲルハルト溶液からインスピレーションを)持っている:

class Program 
{ 
    enum FieldElement 
    { 
     Free, Mine, Piece, Boarder 
    } 
    static void Main(string[] args) 
    { 
     public FieldElement[,] Field {get; set;} 
     public static Program ParseBoard(string board) 
     { 
      using (StreamReader sr = new StreamReader(@"C...test.txt")) 
      { 
       // Finds number of lines in the example 
       var lineCount = File.ReadAllLines(@"C...test.txt").Length; 
       Console.WriteLine(lineCount); 
       string lines = sr.ReadLine(); 
       var field = new FieldElement[lineCount-1, lineCount-1]; 
       for (int y = 0; y < lineCount-1; y++) 
       { 
        for (int x = 0; x < lineCount; x++) 
        { 
         switch (lines[y][x]) 
         { 
          case 'X': 
           field[x, y] = FieldElement.Mine; 
           break; 
          case '|': 
          case '-': 
          case '\'': 
           field[x, y] = FieldElement.Boarder; 
           break; 
          case ' ': 
           field[x, y] = FieldElement.Free; 
           break; 
          case '@': 
           field[x, y] = FieldElement.Piece; 
           break; 
          default: 
           Console.WriteLine("Unrecognized character {lines[y][x]} in line {y} at position {x}"); 
           break; 
         } 
        } 
       } 
       return new Board() { Field = field }; 
      } 
     } 
    } 
} 

}

をそう総括する:私は2次元配列に、テキストファイルから取得いくつかの助けをしたいと思います。

+0

このファイルには、表示されているとおりの内容が含まれていますか?かなり簡単です。あなたが持っている線の数を調べ、線の長さなどを分析します。実際に何を読み込むかを決めます(つまり、どのような "グリッド"が必要ですか?DataTable?2D配列ですか?)。それからそれを試して、より具体的な質問に戻ってください。 –

+0

これはあまりにも幅広く、何の努力もしていません。 – tnw

+0

デバッガでこのコードを実行し、間違っていることを確認します。 –

答えて

0

文字配列への読み込みは、あなたが欲しいものですか?

var data = File.ReadLines("file path") 
    .Select(l => l.ToCharArray()) 
    .ToArray(); 
1

基本的なパーサはこのように行くだろう。その後、ライン、文字によって文字による文字列の行を解析し、(例えば、列挙型またはクラスとして)自分のフィールド要素を定義します。

enum FieldElement 
{ 
    Free, X, At, Boarder 
}  

class Board 
{ 
    public FieldElement[,] Field {get; set;} 
    public static Board ParseBoard(string board) 
    { 
     string[] lines = board.Split("\n"); 
     var field = new FieldElement[lines[0].Length, lines.Length]; 
     for(int y=0; y < lines.Length; y++) 
     { 
      for(int x=0; x < lines[y].Length; x++) 
      { 
       switch(lines[y][x]) //that's a char 
       { 
        case 'X': 
         field[x,y] = FieldElement.X; break; 
        case '|': 
        case '-': 
        case '.': 
        case '\'': 
         field[x,y] = FieldElememt.Boarder; break; 
        case ' ': 
         field[x,y] = FieldElement.Free; break; 
        case '@': 
         field[x,y] = FieldElement.At; break; 
        default: 
         Console.WriteLine($"Unrecognized character {lines[y][x]} in line {y} at position {x}"); 
       } 
      } 
     } 
     return new Board() { Field = field; }; 
    } 
} 
関連する問題