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("../../Images/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("../../Images/white.png"); g.DrawImage(bmp, r); } DrawStoneSequence(seq, Brushes.Black, r); 바둑판[x, y] = STONE.white; } CheckOmok(x, y); }
// 저장된 파일을 읽고 수순대로 복기 private void 복기ToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.InitialDirectory = dirName; ofd.Filter = "Omok files(*.omk)|*.omk"; ofd.ShowDialog(); string fileName = ofd.FileName; sequenceFlag = true; InitializeOmok(); // 현재 게임 중이라면 초기화 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; }
private void panel1_MouseDown(object sender, MouseEventArgs e) { if (reviveFlag == true) { ReviveGame(); return; } // e.X는 픽셀단위, x는 바둑판 좌표 int x = (e.X - margin + 눈Size / 2) / 눈Size; int y = (e.Y - margin + 눈Size / 2) / 눈Size; if (바둑판[x, y] != STONE.none) { return; } STONE stoneColor; if (flag == false) // 검은돌 차례 { stoneColor = STONE.black; flag = true; } else { stoneColor = STONE.white; flag = false; } Revive aStone = new Revive(x, y, stoneColor, stoneCnt++); lstRevive.Add(aStone); DrawAStone(aStone); // 바둑판[x,y] 에 돌을 그린다 //Rectangle r = new Rectangle( // margin + 눈Size * x - 돌Size / 2, // margin + 눈Size * y - 돌Size / 2, // 돌Size, 돌Size); //if (flag == false) //{ // if (imageFlag == false) // g.FillEllipse(bBrush, r); // else // { // Bitmap bmp = new Bitmap("../../Images/black.png"); // g.DrawImage(bmp, r); // } // lstRevive.Add(new Revive(x, y, STONE.black, stoneCnt)); // DrawStoneSequence(stoneCnt++, Brushes.White, r); // flag = true; // 바둑판[x, y] = STONE.black; //} //else //{ // if (imageFlag == false) // g.FillEllipse(wBrush, r); // else // { // Bitmap bmp = new Bitmap("../../Images/white.png"); // g.DrawImage(bmp, r); // } // lstRevive.Add(new Revive(x, y, STONE.white, stoneCnt)); // DrawStoneSequence(stoneCnt++, Brushes.Black, r); // flag = false; // 바둑판[x, y] = STONE.white; //} //CheckOmok(x, y); }