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); }
/* * 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); }
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); }
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); }