JeuWeb - Crée ton jeu par navigateur

Version complète : Création de map
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Bonjour,
J'espère avoir posté dans la bonne section, au cas où déplacez si besoin.

Cette fois-ci je me suis définitivement décidé pour un jeu de stratégie-gestion et j'ai décidé de commencer par ce qui est le plus embêtant à coder...

Comme vous l'aurez compris, il va falloir que je crée une map pour mon monde virtuel. IL n'est pas ici question de graphisme, parce que pour le moment le graphisme je m'en fiche royalement (je ferai assez parler de moi à ce sujet quand le jeu sera à peu près fonctionnel, si tant est qu'un jour il le soit...).
Non, je parle bien de map d'un point de vue logique de fonctionnement.

Pour situer les choses : chacune des « cases » de la map peut être soit de la terre (=1), soit de la mer (=2), ou alors les deux à la fois (la côte) (=3). Toutes les cases peuvent être utilisées.
Idéalement j'aimerais avoir au final une fonction php qui prend les coordonnées et qui me renvoie en retour le type correspondant à la case demandée.

J'aimerais savoir, selon vous, comment générer et stocker une telle map, au mieux possible.

En base, le problème que je vois c'est que si je veux faire une map de 200 * 200, ça me fait d'entrée 40K lignes, je ne sais pas si c'est très judicieux, ça me paraît un peu crétin.
En plus après si je veux faire de la recherche de chemin avec un algo genre dikjstra, ça sera un vrai bordel à faire à moins qu'on puisse faire des requêtes récursives, et encore...

- Avec un fichier, ça me paraît déjà mieux, quoique ça me paraît aussi relativement crétin de regénérer un array de 200 * 200 à partir d'un fichier qui fera au mieux 40 Ko. Au moins une fois que la map sera chargée, elle sera chargée pour de bon et pour faire des algo de recherche de chemin, c'est plus facile.

La troisième solution que j'entrevoyais était de définir la map avec des formes géométriques. Par exemple : « tous les points inclus dans le cercle de centre 50 ; 75 et de rayon 20 sont de l'eau ». Là le problème c'est que le temps de calcul est un peu plus long pour un résultat moins sympa. Et à part avec des cercles, je suis incapable de savoir si un point se trouve dans une autre figure quelconque.

Peut-être utiliser la troisième proposition pour générer un fichier ou une table remplie utilisables ensuite serait une solution ?
Je me creuse pour avoir un truc simple à utiliser une fois que la map est crée...
N.B. Les dimensions 200 * 200 sont é titre indicatifs
Salut !

Je pense que le mieux est de définir un terrain par défaut (celui qui revient le plus souvent : terre ou mer, selon ton monde). Après, tu entres dans la BDD seulement les cases qui ne sont pas le terrain par défaut. Tu vas au moins diviser par deux ou trois le nombre d'entrées dans ta base. Du point de vue de l'affichage, ça te permet également d'utiliser une seule image de fond correspondant à ton terrain par défaut. Cette technique présente l'intérêt non négligeable de limiter le nombre de div affichées en html (l'utilisation de tableaux n'a pas d'utilité pour cette méthode), ou de clips chargés en Flash.

@+
pas con, comme idée ^^
Citation :Je pense que le mieux est de définir un terrain par défaut (celui qui revient le plus souvent : terre ou mer, selon ton monde). Après, tu entres dans la
BDD seulement les cases qui ne sont pas le terrain par défaut. Tu vas au moins diviser par deux ou trois le nombre d'entrées dans ta base.
Bonne astuce, je n'y avais pas pensé. Mais tu resterais fixé sur l'enregistrement en base de données plutôt qu'un fichier ?

J'ai fait quelques tests avec un fichier bidon pour une carte de 100 x 100 (10 Ko). Petit test rapide, il me prend 700 à 800 ms en local pour me trouver un chemin correct entre 0;0 et 99;99 en évitant les obstacles. (petite précision, j'ai un PC pourri : 960MHz, mais ça me paraît quand même encore trop long, des réflexions là-dessus ?)

AVec la BDD, le problème c'est que je ne vois vraiment pas comment faire pour trouver un chemin valide entre deux points avec l'algo de Dikjstra, sans faire éclater le nombre de requêtes ou le nombre de résultats à récupérer. Un select * pour récupérer 10000 lignes, bof, autant le faire dans un fichier. Et les requêtes SQL à répétition dans des boucles while, c'est moyen...

Citation :Du point de vue de l'affichage, ça te permet également d'utiliser une seule image de fond correspondant à ton terrain par défaut. Cette technique présente l'intérêt
non négligeable de limiter le nombre de div affichées en html (l'utilisation de tableaux n'a pas d'utilité pour cette méthode), ou de clips chargés en
Flash.
Et pourquoi pas de tableau ? Ca me paraît justement particulièrement indiqué ici. IL serait facile d'afficher une partie de la map en donnant les coordonnées sur la première ligne et la première colonne, et ensuite, une image terre, mer ou côte dans chaque cellule (soit au pire 33 images différentes possibles si j'ai bien calculé, mais bon je verrai ça plus tard, pour le moment je mets ça de côté).

Il ne vaut même pas la peine de parler de flash : je suis un utilisateur déficient visuel, je tiens à l'accessibilité, d'autant plus que je suis moi-même concerné. En l'occurence, flash ne l'est pas et donc en toute logique je hais flash.
QuentinC a écrit :Bonne astuce, je n'y avais pas pensé. Mais tu resterais fixé sur l'enregistrement en base de données plutôt qu'un fichier ?

J'utilise moi aussi un fichier Wink, c'était une façon de présenter le truc.


QuentinC a écrit :Et pourquoi pas de tableau ? Ca me paraît justement particulièrement indiqué ici. IL serait facile d'afficher une partie de la map en donnant les coordonnées sur la première ligne et la première colonne, et ensuite, une image terre, mer ou côte dans chaque cellule (soit au pire 33 images différentes possibles si j'ai bien calculé, mais bon je verrai ça plus tard, pour le moment je mets ça de côté).

Ce n'est pas le nombre d'images qui pose problème, mais bien le nombre de balises envoyées au navigateur. Avec un tableau, tu dois afficher toutes les cases tandis que tu pourrais afficher seulement quelques cases spéciales dans des divs. Mais c'est moins facile à gérer (pas beaucoup, il faut juste que les positions des divs soient calculées en absolute).
Citation :Ce n'est pas le nombre d'images qui pose problème, mais bien le nombre de balises envoyées au navigateur. Avec un tableau, tu dois afficher toutes les
cases tandis que tu pourrais afficher seulement quelques cases spéciales dans des divs. Mais c'est moins facile à gérer (pas beaucoup, il faut juste que
les positions des divs soient calculées en absolute).
Ah, d'accord, je comprends où tu veux en venir. Question accessibilité ce n'est pas top, et en plus étant donné ma déficience je préfèrerais rester le plus indépendant du CSS possible. De cette façon, ça me permet de coder le jeu php tranquille, et le moment venu quand j'aurai quelque chose de solide et plus ou moins fonctionnel/utilisable, demander à un ou plusieurs bénévoles pour m'aider à faire ce que je ne peux pas trop faire, c'est-à-dire concrètement, un design qui tient la route. Si tu vas sur mon site web généraliste, tu verras que le design est très simpliste par exemple.
Ok, tu as raison, un tableau est compréhensible même sans CSS et ma méthode produit un truc inutilisable pour un déficient visuel. Je n'y avais pas du tout pensé... Bonne chance pour la suite de ton projet Wink
Merci. Ce qui fait dévier un peu le sujet que j'avais posé au départ, mais c'est pas grave.