// 저장된 파일을 읽고 수순대로 복기 private void 복기ToolStripMenuItem_Click(object sender, EventArgs e) { // 파일 선택 OpenFileDialog ofd = new OpenFileDialog(); ofd.InitialDirectory = "../../Data/"; ofd.Filter = "Omok files(*.omk)|*.omk"; ofd.ShowDialog(); string fileName = ofd.FileName; try { StreamReader r = File.OpenText(fileName); string line = ""; // 파일 내용을 한 줄 씩 읽어서 lstRevive 리스트에 넣는다 while ((line = r.ReadLine()) != null) { string[] items = line.Split(' '); Revive rev = new Revive(int.Parse(items[0]), int.Parse(items[1]), items[2] == "black" ? STONE.black : STONE.white, int.Parse(items[3])); lstRevive.Add(rev); } r.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message); } // 복기 준비 reviveFlag = true; sequence = 0; NewGame(); }
// 복기 리스트에 있는 내용을 하나씩 그려준다 private void DrawAStone(Revive item) { int x = item.X; int y = item.Y; STONE s = item.stone; int seq = item.seq; // 바둑판[x,y] 에 돌을 그린다 Rectangle r = new Rectangle( margin + 눈Size * x - 돌Size / 2, margin + 눈Size * y - 돌Size / 2, 돌Size, 돌Size); // 검은돌 차례 if (s == STONE.black) { if (imageFlag == false) { g.FillEllipse(bBrush, r); } else { Bitmap bmp = new Bitmap("../../img/black.png"); g.DrawImage(bmp, r); } DrawStoneSequence(seq, Brushes.White, r); 바둑판[x, y] = STONE.black; } else { if (imageFlag == false) { g.FillEllipse(wBrush, r); } else { Bitmap bmp = new Bitmap("../../img/white.png"); g.DrawImage(bmp, r); } DrawStoneSequence(seq, Brushes.Black, r); 바둑판[x, y] = STONE.white; } CheckOmok(x, y); }