2012-10-05 2 views
0

저는 C# Game of Life로 코딩하여 학습 과정을 진행할 것입니다. 나는 pictureBox을 사용하고 위에 그리드를 표시하여 사용자가 각 셀을 쉽게 클릭 할 수있게했습니다. button1에서 나는 bool 변수 fill_in을 클릭 할 때 특정 셀에 채울 값을 할당 할 수 있습니다. 하지만 지금은 텍스트 파일에서 선택한 셀의 좌표 xy 좌표를 실험하고 있습니다. 이러한 텍스트 파일의 첫 줄에는 260 (공백) 50 값이 있습니다. 어떤 생각을 어떻게 할 수 있습니까?텍스트 파일 값에서 x 및 y 좌표 채우기 (Game of Life- Logic)

CODE

namespace life 
    { 
     public partial class Form1 : Form 
     { 

      Graphics paper; 
      bool[,] fill_in = new bool[450, 450]; 

     public Form1() 
      { 
       InitializeComponent(); 
       paper = pictureBox1.CreateGraphics(); 

      } 


    //makes grid in picture box 
    private void drawGrid() 
      { 
       int numOfCells = 100; 
       int cellSize = 10; 
       Pen p = new Pen(Color.Blue); 
       paper.Clear(Color.White); 

       for (int i = 0; i < numOfCells; i++) 
       { 
        // Vertical 
        paper.DrawLine(p, i * cellSize, 0, i * cellSize, numOfCells * cellSize); 
        // Horizontal 
        paper.DrawLine(p, 0, i * cellSize, numOfCells * cellSize, i * cellSize); 
       } 
      } 

    // populate bool fill_in with true (alive) or false (dead) 
      private void clearGrid() 
      { 
       for (int x = 0; x < 450; x = x + 10) 
       { 
        for (int y = 0; y < 450; y = y + 10) 
        { 
         fill_in[x, y] = false; 
        } 
       } 
      } 

    private void button1_Click(object sender, EventArgs e) 
      { 
       drawGrid(); 
       clearGrid(); 

     //randomly populate grid squares 
     fill_in[50, 50] = true; 
       fill_in[60, 50] = true; 
       fill_in[30, 40] = true; 
       fill_in[40, 40] = true; 

       for (int x = 0; x < 440; x = x + 10) 
       { 
        for (int y = 0; y < 440; y = y + 10) 
        { 
         if (fill_in[x, y] == true) 
          paper.FillRectangle(Brushes.Black, x, y, 10, 10); 
        } 
       } 
      } 

    private void button2_Click(object sender, EventArgs e) 
     { 
      OpenFileDialog openReport = new OpenFileDialog(); 
      openReport.Filter = "Text Files | *.txt"; 
      openReport.ShowDialog();   
      StreamReader infile = File.OpenText(openReport.FileName); 


     //Need Help/Guidance read text file coordinates and populate grid 

     } 

답변

1

난 당신이 텍스트 파일에서 값 쌍 "x 및 y"를 얻을 때 true로 [X, Y]를 FILL_IN 설정하려는 경우를 가정 해 보겠습니다. 그래서 여기에 코드 스 니프 - 그렇게 할 것입니다.

while (infile.Peek() >= 0) 
{ 
    string[] values = infile.ReadLine().Split(' '); 
    fill_in[int.Parse(values[0]), int.Parse(values[1])] = true; 
} 

기본 아이디어는 간단합니다. 파일에서 아무 것도 남지 않을 때까지 읽습니다. 그런 다음 두 개의 int가 공백으로 구분되는 기준에 따라 상기 선을 나눕니다. 이 방법은 텍스트 파일의 형식이 잘못된 데이터를 검사하지 않고 예외를 처리하지 않기 때문에 매우 빠르고 간단합니다. 그러나 텍스트 파일을 작성하는 데주의를 기울이면 작업이 완료됩니다.

파일에서 데이터를 읽고 파싱하는 것은 프로그래밍에서 매우 중요하므로 주제를 검색하고 개념을 익히는 것이 좋습니다.

+0

+1 이것은 정확히 내가 찾고있는 것입니다. while 루프를 'button2_click' 이벤트에 추가했지만 텍스트 필드를로드 할 때 결과가 나타나지 않습니다. 또한 검정색으로 채우기에 해당하는 값에 따라 표시해야합니다. – CodingWonders90

+0

아마도 그려진 사각형을 새로 고쳐야 할 것입니다. (int y = 0, y <440, y = y + 10)에 대해이 코드를 'button2_click'의 끝에 추가해보십시오. for (int x = 0; x <440; x = x + 10) { for { if (fill_in [x, y] == true) paper.FillRectangle (Brushes.Black, x, y, 10, 10); } }'또는 더 나은 아직 그것을 밖으로 별도의 함수로 끌어 그냥 단추 클릭 이벤트 처리기에서 호출하십시오. – HerrFlockig

+0

이것은 완벽하게 작동했습니다! 감사. – CodingWonders90

관련 문제