begin process at 2012 02 12 08:22:02
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Jeux

 > [PHP5]RPG CREATOR VERSION [ALPHA]

[PHP5]RPG CREATOR VERSION [ALPHA]


 Information sur la source

Note :
9,71 / 10 - par 7 personnes
9,71 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Jeux Classé sous :moteur, map, déplacements, ajax, objets Niveau :Initié Date de création :26/01/2006 Date de mise à jour :23/03/2006 16:34:26 Vu / téléchargé :17 939 / 23 998

Auteur : malalam

Ecrire un message privé
Site perso
Commentaire sur cette source (56)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Voici un moteur simple de déplacement sur une map.
Simple, parce que je n'aiu pas tout implémenté encore...je ferai peut-être des mises à jour, sans doute même...à moins que je ne décide de créer mon jeu un de ces 4 ;-)

Le principe est relativement simple. Ajax est utilisé pour les déplacements.
Un objet omap gère la map elle-même. On peut jouer sur différents paramètres : avec ou sans personnage,
modification de l'affichage etc...
La version que je possède est un peu plus complète, mais je la mettrai plus tard ici. Je compte
notamment permettre une gestion simple des objets, divers retours, et un affichage de map en 3d isométrique.

J'ai codé en utilisant exprès diverses fonctionnalités afin de les montrer. En vrac :
- syntaxe heredoc
- utilisation des méthodes magiques __toString, __sleep, __wakeup
- utilisation d'ajax sur 1 seule page
...


Source

  • <?php
  • /* *********************************************************************************************************************************************
  • * CLASS OMAP
  • *
  • * @author johan <barbier_johan@hotmail.com>
  • * @version 2006-01-26
  • * @copyright : free to use, modify...do NOT sell. If you change this file, you'd be very nice to send me your changes :-)
  • ***********************************************************************************************************************************************/
  • class omap {
  • /********************************************************************************************************
  • * Propriétés
  • ********************************************************************************************************/
  • /**************
  • * privées
  • **************/
  • private $aMap = array (); // tableau de la map
  • private $aDisplayMap = array (); // tableau de la portion de map à afficher
  • private $aDisplayOptions = array ( // tableau d'options d'affichage
  • 'maxDisplay' => 5, // portion de la map à afficher. Ici, un carré de 5 * 5 cases
  • 'tiles' => 48, // taille des cases (tiles) en pixels
  • 'bgColor' => '#000000', // couleur de fond de la map - initialement, pour ujne option que j'ai enlevé depuis : le fog of war
  • 'ext' => 'png' // extensions des images composant la map (tiles)
  • );
  • private $aGlobalOptions = array ( // tableau d'options globales
  • 'perso' => false // utilisation du perso ou non. Pour mettre un perso, on remplacera false par l'url de son image
  • );
  • private $aPos = array ( // tableau de la position courante
  • 'x' => 0, //coordonnée en x
  • 'y' => 0 // coordonnée en y
  • );
  • private $aMax = array (); // tableau des bornes de la map
  • private $sNav; // chaine contenant l'affichage de la navigation
  • /***************
  • * constantes
  • ***************/
  • const sMapDir = 'maps/'; // répertoire des maps
  • const sTilesDir = 'tiles/'; // répertoire des tiles
  • const sNavDir = 'nav/'; // répertoire des boutons de navigation
  • /********************************************************************************************************
  • * Constructeur
  • * @Params mixed mMap : nom du fichier mod ou tableau mod
  • ********************************************************************************************************/
  • public function __construct ($mMap) {
  • if (file_exists (self::sMapDir.$mMap)) {
  • $aChaine = file (self::sMapDir.$mMap);
  • foreach ($aChaine as $val) {
  • $this -> aMap[] = str_split (trim ($val));
  • }
  • } else {
  • return false;
  • }
  • $this -> aMax = array ('x' => count ($this -> aMap) - 1, 'y' => count ($this -> aMap[0]) - 1);
  • }
  • /********************************************************************************************************
  • * Méthode init
  • * @Params array aProps : tableau des propriétés à initialiser
  • ********************************************************************************************************/
  • private function init (array $aProps) {
  • foreach ($aProps as $propName => $propValue) {
  • $this -> $propName = $propValue;
  • }
  • }
  • /********************************************************************************************************
  • * Méthode setDisplay
  • * permet de mettre à jour une option du tableau d'affichage
  • * @Params array aOptions : tableau d'options, avec comme clef, un nom d'option valide
  • * et comme valeur associée, la valeur voulue
  • * @Return bool true/false
  • ********************************************************************************************************/
  • public function setDisplay (array $aOptions) {
  • foreach ($aOptions as $clef => $valeur) {
  • if (array_key_exists ($clef, $this -> aDisplayOptions)) {
  • $this -> aDisplayOptions[$clef] = $valeur;
  • }
  • }
  • }
  • /********************************************************************************************************
  • * Méthode setPerso
  • * initialise l'url vers l'image du perso
  • * @Params string sPath : chaîne représentant l'url de l'image
  • * @Return bool false en cas d'échec, true en cas de succès
  • ********************************************************************************************************/
  • public function setPerso ($sPath) {
  • $this -> aGlobalOptions['perso'] = $sPath;
  • }
  • /********************************************************************************************************
  • * Méthode setPos
  • * initialise la position de départ
  • * @Params array aPos : tableau des coordonnées x et y de la position de départ
  • * @Return bool false en cas d'échec
  • ********************************************************************************************************/
  • public function setPos (array $aPos) {
  • if (count ($aPos) === 2) {
  • foreach ($aPos as $clef => $val) {
  • if (is_int ($val) && array_key_exists ($clef, $this -> aPos)) {
  • $this -> aPos[$clef] = $val;
  • }
  • }
  • } else {
  • return false;
  • }
  • }
  • /*******************************************************************************************************
  • * Méthode get
  • * permet de récupérer la valeur d'une ou plusieurs propriété(s) de la classe
  • * On peut passer n'importe quel nombre de paramètres, sous la forme de chaînes ayant
  • * pour valeur le nom d'une propriété EXISTANTE de la classe
  • *******************************************************************************************************/
  • public function get () {
  • $aArgs = func_get_args();
  • foreach ($aArgs as $clef => $arg) {
  • if (isset ($this -> $arg)) {
  • $aRetour[$arg] = $this -> $arg;
  • }
  • }
  • if (isset ($aRetour) && is_array ($aRetour)) {
  • return $aRetour;
  • } else {
  • return false;
  • }
  • }
  • /********************************************************************************************************
  • * Méthode getCharPos
  • * permet de récupérer la position courante du personnage
  • * @Return array
  • ********************************************************************************************************/
  • public function getCharPos () {
  • return $this -> aPos;
  • }
  • /********************************************************************************************************
  • * Méthode magique __toString
  • * permet d'afficher la map si désiré
  • * @Return string
  • ********************************************************************************************************/
  • public function __toString () {
  • $sString = $this -> sNav;
  • $width = $this -> aDisplayOptions['tiles'] * $this -> aDisplayOptions['maxDisplay'];
  • if (false !== $this -> aGlobalOptions['perso']) {
  • $sString .= '<div style="position: relative; top: '.$this -> aDisplayOptions['tiles'] * ceil($this -> aDisplayOptions['maxDisplay']/2).'px; left: '.$this -> aDisplayOptions['tiles'] * floor($this -> aDisplayOptions['maxDisplay']/2).'px;z-index: 1000"><img src="'.$this -> aGlobalOptions['perso'].'" alt="Avatar"/></div>';
  • }
  • foreach ($this -> aDisplayMap as $clef => $dump) {
  • $sString .= <<<EOS
  • <div style="background-color: {$this -> aDisplayOptions['bgColor']}; width: {$width}px;">
  • EOS;
  • foreach ($this -> aDisplayMap[$clef] as $clef2 => $img) {
  • $sString .= '<img src="'.self::sTilesDir.$img.'.'.$this -> aDisplayOptions['ext'].'" alt="'.$img.'"/>';
  • }
  • $sString .= <<<EOS
  • </div>
  • EOS;
  • }
  • return $sString;
  • }
  • /********************************************************************************************************
  • * Méthode getMove
  • * intercepte le post envoyé par l'objet xmlhttp
  • ********************************************************************************************************/
  • public function getMove ($map, $fight = false) {
  • if (isset ($_POST['dir']) && is_numeric ($_POST['dir'])) {
  • $this -> setMove ($_POST['dir']);
  • }
  • $serialMap = base64_encode (serialize ($this -> aPos));
  • $this -> setNavigation ($serialMap, $fight);
  • }
  • /********************************************************************************************************
  • * Méthode setMove
  • * permet de modifier la position courante sur la map
  • * modifie la propriété $this -> aPos
  • * calcul sur 8 directions
  • ********************************************************************************************************/
  • private function setMove ($dir) {
  • $dir = intval ($dir);
  • /**********
  • * ouest
  • **********/
  • if ($dir === 4) {
  • $this -> aPos['y'] -= 1;
  • if ($this -> aPos['y'] < 0) {
  • $this -> aPos['y'] = 0;
  • }
  • }
  • /**********
  • * est
  • **********/
  • elseif ($dir === 6) {
  • $this -> aPos['y'] += 1;
  • if ($this -> aPos['y'] > $this -> aMax['y']) {
  • $this -> aPos['y'] = $this -> aMax['y'];
  • }
  • }
  • /**********
  • * nord
  • **********/
  • elseif ($dir === 8) {
  • $this -> aPos['x'] -= 1;
  • if ($this -> aPos['x'] < 0) {
  • $this -> aPos['x'] = 0;
  • }
  • }
  • /**********
  • * nord ouest
  • **********/
  • elseif ($dir === 7) {
  • $this -> aPos['x'] -= 1;
  • $this -> aPos['y'] -= 1;
  • if ($this -> aPos['x'] < 0) {
  • $this -> aPos['x'] = 0;
  • }
  • if ($this -> aPos['y'] < 0) {
  • $this -> aPos['y'] = 0;
  • }
  • }
  • /**********
  • * nord est
  • **********/
  • elseif ($dir === 9) {
  • $this -> aPos['x'] -= 1;
  • $this -> aPos['y'] += 1;
  • if ($this -> aPos['x'] < 0) {
  • $this -> aPos['x'] = 0;
  • }
  • if ($this -> aPos['y'] > $this -> aMax['y']) {
  • $this -> aPos['y'] = $this -> aMax['y'];
  • }
  • }
  • /**********
  • * sud
  • **********/
  • elseif ($dir === 2) {
  • $this -> aPos['x'] += 1;
  • if ($this -> aPos['x'] > $this -> aMax['x']) {
  • $this -> aPos['x'] = $this -> aMax['x'];
  • }
  • }
  • /**********
  • * sud ouest
  • **********/
  • elseif ($dir === 1) {
  • $this -> aPos['x'] += 1;
  • $this -> aPos['y'] -= 1;
  • if ($this -> aPos['x'] > $this -> aMax['x']) {
  • $this -> aPos['x'] = $this -> aMax['x'];
  • }
  • if ($this -> aPos['y'] < 0) {
  • $this -> aPos['y'] = 0;
  • }
  • }
  • /**********
  • * sud est
  • **********/
  • elseif ($dir === 3) {
  • $this -> aPos['x'] += 1;
  • $this -> aPos['y'] += 1;
  • if ($this -> aPos['x'] > $this -> aMax['x']) {
  • $this -> aPos['x'] = $this -> aMax['x'];
  • }
  • if ($this -> aPos['y'] > $this -> aMax['y']) {
  • $this -> aPos['y'] = $this -> aMax['y'];
  • }
  • }
  • else {
  • return false;
  • }
  • }
  • /********************************************************************************************************
  • * Méthode getDisplay
  • * permet d'obtenir la portion de map à afficher
  • * modifie la propriété $this -> aDisplay
  • ********************************************************************************************************/
  • public function getDisplay () {
  • $minus = floor ($this -> aDisplayOptions['maxDisplay'] / 2);
  • for ($i = - $minus; $i <= $minus; $i ++) {
  • $aX[] = $this -> aPos['x'] + $i;
  • $aY[] = $this -> aPos['y'] + $i;
  • }
  • foreach ($aX as $clefX => $valX) {
  • foreach ($aY as $clefY => $valY) {
  • if (isset ($this -> aMap[$valX][$valY])) {
  • $this -> aDisplayMap[$clefX][$clefY] = $this -> aMap[$valX][$valY];
  • } else {
  • $this -> aDisplayMap[$clefX][$clefY] = 'blank';
  • }
  • }
  • }
  • }
  • /********************************************************************************************************
  • * Méthode setNavigation
  • * met en place la navigation
  • * seules 4 directions sont affichées.
  • * vous devez modifier cette fonction pour afficher les 8 directions possibles
  • * les valeurs à mettre dans l'appel de la fonction js sendMove sont définies par la
  • * direction représentée sur un pavé numérique.
  • * nord est par exemple aura la valeur 9.
  • * De même, pour modifier les graphismes de la navigation, vous devez les modifier
  • * directement ici, pour le moment.
  • * @Return string sString : affichage html de la navigation
  • ********************************************************************************************************/
  • private function setNavigation ($serialMap, $fight = false) {
  • $display=($fight === true)?'style="visibility:hidden;"':'';
  • $dir = self::sNavDir;
  • $this -> sNav = <<<EOS
  • <div id="nav" {$display}><div style="margin-left: 10px;"><img src="{$dir}/up.png" onclick="sendMove (8, '{$serialMap}');" class="dir" alt="nord"/></div>
  • <div><img src="{$dir}/left.png" onclick="sendMove (4, '{$serialMap}');" class="dir" alt="ouest"/><img src="{$dir}/right.png" onclick="sendMove (6, '{$serialMap}');" class="dir" alt="est"/></div>
  • <div style="margin-left: 10px;"><img src="{$dir}/down.png" onclick="sendMove (2, '{$serialMap}');" class="dir" alt="sud"/></div></div>
  • EOS;
  • }
  • }
  • ?>
<?php
/* *********************************************************************************************************************************************
* CLASS OMAP
*
* @author	johan <barbier_johan@hotmail.com>
* @version	2006-01-26
* @copyright : free to use, modify...do NOT sell. If you change this file, you'd be very nice to send me your changes :-)
***********************************************************************************************************************************************/

class omap {

	/********************************************************************************************************
	* Propriétés
	********************************************************************************************************/

	/**************
	* privées
	**************/
	private $aMap = array ();						// tableau de la map
	private $aDisplayMap = array ();					// tableau de la portion de map à afficher
	private $aDisplayOptions = array (					// tableau d'options d'affichage
		'maxDisplay' => 5,								// portion de la map à afficher. Ici, un carré de 5 * 5 cases
		'tiles' => 48,									// taille des cases (tiles) en pixels
		'bgColor' => '#000000',							// couleur de fond de la map - initialement, pour ujne option que j'ai enlevé depuis : le fog of war
		'ext' => 'png'									// extensions des images composant la map (tiles)
		);
	private $aGlobalOptions = array (					// tableau d'options globales
		'perso' => false								// utilisation du perso ou non. Pour mettre un perso, on remplacera false par l'url de son image
		);
	private $aPos = array (							// tableau de la position courante
		'x' => 0,										//coordonnée en x
		'y' => 0										// coordonnée en y
		);
	private $aMax = array ();						// tableau des bornes de la map
	private $sNav;									// chaine contenant l'affichage de la navigation

	/***************
	* constantes
	***************/
	const sMapDir = 'maps/';							// répertoire des maps
	const sTilesDir = 'tiles/';							// répertoire des tiles
	const sNavDir = 'nav/';							// répertoire des boutons de navigation

	/********************************************************************************************************
	* Constructeur
	* @Params mixed mMap : nom du fichier mod ou tableau mod
	********************************************************************************************************/
	public function __construct ($mMap) {
		if (file_exists (self::sMapDir.$mMap)) {
			$aChaine = file (self::sMapDir.$mMap);
			foreach ($aChaine as $val) {
				$this -> aMap[] = str_split (trim ($val));
			}
		} else {
			return false;
		}
		$this -> aMax = array ('x' => count ($this -> aMap) - 1, 'y' => count ($this -> aMap[0]) - 1);
	}

	/********************************************************************************************************
	* Méthode init
	* @Params array aProps : tableau des propriétés à initialiser
	********************************************************************************************************/
	private function init (array $aProps) {
		foreach ($aProps as $propName => $propValue) {
			$this -> $propName = $propValue;
		}
	}

	/********************************************************************************************************
	* Méthode setDisplay
	* permet de mettre à jour une option du tableau d'affichage
	* @Params array aOptions : tableau d'options, avec comme clef, un nom d'option valide
	* et comme valeur associée, la valeur voulue
	* @Return bool true/false
	********************************************************************************************************/
	public function setDisplay (array $aOptions) {
		foreach ($aOptions as $clef => $valeur) {
			if (array_key_exists ($clef, $this -> aDisplayOptions)) {
				$this -> aDisplayOptions[$clef] = $valeur;
			}
		}
	}

	/********************************************************************************************************
	* Méthode setPerso
	* initialise l'url vers l'image du perso
	* @Params string sPath : chaîne représentant l'url de l'image
	* @Return bool false en cas d'échec, true en cas de succès
	********************************************************************************************************/
	public function setPerso ($sPath) {
		$this -> aGlobalOptions['perso'] = $sPath;
	}

	/********************************************************************************************************
	* Méthode setPos
	* initialise la position de départ
	* @Params array aPos : tableau des coordonnées x et y de la position de départ
	* @Return bool false en cas d'échec
	********************************************************************************************************/
	public function setPos (array $aPos) {
		if (count ($aPos) === 2) {
			foreach ($aPos as $clef => $val) {
				if (is_int ($val) && array_key_exists ($clef, $this -> aPos)) {
					$this -> aPos[$clef] = $val;
				}
			}
		} else {
			return false;
		}
	}

	/*******************************************************************************************************
	* Méthode get
	* permet de récupérer la valeur d'une ou plusieurs propriété(s) de la classe
	* On peut passer n'importe quel nombre de paramètres, sous la forme de chaînes ayant
	* pour valeur le nom d'une  propriété EXISTANTE de la classe
	*******************************************************************************************************/
	public function get () {
		$aArgs = func_get_args();
		foreach ($aArgs as $clef => $arg) {
			if (isset ($this -> $arg)) {
				$aRetour[$arg] = $this -> $arg;
			}
		}
		if (isset ($aRetour) && is_array ($aRetour)) {
			return $aRetour;
		} else {
			return false;
		}
	}

	/********************************************************************************************************
	* Méthode getCharPos
	* permet de récupérer la position courante du personnage
	* @Return array
	********************************************************************************************************/
	public function getCharPos () {
		return $this -> aPos;
	}

	/********************************************************************************************************
	* Méthode magique __toString
	* permet d'afficher la map si désiré
	* @Return string
	********************************************************************************************************/
	public function __toString () {
		$sString = $this -> sNav;
		$width = $this -> aDisplayOptions['tiles'] * $this -> aDisplayOptions['maxDisplay'];
		if (false !== $this -> aGlobalOptions['perso']) {
			$sString .= '<div style="position: relative; top: '.$this -> aDisplayOptions['tiles'] * ceil($this -> aDisplayOptions['maxDisplay']/2).'px; left: '.$this -> aDisplayOptions['tiles'] * floor($this -> aDisplayOptions['maxDisplay']/2).'px;z-index: 1000"><img src="'.$this -> aGlobalOptions['perso'].'" alt="Avatar"/></div>';
		}
		foreach ($this -> aDisplayMap as $clef => $dump) {
			$sString .= <<<EOS
<div style="background-color: {$this -> aDisplayOptions['bgColor']}; width: {$width}px;">

EOS;
			foreach ($this -> aDisplayMap[$clef] as $clef2 => $img) {
				$sString .= '<img src="'.self::sTilesDir.$img.'.'.$this -> aDisplayOptions['ext'].'" alt="'.$img.'"/>';
			}
			$sString .=  <<<EOS
</div>

EOS;
		}
		return $sString;
	}

	/********************************************************************************************************
	* Méthode getMove
	* intercepte le post envoyé par l'objet xmlhttp
	********************************************************************************************************/
	public function getMove ($map, $fight = false) {
		if (isset ($_POST['dir']) && is_numeric ($_POST['dir'])) {
			$this -> setMove ($_POST['dir']);
		}
		$serialMap = base64_encode (serialize ($this -> aPos));
		$this -> setNavigation ($serialMap, $fight);
	}

	/********************************************************************************************************
	* Méthode setMove
	* permet de modifier la position courante sur la map
	* modifie la propriété $this -> aPos
	* calcul sur 8 directions
	********************************************************************************************************/
	private function setMove ($dir) {
		$dir = intval ($dir);
		/**********
		* ouest
		**********/
		if ($dir === 4) {
			$this -> aPos['y'] -= 1;
			if ($this -> aPos['y'] < 0) {
				$this -> aPos['y'] = 0;
			}
		}
		/**********
		* est
		**********/
		elseif ($dir === 6) {
			$this -> aPos['y'] += 1;
			if ($this -> aPos['y'] > $this -> aMax['y']) {
				$this -> aPos['y'] = $this -> aMax['y'];
			}
		}
		/**********
		* nord
		**********/
		elseif ($dir === 8) {
			$this -> aPos['x'] -= 1;
			if ($this -> aPos['x'] < 0) {
				$this -> aPos['x'] = 0;
			}
		}
		/**********
		* nord ouest
		**********/
		elseif ($dir === 7) {
			$this -> aPos['x'] -= 1;
			$this -> aPos['y'] -= 1;
			if ($this -> aPos['x'] < 0) {
				$this -> aPos['x'] = 0;
			}
			if ($this -> aPos['y'] < 0) {
				$this -> aPos['y'] = 0;
			}
		}
		/**********
		* nord est
		**********/
		elseif ($dir === 9) {
			$this -> aPos['x'] -= 1;
			$this -> aPos['y'] += 1;
			if ($this -> aPos['x'] < 0) {
				$this -> aPos['x'] = 0;
			}
			if ($this -> aPos['y'] > $this -> aMax['y']) {
				$this -> aPos['y'] = $this -> aMax['y'];
			}
		}
		/**********
		* sud
		**********/
		elseif ($dir === 2) {
			$this -> aPos['x'] += 1;
			if ($this -> aPos['x'] > $this -> aMax['x']) {
				$this -> aPos['x'] = $this -> aMax['x'];
			}
		}
		/**********
		* sud ouest
		**********/
		elseif ($dir === 1) {
			$this -> aPos['x'] += 1;
			$this -> aPos['y'] -= 1;
			if ($this -> aPos['x'] > $this -> aMax['x']) {
				$this -> aPos['x'] = $this -> aMax['x'];
			}
			if ($this -> aPos['y'] < 0) {
				$this -> aPos['y'] = 0;
			}
		}
		/**********
		* sud est
		**********/
		elseif ($dir === 3) {
			$this -> aPos['x'] += 1;
			$this -> aPos['y'] += 1;
			if ($this -> aPos['x'] > $this -> aMax['x']) {
				$this -> aPos['x'] = $this -> aMax['x'];
			}
			if ($this -> aPos['y'] > $this -> aMax['y']) {
				$this -> aPos['y'] = $this -> aMax['y'];
			}
		}
		else {
			return false;
		}
	}

	/********************************************************************************************************
	* Méthode getDisplay
	* permet d'obtenir la portion de map à afficher
	* modifie la propriété $this -> aDisplay
	********************************************************************************************************/
	public function getDisplay () {
		$minus = floor ($this -> aDisplayOptions['maxDisplay'] / 2);
		for ($i = - $minus; $i <= $minus; $i ++) {
			$aX[] = $this -> aPos['x'] + $i;
			$aY[] = $this -> aPos['y'] + $i;
		}
		foreach ($aX as $clefX => $valX) {
			foreach ($aY as $clefY => $valY) {
				if (isset ($this -> aMap[$valX][$valY])) {
					$this -> aDisplayMap[$clefX][$clefY] = $this -> aMap[$valX][$valY];
				} else {
					$this -> aDisplayMap[$clefX][$clefY] = 'blank';
				}
			}
		}
	}

	/********************************************************************************************************
	* Méthode setNavigation
	* met en place la navigation
	* seules 4 directions sont affichées.
	* vous devez modifier cette fonction pour afficher les 8 directions possibles
	* les valeurs à mettre dans l'appel de la fonction js sendMove sont définies par la
	* direction représentée sur un pavé numérique.
	* nord est par exemple aura la valeur 9.
	* De même, pour modifier les graphismes de la navigation, vous devez les modifier
	* directement ici, pour le moment.
	* @Return string sString : affichage html de la navigation
	********************************************************************************************************/
	private function setNavigation ($serialMap, $fight = false) {
		$display=($fight === true)?'style="visibility:hidden;"':'';
		$dir = self::sNavDir;
		$this -> sNav = <<<EOS

<div id="nav" {$display}><div style="margin-left: 10px;"><img src="{$dir}/up.png" onclick="sendMove (8, '{$serialMap}');" class="dir" alt="nord"/></div>
<div><img src="{$dir}/left.png" onclick="sendMove (4, '{$serialMap}');" class="dir" alt="ouest"/><img src="{$dir}/right.png" onclick="sendMove (6, '{$serialMap}');" class="dir" alt="est"/></div>
<div style="margin-left: 10px;"><img src="{$dir}/down.png" onclick="sendMove (2, '{$serialMap}');" class="dir" alt="sud"/></div></div>

EOS;
	}

}
?>

 Conclusion

Je n'ai mis comme source texte que l'objet omap.
Le reste du code est dans le zip :-)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

26 janvier 2006 17:35:22 :
Modifications mineures et ajouts de quelques commentaires supplémentaires
30 janvier 2006 16:43:14 :
ajout d'un nouvel objet oevents. Permet de générer des évènements sur la map (pour l'instant, purement descriptifs). Donne aussi un exemple de l'interaction possible avec le moteur.
30 janvier 2006 17:05:31 :
Petite modification sur le fichier index.php : un commentaire mal placé ;-)
31 janvier 2006 14:21:26 :
j'ai viré les méthodes __sleep () et __wakeup-), ainsi que la sérialisation de l'objet. ON passe cette fois TOUJOURS par une instanciation normale, et on relit le fichier mod de la map. EN fait je me suis rendu compte que c'était beaucoup plus rapide ainsi, et que l'écart entre l'ancienne méthode et celle-ci se creusait avec la taille de la map. On ne sérialise plus que la position de l'avatar. Ajout d'une nouvelle capture aussi. J'ai néanmoins laissé l'ancienne classe et l'ancien index.php : omap.cls_.php et index_.php
02 février 2006 11:32:24 :
Correction d'un GROS bug que je n'avais pas vu. Je renvoyais dans la div 'map' toute ma page. J'ai corrigé en réécrivant dans le body, en attendant de faire mieux (document.innerHTML ne fonctionnait pas). Puisqu'on gère tout sur la même page, la même page renvoyait tout le html, évidemment, donc je multipliais mon contenu à chaque déplacement... Mises à jours mineurs aussi : ajout d'un header et d'un footer, d'une css, etc...
01 mars 2006 15:33:23 :
Grosse mise à jour : j'ai ajouté un début de moteur de combat dynamique. Pour le moment, pas d'implications pour le personnage :-) C'est juste un aperçu : on se balade sur la carte, on rencontre des monstres, on combat (on peut pour le moment juste taper, et se soigner). Les classes de personnages et de monstres sont aussi en début d'implémentation : une interface icharacter, une classe abstraite ocharacter, une classe oavatar étendant ocharacter, et une classe ostreum étendant ocharacter aussi pour les monstres (reste à faire un tas d'ajout, c'est juste la base là, et à créer différentes classes d'avatars et de monstres).
02 mars 2006 11:02:08 :
ajout d'une doc créée avec mon pplication ClassFuncDoc (http://www.phpcs.com/codes/PHP5-CLASSE-DOCUMENTATION-CLASSES-FONCTIONS_35950.aspx) accessible dans docs/francais/index.html. Modification des classes de personnages/monstres, et de l'interfaace de combat.
02 mars 2006 17:21:44 :
Petites modifs générales
07 mars 2006 15:24:53 :
Quelques ajouts
23 mars 2006 15:22:33 :
Petit ajout pour plus tard : la classe xmlserialize
23 mars 2006 16:34:26 :
bug fixing

 Sources du même auteur

Source avec Zip ASTUCES/HACK PHP
SQUELETTE DE GESTION DES DROITS
[PHP 5.1] CLASS STRING : NOUVEL EXEMPLE SUR LA SPL
Source avec Zip Source avec une capture [PHP 5.1] PHOTOPHOP (PHPDRAW 2)
Source avec Zip Source avec une capture [PHP5.1] O-LOC : CLASSE ET BACKOFFICE D'INTERNATIONALISATION

 Sources de la même categorie

Source avec Zip JEU DE PUZZLE par mldvb
Source avec Zip QUIZZ - LES ÉNIGMES DE ONCLE HUB par fra1ft
Source avec Zip Source avec une capture MOTEUR DE RENDU DE FICHIER 3D (WAVEFRONT OBJ POUR LE MOMENT)... par ciberrique
Source avec Zip [POO] JEU DE KEMO OU DE PENDULE par phpAnonyme
Source avec Zip Source avec une capture RUBIX CUBE par coucou747

 Sources en rapport avec celle ci

Source avec une capture INTÉGRER À UNE BASE DE DONNÉES DES COORDONNÉES GÉOGRAPHIQUES... par slhuilli
Source avec Zip Source avec une capture MOTEUR DE RECHERCHE SUR BASE MYSQL FULLTEXT ET BOOLEAN AVEC ... par cod57
Source avec Zip Source avec une capture TODO LIST (AJAX/PHP5) par VinceMonkeyz
Source avec Zip Source avec une capture AJAX MAP EXPLOREUR : FRANCE par djine
Source avec Zip Source avec une capture AJAX MAP CREATOR : CARTE INTERACTIVE POUR UN JEU EN PHP & JA... par djine

Commentaires et avis

Commentaire de FhX le 26/01/2006 20:02:33

C'est pas mal, j'ai pas essayé encore mais je vais faire une remarque strictement 'codifiant' parlant :)

Chaque méthode de classe fait passer les arguments de méthodes par références et non par copie (depuis PHP5). De ce fait, l'utilisation de & n'est plus à utiliser.
Pour chaque méthode (surtout setDisplay(), setPerso()), tu fais un test genre ( if is_array() ) ou ( if is_string ), tu devrais plutot faire :
public function setDisplay( array $aOption ) {
}

Ce qui évite de faire le test, et de ce fait ne renverra plus false (car j'imagine que tu ne fais pas de test de toute facon de ces méthodes :p).
De plus, tu utilises beaucoup de return false; alors qu'il vaudrait mieux utiliser les exceptions dans ces cas la. Je prend exemple pour le constructeur... j'ai du mal à imaginer un test sur un return true/false lors de l'instanciation d'une classe. Genre : ( if $x = new Object; )... Nononon la prog objet permet maintenant d'utiliser les exceptions grâce (ou non) au try/catch !
try {
  $x = new Object;
} catch (Exception $e) {
  // die($e->getMessage());
  // echo $e->getMessage();
  // fputs($e->getMessage();
}
Bref, les possibilités sont immenses qu'un simple TRUE/FALSE qui peut être utilisé avec un meilleur rendement ! De plus, ca évite les sorties de méthodes de type Mixed... genre String/false !

Et je vais finir ce soir pour ton __wakeup() :)
Pas besoin de rétablir les propriétés de de classes.. ca se fait tout seul :)

Voila voila :)

Commentaire de malalam le 26/01/2006 20:15:08 administrateur CS

hello FhX,

ça va ?

Ouais, pour le array, tu as raison, je n'ai pas encore pris cette habitude. Je changerai ça ce we.
Et pour le &, pareil, j'ai cette habitude d'utiliser encore le passage par référence...je changerai aussi ;-)
De ttes façons, pour ce que ça change au code...

En fait, j'admets avoir globalement fait peu de tests. Simplement parce que à la moindre erreur,
l'objet omap n'a plus d'intérêt : plus rien ne marchera ;-) Ce n'est pas un objet global, comme
celui d'une classe d'abstraction bdd, qui sera utilisée tout le long d'un projet. C'est un tout, une
appli unique, qui n'a d'existance que par elle-même. Donc si un mauvais argument est passé...on renvoit
false, et basta. Parce que de toutes façons, on ne peut pas continuer le traitement.
Ceci dit, tu as raison, c'est une mauvaise excuse ;-) Je mettrai la gestion des erreurs en priorité, avant
la 3d iso et cie...ce sera plus propre de toutes façons. Donc, j'adhère :-)

Pour le wakeup, je sais que c'est le cas en théorie. Manque de bol, sans, ça a planté (mon objet revenait
avec ses propriétés par défaut). Je dois avoir mal goupillé mon truc.
Mais de toutes manières, à la base, il est là pour autre chose, qui n'est pas encore implémenté dans cette
version CS.

Prochainement, donc, la gestion d'erreurs :-) La gestion d'objets et d'évènements divers (combats, rencontres, descriptions...)et si tout ça marche, un petit jeu en 1 player only ;-) rapide, pour montrer les possibilités.

Commentaire de FhX le 26/01/2006 20:16:53

Autrement, j'aurais presque partager la classe en 2.

Classe principal : La carte.
Classe secondaire (en relation avec la première) : Le bonhomme à bouger

Ca aurait peut-être allégé le tout. Je pense mais je n'en suis pas sur !

Commentaire de malalam le 26/01/2006 20:18:07 administrateur CS

pour le typage dans les arguments de la fonction, je duis d'autant plus impardonnable
que c'est toi qui m'avait faiut découvrir cette possibilité php5, dans les commentaires d'un
autre source... ;-)

Commentaire de malalam le 26/01/2006 20:24:14 administrateur CS

En fait, pas en l'état.
La position courante, j'en ai besoin pour la map, et pour le personnage.
Le seul ajout, pour le moment, pour le perso, c'est 1 ligne dans la méthode __toString, et 1 entrée
dans le tableau d'options globales...lol. C'est peu. Pour un si grand héro... ;-)
Mais à terme, tu as raison, ce sera nécessaire. Pour un moteur de jeu complet, en tous cas...
Le personnage, là, n'est pas un élément réel...c'est juste une image, un p'tit plus, pour embellir
la chose.
Dans le cadre d'un jeu il faudra une classe à part, évidemment, avec ses propres propriétés et méthodes.
Mais ça ne changera rien à la classe omap actuelle, en fait. Je ne pense pas que je lierai les 2 réellement.
Simplement, omap renverra la position du personnage (aPos).

Commentaire de FhX le 26/01/2006 20:34:00

Nan moi ce que j'aurais fait avec 2 classes à part :)

Classe omap {

// Génération de la carte
__construct($chemin_de_la_carte);

// Visibilité du perso
getDisplay();

// Toute méthode qui touche à la carte en elle-même !
}

Classe Perso {

// Génération du personnage lors de l'instanciation (initialisation de la carte éventuellement)
// Si c'est du multi-cartes, il faut prévoir une méthode de plus !
__construct($avatar, etc...)

// Fait bouger le personnage (en relation avec la classe Map pour savoir
MoveTo($x, $y)

// Lors de la serialisation, on oublie pas de garder les infos de la carte :)
__sleep()

// Lors de la déserialisation, bah... l'inverse quoi  !
__wakeup()

// etc...

}

Et encore, je crois qu'on peut faire encore mieux que moi :)

Commentaire de malalam le 26/01/2006 20:40:27 administrateur CS

ca je suis sûr qu'on peut faire encore mieux ;-)
J'ai l'intention de, lol...mais pour ça, il faut mettre en pratique, donc pousser
jusqu'à développer un jeu complet, pour voir de quoi on a besoin réellement, et faire évoluer
le moteur générique. C'est ce que je compte faire.
Je n'avais pas vu les choses à ta manière...pourquoi pas en effet. C'est plus logique, dans
le sens ou le perso EST le centre, logiquement.
Pourquoi pas... :-) Je verrai ça aussi ce we, si j'avance là-dedans.

Commentaire de FhX le 26/01/2006 21:19:45

Voui... si t'as besoin d'aide demande toujours, on sait jamais ;)
(bien que je sois occupé en ce moment sur la partie objet de mes classes visiteurs/membres/admins/banni etc... :) )

Commentaire de LaTatadu91 le 02/02/2006 15:57:34

Salut malalam,
dis moi t'es toujours dans les bons coups
voila je m'interesse de plus en plus a ajax (fetes des fleurs)
j'ai compris le systeme pr par exemple afficher un tableau avec settimer qui lance une requete SQL toutes les 10sec
afin de faire un update de mes valeurs contenues ds mon tableau

je me demandais si cette utilisation pouvait s'apliquer aux images
en effet,je créé un diagramme a partir de données MYSQL
que j'affiche ds ma page
mes données sont updatées toutes les 10sec du coup je voudrais faire un update de mon graph aussi
j'ai essayer avec ajax mais apparement ca ne marche ou du moins pas directement...
je n'ai pas trop lu tes sources mais je pense que tu as deja du te pencher sur ce pb
si c'est le cas je requiert ton aide uen fois de plus
ou du moins ton experience

merci d'avance

Commentaire de malalam le 02/02/2006 16:01:34 administrateur CS

Hello Latata, tu devrais poser cette question sur le forum, qu'on soit plusieurs à tenter d'y répondre :-)

fais le, je te dirai ensuite ce que j'en pense :-) (sur le post dans le forum, évidemment!)

Mais disons que oui, je me suis penché dessus...sur un projet que j'ai oublié de continuer (tu m'y refais penser là lol) : un éditeur graphique en php, avec Ajax. Donc oui j'ai mon idée déjà :-)

Commentaire de LaTatadu91 le 02/02/2006 16:07:59

oki je post ca de suite

Commentaire de obcstaff le 10/02/2006 11:58:25

Un tuto sur la création de moteur de deplacement sur map serait le bienvenue...parole de débutant!!!

Commentaire de obcstaff le 10/02/2006 11:59:33

ooops j'ai oublier de le dire; également un tuto sur ajax et tout ce qui s'en suit: re-parole de débutant!!!

++

Commentaire de malalam le 10/02/2006 13:46:18 administrateur CS

Lol, je n'en ferai pas...peut-être sur Ajax, quand je maîtriserai tous les tenants et les aboutissants de cette technique.
Parce que pour ce qui est des bases, il y a largement assez de tutos sur le sujet, sur le net. Mais aucun réellement poussé justement... ;-)
Mais pas sur les moteurs de déplacement sur une map, désolé. Il y a trop de façons de faire.

Commentaire de malalam le 01/03/2006 15:39:01 administrateur CS

Pour ceux que ça intéresse, j'ai fait un gros ajout : un début de moteur de combat (juste un début hein), et un début de création de classes pour les héros et les monstres.
Le moteur de combat est jouable (et testable : vous lancer index.php, et vous vous baladez jusqu'à ce que vous rencontriez un combat...c'est simple, sans frioriture du tout, et pas du tout complet, mais ça tourne :le but est de montrer le dynamisme possible). Il est basé sur du JS essentiellement, mais le php entrera évidemment en jeu beaucoup plus que ça :-) SDon point fort : il est dynamique! Ce n'est pas du tour par tour comme on le voit souvent sur le net, c'est du...ben vous verrez ;-)

Je n'ai pas implémenté tout ce que je voulais, loin de là...mais dans quelques temps (jours, semaines, e ne sais pas encore...), je sortirai un mini rpg complet pour montrer ce qu'on peut faire avec ce moteur (je rajouterai alors d('autres évènements, création de personnages, de monstres, etc...).

Voili voilà... :-)

Commentaire de FhX le 01/03/2006 18:28:11

Ahhh.... !!!

Chui en fin fin fin fin fin de maladie :p
Jvais enfin pouvoir regarder ca de plus près !!! =)

Pis jvais pouvoir faire mumuse au niveau du dev de tes classes tiens. Juste histoire de savoir si je vaux encore quelque chose :p

Commentaire de malalam le 01/03/2006 19:01:19 administrateur CS

Je pense pas que t'aies de soucis à te faire lol... ;-)
Ceci dit, là, les classes sont basiques. Je mettrai à jour demain, j'ai avancé encore un peu,
pour intégrer un peu plus les classes PHP au moteur de combat.
Et en vue d'une vraie création de personnage et de monstres, évidemment;
ça va se faire en parallèle.

Et ravi que tu ne sois plus malade ;-)

Commentaire de williamprotti le 12/03/2006 11:53:10

Bonjour, j'ai une érreur avec cette function

Parse error: syntax error, unexpected T_STRING in C:\Serveur\xampp\htdocs\map\map.php on line 63

Je crois qu'il me manque le XML! Merci pour cette source! J'espère que je vais la comprendre!lol

Commentaire de malalam le 12/03/2006 12:35:47 administrateur CS

Hello,

tu dois changer ton php.ini, et mettre le short_open_tags à Off. Sinon, l'interprêteur php ne comprends
pas le tag d'ouverture du xml : <?xml et le prend pour un tag d'ouverture php : <?

Commentaire de williamprotti le 12/03/2006 14:17:53

Merci Malalam! Mais maintenant j'ai une autre érreur!

Fatal error: Cannot clone object of class SimpleXMLElement due to 'zend.ze1_compatibility_mode' in C:\Serveur\xampp\htdocs\map\class\oevents.cls.php on line 36

Je dois faire quoi?
Merci!

Commentaire de malalam le 12/03/2006 20:07:21 administrateur CS

Tien...regarde dans php.ini, cette valeur. Si elle est à 0, mets la à 1, si elle est à 1, mets la à 0.
A priori, elle est à 1, chez toi.

Commentaire de williamprotti le 12/03/2006 20:18:41

Arf je n'arrive pas a trouver! ça ressemble a quoi?


;extension=php_domxml.dll
;extension=php_xmlreader.dll
extension=php_xmlrpc.dll
;extension=php_xmlwriter.dll

c'est tout ce que j'ai trouver!

Commentaire de williamprotti le 12/03/2006 20:29:14

Cruonit wrote:

I tryed this simple PHP script that uses SimpleXML control:
<?php
   $users = simplexml_load_file('baza.xml');
     echo $users -> name;
?>


and i got:


Fatal error: Cannot clone object of class SimpleXMLElement due to
'zend.ze1_compatibility_mode' in /mnt/storage/users/w/i/p/wipe/formular.php
on line 381



a, zend.ze1_compatibility_mode is a php.ini setting - it needs to off in your case.
b, your test script is 3 lines ... which begs the question of where the other
378 lines are? are you maybe using auto_prepend to include stuff automatically?

J'ai trouvé ça sur Google, il a aussi un problème!

Est-ce que c'est extension=php_sdo_das_xml.dll ? Si oui, et bien il bug! Il dit qu'il est introuvable! Mais il est bien là!

Commentaire de malalam le 12/03/2006 20:31:14 administrateur CS

Non, zend.ze1_compatibility_mode, c'est une constante, comme short_open_tags.
Apparemment il ne veut pas que tu "clones" l'objet xml...ça va demander pas mal de modifs dans le code, si tu ne modifies pas cette valeur.

Commentaire de williamprotti le 12/03/2006 20:32:13

Non c'est bon !! J'ai trouvé! :D
; Enable compatibility mode with Zend Engine 1 (PHP 4.x)
zend.ze1_compatibility_mode = Off

Voilà! Mais maintenant j'ai un autre problème!
Fatal error: Call to a member function getCar() on a non-object in C:\Serveur\xampp\htdocs\map\fight.php on line 71

Commentaire de williamprotti le 12/03/2006 20:34:25

Oui, j'ai modifié! merci pour ton aide!

Commentaire de malalam le 12/03/2006 20:36:05 administrateur CS

dis donc, pourquoi ça plante autant chez toi, lol???
Là je ne sais pas...$hero est un objet, instancié par une désérialisation de l'objet.
Vérfie que tes sessions passent bien.
La désérialisation se passe ligne 11.
Si ça ne passe pas, tu peux copier l'instnciation, pour test, qui se trouve dans index.php (de $hero...tu copies
la ligne, tant pis).


Commentaire de williamprotti le 12/03/2006 20:43:17

Je suis désolé, je te comprend pas trop! :S

Commentaire de williamprotti le 12/03/2006 20:45:45

Arf, je voudrai tellement savoir(comprendre) AJAX!

Commentaire de williamprotti le 12/03/2006 20:47:32

Ha c'est bon! J'ai carrément enlevé les batailles! lol

Commentaire de williamprotti le 12/03/2006 20:54:58

Mais franchement c'est beau ton code! (Bon je suis pas programeur, je suis que amateur... peutêtre que c'est moi qui est nul lol!) mais je le trouve impréssionant!

Commentaire de williamprotti le 12/03/2006 21:21:12

:D Mais c'est tout ce que je recherchais!!

Commentaire de malalam le 13/03/2006 07:49:32 administrateur CS

Merci merci :-)

Je vais voir d'où ça peut venir ton problème avec les batailles.
C'est curieux quand même :-)

Commentaire de malalam le 02/04/2006 11:28:25 administrateur CS

Petite pub : ce package a été nomminé pour les innovations awards de phpclasses, ce mois-ci :-)
Donc, vous seriez très sympas si vous veniez voter pour lui, tant qu'à faire ;-)

http://www.phpclasses.org/browse/package/2956.html

Mercii ;-)

Commentaire de LaTatadu91 le 03/04/2006 14:37:42

je vote de suite pour toi mon gars.... ;)

Commentaire de malalam le 03/04/2006 14:43:37 administrateur CS

Lol merci Latata, c'est très gentil :-)

Commentaire de MadCat81 le 17/04/2006 15:21:12

Je vais suivre les mises à jour de ce code avec un grand interet :o)

Commentaire de malalam le 18/04/2006 07:59:09 administrateur CS

MadCat => Merci :-) Elles seront lentes, je manque vraiment de temps. Mais nous sommes maintenant une
petite équipe, alors avec un peu de chance, ça ira un peu plus vite qu'escompté :-)

Commentaire de mrdarkevil le 19/04/2006 21:14:03

Salut, ca a l'air d'etre du bon travail mais peux tu me dire comment tester rapidement ton programme? Merci

Commentaire de malalam le 20/04/2006 07:24:49 administrateur CS

Hello mrdarkevil,

très franchement, avec :
php 5.1
register_globals à Off
short_open_tags à Off
register_long_arrays à Off (quoi que ça ne doit pas avoir d'impact, ça)

et en lançant index.php, ça devrait suffire et tourner tout seul.
short_open_tags à Off EST TRES important. PHP 5.1 aussi.

Commentaire de mrdarkevil le 21/04/2006 22:13:38

Ca marche, j'ai du mal installer php5 sur easyphp, j'ai installer wamp et ca roule :)

Très sympa en tout cas, je vais suivre la suite avec attention.

Commentaire de jeanrem le 02/08/2006 18:25:00

J'ai un petit problème qui vient de la lign xml dans le fichier /map.php

Merci !!

Commentaire de malalam le 03/08/2006 08:54:34 administrateur CS

JeanRem => j'ai déjà donné la solution à ça ;-) :
tu dois changer ton php.ini, et mettre le short_open_tags à Off. Sinon, l'interprêteur php ne comprends
pas le tag d'ouverture du xml : <?xml et le prend pour un tag d'ouverture php : <?

Ou alors, tu vires l'en-tête XML. Mais c'est moins bien ;-)

Commentaire de jeanrem le 03/08/2006 13:22:13

Ok, merci je vais essayer, pour précision, je suis chez free, et je ne sais pas si php5 est dans les options. Tu crois que cela peut venir de cela ?

Commentaire de malalam le 03/08/2006 13:23:55 administrateur CS

Si tu n'es pas en PHP5, pas la peine d'essayer de faire tourner ce code.
Mais si tu es en PHP5, comme tu n'auras pas la main sur les serveurs de Free ^^
tu n'as qu'à effacer les en-têtes XML dans les fichiers PHP.

Commentaire de jeanrem le 03/08/2006 13:29:53

J'avais trouvé un site chez free qui avait modifié ton code et avait rendu le script utilisable sur free.
Mais a mon avis ca demande d'énormes modifications.

Commentaire de malalam le 03/08/2006 13:55:04 administrateur CS

Je crois que FREE autorise php5 tu sais.
En dehors de ça, concernant le short_open_tags qui doit être à On chez Free malheureusement, je te l'ai dit, c'est facile, il suffit de virer les en-têtes xml des fichiers php. C'est tout.

Un site sur Free qui utilise ce code ? Ah...si tu le retrouves, je suis preneur.

Commentaire de Epoc22 le 11/10/2006 15:04:30

Ca c'est une p****n de source ! Je suis sur le c*l ! Aller 9/10

Commentaire de malalam le 11/10/2006 15:13:08 administrateur CS

Merci :-)

Faudra que je trouve le temps de rebosser dessus quand même... :-(

Commentaire de bricaland le 16/12/2006 21:02:55

Bonjour, je trouve cette source très bien. Cependant j'ai uelques petits problème j'ai mis la page index.php en include or dès que je clique pour déplacer le personnage la page se recharge blanche. Idem avec des frames. Comment puis-je résoudre se petit désagrément?

Merci.

Commentaire de malalam le 18/12/2006 10:59:58 administrateur CS

Hello,

cette version a un défaut au niveau du retour, elle réécrit toute la page (je voulais tester). Je travaille à une nouvelle version. Ceci dit...pourquoi mets tu la page en include ? Ce n'était pas le but. Et cela fonctionne très bien sans. Il y a peu de mise en page, le but était de créer sa mise en page autour.

Commentaire de bricaland le 18/12/2006 18:58:30

En fait je le veux en include car j'ai un menu à côter de la page qui lui n'est jamais rechargé à chaque changement de page.

Commentaire de malalam le 19/12/2006 08:12:49 administrateur CS

C'est impossible avec cette version de par le choix que j'ai fait d'utiliser mes classes dans la page principale, sans découper en de multiples scripts serveurs appelés par Ajax. La page principale est, de ce fait, la page appelante et appelée par Ajax. Et Ajax la réécrit avec les en-têtes html.
Il faudra que tu attendes ma nouvelle version (ça peut prendre du temps, désolé, car de temps, je manque cruellement).

Commentaire de aKheNathOn le 20/06/2008 19:49:37

Un truc que je trouve dommage, c'est de partir sur du HTML / AJAX au lieu de choisir un moteur plus dynamique genre flash.

En plus t'as fait de l'isométrique alors qu'en flash c'est pas si compliqué t'as même un moteur de rendu 3D.

Un point très positif vu tes sources en poo, les adaptations seraient faciles à faire.

T'en est où au niveau de ton projet ? Des news depuis ?

Commentaire de malalam le 23/06/2008 16:19:29 administrateur CS

Hello Akhe,

pour reprendre point par point :
- le but pour moi est vraiment de le gérer en xhtml + js. Déjà, je suis une brèle en Flash ;-) Ensuite, cette technologie m'intéresse moins. Donc dans un 1er temps, je compte me consacrer à ces technos, puis si un jour je parviens à finir ce foutu projet, je penserai à ses évolutions. Et une de ses évolutions intéressantes serait en effet Flash, je suis tout à fait d'accord.
- je compte gérer aussi l'iso, c'est un peu plus compliqué en js mais ça reste très faisable. Pour être franc, je n'ai jamais trouvé de "tiles" qui me plaisent en iso, lol, donc je n'ai pas trop cherché.
- merci
- il est au point mort depuis longtemps MAIS pas abandonné. J'espère trouver le temps...en fait, je veux réécrire un nouveau moteur de jeu, complètement. La structure des classes ne me plait pas, que ce soit en php ou en js. De plus, de l'eau a coulé sous les ponts depuis cette version...j'ai découverts de nouveaux jouets ;-) et PHP a fait pas mal de progrès. Je veux donc tout remettre à plat. Mais seul, c'est difficile quand on a un vrai taf à côté (où je développe aussi, donc je n'ai pas tjrs envie de coder aussi à la maison).

Ceci dit, en ce moment, je suis assez chaud pour reprendre donc ça pourrait vite arriver. J'ai déjà une nouvelle structure plus aboutie, pour tout ce qui est "personnages", "objets", "évènements" etc. Le système de jeu quoi. Je dois encore me pencher sérieusement dessus pour rendre ça le plus malléable possible, puis attaquer un nouveau moteur de rendu, et enfin les outils de création à proprement parler.

Vlà :-)

Commentaire de Toadstar le 03/03/2010 15:10:22

Bonjour,
Je suis vraiment nul en php. :p
J'aimerais savoir pourquoi pour moi sa ne marche pas. Pour-temps je l'ai ouvert avec firefox sur index.php.
                                                  Merci d'avance

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

2 prob dans une demarche de creation de moteur de jeu (jdr) php [ par testetrtr ] salut a tous j'ai besoin d'aide dans deux choses:&nbsp; voila , je suis en train de cree un moteur de jeu (jdr) en php /sql . mais je bloque dans 2 e moteur de recherche AJAX [ par djlghoul ] j'ai un site web mais j'aimerai bien l'organiser parceque il est totalement riche en tout les modules et les composants parmi eux moteur de recherche moteur de recherche simple [ par donhatem ] Bonjour, je suis un peu novice en programmation, je veux que vous m'aidiez ou vous me donner quelque inforamtions : je cherche à créer un petit moteur Api Google Maps ok en local mais pas en online [ par prachou ] Bonjour à tous ! Après avoir parcouru en vain la toile je me décide a créer un post pour mon problème auquel je n'ai toujours trouvé aucune solution. pb API google map et bdd php/sql [ par Anthosrc ] Bonjour à tous,  Je souhaite intégrer dans mon site un affichage de résultats d'un formulaire dans l'api google map. Voilà mon code :[cpp]&lt;?php    persistance et passage d'objets en POO ??? [ par lolymeupy ] Bonjour, j'ai déjà fait de la POO, mais pas en Php, et je ne sais pas trop comment gérer la persistance et la transmission des objets. Je sais qu'on p GOOGLE MAP ITINERAIRE API [ par lounkokobi270987 ] BonjourQuelqu'un saurait t'il ou trouver l' API de google map et comment tracé un itinérraire grace a deux chaine de caractères contenant les destinat Debutant en Ajax [ par TheGorgo ] Bonjour, Je cherche de l'aide pour un script en ajax. J'ai cherché des tutoriaux un peu partout, mais je ne comprends toujours pas. Je pense que ce q Validation formulaire anti moteur par recopie d'un texte [ par deud5 ] Bonjour,Je voudrais créer un espace membre pour mon site, avec lors de l'inscription d'un utilisateur, une validation par recopie d'un mot qui se met coordonée google map et earth??? tres urgent [ par lassad_haddaji ] salut a tous!jai un probleme urgent pour finir mon pfe, mon probleme est le suivant:j'enrgistre les coordonnées(latitude et longitude) de google map d


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,103 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales