29-06-2009, 03:05 PM
(Modification du message : 29-06-2009, 03:20 PM par Sephi-Chan.)
Bien sûr, tu auras beaucoup de lignes, mais le bon côté des choses, c'est que comme tu n'agis pas directement sur les cases pendant la partie, tu peux mettre en cache la plupart des données (sous forme d'un tableau d'objet Tile sérialisé, par exemple).
Donc au final, les performances ne sont pas forcément un problème.
Cela dit, j'ai réfléchis 5 minutes à ton problème… Puis j'ai fais autre chose.
Plus sérieusement, je pense à une alternative à base de superposition de caractères ASCII. J'illustre ce que je dis puis j'explique :
L'idée est donc d'avoir plusieurs calques : l'un représentant la carte (10 unités de large sur 6 de haut dans l'exemple) et les autres des masques indiquant respectivement l'état des objets et la position des joueurs.
En superposant ces calques, on peut déterminer l'état des objets. Ainsi, quand un chiffre superpose un objet, cela indique l'état de cet objet : 0 étant l'état inerte, et les autres états sont spécifiques à l'objet auxquels ils s'appliquent.
Ainsi, l'était 1 d'un coffre peut être l'état ouvert. Le 2 peut être l'était verrouillé.
Concernant les portes, le 1 symbolise l'ouverture (en supposant que l'état inerte d'une porte est l'état fermé), le 2 symbolise verrouillé et le 3 symbolise cassé.
Pour le sol, le 1 pourrait être l'état glissant, le 2 pourrait être bruyant et le 3 pourrait être un piège explosif.
A priori, chaque case ne pourrait avoir qu'un état, mais on peut compenser cette lacune en superposant autant de calque qu'on le souhaite.
Sephi-Chan
Donc au final, les performances ne sont pas forcément un problème.
Cela dit, j'ai réfléchis 5 minutes à ton problème… Puis j'ai fais autre chose.
Plus sérieusement, je pense à une alternative à base de superposition de caractères ASCII. J'illustre ce que je dis puis j'explique :
Code :
Illustration du principe
Le calque qui représente la "vraie" carte.
######### /**
## x##### * Les espaces représentent le sol, dégagé ;
##__##### * Les # représentent des murs ;
## ##### * Le x représente un coffre ;
## * Les _ représentent des portes ;
######### */
Un calque qui représente l'état des objets dans cette instance.
000000000 /**
000100000 * Le A représente un joueur ;
002200000 * Le 0 représente un état inerte de l'objet ;
000000000 * Les 1, 2 et 3 représentent des états particuliers d'un objet ;
000000300 *
000000000 */
Un autre calque qui positionne les personnages.
--------- /**
--------- * Le A et le B représentent des joueurs ;
--B------ * Le - représente le vide, c'est juste pour ne pas mettre d'espaces :p ;
--------- *
-----A--- *
--------- */
L'idée est donc d'avoir plusieurs calques : l'un représentant la carte (10 unités de large sur 6 de haut dans l'exemple) et les autres des masques indiquant respectivement l'état des objets et la position des joueurs.
En superposant ces calques, on peut déterminer l'état des objets. Ainsi, quand un chiffre superpose un objet, cela indique l'état de cet objet : 0 étant l'état inerte, et les autres états sont spécifiques à l'objet auxquels ils s'appliquent.
Ainsi, l'était 1 d'un coffre peut être l'état ouvert. Le 2 peut être l'était verrouillé.
Concernant les portes, le 1 symbolise l'ouverture (en supposant que l'état inerte d'une porte est l'état fermé), le 2 symbolise verrouillé et le 3 symbolise cassé.
Pour le sol, le 1 pourrait être l'état glissant, le 2 pourrait être bruyant et le 3 pourrait être un piège explosif.
A priori, chaque case ne pourrait avoir qu'un état, mais on peut compenser cette lacune en superposant autant de calque qu'on le souhaite.
Sephi-Chan