2017-08-09 5 views
1

問題が発生しています。シンプルですが、回避方法がわかりません。テキストファイルの値をC#の2次元マトリックスに正しく割り当てる方法

私は、ファイルを読み込むと、アレイに割り当てています:

string[] lines = File.ReadAllLines(@"C:\Users\\Documents\Visual Studio 2017\Projects\TheMaze\TheMaze\Data\" + FileName + ".txt"); 

map = new MapFile(); 

      int width = lines[0].Replace(" ", "").Length; 
      int height = lines.Length; 

      map.Matrix = new byte[width, height]; 



      for (int y = 0; y < height; y++) 
      { 
       string line = lines[y].Replace(" ", ""); 

       for (int x = 0; x < line.Length;x++) 

       { 

        // 

       } 

       Console.ReadKey(); 
      } 


     } 

     return map; 
    } 

私はちょうど私の行列オブジェクトに正しくファイルから値を割り当てる方法を取得いけません。

どの変数に値を割り当てる必要がありますか?

私はmap.Matrix[x,y] = line[x] を試しましたが、xをバイトに変換する必要があるためエラーが発生します。私のクラスに

私は、この変数を持っているマップファイル:public byte[,] Matrix = null;

I [x]は、すべての値は、後に35

として印刷されているバイトをラインを変換する場合、私は一種の完全に失われていますし、任意に感謝助けて。私は手動で書いた単なるテキストファイルです

The File structure I have:

+0

あなたは '' Xを変換するために持っていけません'' byte''ではなく '' line [x] ''の戻り値です。次の '' map.Matrix [x、y] = Convert.ToByte(line [x]); ''各行にファイルの番号があるならば、 '' map.Matrix [x、y ] = Convert.ToByte(int.Parse(line [x])); '' –

+0

答えをありがとう。 私のファイルは実際には '#'、 '。'、 'S'、 'F'で作られています ここで#は壁です。は有効なパス、「S」は始点、「F」は終点です。 – Fix3r

+0

ファイルのサンプルを投稿することはできますか?数行で十分です。 –

答えて

1

ショートバージョンちょうど楽しみのために:]

string text = File.ReadAllText(@"..\..\Data\" + FileName + ".txt"); 

foreach (char c in text.Replace(" ", "")) 
{ 
    Console.BackgroundColor = Console.ForegroundColor = (ConsoleColor)(c & 15); 
    Console.Write(c); 
} 
0

変数の高さと幅をMapFileクラスに追加して、配列のサイズを簡単に追跡できるようにしました。

for (int y = 0; y < map.height; y++) 
      { 
       string line = lines[y].Replace(" ", ""); 


       for (int x = 0; x < map.width;x++) 

       { 
        map.Matrix[x,y] = Convert.ToByte(line[x]); 

        if (line[x] == '#') 
        { 
         map.Matrix[x, y] = 1; 
        } 

        if (line[x] == '.') 
        { 
         map.Matrix[x, y] = 2; 
        } 

        if (line[x] == 'S') 
        { 
         map.Matrix[x, y] = 3; 
        } 

        if (line[x] == 'F') 
        { 
         map.Matrix[x, y] = 5; 
        } 
       } 
      } 

そして、私のMapDisplayクラスに私が今持っている:

for(int y = 0; y < map.height; y++) 
     { 


      Console.WriteLine(); 

      for (int x = 0; x<map.width; x++) 
      { 

       Console.Write(map.Matrix[x, y]); 
      } 
     } 

私の行列から右の出力で:

With the Right output from my matrix:

コードはここからのみ変更された

今、迷路の外観を少し良くするために、私はBack地面と出力のForegound色この方法:さまざまな色と

for(int y = 0; y < map.height; y++) 
     { 


      Console.WriteLine(); 

      for (int x = 0; x<map.width; x++) 
      { 
       if (map.Matrix[x, y] == 3) 
       { 

        Console.BackgroundColor = ConsoleColor.Green; 
        Console.ForegroundColor = ConsoleColor.Green; 
        Console.Write("3"); 
        Console.ResetColor(); 


       } 
       else if (map.Matrix[x, y] == 2) 
       { 
        Console.BackgroundColor = ConsoleColor.Blue; 
        Console.ForegroundColor = ConsoleColor.Blue; 
        Console.Write("2"); 
        Console.ResetColor(); 
       } 
       else if (map.Matrix[x, y] == 5) 
       { 
        Console.BackgroundColor = ConsoleColor.Green; 
        Console.ForegroundColor = ConsoleColor.Green; 
        Console.Write("5"); 
        Console.ResetColor(); 
       } 
       else if (map.Matrix[x, y] == 1) 
       { 
        Console.BackgroundColor = ConsoleColor.DarkRed; 
        Console.ForegroundColor = ConsoleColor.DarkRed; 
        Console.Write("1"); 
       } 

      } 
     } 

が出力: Colored Maze Output

関連する問題