예제 #1
0
        //----------

        // Khởi tạo mảng ô cờ (cấp phát vùng nhớ cho từng ô cờ)
        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);
                }
            }
        }
예제 #2
0
 public void Redo(Graphics g)
 {
     if (stkCacNuocUndo.Count != 0)
     {
         if (_LuuCheDoChoi == 2 || _LuuCheDoChoi == 3)
         {
             Oco oco1 = stkCacNuocUndo.Pop();
             stkCacNuocDaDi.Push(new Oco(oco1.Dong, oco1.Cot, oco1.Vitri, oco1.SoHuu));
             Oco oco2 = stkCacNuocUndo.Pop();
             stkCacNuocDaDi.Push(new Oco(oco2.Dong, oco2.Cot, oco2.Vitri, oco2.SoHuu));
             _MangOCo[oco2.Dong, oco2.Cot].SoHuu = 0;
             _MangOCo[oco1.Dong, oco1.Cot].SoHuu = 0;
             if (oco1.SoHuu == 1)
             {
                 _Banco.VeQuanCo_X(g, oco1.Vitri);
             }
             else
             {
                 _Banco.VeQuanCo_O(g, oco1.Vitri);
             }
             if (oco2.SoHuu == 1)
             {
                 _Banco.VeQuanCo_X(g, oco2.Vitri);
             }
             else
             {
                 _Banco.VeQuanCo_O(g, oco2.Vitri);
             }
         }
         else
         {
             Oco oco = stkCacNuocUndo.Pop();
             stkCacNuocDaDi.Push(new Oco(oco.Dong, oco.Cot, oco.Vitri, oco.SoHuu));
             _MangOCo[oco.Dong, oco.Cot].SoHuu = oco.SoHuu;
             if (oco.SoHuu == 1)
             {
                 _Banco.VeQuanCo_X(g, oco.Vitri);
             }
             else
             {
                 _Banco.VeQuanCo_O(g, oco.Vitri);
             }
             if (_LuotDi == 1)
             {
                 _LuotDi = 2;
             }
             else if (_LuotDi == 2)
             {
                 _LuotDi = 1;
             }
         }
     }
 }
예제 #3
0
 public void KhoiDongComputer(Graphics g)
 {
     if (_LuotDi == 1)
     {
         if (stkCacNuocDaDi.Count == 0)
         {
             DanhCo(_Banco.SoCot / 2 * Oco._ChieuRong + 1, _Banco.SoDong / 2 * Oco._ChieuCao + 1, g);
             _DaDanhCo = true;
         }
         else
         {
             Oco oco = TimKiemNuocDi();
             DanhCo(oco.Vitri.X + 1, oco.Vitri.Y + 1, g);
             _DaDanhCo = true;
         }
     }
 }
예제 #4
0
        //-----------------------------------------------------

        // Đánh cờ
        public bool DanhCo(int MouseX, int MouseY, Graphics g)
        {
            int Cot  = MouseX / Oco._ChieuRong;
            int Dong = MouseY / Oco._ChieuCao;

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

            switch (_LuotDi)
            {
            case 1:
                _MangOCo[Dong, Cot].SoHuu = 1;
                _Banco.VeQuanCo_X(g, _MangOCo[Dong, Cot].Vitri);
                _DaDanhCo = true;
                _LuotDi   = 2;
                break;

            case 2:
                _MangOCo[Dong, Cot].SoHuu = 2;
                _Banco.VeQuanCo_O(g, _MangOCo[Dong, Cot].Vitri);
                _DaDanhCo = true;
                _LuotDi   = 1;
                break;

            default:
                MessageBox.Show("Có lỗi");
                break;
            }

            stkCacNuocUndo = new Stack <Oco>();
            Oco oco = new Oco(_MangOCo[Dong, Cot].Dong, _MangOCo[Dong, Cot].Cot, _MangOCo[Dong, Cot].Vitri, _MangOCo[Dong, Cot].SoHuu);

            stkCacNuocDaDi.Push(oco);
            return(true);
        }