/// <summary> /// Tạo danh sách các nước có thể đi trên 1 ô (node) /// </summary> /// <returns>Danh sách Oco(i,j); Số ô có thể đi tại ô đó</returns> private CacNuocCoTheDi[] TaoCacNuocCoTheDi() { if (_SanSang == false) { return null; } CacNuocCoTheDi[] cacnuoc = new CacNuocCoTheDi[_BanCo.SoCot * _BanCo.SoDong];//+1 for (int i = 0; i < _BanCo.SoCot * _BanCo.SoDong; i++) { Oco oco = new Oco(); cacnuoc[i] =new CacNuocCoTheDi(oco, -1); } int duyeto = 0; for (int i = 0; i < _BanCo.SoDong; i++) { for (int j = 0; j < _BanCo.SoCot; j++) { int Dem = 0; int h = i - 1; int k = j - 1; int l = i+1; int m = j+1; if (h<0) h = 0; if (k<0) k = 0; if (l>=_BanCo.SoDong) l = _BanCo.SoDong - 1; if (m >= _BanCo.SoCot) m = _BanCo.SoCot - 1; for (int g = h; g <= l; g++) for (int f = k; f <= m; f++) if (_MangOco[g, f].SoHuu == 0) Dem++; if (_MangOco[i, j].SoHuu==0) Dem--; cacnuoc[duyeto] = new CacNuocCoTheDi(_MangOco[i, j], Dem); duyeto++; } } return cacnuoc; }
/// <summary> /// Khởi tạo mảng bàn cờ với với các giá trị trong mảng bàn cờ với các Node ô cờ có sở hữu =0 (không có ai đánh) /// </summary> 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); } } }
/// <summary> /// Hàm Redo (được dùng sau khi đã Undo) /// </summary> /// <param name="g"></param> public void Redo(Graphics g) { if (Stack_CacUndo.Count != 0) { Oco oco = Stack_CacUndo.Pop(); _MangOco[oco.Dong, oco.Cot].SoHuu = oco.SoHuu; _BanCo.VeQuanCo(g, oco.Vitri, oco.SoHuu == 1 ? sbRed : sbBlue); Stack_CacNuocDaDi.Push(new Oco(oco.Dong, oco.Cot, oco.Vitri, oco.SoHuu)); if (_LuotDi == 1) { _LuotDi = 2; } else { _LuotDi = 1; } } }
/// <summary> /// Hàm Undo hồi lại nước đã đi /// </summary> /// <param name="g"></param> public void Undo(Graphics g) { if (Stack_CacNuocDaDi.Count != 0) { Oco oco = Stack_CacNuocDaDi.Pop(); _MangOco[oco.Dong, oco.Cot].SoHuu = 0; _BanCo.XoaQuanCo(g, oco.Vitri, sbControl); Stack_CacUndo.Push(new Oco(oco.Dong, oco.Cot, oco.Vitri, oco.SoHuu)); if (_LuotDi == 1) { _LuotDi = 2; } else { _LuotDi = 1; } } //VeBanCo(g); //VeLaiQUanCo(g); }
private long Eval(Oco oco, Oco[,] _MangOco_New) { int DiemTanCong, DiemPhongNgu; long DiemMax = 0; //Đánh giá theo hàng for (int i = 0; i < _BanCo.SoDong; i++) { for (int j = 0; j < _BanCo.SoCot-4; j++) { DiemTanCong = DuyetNgang(i, j, 3) + DuyetDoc(i, j, 3) + DuyetCheoNguoc(i, j, 3) + DuyetCheoXuoi(i, j, 3); DiemPhongNgu = DuyetNgang(i, j, 1) + DuyetDoc(i, j, 1) + DuyetCheoNguoc(i, j, 1) + DuyetCheoXuoi(i, j, 1); long DiemTam = DiemTanCong > DiemPhongNgu ? DiemTanCong : DiemPhongNgu;\ if (DiemMax < DiemTam) { DiemMax = DiemTam; } } } return DiemMax; }
public CacNuocCoTheDi(Oco oco, int cacnuoctrong) { _oco = oco; _CacNuocTrong = cacnuoctrong; }