Esempio n. 1
0
        // Hàm đánh cờ
        public bool DanhCo(Graphics g, int MouseX, int MouseY)
        {
            if (MouseX % OCo._DoDai == 0 || MouseY % OCo._DoDai == 0)
            {
                return(false);
            }
            int Cot  = MouseX / OCo._DoDai;
            int Dong = MouseY / OCo._DoDai;

            if (_MangOCo[Dong, Cot].SoHuu != 0)
            {
                return(false);
            }

            switch (_LuotDi)
            {
            case 1:
                _MangOCo[Dong, Cot].SoHuu = 1;
                _BanCo.VeQuanCo(g, image_O, _MangOCo[Dong, Cot].ViTri);
                _LuotDi = 2;
                break;

            case 2:
                _MangOCo[Dong, Cot].SoHuu = 2;
                _BanCo.VeQuanCo(g, image_X, _MangOCo[Dong, Cot].ViTri);
                _LuotDi = 1;
                break;
            }
            stk_Undo = new Stack <OCo>();
            OCo oco = new OCo(_MangOCo[Dong, Cot].Dong, _MangOCo[Dong, Cot].Cot, _MangOCo[Dong, Cot].ViTri, _MangOCo[Dong, Cot].SoHuu);

            stk_NuocDaDi.Push(oco);
            return(true);
        }
Esempio n. 2
0
        // Hàm tìm nước đi tối ưu của máy
        private OCo TimNuocDi()
        {
            OCo  oCoResult   = new OCo();
            long DiemLonNhat = 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 Temp         = DiemTanCong > DiemPhongNgu ? DiemTanCong : DiemPhongNgu;
                        if (Temp > DiemLonNhat)
                        {
                            DiemLonNhat = Temp;
                            oCoResult   = new OCo(_MangOCo[i, j].Dong, _MangOCo[i, j].Cot, _MangOCo[i, j].ViTri, _MangOCo[i, j].SoHuu);
                        }
                    }
                }
            }


            return(oCoResult);
        }
Esempio n. 3
0
 // Hàm tạo ra các ô cờ trên bàn cờ
 public void TaoMangOCo()
 {
     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._DoDai, i * OCo._DoDai), 0);
         }
     }
 }
Esempio n. 4
0
 // Hàm đánh cờ của máy
 public void KhoiDongMay(Graphics g)
 {
     if (stk_NuocDaDi.Count == 0)
     {
         DanhCo(g, _BanCo.SoCot / 2 * OCo._DoDai + 1, _BanCo.SoDong / 2 * OCo._DoDai + 1);
     }
     else
     {
         OCo oco = TimNuocDi();
         DanhCo(g, oco.ViTri.X + 1, oco.ViTri.Y + 1);
     }
 }
Esempio n. 5
0
 public void Redo(Graphics g)
 {
     // Khi chơi với người
     if (_CheDoChoi == 1)
     {
         if (stk_Undo.Count != 0)
         {
             OCo oco = stk_Undo.Pop();
             stk_NuocDaDi.Push(new OCo(oco.Dong, oco.Cot, oco.ViTri, oco.SoHuu));
             _MangOCo[oco.Dong, oco.Cot].SoHuu = oco.SoHuu;
             _BanCo.VeQuanCo(g, oco.SoHuu == 1 ? image_O : image_X, oco.ViTri);
         }
     }
     // Không đc Redo khi chơi với máy
 }
Esempio n. 6
0
 public void Undo(Graphics g)
 {
     if (!_SanSang)
     {
         return;
     }
     // Khi chơi với người
     if (_CheDoChoi == 1)
     {
         if (stk_NuocDaDi.Count != 0)
         {
             OCo oco = stk_NuocDaDi.Pop();
             stk_Undo.Push(new OCo(oco.Dong, oco.Cot, oco.ViTri, oco.SoHuu));
             _MangOCo[oco.Dong, oco.Cot].SoHuu = 0;
             _BanCo.XoaQuanCo(g, oco.ViTri, sbback);
             if (_LuotDi == 1)
             {
                 _LuotDi = 2;
             }
             else
             {
                 _LuotDi = 1;
             }
         }
     }
     // Khi chơi với máy
     else
     {
         if (stk_NuocDaDi.Count > 1)
         {
             // Xóa nước đi của máy
             OCo oco = stk_NuocDaDi.Pop();
             _BanCo.XoaQuanCo(g, oco.ViTri, sbback);
             _MangOCo[oco.Dong, oco.Cot].SoHuu = 0;
             // Xóa nước đi của người chơi
             oco = stk_NuocDaDi.Pop();
             stk_Undo.Push(new OCo(oco.Dong, oco.Cot, oco.ViTri, oco.SoHuu));
             _MangOCo[oco.Dong, oco.Cot].SoHuu = 0;
             _BanCo.XoaQuanCo(g, oco.ViTri, sbback);
         }
     }
     _SanSang = true;
 }