public void KhoiTaoMangOCo() { for (int i = 0; i < _BanCo.SoDong; i++) { for (int j = 0; j < _BanCo.SoCot; j++) { _MangOCo[i, j] = new OCo(i, j, new Point(j * OCo._ChieuRong, i * OCo._ChieuCao), 0); } } }
public void KhoiDongComputer(Graphics g) { if (stack_CacNuocDaDi.Count == 0) { DanhCo(_BanCo.SoCot / 2 * OCo._ChieuRong + 1, _BanCo.SoDong / 2 * OCo._ChieuCao + 1, g); } else { OCo oco = TimKiemNuocDi(); DanhCo(oco.ViTri.X + 1, oco.ViTri.Y + 1, g); } }
public void Redo(Graphics g) { if (stack_CacNuocUndo.Count != 0) { OCo oco = stack_CacNuocUndo.Pop(); stack_CacNuocDaDi.Push(new OCo(oco.Dong, oco.Cot, oco.ViTri, oco.SoHuu)); _MangOCo[oco.Dong, oco.Cot].SoHuu = oco.SoHuu; _BanCo.VeQuanCo(g, oco.ViTri, oco.SoHuu == 1 ? imgX : imgO); if (__LuotDi == 1) { __LuotDi = 2; } else { __LuotDi = 1; } } }
public void Undo(Graphics g) { if (stack_CacNuocDaDi.Count != 0) { OCo oco = stack_CacNuocDaDi.Pop(); stack_CacNuocUndo.Push(new OCo(oco.Dong, oco.Cot, oco.ViTri, oco.SoHuu)); _MangOCo[oco.Dong, oco.Cot].SoHuu = 0; _BanCo.XoaQuanCo(g, oco.ViTri, sbWhite); if (__LuotDi == 1) { __LuotDi = 2; } else { __LuotDi = 1; } } }
public bool DanhCo(int MouseX, int MouseY, Graphics g) { if (MouseX % OCo._ChieuRong == 0 || MouseY % OCo._ChieuCao == 0) { return(false); } int Cot = MouseX / OCo._ChieuRong; int Dong = MouseY / OCo._ChieuCao; if (_MangOCo[Dong, Cot].SoHuu != 0) { return(false); } switch (__LuotDi) { case 1: _MangOCo[Dong, Cot].SoHuu = 1; _BanCo.VeQuanCo(g, _MangOCo[Dong, Cot].ViTri, imgX); __LuotDi = 2; break; case 2: _MangOCo[Dong, Cot].SoHuu = 2; _BanCo.VeQuanCo(g, _MangOCo[Dong, Cot].ViTri, imgO); __LuotDi = 1; break; default: MessageBox.Show("Có Lỗi"); break; } stack_CacNuocUndo = new Stack <OCo>(); OCo oco = new OCo(_MangOCo[Dong, Cot].Dong, _MangOCo[Dong, Cot].Cot, _MangOCo[Dong, Cot].ViTri, _MangOCo[Dong, Cot].SoHuu); stack_CacNuocDaDi.Push(oco); return(true); }
private OCo TimKiemNuocDi() { OCo oCoResult = new OCo(); long DiemMax = 0; for (int i = 0; i < _BanCo.SoDong; i++) { for (int j = 0; j < _BanCo.SoCot; j++) { if (_MangOCo[i, j].SoHuu == 0) { long DiemTanCong = DiemTC_DuyetDoc(i, j) + DiemTC_DuyetNgang(i, j) + DiemTC_DuyetCheoNguoc(i, j) + DiemTC_DuyetCheoXuoi(i, j); long DiemPhongNgu = DiemPN_DuyetDoc(i, j) + DiemPN_DuyetNgang(i, j) + DiemPN_DuyetCheoNguoc(i, j) + DiemPN_DuyetCheoXuoi(i, j); long DiemTam = DiemTanCong > DiemPhongNgu ? DiemTanCong : DiemPhongNgu; if (DiemMax < DiemTam) { DiemMax = DiemTam; oCoResult = new OCo(_MangOCo[i, j].Dong, _MangOCo[i, j].Cot, _MangOCo[i, j].ViTri, _MangOCo[i, j].SoHuu); } } } } return(oCoResult); }