예제 #1
0
 public vicPiece Start(MyBoard board, int index)
 {
     vicPiece vic = new vicPiece();
     vic.index = -1;
     vic.nType = 0;
     //KT bomb
     if (board.arrSquares[_startIndex].bomb != 0 &&
         board.arrSquares[_startIndex].bomb != nType && Buff != 2) //Co bomb k fai cua doi minh
     {
         board.arrSquares[_startIndex].shield = 0;
         board.arrSquares[_startIndex].shadow = 0;
         InCage();
         board.arrSquares[_startIndex].bomb = 0;
         SoundPlayer sound1 = new SoundPlayer(@"Resources\Audio\ExClose.wav");
         sound1.LoadAsync();
         sound1.Play();
         sound1.Dispose();
         Started = false;
         Ended = false;
         return vic;
     }
     if (board.arrSquares[_startIndex].shadow != 1)
     {
         vic.nType = board.arrSquares[_startIndex].status;
         vic.index = board.arrSquares[_startIndex].curIndex;
     }
     _curPoint = start;
     _curIndex = _startIndex;
     board.arrSquares[_curIndex].status = nType;
     board.arrSquares[_curIndex].curIndex = index;
     SoundPlayer sound = new SoundPlayer(@"Resources\Audio\Start.wav");
     sound.LoadAsync();
     sound.Play();
     sound.Dispose();
     return vic;
 }
예제 #2
0
        public vicPiece MoveSteponStep(MyBoard board, int index)
        {
            vicPiece vic = new vicPiece();
            vic.index = -1;
            vic.nType = 0;
            IsChoice = true;

            board.arrSquares[curIndex].status = 0;
            board.arrSquares[curIndex].curIndex = -1;
            board.arrSquares[curIndex].shadow = 0;
            board.arrSquares[curIndex].shield = 0;

            curIndex = (curIndex + 1) % 56;
            if (board.arrSquares[_curIndex].bomb != 0 &&
               board.arrSquares[_curIndex].bomb != nType && Buff != 6 && Buff != 2) //Co bomb k fai cua doi minh
            {
                board.arrSquares[_startIndex].shield = 0;
                board.arrSquares[_startIndex].shadow = 0;
                board.arrSquares[_curIndex].bomb = 0;
                InCage();
                vic.nType = -2;
                SoundPlayer sound1 = new SoundPlayer(@"Resources\Audio\ExClose.wav");
                sound1.LoadAsync();
                sound1.Play();
                Started = false;
                Ended = false;
                sound1.Dispose();
                return vic;
            }
            if (board.arrSquares[_curIndex].shadow != 1 && board.arrSquares[_curIndex].status != nType)
            {
                vic.nType = board.arrSquares[_curIndex].status;
                vic.index = board.arrSquares[_curIndex].curIndex;
            }
            if (board.arrSquares[curIndex].status == nType) // nguoi doi minh
                curIndex = (curIndex + 1) % 56;
            _curPoint = board.arrSquares[curIndex].square;
            board.arrSquares[_curIndex].status = nType;
            board.arrSquares[_curIndex].curIndex = index;
            if (curIndex == _endIndex)
                _ended = true;
            return vic;
        }
예제 #3
0
 private void Process(int t, int index)
 {
     for (int i = 0; i < cage[turn].nPieces; i++)
         if (cage[turn].Pieces[i].IsChoice)
             cage[turn].Pieces[i].IsChoice = false;
     SoundPlayer sound = new SoundPlayer(@"Resources\Audio\move.wav");
     sound.LoadAsync();
     sound.Play();
     sound.Dispose();
     int count = 0;
     while (count < go)
     {
         count++;
         vic = cage[t].Pieces[index].MoveSteponStep(board, index);
         if (vic.nType == -2)
         {
             this.Invoke(new AntiCrossThreadNoArgument(Refresh));
             break;
         }
         if (!this.InvokeRequired)
         {
             Refresh();
         }
         else
         {
             this.Invoke(new AntiCrossThreadNoArgument(Refresh));
         }
     }
 }
예제 #4
0
        //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
        //+++++++++++++++++++++++++++ Computer AI +++++++++++++++++++++++++++++++++++++++++++++++++++//
        private void comAI()
        {
            go = Shaking();
            changeTurn(go);
            //Kiểm tra sử dụng Hổ báo
            if (hasProp)
            {
                isCrossUsed();
            }
            if (cage[turn].CanAction(go))
            {
                if (hasProp)
                {
                    isActiveProp();
                }
                int pieceindex;
                if ((cage[turn].Cross || cage[turn].SpeedUp || cage[turn].GetTurn) && cage[turn].PriP != -2)
                {
                    pieceindex = cage[turn].PriP + 10;
                    if (cage[turn].Pieces[pieceindex - 10].moveFail(go, board))
                    {
                        pieceindex = cage[turn].CheckPieceAI(go);
                    }
                    cage[turn].PriP = -2;
                }
                else
                {
                    pieceindex = cage[turn].CheckPieceAI(go);
                }
                if (pieceindex >= 10 && pieceindex <= 13)
                {
                    if (cage[turn].SpeedUp)
                        go = SpeedUp(turn, pieceindex - 10, go);
                    Process(turn, pieceindex - 10);

                }
                else
                {
                    if (pieceindex >= 20)
                    {
                        vic = cage[turn].Action_AI(go, pieceindex - 20);
                        this.Invoke(new AntiCrossThreadNoArgument(Refresh));
                        if (win)
                            goto exit;
                    }
                    if (pieceindex < 10)
                    {
                        vic = cage[turn].Action_AI(go, pieceindex);
                        this.Invoke(new AntiCrossThreadNoArgument(Refresh));
                    }
                }
            }
            if (turn == nextturn)
            {
                comAI();
            }
            else
            {
                if (!cage[turn].GetTurn)
                {
                    pString.Image = imglstString.Images[nextturn];
                    if (!pString.InvokeRequired)
                        pString.Visible = true;
                    else
                        pString.Invoke(new AntiCrossThread2Argument(SetVisible), pString, true);
                    //Refresh();
                    //Xóa đạo cụ chủ động nếu có xài
                    if (cage[turn].Cross)
                    {
                        cage[turn].Cross = false;
                        cage[turn].clearbuff(board);
                    }
                    if (cage[turn].SpeedUp)
                    {
                        cage[turn].SpeedUp = false;
                        cage[turn].clearbuff(board);//bug
                    }

                    if (cage[nextturn].Hide) //Xóa đạo cụ của địch
                    {
                        for (int i = 0; i < cage[nextturn].nPieces; i++)
                        {
                            MyPieces p = cage[nextturn].Pieces[i];
                            if (p.Started && !p.Ended)
                            {
                                int t = board.arrSquares[p.curIndex % 56].status;
                                if (t != nextturn + 1)
                                {
                                    if (t != 0)
                                    {
                                        int team = board.arrSquares[p.curIndex % 56].status - 1;
                                        int index = board.arrSquares[p.curIndex % 56].curIndex;
                                        cage[team].Update(index);
                                        SoundPlayer sound = new SoundPlayer(@"Resources\Audio\Kick.wav");
                                        sound.LoadAsync();
                                        sound.Play();
                                        sound.Dispose();
                                        this.Invoke(new AntiCrossThreadNoArgument(Refresh));
                                        //Thread.Sleep(300);
                                    }
                                    board.arrSquares[p.curIndex % 56].status = nextturn + 1;
                                    board.arrSquares[p.curIndex % 56].curIndex = i;
                                }
                            }
                        }
                        cage[nextturn].Hide = false;
                        cage[nextturn].clearbuff(board);
                    }
                    if (cage[nextturn].Shield) // Xóa đạo cụ của địch
                    {
                        cage[nextturn].Shield = false;
                        cage[nextturn].clearbuff(board);
                    }

                    for (int i = 0; i < cage[turn].nPieces; i++)
                    {
                        if (cage[turn].Pieces[i].IsChoice)
                            cage[turn].Pieces[i].IsChoice = false;
                    }
                    this.Invoke(new AntiCrossThreadNoArgument(Refresh));
                    if (cage[turn].Useprop)
                        cage[turn].Useprop = false;
                    //KT dùng passiveprop sau khi kết thúc lượt đi
                    if (hasProp)
                    {
                        isPassiveProp();
                    }
                    //Thread.Sleep(200);
                    pString.Invoke(new AntiCrossThread2Argument(SetVisible), pString, false);
                    pShake.Invoke(new AntiCrossThread3Argument(SetImage), pShake, imglstShake.Images[nextturn], 1);
                    btnShake.Invoke(new AntiCrossThread3Argument(SetImage), btnShake, imglstShake.Images[nextturn], 0);
                    turn = nextturn;
                    if (cage[nextturn].isPlayer)
                    {
                        pShake.Invoke(new AntiCrossThread2Argument(SetVisible), pShake, false);
                        btnShake.Invoke(new AntiCrossThread2Argument(SetVisible), btnShake, true);
                    }
                    else
                    {
                        comAI();
                    }
                }
                else
                {
                    MessageBox.Show("Tiếp tục 1 lượt nữa.");
                    cage[turn].GetTurn = false;
                    nextturn = turn;
                    //Refresh();
                    comAI();
                }
            }
            exit:
            if (win && !first)
            {
                first = true;
                Congratulation(turn);
                this.Invoke(new AntiCrossThreadNoArgument(frmMenu.Show));
                this.Invoke(new AntiCrossThreadNoArgument(Dispose));
            }
        }
예제 #5
0
 private void RacingHorses_MouseUp(object sender, MouseEventArgs e)
 {
     if (isClick == true)
     {
         for (int i = 0; i < cage[turn].nPieces; i++)
             if (cage[turn].Pieces[i].isChoice(e.X, e.Y))
                 if (cage[turn].IsAction(i, go))
                 {
                     isClick = false;
                     cage[turn].Pieces[i].IsChoice = true;
                     if (cage[turn].Pieces[i].Started && !cage[turn].Pieces[i].Ended)
                     {
                         if (cage[turn].SpeedUp)
                             go = SpeedUp(turn, i, go);
                         Process(turn, i);
                     }
                     else
                     {
                         vic = cage[turn].Action(go, i);
                         Refresh();
                         if (win)
                             break;
                     }
                     playerProcess();
                     break;
                 }
                 else
                     break;
     }
     if (win)
     {
         Congratulation(turn);
         this.Dispose();
         frmMenu.Show();
     }
 }
예제 #6
0
        //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
        private void RacingHorses_Load(object sender, EventArgs e)
        {
            for (int i = 0; i < 4; i++)
            {
                AiProps[i] = new MyProps();
            }

            pShake.Image = imglstShake.Images[0];
            pShake.Visible = false;
            imgarr = imglstArrow;
            pString.Visible = false;
            btnBuff[0] = btnHide;
            btnBuff[1] = btnShield;
            btnBuff[2] = btnGetTurn;
            btnBuff[3] = btnBomb;
            btnBuff[4] = btnSpeedup;
            btnBuff[5] = btnCross;
            cage = new MyCage[nCage];
            board = new MyBoard();
            for (int i = 0; i < 4; i++)
            {
                bool b = false;
                for (int t = 0; t < teamchoose.Count; t++)
                {
                    if (i == teamchoose[t])
                        b = true;
                }
                cage[i] = new MyCage(i + 1, 4, board, b);
            }
            dice = new MyDice();
            turn = 0;
            nextturn = 0;
            vic = new vicPiece();
            vic.index = -1;
            vic.nType = 0;
            if (!hasProp)
                board.props = false;
            btnShake.Visible = false;
            if (cage[0].isPlayer)
            {
                btnShake.Visible = true;
            }
            else
            {
                pShake.Visible = true;
                thread_AI = new Thread(Thread_AI);
                thread_AI.Start();
            }
        }