Пример #1
0
        public bool DanhCo(int MouseX, int MouseY, Graphics g)
        {
            int Cot  = MouseX / Ô_cờ._chieuRong;
            int Dong = MouseY / Ô_cờ._chieuCao;

            if (_MangOCo[Dong, Cot].SoHuu != 0)
            {
                return(false);
            }
            switch (luotdi)
            {
            case 1:
                _MangOCo[Dong, Cot].SoHuu = 1;
                _BanCo.VeQuanCo(g, _MangOCo[Dong, Cot].Vitri, sbblack);
                luotdi = 2;
                break;

            case 2:
                _MangOCo[Dong, Cot].SoHuu = 2;
                _BanCo.VeQuanCo(g, _MangOCo[Dong, Cot].Vitri, sbwhite);
                luotdi = 1;
                break;

            default:
                MessageBox.Show("Lỗi");
                break;
            }
            stkcacnuocUndo = new Stack <Ô_cờ>();
            Ô_cờ oco = new Ô_cờ(_MangOCo[Dong, Cot].Dong, _MangOCo[Dong, Cot].Cot, _MangOCo[Dong, Cot].Vitri, _MangOCo[Dong, Cot].SoHuu);

            stkcacnuocdadi.Push(oco);
            return(true);
        }
Пример #2
0
 public void KhoiTaoMangOCo()
 {
     for (int i = 0; i < _BanCo.Sodong; i++)
     {
         for (int j = 0; j < _BanCo.Sodong; j++)
         {
             _MangOCo[i, j] = new Ô_cờ(i, j, new Point(j * Ô_cờ._chieuRong, i * Ô_cờ._chieuCao), 0);
         }
     }
 }
Пример #3
0
 public void KhoiDongCOM(Graphics g)
 {
     if (stkcacnuocdadi.Count == 0)
     {
         DanhCo(_BanCo.Sodong / 2 * Ô_cờ._chieuRong + 1, _BanCo.Sodong / 2 * Ô_cờ._chieuCao + 1, g);
     }
     else
     {
         Ô_cờ oco = TimKiemNuocDi();
         DanhCo(oco.Vitri.X + 1, oco.Vitri.Y + 1, g);
     }
 }
Пример #4
0
 public void Redo(Graphics g)
 {
     if (stkcacnuocUndo.Count != 0)
     {
         Ô_cờ oco = stkcacnuocUndo.Pop();
         stkcacnuocdadi.Push(new Ô_cờ(oco.Dong, oco.Cot, oco.Vitri, oco.SoHuu));
         _MangOCo[oco.Dong, oco.Cot].SoHuu = oco.SoHuu;
         _BanCo.VeQuanCo(g, oco.Vitri, oco.SoHuu == 1 ? sbblack : sbwhite);
         if (luotdi == 1)
         {
             luotdi = 2;
         }
         else
         {
             luotdi = 1;
         }
     }
 }
Пример #5
0
 public void Undo(Graphics g)
 {
     if (stkcacnuocdadi.Count != 0)
     {
         Ô_cờ oco = stkcacnuocdadi.Pop();
         stkcacnuocUndo.Push(new Ô_cờ(oco.Dong, oco.Cot, oco.Vitri, oco.SoHuu));
         _MangOCo[oco.Dong, oco.Cot].SoHuu = 0;
         _BanCo.XoaQuanCo(g, oco.Vitri, sbcontroldark);
         if (luotdi == 1)
         {
             luotdi = 2;
         }
         else
         {
             luotdi = 1;
         }
     }
 }
Пример #6
0
        private Ô_cờ TimKiemNuocDi()
        {
            Ô_cờ Ocoresult = new Ô_cờ();
            long  DiemMax   = 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  = DiemTanCong_DuyetDoc(i, j) + DiemTanCong_DuyetNgang(i, j) + DiemTanCong_DuyetCheoXuoi(i, j) + DiemTanCong_DuyetCheoNguoc(i, j);
                        long DiemPhongThu = DiemPhongThu_DuyetDoc(i, j) + DiemPhongThu_DuyetNgang(i, j) + DiemPhongThu_DuyetCheoXuoi(i, j) + DiemPhongThu_DuyetCheoNguoc(i, j);
                        long DiemTam      = DiemTanCong > DiemPhongThu ? DiemTanCong : DiemPhongThu;
                        if (DiemMax < DiemTam)
                        {
                            DiemMax   = DiemTam;
                            Ocoresult = new Ô_cờ(_MangOCo[i, j].Dong, _MangOCo[i, j].Cot, _MangOCo[i, j].Vitri, _MangOCo[i, j].SoHuu);
                        }
                    }
                }
            }
            return(Ocoresult);
        }