Une classe qui me pose probleme

Une classe qui me pose probleme - PHP - Programmation

Marsh Posté le 02-09-2004 à 12:38:40    

Voila je continue mon entrainement sur les classes et je rencontre un soucis  
 
Je cherche a faire un simple flingue virtuel (texte) avec certain methode comme reload, shoot, creer un nouveau flingue ...
 
Le probleme se situe au niveau des methode reload et shoot, je n'arrive en aucun cas a retirer une balle au chargeur voir retirer un chargeur complet :(
 
Voici mon code
 

Code :
  1. <?php
  2. class Gun {
  3. var $name;
  4. var $numberOfBullet;
  5. var $numberOfMag;
  6. var $currentBullet;
  7. var $currentMag;
  8. //assign variables to the new gun
  9. function newGun() {
  10.  $this->name = $_POST["name"];
  11.  $this->numberOfBullet = $_POST["bullet"];
  12.  $this->numberOfMag = $_POST["mag"];
  13.  $this->currentMag = $_POST["mag"];
  14.  $this->currentBullet = $_POST["bullet"];
  15. }
  16. //show the form in order to add a new gun (which will erase the last one)
  17. function showNewGunForm() {
  18.  echo "<form action=\"".$_SERVER["PHP_SELF"]."\" method=\"POST\">".
  19.  "<input type=\"text\" name=\"name\"> Name <br />".
  20.  "<input type=\"text\" name=\"bullet\"> Number of bullet per Magazine <br />".
  21.  "<input type=\"text\" name=\"mag\"> Nunber of magazine <br />".
  22.  "<input type=\"submit\" name=\"newGunConfirm\" value=\"Add a gun\">";
  23. }
  24. //show the Gun "hud"
  25. function showGunInterface() {
  26.  echo "Current gun : ".$this->name."<br />".
  27.  "Bullet count : ".$this->currentBullet."<br />".
  28.  "Current magazine : ".$this->currentMag;
  29.  echo "<form action=\"".$_SERVER["PHP_SELF"]."?gun=".eregi_replace('"', '%22', $_GET["gun"])."\" method=\"POST\">".
  30.  "<input type=\"submit\" name=\"shoot\" value=\"shoot !!\"> ".
  31.  "<input type=\"submit\" name=\"reload\" value=\"reload\">";
  32.  if (isset($_POST["shoot"]))
  33.   $this->shoot();
  34.  if (isset($_POST["reload"]))
  35.   $this->reload();
  36. }
  37. //remove a bullet after the shot
  38. function shoot() {
  39.  $this->currentBullet--;
  40.  header("Location: ".$_SERVER["PHP_SELF"]."?gun=".eregi_replace('"', '%22', $_GET["gun"]));
  41. }
  42. function reload() {
  43.  //remove one mag
  44.  $this->currentMag--;
  45.  //tactical reload
  46.  if ($this->currentBullet>0)
  47.   $this->currentBullet=$this->numberOfBullet+1;
  48.  else
  49.   $this->currentBullet=$this->numberOfBullet;
  50.  $ser = serialize($gun);
  51.  header("Location: ".$_SERVER["PHP_SELF"]."?gun=".eregi_replace('"', '%22', $_GET["gun"]));
  52. }
  53. }
  54. if (isset($_POST["newGun"])) {
  55. $add = new Gun;
  56. $add->showNewGunForm();
  57. }
  58. elseif (isset($_POST["newGunConfirm"])) {
  59. $gun = new Gun;
  60. $gun->newGun();
  61. //relocate after creating the gun
  62. $ser = serialize($gun);
  63. header("Location: ".$_SERVER["PHP_SELF"]."?gun=$ser" );
  64. }
  65. else {
  66. echo "<form action=\"".$_SERVER["PHP_SELF"]."?gun=".eregi_replace('"', '%22', $_GET["gun"])."\" method=\"POST\">".
  67. "<input type=\"submit\" name=\"newGun\" value=\"Add a new gun\">";
  68. echo "<p>";
  69. //get the new gun class from the URL (serialized)
  70. $gun = unserialize($_GET["gun"]);
  71. $gun->showGunInterface();
  72. echo "</p>";
  73. }
  74. ?>


 
Je presise que creer un gun fonctionne, que ca m'affiche bien les variables...
J'ai fait un simple echo dans la methode shoot() pour voir si elle etait bien declanché..et elle l'est :jap:
 
reste a savoir pourquoi je n'arrive pas a decrementer le chargeur d'une balle :/

Reply

Marsh Posté le 02-09-2004 à 12:38:40   

Reply

Marsh Posté le 02-09-2004 à 14:06:44    

Qd tu shootes, ca recharge la page, et il n'y a pas une erreur entre numberofbullet et currentbullet ?

Reply

Marsh Posté le 02-09-2004 à 14:07:11    

aucune erreur, je l'ai mis à E_ALL mais rien quand meme

Reply

Marsh Posté le 02-09-2004 à 14:09:07    

ah j'ai trouvé un indice qui m'aide pas mais qu'il est bien quand meme
 
dans la fonction de reload j'ai
 
$this->currentMag--;
 
je l'ai changer en  
 
$this->currentMag-1 et il m'affiche la bonne valeur mais ne la garde pas au reload :/


Message édité par Profil supprimé le 02-09-2004 à 14:09:50
Reply

Marsh Posté le 02-09-2004 à 14:10:54    

en fait c'est surement car je fait un header sur l'ancienne valeur [:noxauror]


Message édité par Profil supprimé le 02-09-2004 à 14:11:06
Reply

Marsh Posté le 02-09-2004 à 14:23:54    

ca y est j'ai trouvé ca venais effectivement du header :)
 
apparement on peu serialiser $this
 

Code :
  1. function shoot() {
  2.  if ($this->currentBullet==0)
  3.   $this->reload();
  4.  $this->currentBullet-=1;
  5.  $ser = serialize($this);
  6.  header("Location: ".$_SERVER["PHP_SELF"]."?gun=$ser" );
  7. }


 
merci pour avoir relancé le thead :)


Message édité par Profil supprimé le 02-09-2004 à 14:24:24
Reply

Marsh Posté le 02-09-2004 à 14:27:30    

de rien ;)

Reply

Marsh Posté le 02-09-2004 à 14:33:57    

chacal_one333 a écrit :

ca y est j'ai trouvé ca venais effectivement du header :)
 
apparement on peu serialiser $this
 

Code :
  1. function shoot() {
  2.  if ($this->currentBullet==0)
  3.   $this->reload();
  4.  $this->currentBullet-=1;
  5.  $ser = serialize($this);
  6.  header("Location: ".$_SERVER["PHP_SELF"]."?gun=$ser" );
  7. }


 
merci pour avoir relancé le thead :)


 
D'ailleurs pour la serialisation, tu peux serialiser des objets, et tu es obligé de le faire si tu veux les passer en session

Reply

Marsh Posté le 02-09-2004 à 14:34:43    

ouais ca je sais :)

Reply

Marsh Posté le 02-09-2004 à 14:47:46    

Toute facon c'est pas bien de jouer avec des armes à feux !

Reply

Marsh Posté le 02-09-2004 à 14:47:46   

Reply

Marsh Posté le 02-09-2004 à 14:48:12    

:D
 
c'est qu'un exercice :o
qui me parait pas mal pour faire ca justement

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed