Beispiel #1
0
        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);
        }
Beispiel #3
0
        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);
        }