OVH Cloud OVH Cloud

Creation map de jeu

7 réponses
Avatar
none
Bonjour,

Je viens d'entre-prendre un petit projet web mais étant débutant en PHP
et n'ayant pas l'expérience de ce genre de projet je bloque sur un petit
truc.

Le projet consiste en un petit jeu de "rôle", il me faut pour cela
générer une carte (map) de jeu qui pourra évoluer (en taille
principalement) au fil du temps. C'est la génération de cette carte qui
me pose problème.

Je vois plusieurs moyens pour générer cette carte, la solution qui me
semble la plus simple serai de générer un tableau HTML à l'aide de deux
boucles for() imbriquées. A l'aide des indices ($i et $j) de ces deux
boucles je pourrai avoir des axes X et Y. Dans la DB il y aurai l'image
à insérer dans chaque case. Les images à insérer sont par exemple une
foret, une maison, une montagne ... Ainsi je pourrai facilement générer
une map et la faire évoluer en taille au fil du temps.

Pensez-vous que ce soit propre ? (Ca fera beaucoup de traffic au niveau
de la DB pour savoir quel image insérer dans chaque case), Avez vous des
idées qui pourrai me permettre de faire cela plus proprement ?

Je suis preneur de toutes bonnes idées.
Merci ;)

7 réponses

Avatar
Will
Le 06/08/2005 03:14 PM (à peu de choses près), none a intelligemment dit...
Pensez-vous que ce soit propre ? (Ca fera beaucoup de traffic au niveau
de la DB pour savoir quel image insérer dans chaque case),


je ne sais pas ce que tu veux faire avec ta carte, mais pense que si tu dois
recharger à chaque fois la page, ça va prendre un temps fou...

Avez vous des
idées qui pourrai me permettre de faire cela plus proprement ?


perso, je pense que le php n'est pas fait pour faire du jeu en lui même.
envoyer des données différentes selon l'avancement du jeu, peut être, mais
c'est vraiment pas fait pour. à la limite, javascript peut te faire des
trucs un peu plus "rapides", notamment parce que c'est exécuté coté client
(donc sans rechargement de page). le plus courant étant il me semble les
"applications" flash.

--
Will

Avatar
Kybla
Will wrote:
Le 06/08/2005 03:14 PM (à peu de choses près), none a intelligemment dit...

Pensez-vous que ce soit propre ? (Ca fera beaucoup de traffic au
niveau
de la DB pour savoir quel image insérer dans chaque case),



je ne sais pas ce que tu veux faire avec ta carte, mais pense que si tu
dois recharger à chaque fois la page, ça va prendre un temps fou...

Avez vous des
idées qui pourrai me permettre de faire cela plus proprement ?



perso, je pense que le php n'est pas fait pour faire du jeu en lui même.
envoyer des données différentes selon l'avancement du jeu, peut être,
mais c'est vraiment pas fait pour. à la limite, javascript peut te faire
des trucs un peu plus "rapides", notamment parce que c'est exécuté coté
client (donc sans rechargement de page). le plus courant étant il me
semble les "applications" flash.

J'y ai pensé, mais je ne fais pas d'y tout de Flash et je n'ai pas le

temps de m'y mettre, sinon j'ai pensé à un applet Java mais c'est
pareille je n'en fais pas et j'ai pas le temps de débuter un
apprentissage dans ce language ...


Avatar
dmetzler
Ton idée me semble assez bonne pour un début... Si tu ne veux pas
trop de traffic sur la base de données, tu peux utiliser un cache
étant donné que ta carte ne va pas changer toutes les secondes.

Tu peux même inverser la chose : tu génère tous les fichiers XY.png
que tu affiche dans un tableau HTML de manière statique.
Ton script PHP ne fait que regarder si l'image XY.png doit être mise
à jour depuis la dernière fois et la met à jour si besoin. On passe
alors d'un page dynamique avec un cache à une page statique qu'on
vient mettre à jour quand il faut (ce qui est mieux ;-p )

Pour regarder ce qu'on peut faire dans ce genre de chose, Google Maps
est un sublime exemple : http://maps.google.com/ (mais ça a pas l'air
de marcher aujourd'hui).
Avatar
Kybla
Pour regarder ce qu'on peut faire dans ce genre de chose, Google Maps
est un sublime exemple : http://maps.google.com/ (mais ça a pas l'air
de marcher aujourd'hui).


Ouha ! C'est exactement le résultat que je voudrai obtenir !

C'est vrai ma carte ne va pas changer toutes les secondes (si ce n'est
une case de coordonnée XY de temps en temps ...)

La partie qui gère la carte du site que tu viens de me donner est fait
en PHP ??? Puisqu'on est dans les questions j'aimerai savoir dans quel
language sont faites les petites flèches pour naviguer sur la carte.

Par la même occasion si quelqu'un connait des sites de références
contenant des tutoriaux qui pourrai me faire parvenir à effectueur ce
genre de travail je lui en serai reconnaissant de me les noter :)

Pardonnez mon ignorance dans la matière, mais le développement Web
m'intérèsse de plus en plus ... (surtout quand je vois ce genre de site!)

Merci pour votre aide !

Avatar
bibi.skuk
Alors, pour faire une carte pour un jeu, le premier conseil, c'est de
ne pas stoquer les informations de position des personnages dans la
carte en elle même...

Si dans ta carte se trouve uniquement les indications de
decors/textures, tu ira deja plus vite... et surtout cela restera assez
statique... (les personnages ne sont pas sur la carte, il peuvent
bouger tout ce qu'il veulent, ils ne changeront pas le monde...)

Avec cette table statique, plutot que de la stocker avec une Db (c'est
vraiment lourd... compter 19ko pour une carte de 20*20) , on stocke
tout ca dans une image png...

Le pixel x,y vaut r,v,b,a (les canaux de couleurs) ce qui nous laisse
pas mal de possibilités de stockage... (une couche de map par canal,
des evenements, etc...)

Et avec ce type de stockage, ici, une image de 20*20, c'est ridicule
(environ 200 octets) par rapport à la db... Et c'est plus rapide...

Ah oui, pour y acceder :

imagecolorat( ) recupere l'index, et imagecolorsforindex( ) donne un
tableau associatif des couleurs à partir de l'index...

<?php

$file = 'chemin/vers/mon/image.png';
$image = imagecreatefrompng( $file );

$taille = getimagesize( $file );
$width = $taille[0];
$height = $taille[1];

for( $y = 0; $y < $height; $y++ )
{
for( $x = 0; $x < $width; $x++ )
{
$color_index = imagecolorat( $image , $x , $y );
// ce truc la est illlisible...
$color = imagecolorsforindex( $image , $color_index );

/* Voila, maintenant, on a un tableauu associatif avec les infos de
couleurs
On peut en faire ce que l'on veux et puis voila...
*/
}
}

?>

et voilou !!
Avatar
Guillaume Bouchard
none wrote:
Bonjour,


Bonjour.

Le projet consiste en un petit jeu de "rôle", il me faut pour cela
générer une carte (map) de jeu

Je vois plusieurs moyens pour générer cette carte, la solution qui me
semble la plus simple serai de générer un tableau HTML à l'aide de deux
boucles for() imbriquées. A l'aide des indices ($i et $j) de ces deux
boucles je pourrai avoir des axes X et Y. Dans la DB il y aurai l'image
à insérer dans chaque case. Les images à insérer sont par exemple une
foret, une maison, une montagne ... Ainsi je pourrai facilement générer
une map et la faire évoluer en taille au fil du temps.

Pensez-vous que ce soit propre ? (Ca fera beaucoup de traffic au niveau
de la DB pour savoir quel image insérer dans chaque case),


Beaucoup de traffic, une requete SQL basique et une boucle sur les
résultats, encore plus basique.

<?php
$sql = "SELECT x,y,type FROM map WHERE world='tristram' ORDER BY y,x";

$types = array(
'tree' => 'tree.png';
'floor_sand' => 'sand.png');

$res = mysql_query($sql) or die($sql.mysql_error());

// On suppose que ta table est correctement remplie (pas de doublons
pour chaques cases (primary sur (x,y,world)), mais pas de cases vides

// On suppose aussi que tu ordonnes tes lignes colonnes en partant de 0

$y = 0;
echo '<table class="map"><tr>';
while($data = mysql_fetch_assoc($res)){
if($data['y'] != $y){
$y = $data['y'];
echo '</tr><tr>';
}
echo '<td><img src="'.$types[$data['type']].'"
alt="'.$data['type'].'" /></td>';
}
echo '</tr></table>';
?>

(Surement remplit de parse error, je fais plus de pascal que de php en
ce moment :()

Avez vous des
idées qui pourrai me permettre de faire cela plus proprement ?


Je pense que c'est propre. À toi de coder un cache la dessus si le
besoin s'en fait sentir, mais je pense que tu auras d'autres requetes
SQL gourmandes qu'il faudra surveiller avant.

--
Guillaume.

Avatar
Marc

Je suis preneur de toutes bonnes idées.


j'ai laissé passé le sujet pour voir un peu ce qu'il
allait en sortir. Ce que tu veux se programme simplement
en php avec la librairie graphique GD.

Il te faut creer une image dynamique en php contenant :

* le fond de carte,
* les différents points positionnés.

J'ai quelque classes php en objet si ca t'intéresse
qui permettent de premacher le travail.

A chaque clic, il s'agit de prendre en compte l'action
de l'utilisateur :

* position du clic et association a l'objet qui
est affiché.
* les classes que j'ai créé permettent cela.
Il y a un container qui gere une liste d'objet,
et chaque objet recoit l'evenement de clic et
décide s'il est concerné par ce clic.

Une fois l'interactivité réalisé, il suffit de
mettre le tout en base de données et de gerer
le jeu en equipe.

Mais j'ai l'impression que ca te depasse un peu.
C'est peut-etre ambitieux comme projet. Ne conviendrait-il
pas de commencer par quelque chose de plus simple
pour bien demarrer.