Exemplo n.º 1
0
        private OCo TimKiemNuocDi()
        {
            OCo  oCoResult = new OCo();
            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  = 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 diemTam      = diemTanCong > diemPhongNgu ? diemTanCong : diemPhongNgu;
                        if (diemMax < diemTam)
                        {
                            diemMax   = diemTam;
                            oCoResult = new OCo(mangOCo[i, j].Dong, mangOCo[i, j].Cot, mangOCo[i, j].Vitri, mangOCo[i, j].Sohuu);
                        }
                    }
                }
            }

            return(oCoResult);
        }
Exemplo n.º 2
0
 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);
         }
     }
 }
Exemplo n.º 3
0
 public void KhoiDongComputer(Graphics g)
 {
     if (stt_cacNuocDaDi.Count == 0)
     {
         DanhCo(_banCo.Socot / 2 * OCo._chieuRong + 1, _banCo.Sodong / 2 * OCo._chieuCao + 1, g);
     }
     else
     {
         OCo oco = TimKiemNuocDi();
         DanhCo(oco.Vitri.X + 1, oco.Vitri.Y + 1, g);
     }
 }
Exemplo n.º 4
0
 public void Redo(Graphics g)
 {
     if (stt_cacNuocUndo.Count != 0)
     {
         OCo oco = stt_cacNuocUndo.Pop();
         stt_cacNuocDaDi.Push(new OCo(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;
         }
     }
 }
Exemplo n.º 5
0
        public void Undo(Graphics g)
        {
            if (stt_cacNuocDaDi.Count != 0)
            {
                OCo oco = stt_cacNuocDaDi.Pop();
                stt_cacNuocUndo.Push(new OCo(oco.Dong, oco.Cot, oco.Vitri, oco.Sohuu));
                mangOCo[oco.Dong, oco.Cot].Sohuu = 0;
                _banCo.XoaQuanCo(g, oco.Vitri, sbMediumSlateBlue);
                if (_luotDi == 1)
                {
                    _luotDi = 2;
                }
                else
                {
                    _luotDi = 1;
                }
            }

            //VeBanCo(g);
            //VeLaiQuanCo(g);
        }
Exemplo n.º 6
0
        public bool DanhCo(int mouseX, int mouseY, Graphics g)
        {
            if (mouseX % OCo._chieuRong == 0 || mouseY % OCo._chieuCao == 0)
            {
                return(false);
            }
            int cot  = mouseX / OCo._chieuRong;
            int dong = mouseY / OCo._chieuCao;

            //không cho đánh lại ô đã đánh
            if (mangOCo[dong, cot].Sohuu != 0)
            {
                return(false);
            }
            //xét lượt đi
            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 chương trình");
                break;
            }
            stt_cacNuocUndo = new Stack <OCo>(); // tạo mới vùng nhớ undo khi đánh vào ô đã undo
            //tạo mới vùng nhớ để khi tham chiếu k bị mấy giá trị
            OCo oco = new OCo(mangOCo[dong, cot].Dong, mangOCo[dong, cot].Cot, mangOCo[dong, cot].Vitri, mangOCo[dong, cot].Sohuu);

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