private void DuyetCheoLen(OCo.CellValues player, ref BangDiem eBoard) { int rw, cl, ePC, eHuman; // Duyệt chéo lên for (rw = 4; rw < BoardSize; rw++) { for (cl = 0; cl < BoardSize - 4; cl++) { ePC = 0; eHuman = 0; for (int i = 0; i < 5; i++) { if (BanCo.Cells[rw - i, cl + i] == OCo.CellValues.Player1) { eHuman++; } if (BanCo.Cells[rw - i, cl + i] == OCo.CellValues.Player2) { ePC++; } } if (eHuman * ePC == 0 && eHuman != ePC) { for (int i = 0; i < 5; i++) { if (BanCo.Cells[rw - i, cl + i] == OCo.CellValues.None) // Nếu ô chưa được đánh { if (eHuman == 0) { if (player == OCo.CellValues.Player1) { BangDiem.Diem[rw - i, cl + i] += MangDiemPhongNgu[ePC]; } else { BangDiem.Diem[rw - i, cl + i] += MangDiemTanCong[ePC]; } } if (ePC == 0) { if (player == OCo.CellValues.Player2) { BangDiem.Diem[rw - i, cl + i] += MangDiemPhongNgu[eHuman]; } else { BangDiem.Diem[rw - i, cl + i] += MangDiemTanCong[eHuman]; } } if (eHuman == 4 || ePC == 4) { BangDiem.Diem[rw - i, cl + i] *= 2; } } } } } } }
private void EvalChessBoard(OCo.CellValues player, ref BangDiem eBoard) { eBoard.ResetDiem(); DuyetDong(player, ref eBoard); DuyetCot(player, ref eBoard); DuyetCheoXuong(player, ref eBoard); DuyetCheoLen(player, ref eBoard); }
/// <summary> /// Reset các thuộc tín trong class BanCo /// </summary> public void Reset() { Cells = new OCo.CellValues[BoardSize, BoardSize]; ChangePlayer(); Won = Won = OCo.CellValues.None; AI.Reset(); }
/// <summary> /// Xử lý sự kiện OnStart trên class SocketModel /// </summary> void CurrentSocket_OnStart(OCo.CellValues FirstPlayer) { ActivePlayer = FirstPlayer; }
private void EvalChessBoard(OCo.CellValues player, ref BangDiem eBoard) { int rw, cl, ePC, eHuman; eBoard.ResetDiem(); // Duyệt theo dòng for (rw = 0; rw < BoardSize; rw++) { for (cl = 0; cl < BoardSize - 4; cl++) { ePC = 0; eHuman = 0; // Duyệt 5 ô liên tiếp nhau for (int i = 0; i < 5; i++) { if (BanCo.Cells[rw, cl + i] == OCo.CellValues.Player1) { eHuman++; } if (BanCo.Cells[rw, cl + i] == OCo.CellValues.Player2) { ePC++; } } if (eHuman * ePC == 0 && eHuman != ePC) { for (int i = 0; i < 5; i++) { if (BanCo.Cells[rw, cl + i] == OCo.CellValues.None) // Nếu ô chưa được đánh { if (eHuman == 0) { if (player == OCo.CellValues.Player1) { BangDiem.Diem[rw, cl + i] += MangDiemPhongNgu[ePC]; } else { BangDiem.Diem[rw, cl + i] += MangDiemTanCong[ePC]; } } if (ePC == 0) { if (player == OCo.CellValues.Player2) { BangDiem.Diem[rw, cl + i] += MangDiemPhongNgu[eHuman]; } else { BangDiem.Diem[rw, cl + i] += MangDiemTanCong[eHuman]; } } if (eHuman == 4 || ePC == 4) { BangDiem.Diem[rw, cl + i] *= 2; } } } } } } // Duyệt theo cột for (cl = 0; cl < BoardSize; cl++) { for (rw = 0; rw < BoardSize - 4; rw++) { ePC = 0; eHuman = 0; for (int i = 0; i < 5; i++) { if (BanCo.Cells[rw + i, cl] == OCo.CellValues.Player1) { eHuman++; } if (BanCo.Cells[rw + i, cl] == OCo.CellValues.Player2) { ePC++; } } if (eHuman * ePC == 0 && eHuman != ePC) { for (int i = 0; i < 5; i++) { if (BanCo.Cells[rw + i, cl] == OCo.CellValues.None) // Nếu ô chưa được đánh { if (eHuman == 0) { if (player == OCo.CellValues.Player1) { BangDiem.Diem[rw + i, cl] += MangDiemPhongNgu[ePC]; } else { BangDiem.Diem[rw + i, cl] += MangDiemTanCong[ePC]; } } if (ePC == 0) { if (player == OCo.CellValues.Player2) { BangDiem.Diem[rw + i, cl] += MangDiemPhongNgu[eHuman]; } else { BangDiem.Diem[rw + i, cl] += MangDiemTanCong[eHuman]; } } if (eHuman == 4 || ePC == 4) { BangDiem.Diem[rw + i, cl] *= 2; } } } } } } // Duyệt chéo xuống for (cl = 0; cl < BoardSize - 4; cl++) { for (rw = 0; rw < BoardSize - 4; rw++) { ePC = 0; eHuman = 0; for (int i = 0; i < 5; i++) { if (BanCo.Cells[rw + i, cl + i] == OCo.CellValues.Player1) { eHuman++; } if (BanCo.Cells[rw + i, cl + i] == OCo.CellValues.Player2) { ePC++; } } if (eHuman * ePC == 0 && eHuman != ePC) { for (int i = 0; i < 5; i++) { if (BanCo.Cells[rw + i, cl + i] == OCo.CellValues.None) // Nếu ô chưa được đánh { if (eHuman == 0) { if (player == OCo.CellValues.Player1) { BangDiem.Diem[rw + i, cl + i] += MangDiemPhongNgu[ePC]; } else { BangDiem.Diem[rw + i, cl + i] += MangDiemTanCong[ePC]; } } if (ePC == 0) { if (player == OCo.CellValues.Player2) { BangDiem.Diem[rw + i, cl + i] += MangDiemPhongNgu[eHuman]; } else { BangDiem.Diem[rw + i, cl + i] += MangDiemTanCong[eHuman]; } } if (eHuman == 4 || ePC == 4) { BangDiem.Diem[rw + i, cl + i] *= 2; } } } } } } // Duyệt chéo lên for (rw = 4; rw < BoardSize; rw++) { for (cl = 0; cl < BoardSize - 4; cl++) { ePC = 0; eHuman = 0; for (int i = 0; i < 5; i++) { if (BanCo.Cells[rw - i, cl + i] == OCo.CellValues.Player1) { eHuman++; } if (BanCo.Cells[rw - i, cl + i] == OCo.CellValues.Player2) { ePC++; } } if (eHuman * ePC == 0 && eHuman != ePC) { for (int i = 0; i < 5; i++) { if (BanCo.Cells[rw - i, cl + i] == OCo.CellValues.None) // Nếu ô chưa được đánh { if (eHuman == 0) { if (player == OCo.CellValues.Player1) { BangDiem.Diem[rw - i, cl + i] += MangDiemPhongNgu[ePC]; } else { BangDiem.Diem[rw - i, cl + i] += MangDiemTanCong[ePC]; } } if (ePC == 0) { if (player == OCo.CellValues.Player2) { BangDiem.Diem[rw - i, cl + i] += MangDiemPhongNgu[eHuman]; } else { BangDiem.Diem[rw - i, cl + i] += MangDiemTanCong[eHuman]; } } if (eHuman == 4 || ePC == 4) { BangDiem.Diem[rw - i, cl + i] *= 2; } } } } } } }