Manipulation d'objet
Résolu
Bill-Billion
Messages postés
41
Date d'inscription
Statut
Membre
Dernière intervention
-
Bill-Billion Messages postés 41 Date d'inscription Statut Membre Dernière intervention -
Bill-Billion Messages postés 41 Date d'inscription Statut Membre Dernière intervention -
Bonjour/Bonsoir(suivant votre heure),,je solicite votre aide;je suis entrain de faire une illustration de jeu video(backend en php),la logique serait que les degats de la personne frappé augmente suivant la force de la personne qui frappe.
Class Personnage
Class PersonnagesManager
Controller frontale
Quand le joueur atteint un niveau superieur comme vous pouvez le voir sa force devrait augmenté de 5(c'est fait),le probleme c'est que quand je frappe avec une force de 10 les degats se font toujours avec 5de valeurs(la valeur de la force initiale),je n'arrive pas avoir ou j'ai fais l'erreur.
La partie du code qui devrait vous interesser
Merçi de m'aider,cordialement Bill-Billion ;
Class Personnage
class Personnage { private $_nom; private $_id; private $_degats; private $_forcePerso = 5; private $_niveau = 1; private $_experience; const CEST_MOI = 1; const PERSONNAGE_TUE = 4; const PERSONNAGE_FRAPPE = 2; public function __construct(array $data) { //constructeur charge lors de creation de l'objet //passera en parametre les donnees a la fonction hydrate $this ->hydrate($data); } public function hydrate(array $data) { foreach($data as $key => $value) { $method = 'set'.ucfirst($key); if(method_exists($this,$method)) { $this->$method($value); } else { trigger_error('la fonction '.$method.' n\'existe pas',E_USER_ERROR); } } } public function frapper(Personnage $perso) { //verifions qu'on ne se frappe pas soit meme if($perso ->nom() == $this ->_nom) { return self::CEST_MOI; } else { return $perso->recevoirDegats(); } } public function recevoirDegats() { $this->_degats += $this->_forcePerso; if($this ->_degats >= 30) { return self::PERSONNAGE_TUE; } else { return self::PERSONNAGE_FRAPPE; } } public function gagnerExperience(Personnage $perso) { $this->_experience += 1; if($this->_experience >= 5) { $this->_experience = 0; return $perso->gagnerNiveau(); } } public function gagnerNiveau() { $this->_niveau += 1; return $this->recevoirForce(); } public function recevoirForce() { if($this->_niveau > 1) { $this->_forcePerso += 5; } } //accesseur public function nom() { return $this->_nom; } public function id() { return $this->_id; } public function degats() { return $this->_degats; } public function forcePerso() { return $this->_forcePerso; } public function niveau() { return $this->_niveau; } public function experience() { return $this->_experience; } //mutateur public function setNom($nom) { if(!is_string($nom)) { trigger_error('Un nom est demande(chaine de caracteres)',E_USER_ERROR); } else { $this->_nom = $nom; } } public function setId($id) { $id = (int)$id; if( $id == 0 ) { trigger_error('Identifiant non reconnu , valeur == 0',E_USER_ERROR); } else { $this ->_id = $id; } } public function setDegats($degats) { $degats = (int)$degats; if( $degats >=0 && $degats <= 100) { $this->_degats = $degats; } else { trigger_error('le nombre de degats doit etre <= 100',E_USER_WARNING); } } public function setForcePerso($forcePerso) { $forcePerso = (int)$forcePerso; $this->_forcePerso = $forcePerso; } public function setNiveau($niveau) { $niveau = (int)$niveau; $this->_niveau = $niveau; } public function setExperience($experience) { $experience = (int)$experience; $this->_experience = $experience; } }
Class PersonnagesManager
class PersonnagesManager { private $_db;//objet stockant l'objet representant la connexion a la base de donnees //constructeur public function __construct($bdd) { $this -> setDb($bdd); } public function add(Personnage $perso) { //Insertion des donnees en base de donnees $q = $this->_db->prepare('INSERT INTO personnage(nom,forcePerso,niveau) VALUES(:name,:strength,:level)'); $q->bindValue(':name',$perso->nom()); $q->bindValue(':strength',$perso->forcePerso(),PDO::PARAM_INT); $q->bindValue(':level',$perso->niveau(),PDO::PARAM_INT); $q->execute(); $perso->hydrate([ 'id'=>$this->_db->lastInsertId(), 'degats'=>0, 'experience'=>0 ]); } public function update(Personnage $perso) { //modification des donnees en base avec une clause where $q = $this->_db->prepare('UPDATE personnage SET degats = :degats,forcePerso = :force,niveau = :niveau,experience = :experience WHERE id = :id_user'); $q ->bindValue(':degats',$perso->degats(),PDO::PARAM_INT); $q ->bindValue(':force',$perso->forcePerso(),PDO::PARAM_INT); $q ->bindValue(':niveau',$perso->niveau(),PDO::PARAM_INT); $q ->bindValue(':experience',$perso->experience(),PDO::PARAM_INT); $q ->bindValue(':id_user',$perso->id(),PDO::PARAM_INT); $q ->execute(); } public function delete(Personnage $perso) { //suppression des donnees en base avec une clause where $this->_db->exec('DELETE FROM personnage WHERE id='.$perso->id()); } public function number() { return $this->_db->query('SELECT COUNT(*) FROM personnage')->fetchColumn(); } public function exists($info) { //verifier si l'utilisateur existe if(is_int($info)) { return(bool) $this->_db->query('SELECT COUNT(*) FROM personnage WHERE id='.$info)->fetchColumn(); } else { $q = $this->_db->prepare('SELECT COUNT(*) FROM personnage WHERE nom=:name_verify'); $q->execute([':name_verify'=>$info]); return(bool) $q->fetchColumn(); } } public function get($info) { //retour des information d'un personnage //retour d'un objet if(is_string($info)) { $q =$this->_db->prepare('SELECT * FROM personnage WHERE nom=:name_verify'); $q->execute([':name_verify'=>$info]); $data_query = $q ->fetch(PDO::FETCH_ASSOC); return new Personnage($data_query); } else { $q = $this->_db->query('SELECT * FROM personnage WHERE id='.$info); $data_query = $q ->fetch(PDO::FETCH_ASSOC); return new Personnage($data_query); } } public function getList() { //retour des informations des personnages en base //retour d'un objet $persos=[]; $q = $this->_db->query('SELECT * FROM personnage'); while($data_query = $q->fetch(PDO::FETCH_ASSOC)) { $persos[]= new Personnage($data_query); } return $persos; } public function setDb($bdd) { //creation de la variable _db $this->_db = $bdd; } }
Controller frontale
if($manager ->exists((int)$_GET['attack'])) { $persoAFrapper = $manager ->get((int)$_GET['attack']); $retour = $perso->frapper($persoAFrapper); switch($retour) { case Personnage::CEST_MOI : echo 'Impossible de vous frapper'; break; case Personnage::PERSONNAGE_FRAPPE : echo 'Le personnage est FRAPPE'; $manager ->update($perso); $manager ->update($persoAFrapper); break; case Personnage::PERSONNAGE_TUE : echo 'Le personnage est tue (Niveau Actuel :',$perso->niveau(),')'; $perso->gagnerExperience($perso); $manager ->update($perso); $manager ->delete($persoAFrapper); break; } }
Quand le joueur atteint un niveau superieur comme vous pouvez le voir sa force devrait augmenté de 5(c'est fait),le probleme c'est que quand je frappe avec une force de 10 les degats se font toujours avec 5de valeurs(la valeur de la force initiale),je n'arrive pas avoir ou j'ai fais l'erreur.
La partie du code qui devrait vous interesser
public function recevoirDegats() { $this->_degats += $this->_forcePerso; if($this ->_degats >= 30) { return self::PERSONNAGE_TUE; } else { return self::PERSONNAGE_FRAPPE; } }
Merçi de m'aider,cordialement Bill-Billion ;
A voir également:
- Manipulation d'objet
- Vente objet occasion entre particulier - Guide
- Objet interdit en cabine ryanair - Guide
- Identifier un objet à partir d'une photo - Guide
- Mesurer un objet - Guide
- Ce document fait l'objet d'un trop grand nombre de modifications ✓ - Forum Word
2 réponses
Salut,
c'est parce que celui qui reçoit les dégâts, à des dégâts en fonction de sa force et non de celui le force de l'attaquant.
Bonne soirée
c'est parce que celui qui reçoit les dégâts, à des dégâts en fonction de sa force et non de celui le force de l'attaquant.
public function recevoirDegats(Personnage $attaquant) { $this->_degats += $attaquant->forcePerso(); if($this ->_degats >= 30) { return self::PERSONNAGE_TUE; } else { return self::PERSONNAGE_FRAPPE; } }
Bonne soirée
Bill-Billion
Messages postés
41
Date d'inscription
Statut
Membre
Dernière intervention
Merçi je viens de le voir,je vais essayer de le corriger