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_DuyetCheoXuoi(i, j) + DiemTC_DuyetCheoNguoc(i, j); long diemPhongNgu = DiemPN_DuyetDoc(i, j) + DiemPN_DuyetNgang(i, j) + DiemPN_DuyetCheoXuoi(i, j) + DiemPN_DuyetCheoNguoc(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); }
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 (stt_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 (stt_cacNuocUndo.Count != 0) { OCo oco = stt_cacNuocUndo.Pop(); stt_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 ? sbBlack : sbWhite); if (_luotDi == 1) { _luotDi = 2; } else { _luotDi = 1; } } }
public void Undo(Graphics g) { if (stt_cacNuocDaDi.Count != 0) { OCo oco = stt_cacNuocDaDi.Pop(); stt_cacNuocUndo.Push(new OCo(oco.Dong, oco.Cot, oco.Vitri, oco.Sohuu)); mangOCo[oco.Dong, oco.Cot].Sohuu = 0; _banCo.XoaQuanCo(g, oco.Vitri, sbMediumSlateBlue); if (_luotDi == 1) { _luotDi = 2; } else { _luotDi = 1; } } //VeBanCo(g); //VeLaiQuanCo(g); }
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; //không cho đánh lại ô đã đánh if (mangOCo[dong, cot].Sohuu != 0) { return(false); } //xét lượt đi switch (_luotDi) { case 1: mangOCo[dong, cot].Sohuu = 1; _banCo.VeQuanCo(g, mangOCo[dong, cot].Vitri, sbBlack); _luotDi = 2; break; case 2: mangOCo[dong, cot].Sohuu = 2; _banCo.VeQuanCo(g, mangOCo[dong, cot].Vitri, sbWhite); _luotDi = 1; break; default: MessageBox.Show("Lỗi chương trình"); break; } stt_cacNuocUndo = new Stack <OCo>(); // tạo mới vùng nhớ undo khi đánh vào ô đã undo //tạo mới vùng nhớ để khi tham chiếu k bị mấy giá trị OCo oco = new OCo(mangOCo[dong, cot].Dong, mangOCo[dong, cot].Cot, mangOCo[dong, cot].Vitri, mangOCo[dong, cot].Sohuu); stt_cacNuocDaDi.Push(oco); return(true); }