コード例 #1
0
        public static bool Handler(Client isPlaying, string packet, bool firstRcv = false, Socket ClientSocket = null)
        {
            string[] packetSpace = packet.Split(' ');

            if (packetSpace.Length < 1)
            {
                return(false);
            }

            if (firstRcv)
            {
                if (packetSpace[0] == "addClient" && packetSpace.Length == 3)
                {
                    string pseudoByPacket = packetSpace[1];
                    string passeByPacket  = packetSpace[2];
                    if (ClientManager.byPseudo(pseudoByPacket) == -1) // Si le pseudo n'existe pas
                    {
                        Client newClient = new Client(pseudoByPacket, passeByPacket);

                        newClient.MySocket = ClientSocket;

                        Thread newThread = new Thread(newClient.Handler);
                        newClient.MyThread = newThread;

                        newClient.info_game.isplaying = false;

                        ClientManager.ListClient.Add(newClient);

                        newClient.InitialisationConnexion(true);

                        /* Thread */
                        newClient.MySendThread = new Thread(newClient.ThreadSendVoid);

                        newClient.MySendThread.Start();
                        newThread.Start();

                        return(true);
                    }
                }
                return(false);
            }
            Console.WriteLine("Packet recu par " + isPlaying.info_main.pseudo + " = " + packet);

            bool playing = isPlaying.info_game.isplaying;

            if (packetSpace[0] == "ok" && packetSpace.Length == 1)
            {
                isPlaying.info_main.received = true;
                return(true);
            }

            if (packetSpace[0] == "inscription" && packetSpace.Length == 1 && !playing)
            {
                MatchMaking.InscriptionMatch(isPlaying);
            }

            if (packetSpace[0] == "select" && packetSpace.Length == 5 && playing)
            {
                if (More.isDec(packetSpace[1]) && More.isDec(packetSpace[2]) &&
                    More.isDec(packetSpace[3]) && More.isDec(packetSpace[4]))
                {
                    int x         = More.s_int(packetSpace[1]);
                    int y         = More.s_int(packetSpace[2]);
                    int xSelected = More.s_int(packetSpace[3]);
                    int ySelected = More.s_int(packetSpace[4]);

                    if (x >= 0 && x <= 9 && y >= 0 && y <= 9 &&
                        xSelected >= 0 && xSelected <= 9 && ySelected >= 0 && ySelected <= 9)
                    {
                        Action.pawnMoving(isPlaying, x, y, xSelected, ySelected);
                    }
                    return(true);
                }
            }

            if (packetSpace[0] == "req_result" && packetSpace.Length == 4 && playing)
            {
                if (More.isDec(packetSpace[1]) && More.isDec(packetSpace[2]) &&
                    More.isDec(packetSpace[3]))
                {
                    if (isPlaying.info_game.asked)
                    {
                        int result = More.s_int(packetSpace[1]);
                        int x      = More.s_int(packetSpace[2]);
                        int y      = More.s_int(packetSpace[3]);

                        if (result == 1)
                        {
                            Action.setCase(isPlaying, x, y);
                        }
                        isPlaying.info_game.asked = false;
                    }
                    else
                    {
                        isPlaying.Send("msg Vous avez pris trop de temps à répondre");
                    }
                    return(true);
                }
            }
            if (packetSpace[0] == "newMatch" && packetSpace.Length == 4 && !playing)
            {
                if (More.s_int(packetSpace[2]) == 0 || More.s_int(packetSpace[2]) == 1)
                {
                    /*if (!isPlaying.info_main.iswait)
                     * {
                     * string pseudoByPacket = packetSpace[1];
                     * int playerTopByPacket = More.s_int(packetSpace[2]);
                     * string opponentByPacket = packetSpace[3];
                     *
                     * // Traitement du match
                     * int IndexClient = ClientManager.byPseudo(pseudoByPacket);
                     *
                     * if (IndexClient == -1)
                     * {
                     *         return false;
                     * }
                     *
                     * isPlaying.info_main.iswait = true;
                     *
                     * isPlaying.info_game.opponent = opponentByPacket;
                     * isPlaying.info_main.playerTop = Convert.ToBoolean(playerTopByPacket);
                     * isPlaying.info_game.tour = Convert.ToBoolean(playerTopByPacket);
                     *
                     * string PseudoClient = ClientManager.ListClient[IndexClient].info_main.pseudo;
                     * string PseudoOpponent = ClientManager.ListClient[IndexClient].info_game.opponent;
                     *
                     * Console.WriteLine("Nouveau match : " + PseudoClient + " Vs : " + PseudoOpponent);
                     *
                     * int IndexOpponent = ClientManager.byPseudo(PseudoOpponent);
                     *
                     * if (IndexOpponent != -1)
                     * {
                     *         if (Match.startGame(IndexClient, IndexOpponent))
                     *         {
                     *                 Console.WriteLine("Les deux joueurs sont prets ...");
                     *                 return true;
                     *         }
                     * }
                     *
                     * Console.WriteLine("L'autre joueur n'est pas encore pret ...");
                     * return true;
                     * }*/
                }
            }
            return(false);
        }
コード例 #2
0
        /*
         * 0 = Pas le droit d'avancer
         * 1 = Champ libre
         * 2 = Pion adverse présente & possibilité de l'attaquer
         */
        public static int freeField(Client isPlaying, bool playerTop, int x1, int y1, int x2, int y2, bool attacking = true)
        {
            int IndexClient = ClientManager.byPseudo(isPlaying.info_main.pseudo);

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

            Point coeffCoords = Maths.getCoeffDiff(x1, y1, x2, y2);
            int   addCoeffX   = coeffCoords.X;
            int   addCoeffY   = coeffCoords.Y;

            for (int i = 1; i < Math.Abs(x1 - x2); i++)
            {
                int xA = x2 + (i * addCoeffX);
                int yA = y2 + (i * addCoeffY);

                if (xA >= 0 && xA <= 9 &&
                    yA >= 0 && yA <= 9)
                {
                    if (ClientManager.ListClient[IndexClient].info_game.plateauCases[yA][xA].pawnExist)
                    {
                        if (ClientManager.ListClient[IndexClient].info_game.plateauCases[yA][xA].pawnTop == playerTop)
                        {
                            return(0);
                        }
                        else
                        {
                            int xData = xA + addCoeffX;
                            int yData = yA + addCoeffY;

                            for (int e = 1; e < Math.Abs(xA - x1) + 1; e++)
                            {
                                xData = xA + (addCoeffX * e);
                                yData = yA + (addCoeffY * e);

                                /*Console.WriteLine("xData = " + xData + " | yData = " + yData);
                                 * Console.WriteLine("addCoeffX = " + addCoeffX + " | addCoeffY = " + addCoeffY);
                                 * Console.WriteLine("Abs(x1 - x1) + 1 = " + (Math.Abs(xA - x1) + 1));
                                 * Console.WriteLine("e = " + e);*/
                                if (xData >= 0 && xData <= 9 && yData >= 0 && yData <= 9)
                                {
                                    if (ClientManager.ListClient[IndexClient].info_game.plateauCases[yData][xData].pawnExist)
                                    {
                                        return(0);
                                    }
                                    if (xData == x1 && yData == y1)
                                    {
                                        if (attacking)
                                        {
                                            xPawn = xA;
                                            yPawn = yA;
                                        }
                                        return(2);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return(1);
        }
コード例 #3
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);
        }
コード例 #4
0
ファイル: EndGame.cs プロジェクト: pakrologie/jeuDeDame
        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);
        }