예제 #1
0
        public static bool pawnMoving(Client isPlaying, int x, int y, int xSelected, int ySelected)
        {
            if (isPlaying.info_game.asked)
            {
                isPlaying.SendMsg("En attente de la réponse ...");
                return(false);
            }

            if (isPlaying.info_main.playerTop != isPlaying.info_game.plateauCases[ySelected][xSelected].pawnTop)
            {
                Careful.isNotCareful(isPlaying, ySelected, xSelected);
                return(false);
            }

            if (!isPlaying.info_game.tour)
            {
                isPlaying.SendMsg("Ce n'est pas votre tour !");
                return(false);
            }

            if (isPlaying.info_game.iscombo)
            {
                if (!isPlaying.info_game.plateauCases[ySelected][xSelected].mainCombo)
                {
                    isPlaying.SendMsg("Vous ne pouvez jouer que le pion 'combo'");
                    return(false);
                }
            }

            int IndexClient = ClientManager.byPseudo(isPlaying.info_main.pseudo);

            Client Player   = playerManager.WhosNext(isPlaying);
            Client Opponent = playerManager.GetOpponent(Player);

            bool playerTop = Player.info_main.playerTop;

            if (ClientManager.ListClient[IndexClient].info_game.plateauCases[y][x].pawnExist)
            {
                return(false);
            }

            if (x == xSelected && y == ySelected)
            {
                isPlaying.SendMsg("Choix annulé");
                return(false);
            }
            else if (!ClientManager.ListClient[IndexClient].info_game.plateauCases[y][x].pawnExist)
            {
                int ruleDistance = Distance.distanceStatus(isPlaying, y, x, ySelected, xSelected, playerTop);

                if (ruleDistance == 0 || (ruleDistance != 2 && ClientManager.ListClient[IndexClient].info_game.plateauCases[ySelected][xSelected].mainCombo &&
                                          Player.info_game.iscombo) || !Distance.sameDiagonal(y, x, ySelected, xSelected))
                {
                    isPlaying.SendMsg("Vous ne pouvez pas faire cela");
                    return(false);
                }

                //sendAnimation(isPlaying, (int)BunifuAnimatorNS.AnimationType.Transparent, x, y);

                Careful.resetNotCarefulOpponent(Opponent);

                Careful.checkJumpingNotPlayed(Player, x, y);

                ClientManager.ListClient[IndexClient].info_game.plateauCases[y][x].king = ClientManager.ListClient[IndexClient].info_game.plateauCases[ySelected][xSelected].king;
                ClientManager.ListClient[IndexClient].info_game.plateauCases[ySelected][xSelected].king = false;

                Match.SynchroWithOpponents(isPlaying);

                setCase(isPlaying, x, y, imageManager.getPawnImgByPlayer(playerTop, ClientManager.ListClient[IndexClient].info_game.plateauCases[y][x].king), true, playerTop);

                setCase(isPlaying, xSelected, ySelected);
                imageManager.pawnToKing(isPlaying, playerTop, x, y);

                if (ruleDistance == 2)
                {
                    bool isKing = ClientManager.ListClient[IndexClient].info_game.plateauCases[y][x].king;

                    int xPawn = Distance.xPawn;
                    int yPawn = Distance.yPawn;

                    //sendAnimation(isPlaying, (int)BunifuAnimatorNS.AnimationType.Particles, xPawn, yPawn);

                    setCase(isPlaying, xPawn, yPawn);
                    Opponent.info_game.pawnAlive--;

                    if (!isKing)
                    {
                        if (Attack.detectCanAtk(Player, x, y))
                        {
                            Player.info_game.iscombo = true;
                            ClientManager.ListClient[IndexClient].info_game.plateauCases[y][x].mainCombo = true;
                            Match.SynchroWithOpponents(isPlaying);
                            return(true);
                        }
                    }
                    else
                    {
                        if (Attack.detectCanAtkForKing(Player, x, y))
                        {
                            Player.info_game.iscombo = true;
                            ClientManager.ListClient[IndexClient].info_game.plateauCases[y][x].mainCombo = true;
                            Match.SynchroWithOpponents(isPlaying);
                            return(true);
                        }
                    }

                    Player.info_game.iscombo = false;
                    ClientManager.ListClient[IndexClient].info_game.plateauCases[y][x].mainCombo = false;
                    Match.SynchroWithOpponents(isPlaying);
                    if (EndGame.OpponentIsDead(Opponent))
                    {
                        return(true);
                    }
                }

                playerManager.ChangeGameTurn(Player);

                xSelected = -1;
                ySelected = -1;
            }
            return(true);
        }
예제 #2
0
        public static bool canMakeAnAction(Client isPlaying)
        {
            int IndexClient = ClientManager.byPseudo(isPlaying.info_main.pseudo);

            if (IndexClient == -1)
            {
                return(false);
            }

            bool playerTop = isPlaying.info_main.playerTop;

            for (int y = 0; y < ClientManager.ListClient[IndexClient].info_game.plateauCases.Length; y++)
            {
                for (int x = 0; x < ClientManager.ListClient[IndexClient].info_game.plateauCases[y].Length; x++)
                {
                    if (ClientManager.ListClient[IndexClient].info_game.plateauCases[y][x].pawnTop == playerTop &&
                        ClientManager.ListClient[IndexClient].info_game.plateauCases[y][x].pawnExist)
                    {
                        bool isKing = ClientManager.ListClient[IndexClient].info_game.plateauCases[y][x].king;

                        if (!isKing)
                        {
                            if (Attack.detectCanAtk(isPlaying, x, y))
                            {
                                return(true);
                            }
                        }
                        if (isKing)
                        {
                            if (Attack.detectCanAtkForKing(isPlaying, x, y))
                            {
                                return(true);
                            }
                        }

                        if (!isKing)
                        {
                            int addX = 1;
                            int addY = 1;
                            if (playerTop)
                            {
                                if (y + addY <= 9 && x + addX <= 9)
                                {
                                    if (!ClientManager.ListClient[IndexClient].info_game.plateauCases[y + addY][x + addX].pawnExist)
                                    {
                                        return(true);
                                    }
                                }
                                if (y + addY <= 9 && x + (addX * -1) >= 0)
                                {
                                    if (!ClientManager.ListClient[IndexClient].info_game.plateauCases[y + addY][x + addX * -1].pawnExist)
                                    {
                                        return(true);
                                    }
                                }
                            }
                            else
                            {
                                addX = -1;
                                addY = -1;

                                if (y + addY >= 0 && x + addX >= 0)
                                {
                                    if (!ClientManager.ListClient[IndexClient].info_game.plateauCases[y + addY][x + addX].pawnExist)
                                    {
                                        return(true);
                                    }
                                }
                                if (y + addY >= 0 && x + (addX * -1) <= 9)
                                {
                                    if (!ClientManager.ListClient[IndexClient].info_game.plateauCases[y + addY][x + addX * -1].pawnExist)
                                    {
                                        return(true);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return(false);
        }