public string HandleFuir(HarryPeloteur_DAL.GameInformationDTO gameInfos, string[] parameters) { var roomSearch = FindRoomById(gameInfos.Rooms, gameInfos.Character.SalleActuelle); HarryPeloteur_DAL.SalleDTO currentRoom = roomSearch.found; int currentRoomID = roomSearch.index; string resultText = ""; // Si la salle actuelle ne contient pas de monstre on annule l'action if (currentRoom.TypeContenu != 2) { dt.dbg("Impossible de fuir une salle sans monstres"); return("Impossible de fuir une salle sans monstres"); } // On obtient le monstre dans la salle actuelle HarryPeloteur_DAL.MonstreDTO currentMonster = db.GetMonstre(currentRoom.IdContenu); // Calcule la chance de s'échapper selon les caractéristiques du joueur et du monstre avec un minimum de 20% double escapeChance = (double)(gameInfos.Character.Fuite - currentMonster.Dexterite); escapeChance = escapeChance / (double)(gameInfos.Character.Fuite); escapeChance = Math.Max(0.20, escapeChance); while (gameInfos.Character.Pv > 0) { // Si on n'a pas réussi à s'échapper if (rnd.NextDouble() > escapeChance) { dt.dbg("Le joueur n'as pas réussi à s'échapper"); // Alors le joueur prend des dégats gameInfos.Character.Pv -= currentMonster.Force; } else { dt.dbg("Le joueur a réussi à s'échapper"); // Sinon on sort vers une salle aléatoire resultText = "Vous avez réussi à vous échapper"; // modifier l'état de la salle actuelle vers un état intermédiaire pour passer le check dans le handleavancer gameInfos.Rooms[currentRoomID].Etat = 2; resultText += HandleAvancer(gameInfos, new string[] { "", "random" }); // Met à jour les données du personnage après l'avoir déplacé //gameInfos = db.getGameInfos(gameInfos.Game.Id); gameInfos.Character = db.GetPersonne(gameInfos.Character.Id); break; } } // Met à jour la vie du personnage db.UpdatePersonne(gameInfos.Character); return(resultText); }
public MonstreDTO GetMonstre(int?id) { this.con.Open(); string commande = "select * from monstre where Id=" + id; SqlCommand cmd1 = new SqlCommand(commande, this.con); SqlDataReader reader = cmd1.ExecuteReader(); MonstreDTO monster = new MonstreDTO(); while (reader.Read()) { monster.Id = (int?)reader.GetValue(0); monster.Nom = (string)reader.GetValue(1); monster.Pv = (int?)reader.GetValue(2); monster.Force = (int?)reader.GetValue(3); monster.Dexterite = (int?)reader.GetValue(4); monster.DropXp = (int?)reader.GetValue(5); monster.ProbaDropArgent = (float?)Convert.ToDouble(reader.GetValue(6)); } this.con.Close(); return(monster); }
public string HandleCombattre(HarryPeloteur_DAL.GameInformationDTO gameInfos, string[] paramaters) { HarryPeloteur_DAL.SalleDTO currentRoom = FindRoomById(gameInfos.Rooms, gameInfos.Character.SalleActuelle).found; string resultText = ""; if (currentRoom.TypeContenu != 2) { dt.dbg("Impossible de combattre dans une salle sans monstres"); return("Impossible de combattre dans une salle sans monstres"); } HarryPeloteur_DAL.MonstreDTO currentMonster = db.GetMonstre(currentRoom.IdContenu); // On détermine les chances de toucher en fonction de la dextérité double playerHitChance = Math.Min(0.9, 0.5 + 0.5 * (((double)gameInfos.Character.Dexterite - (double)currentMonster.Dexterite) / (double)currentMonster.Dexterite)); double monsterHitChance = Math.Min(0.9, 0.5 + 0.5 * (((double)currentMonster.Dexterite - (double)gameInfos.Character.Dexterite) / (double)gameInfos.Character.Dexterite)); // ajouter une fonction pour faire ça // diviser par deux l'augmentation de la chance ? dt.dbg(gameInfos.Character.Dexterite.ToString()); dt.dbg(currentMonster.Dexterite.ToString()); dt.dbg((gameInfos.Character.Dexterite / currentMonster.Dexterite).ToString()); dt.dbg("Chances de toucher du joueur " + playerHitChance.ToString()); dt.dbg("Chances de toucher du monstre " + monsterHitChance.ToString()); // Tant que le joueur et le monstre sont en vie on combat // C'est un combat à mort while (gameInfos.Character.Pv > 0 && currentMonster.Pv > 0) { // Le joueur commence // Mettre la personne qui ouvre le combat en aléatoire ? double draw = rnd.NextDouble(); // Le joueur touche if (draw < playerHitChance) { dt.dbg("Le joueur a touché le monstre"); currentMonster.Pv -= gameInfos.Character.Force; } // Au tour du monstre draw = rnd.NextDouble(); // Le monstre touche if (draw < monsterHitChance) { dt.dbg("Le monstre a touché le joueur"); gameInfos.Character.Pv -= currentMonster.Force; } } if (gameInfos.Character.Pv <= 0) { dt.dbg("Le joueur est mort tué par un " + currentMonster.Nom); resultText = "Vous êtes mort tué par un " + currentMonster.Nom; } else { dt.dbg("Le joueur a tué un " + currentMonster.Nom); resultText = "Vous avez tué un " + currentMonster.Nom; currentRoom.TypeContenu = 0; db.UpdateSalle(currentRoom); } // On met à jour la vie du joueur db.UpdatePersonne(gameInfos.Character); return(resultText); }