Esempio n. 1
0
        Color seuraavanTaytettavanRuudunVari = Colors.Black; //tämänhetkinen pelaava väri

        #endregion Fields

        #region Constructors

        public Board()
        {
            InitializeComponent();
            mcts = new Mcts(onkoPelaajanPelimerkkiValkoinen: true);
            AlustaKayttoLiittymanPelilautagrid();
            AlustaKayttoliittymanPelilaudanPelitilanne();
        }
Esempio n. 2
0
        //Contructors
            public ChessBoard(MainWindow frm, Grid grd)
            {
                Option = new Setting();
                OWin = new cls5OWin();
                row = column = 12;
                currPlayer = Player.None;
                end = Player.None;
                frmParent = frm;
                grdBanCo = grd;
                board = new Player[row, column];
                ResetBoard();
                eBoard = new LuongGiaBanCo(this);

                grdBanCo.MouseDown += new System.Windows.Input.MouseButtonEventHandler(grdBanCo_MouseDown);
                worker.DoWork += doi;
                worker.RunWorkerCompleted += AI_play;
            }
Esempio n. 3
0
 //Hàm lấy đối thủ của người chơi hiện tại
  private Player DoiNgich(Player cur)
  {
      if (cur == Player.Com) return Player.Human;
      if (cur == Player.Human) return Player.Com;
      return Player.None;
  }
Esempio n. 4
0
        //Hàm lượng giá thế cờ
         private void LuongGia(Player player)
         {
             int cntHuman = 0, cntCom = 0;//Biến đếm Human,Com
             #region Luong gia cho hang
             for (int i = 0; i < row; i++)
             {
                 for (int j = 0; j < column - 4; j++)
                 {
                     //Khởi tạo biến đếm
                     cntHuman = cntCom = 0;
                     //Đếm số lượng con cờ trên 5 ô kế tiếp của 1 hàng
                     for (int k = 0; k < 5; k++)
                     {
                         if (board[i, j + k] == Player.Human) cntHuman++;
                         if (board[i, j + k] == Player.Com) cntCom++;
                     }
                     //Lượng giá
                     //Nếu 5 ô kế tiếp chỉ có 1 loại cờ (hoặc là Human,hoặc la Com)
                     if (cntHuman * cntCom == 0 && cntHuman != cntCom)
                     {
                         //Gán giá trị cho 5 ô kế tiếp của 1 hàng
                         for (int k = 0; k < 5; k++)
                         {
                             //Nếu ô đó chưa có quân đi
                             if (board[i, j + k] == Player.None)
                             {
                                 //Nếu trong 5 ô đó chỉ tồn tại cờ của Human
                                 if (cntCom == 0)
                                 {
                                     //Nếu đối tượng lượng giá là Com
                                     if (player == Player.Com)
                                     {
                                         //Vì đối tượng người chơi là Com mà trong 5 ô này chỉ có Human
                                         //nên ta sẽ cộng thêm điểm phòng thủ cho Com
                                         eBoard.GiaTri[i, j + k] += PhongThu[cntHuman];
                                     }
                                     //Ngược lại cộng điểm phòng thủ cho Human
                                     else
                                     {
                                         eBoard.GiaTri[i, j + k] += TanCong[cntHuman];
                                     }
                                     //Nếu chơi theo luật Việt Nam
                                     //if(this.Option.GamePlay == LuatChoi.Vietnamese)
                                     //    //Xét trường hợp chặn 2 đầu
                                     //   //Nếu chận 2 đầu thì gán giá trị cho các ô đó bằng 0
                                     //    if (j - 1 >= 0 && j + 5 <= column - 1 && board[i, j - 1] == Player.Com && board[i, j + 5] == Player.Com)
                                     //    {
                                     //        eBoard.GiaTri[i, j + k] = 0;
                                     //    }

                                 }
                                 //Tương tự như trên
                                 if (cntHuman == 0) //Nếu chỉ tồn tại Com
                                 {
                                     if (player == Player.Human) //Nếu người chơi là Người
                                     {
                                         eBoard.GiaTri[i, j + k] += PhongThu[cntCom];
                                     }
                                     else
                                     {
                                         eBoard.GiaTri[i, j + k] += TanCong[cntCom];
                                     }
                                     //Trường hợp chặn 2 đầu
                                     //if (this.Option.GamePlay == LuatChoi.Vietnamese)
                                     //    if (j - 1 >= 0 && j + 5 <= column - 1 && board[i, j - 1] == Player.Human && board[i, j + 5] == Player.Human)
                                     //    {
                                     //        eBoard.GiaTri[i, j + k] = 0;
                                     //    }

                                 }
                                 if ((j + k - 1 > 0) && (j + k + 1 <= column - 1) && (cntHuman == 4 || cntCom == 4)
                                    && (board[i, j + k - 1] == Player.None || board[i, j + k + 1] == Player.None))
                                 {
                                     eBoard.GiaTri[i, j + k] *= 3;
                                 }
                             }
                         }
                     }
                 }
             }
             #endregion
             //Tương tự như lượng giá cho hàng
             #region Luong gia cho cot
             for (int i = 0; i < row - 4; i++)
             {
                 for (int j = 0; j < column; j++)
                 {
                     cntHuman = cntCom = 0;
                     for (int k = 0; k < 5; k++)
                     {
                         if (board[i + k, j] == Player.Human) cntHuman++;
                         if (board[i + k, j] == Player.Com) cntCom++;
                     }
                     if (cntHuman * cntCom == 0 && cntCom != cntHuman)
                     {
                         for (int k = 0; k < 5; k++)
                         {
                             if (board[i + k, j] == Player.None)
                             {
                                 if (cntCom == 0)
                                 {
                                     if (player == Player.Com) eBoard.GiaTri[i + k, j] += PhongThu[cntHuman];
                                     else eBoard.GiaTri[i + k, j] += TanCong[cntHuman];
                                     // Truong hop bi chan 2 dau.
                                     if ((i - 1) >= 0 && (i + 5) <= row - 1 && board[i - 1, j] == Player.Com && board[i + 5, j] == Player.Com)
                                     {
                                         eBoard.GiaTri[i + k, j] = 0;
                                     }
                                 }
                                 if (cntHuman == 0)
                                 {
                                     if (player == Player.Human) eBoard.GiaTri[i + k, j] += PhongThu[cntCom];
                                     else eBoard.GiaTri[i + k, j] += TanCong[cntCom];
                                     // Truong hop bi chan 2 dau.
                                     //if (this.Option.GamePlay == LuatChoi.Vietnamese)
                                     //    if (i - 1 >= 0 && i + 5 <= row - 1 && board[i - 1, j] == Player.Human && board[i + 5, j] == Player.Human)
                                     //        eBoard.GiaTri[i + k, j] = 0;
                                 }
                                 if ((i + k - 1) >= 0 && (i + k + 1) <= row - 1 && (cntHuman == 4 || cntCom == 4)
                                     && (board[i + k - 1, j] == Player.None || board[i + k + 1, j] == Player.None))
                                 {
                                     eBoard.GiaTri[i + k, j] *= 3;
                                 }
                             }
                         }
                     }
                 }
             }
             #endregion
             //Tương tự như lượng giá cho hàng
             #region  Luong gia tren duong cheo chinh (\)
             for (int i = 0; i < row - 4; i++)
             {
                 for (int j = 0; j < column - 4; j++)
                 {
                     cntHuman = cntCom = 0;
                     for (int k = 0; k < 5; k++)
                     {
                         if (board[i + k, j + k] == Player.Human) cntHuman++;
                         if (board[i + k, j + k] == Player.Com) cntCom++;
                     }
                     if (cntHuman * cntCom == 0 && cntCom != cntHuman)
                     {
                         for (int k = 0; k < 5; k++)
                         {
                             if (board[i + k, j + k] == Player.None)
                             {
                                 if (cntCom == 0)
                                 {
                                     if (player == Player.Com) eBoard.GiaTri[i + k, j + k] += PhongThu[cntHuman];
                                     else eBoard.GiaTri[i + k, j + k] += TanCong[cntHuman];
                                     // Truong hop bi chan 2 dau.
                                     //if(this.Option.GamePlay == LuatChoi.Vietnamese)
                                     //    if (i - 1 >= 0 && j - 1 >= 0
                                     //        && i + 5 <= row - 1 && j + 5 <= column - 1
                                     //        && board[i - 1, j - 1] == Player.Com && board[i + 5, j + 5] == Player.Com)
                                     //        eBoard.GiaTri[i + k, j + k] = 0;
                                 }
                                 if (cntHuman == 0)
                                 {
                                     if (player == Player.Human) eBoard.GiaTri[i + k, j + k] += PhongThu[cntCom];
                                     else eBoard.GiaTri[i + k, j + k] += TanCong[cntCom];
                                     // Truong hop bi chan 2 dau.
                                     //if (this.Option.GamePlay == LuatChoi.Vietnamese)
                                     //    if ((i - 1) >= 0 && j - 1 >= 0
                                     //        && i + 5 <= row - 1 && j + 5 <= column - 1
                                     //        && board[i - 1, j - 1] == Player.Human && board[i + 5, j + 5] == Player.Human)
                                     //    {
                                     //        eBoard.GiaTri[i + k, j + k] = 0;
                                     //    }
                                 }
                                 if ((i + k - 1) >= 0 && (j + k - 1) >= 0 && (i + k + 1) <= row - 1 && (j + k + 1) <= column - 1 && (cntHuman == 4 || cntCom == 4)
                                     && (board[i + k - 1, j + k - 1] == Player.None || board[i + k + 1, j + k + 1] == Player.None))
                                 {
                                     eBoard.GiaTri[i + k, j + k] *= 3;
                                 }
                             }
                         }
                     }
                 }
             }
             #endregion
             //Tương tự như lượng giá cho hàng
             #region Luong gia tren duong cheo phu (/)
             for (int i = 4; i < row - 4; i++)
             {
                 for (int j = 0; j < column - 4; j++)
                 {
                     cntCom = 0; cntHuman = 0;
                     for (int k = 0; k < 5; k++)
                     {
                         if (board[i - k, j + k] == Player.Human) cntHuman++;
                         if (board[i - k, j + k] == Player.Com) cntCom++;
                     }
                     if (cntHuman * cntCom == 0 && cntHuman != cntCom)
                     {
                         for (int k = 0; k < 5; k++)
                         {
                             if (board[i - k, j + k] == Player.None)
                             {
                                 if (cntCom == 0)
                                 {
                                     if (player == Player.Com) eBoard.GiaTri[i - k, j + k] += PhongThu[cntHuman];
                                     else eBoard.GiaTri[i - k, j + k] += TanCong[cntHuman];
                                     // Truong hop bi chan 2 dau.
                                     if (i + 1 <= row - 1&&j - 1>=0&&i-5>=0&&j+5<=column-1&& board[i + 1, j - 1] == Player.Com && board[i - 5, j + 5] == Player.Com)
                                     {
                                         eBoard.GiaTri[i - k, j + k] = 0;
                                     }
                                 }
                                 if (cntHuman == 0)
                                 {
                                     if (player == Player.Human) eBoard.GiaTri[i - k, j + k] += PhongThu[cntCom];
                                     else eBoard.GiaTri[i - k, j + k] += TanCong[cntCom];
                                     // Truong hop bi chan 2 dau.
                                     //if(this.Option.GamePlay== LuatChoi.Vietnamese)
                                     //    if (i + 1 <= row - 1 && j - 1 >= 0 && i - 5 >= 0 && j + 5 <= column - 1 && board[i + 1, j - 1] == Player.Human && board[i - 5, j + 5] == Player.Human)
                                     //    {
                                     //        eBoard.GiaTri[i - k, j + k] = 0;
                                     //    }
                                 }
                                 if ((i - k + 1) <= row - 1 && (j + k - 1) >= 0
                                     && (i - k - 1) >= 0 && (j + k + 1) <= column - 1
                                     && (cntHuman == 4 || cntCom == 4)
                                     && (board[i - k + 1, j + k - 1] == Player.None || board[i - k - 1, j + k + 1] == Player.None))
                                 {
                                     eBoard.GiaTri[i - k, j + k] *= 3;
                                 }
                             }
                         }
                     }
                 }
             }
             #endregion
         }
Esempio n. 5
0
 //Vẽ lại thế cờ khi đọc dữ liệu từ file
  public void VeTheCo()
  {
      Player temp = currPlayer;
      for (int i = 0; i < Row; i++)
      {
          for (int j = 0; j < Column; j++)
          {
              currPlayer = board[i, j];
              DrawDataBoard(i, j,false,false);
          }
      }
      currPlayer = temp;
  }
Esempio n. 6
0
        //Hàm đánh cờ
         public void grdBanCo_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
         {
             System.GC.Collect();//Thu gôm rác
             if (Option.WhoPlayWith == Player.Com)//Nếu chọn kiểu chơi đánh với máy
             {
                 Point toado = e.GetPosition(grdBanCo); //Lấy tọa độ chuột
                 //Xử lý tọa độ
                 int cl = ((int)toado.X / length);
                 int rw = ((int)toado.Y / length);


                 if (board[rw, cl] == Player.None) //Nếu ô bấm chưa có cờ
                 {
                     if (currPlayer == Player.Human && end == Player.None)//Nếu lượt đi là người và trận đấu chưa kết thúc
                     {
                         board[rw, cl] = currPlayer;//Lưu loại cờ vừa đánh vào mảng
                         DrawDataBoard(rw, cl, true, true);//Vẽ con cờ theo lượt chơi
                         end = CheckEnd(rw, cl);//Kiểm tra xem trận đấu kết thúc chưa
                         if (end == Player.Human)//Nếu người thắng cuộc là người
                         {
                             OnWin();//Khai báo sự kiện Win
                             //OnWinOrLose();//Hiển thị 5 ô Win.
                         }
                         else if (end == Player.None) //Nếu trận đấu chưa kết thúc
                         {
                             currPlayer = Player.Com;//Thiết lập lại lượt chơi
                             OnHumanDanhXong(); // Khai báo sự kiện người đánh xong
                         }
                     }
                     try
                     {
                         worker.RunWorkerAsync();
                     }
                     catch
                     {

                     }

                 }
             }
             else if (this.Option.WhoPlayWith == Player.Human) //Nếu chọn kiểu chơi 2 người đánh với nhau
             {
                 //Player.Com sẽ đóng vai trò người chơi thứ 2
                 Point toado = e.GetPosition(grdBanCo);//Lấy thông tin tọa độ chuột
                 //Xử lý tọa độ
                 int cl = ((int)toado.X / length);
                 int rw = ((int)toado.Y / length);
                 if (board[rw, cl] == Player.None)//Nếu ô bấm chưa có cờ
                 {
                     if (currPlayer == Player.Human && end == Player.None)//Nếu lượt đi là người và trận đấu chưa kết thúc
                     {
                         board[rw, cl] = currPlayer;//Lưu loại cờ vừa đánh vào mảng
                         DrawDataBoard(rw, cl, true, true);//Vẽ con cờ theo lượt chơi
                         end = CheckEnd(rw, cl);//Kiểm tra xem trận đấu kết thúc chưa
                         if (end == Player.Human)//Nếu người chơi 1 thắng
                         {
                             currPlayer = Player.Human; //Thiết lập lại lượt chơi
                             OnWin();//Khai báo sư kiện Win
                             //OnWinOrLose();//Hiển thị 5 ô Win.
                         }
                         else
                         {
                             currPlayer = Player.Com;//Thiết lập lại lượt chơi
                             OnHumanDanhXong();// Khai báo sự kiện người chơi 1 đánh xong
                         }
                     }
                     else if (currPlayer == Player.Com && end == Player.None)
                     {
                         board[rw, cl] = currPlayer;//Lưu loại cờ vừa đánh vào mảng
                         DrawDataBoard(rw, cl, true, true);//Vẽ con cờ theo lượt chơi
                         end = CheckEnd(rw, cl);//Kiểm tra xem trận đấu kết thúc chưa
                         if (end == Player.Com)//Nếu người chơi 2 thắng
                         {
                             OnWin();//Khai báo sư kiện Win
                             //OnWinOrLose();//Hiển thị 5 ô Win.
                         }
                         else
                         {
                             currPlayer = Player.Human;//Thiết lập lại lượt chơi
                             OnComDanhXong();// Khai báo sự kiện người chơi 2 đánh xong
                         }
                     }
                 }
             }
             else if (this.Option.WhoPlayWith == Player.Onl) // chọn người chơi online
             {
                 
                 Point toado = e.GetPosition(grdBanCo); //Lấy tọa độ chuột
                 //Xử lý tọa độ
                 int cl = ((int)toado.X / length);
                 int rw = ((int)toado.Y / length);
                 
                 if (board[rw, cl] == Player.None) //Nếu ô bấm chưa có cờ
                 {
                     if (currPlayer == Player.Human && end == Player.None)// /Nếu lượt đi là mình và trận đấu chưa kết thúc
                     {
                         //connect.cl = cl;
                         //connect.rw = rw;
                         connect.guitoado(MainWindow.socket, rw, cl);

                         board[rw, cl] = currPlayer;//Lưu loại cờ vừa đánh vào mảng
                         DrawDataBoard(rw, cl, true, true);//Vẽ con cờ theo lượt chơi
                         end = CheckEnd(rw, cl);//Kiểm tra xem trận đấu kết thúc chưa
                         if (end == Player.Human)//Nếu người thắng cuộc là mình
                         {
                             OnWin();//Khai báo sự kiện Win
                         }
                         else if (end == Player.None) //Nếu trận đấu chưa kết thúc
                         {
                             currPlayer = Player.Onl;//Thiết lập lại lượt chơi
                             OnHumanDanhXong(); // Khai báo sự kiện người đánh xong
                         }


                     }
                     else if (currPlayer == Player.Onl && end == Player.None)//Nếu lượt đi là người chơi online và trận đấu chưa kết thúc
                     {
                         connect.guitoado(MainWindow.socket, rw, cl);
                         board[rows, columns] = currPlayer;//Lưu loại cờ vừa đánh vào mảng

                         DrawDataBoard(rows, columns, true, true);//Vẽ con cờ theo lượt chơi
                         end = CheckEnd(rows, columns);//Kiểm tra xem trận đấu kết thúc chưa

                         if (end == Player.Onl)//Nếu người chơi 2 thắng
                         {
                             OnWin();//Khai báo sư kiện Win
                         }
                         else
                         {
                             currPlayer = Player.Human;//Thiết lập lại lượt chơi
                             OnComDanhXong();// Khai báo sự kiện người chơi 2 đánh xong
                         }

                     }
                 }
             }
         }
Esempio n. 7
0
          private void AI_play(object sender, RunWorkerCompletedEventArgs e) //Máy đánh
         {
             if (currPlayer == Player.Com && end == Player.None)//Nếu lượt đi là máy và trận đấu chưa kết thúc
             {
                 //Tìm đường đi cho máy
                 eBoard.ResetBoard();
                 LuongGia(Player.Com);//Lượng giá bàn cờ cho máy
                 node = eBoard.GetMaxNode();//lưu vị trí máy sẽ đánh
                 int r, c;
                 r = node.Row; c = node.Column;
                 board[r, c] = currPlayer; //Lưu loại cờ vừa đánh vào mảng
                 DrawDataBoard(r, c, true, true); //Vẽ con cờ theo lượt chơi
                 end = CheckEnd(r, c);//Kiểm tra xem trận đấu kết thúc chưa

                 if (end == Player.Com)//Nếu máy thắng
                 {
                     OnWin();//Khai báo sư kiện Lose
                 }
                 else if (end == Player.None)
                 {
                     currPlayer = Player.Human;//Thiết lập lại lượt chơi
                     OnComDanhXong();// Khai báo sự kiện người đánh xong
                 }
             }
         }
Esempio n. 8
0
 //Bắt đầu lại trò chơi mới
  
  public void DiNgauNhien()
  {
      if (currPlayer == Player.Com)
      {
          board[row / 2, column / 2] = currPlayer;
          DrawDataBoard(row / 2, column / 2,true,true);
          currPlayer = Player.Human;
          OnComDanhXong();//Khai báo sự kiện khi máy đánh xong
      }
  }
Esempio n. 9
0
        //Thiết lập lại toàn bộ dữ liệu bàn cờ
         public void ResetAllBoard()
         {
             OWin = new cls5OWin();
             grdBanCo.Children.Clear();

             ResetBoard();
             end = Player.None;
             this.DrawGomokuBoard();
         }
Esempio n. 10
0
 //Bắt đầu trò chơi mới
  public void NewGame()
  {
      currPlayer = this.Option.LuotChoi;//Lấy thông tin lượt chơi
      if (this.Option.WhoPlayWith == Player.Com)//Nếu chọn kiểu chơi với máy
      {
          if (currPlayer == Player.Com)//Nếu lược đi là máy
          {
              DiNgauNhien();
          }
      }
  }