Пример #1
0
        /// <summary>
        /// Tạo danh sách các nước có thể đi trên 1 ô (node)
        /// </summary>
        /// <returns>Danh sách Oco(i,j); Số ô có thể đi tại ô đó</returns>
        private CacNuocCoTheDi[] TaoCacNuocCoTheDi()
        {
            if (_SanSang == false)
            {
                return null;
            }
            CacNuocCoTheDi[] cacnuoc = new CacNuocCoTheDi[_BanCo.SoCot * _BanCo.SoDong];//+1
            for (int i = 0; i < _BanCo.SoCot * _BanCo.SoDong; i++)
            {
                Oco oco = new Oco();
                    cacnuoc[i] =new CacNuocCoTheDi(oco, -1);
            }
            
            int duyeto = 0;

            for (int i = 0; i < _BanCo.SoDong; i++)
            {
                for (int j = 0; j < _BanCo.SoCot; j++)
                {
                    int Dem = 0;
                    int h = i - 1;
                    int k = j - 1;
                    int l = i+1;
                    int m = j+1;
                    if (h<0)
                        h = 0;
                    if (k<0)
                        k = 0;
                    if (l>=_BanCo.SoDong)
                        l = _BanCo.SoDong - 1;
                    
                    if (m >= _BanCo.SoCot)
                        m = _BanCo.SoCot - 1;
                    for (int g = h; g <= l; g++)
                        for (int f = k; f <= m; f++)
                                if (_MangOco[g, f].SoHuu == 0)
                                    Dem++;

                    if (_MangOco[i, j].SoHuu==0)
                        Dem--;

                    cacnuoc[duyeto] = new CacNuocCoTheDi(_MangOco[i, j], Dem);
                    duyeto++;
                
                    
                }



            }




            return cacnuoc;

        }
Пример #2
0
        /// <summary>
        /// Khởi tạo mảng bàn cờ với với các giá trị trong mảng bàn cờ với các Node ô cờ có sở hữu =0 (không có ai đánh)
        /// </summary>
        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);
                }
            }

        }
Пример #3
0
        /// <summary>
        /// Hàm Redo (được dùng sau khi đã Undo)
        /// </summary>
        /// <param name="g"></param>
        public void Redo(Graphics g)
        {
            if (Stack_CacUndo.Count != 0)
            {

                Oco oco = Stack_CacUndo.Pop();
                _MangOco[oco.Dong, oco.Cot].SoHuu = oco.SoHuu;
                _BanCo.VeQuanCo(g, oco.Vitri, oco.SoHuu == 1 ? sbRed : sbBlue);
                Stack_CacNuocDaDi.Push(new Oco(oco.Dong, oco.Cot, oco.Vitri, oco.SoHuu));
                if (_LuotDi == 1)
                {
                    _LuotDi = 2;
                }
                else
                {
                    _LuotDi = 1;
                }

            }
        }
Пример #4
0
        /// <summary>
        /// Hàm Undo hồi lại nước đã đi
        /// </summary>
        /// <param name="g"></param>
        public void Undo(Graphics g)
        {
            if (Stack_CacNuocDaDi.Count != 0)
            {
                Oco oco = Stack_CacNuocDaDi.Pop();
                _MangOco[oco.Dong, oco.Cot].SoHuu = 0;
                _BanCo.XoaQuanCo(g, oco.Vitri, sbControl);
                Stack_CacUndo.Push(new Oco(oco.Dong, oco.Cot, oco.Vitri, oco.SoHuu));
                if (_LuotDi == 1)
                {
                    _LuotDi = 2;
                }
                else
                {
                    _LuotDi = 1;
                }
            }

            //VeBanCo(g);
            //VeLaiQUanCo(g);
        }
Пример #5
0
        private long Eval(Oco oco, Oco[,] _MangOco_New)
        {
            int DiemTanCong, DiemPhongNgu;
            long DiemMax = 0;
            //Đánh giá theo hàng
            for (int i = 0; i < _BanCo.SoDong; i++)
            {
                for (int j = 0; j < _BanCo.SoCot-4; j++)
                {

                    DiemTanCong = DuyetNgang(i, j, 3) + DuyetDoc(i, j, 3) + DuyetCheoNguoc(i, j, 3) + DuyetCheoXuoi(i, j, 3);
                    DiemPhongNgu = DuyetNgang(i, j, 1) + DuyetDoc(i, j, 1) + DuyetCheoNguoc(i, j, 1) + DuyetCheoXuoi(i, j, 1);
                    long DiemTam = DiemTanCong > DiemPhongNgu ? DiemTanCong : DiemPhongNgu;\
                    if (DiemMax < DiemTam)
                    {
                        DiemMax = DiemTam;
                    }
                }
            }
            return DiemMax;

        }
Пример #6
0
 public CacNuocCoTheDi(Oco oco, int cacnuoctrong)
 {
     _oco = oco;
     _CacNuocTrong = cacnuoctrong;
 }