| Savoir la valeur de la cellule suivante. | |
|
|
Auteur | Message |
---|
Qual Utilisateur confirmé: Rang ****
Messages : 1450 Projet Actuel : Tower Defence
| Sujet: Savoir la valeur de la cellule suivante. Lun 16 Aoû 2010 - 8:43 | |
| Bonjour, je suis en train de créer un générateur de map pour mon jeu de bataille navale amélioré. Tout d'abord je vous décrit parfaitement le système afin que vous compreniez mieux mon problème. J'ai 2 rooms : la première sert a disposer des simple carrés sur une carte de 15x15 et la deuxième room utilise le tableau de la room 1 pour généré la map graphiquement. ROOM 1 En gros, on a un quadrillage de 15x15. La première étape consiste a disposer sur la map des carrés qui serviront a générer la map ( et donc a changer les valeurs des cellule ( 0=vide 1=terrain ) Jusque ici, tout fonctionne a merveille. ( j'ai même réussi à forcer le joueur a ce que chaque bloc en touche un autre pour éviter de disperser les morceaux de terrain partout. ) Ensuite on clique sur next et on passe a la room suivante. ROOM 2 dès que la room est créer, un objet obj_generateur_vide est crée pour chaque case. Ensuite je récupère les valeurs du tableau de la room 1. Jusque ici tout va bien. si la cellule = 0 , a cet endroit il y'aura un sprite d'eau si la cellule = 1 , une instance de l'objet terrain est créer. J'utilise ce code qui marche parfaitement : - Code:
-
//cellule =1
if obj_tableau_j1.Carte_Joueur[(x-96)/32,(y-160)/32]=1 { instance_create (x,y,obj_generator_terrain) instance_destroy(); }
//cellule =0 if obj_tableau_j1.Carte_Joueur[(x-96)/32,(y-160)/32]=0 { sprite_index= spr_blocm }
Juste une précision : Normalement c'est "Carte_Joueur[j,i]=0" j= x-96 /32 96 car mon tableau commence a 96 pixel etc... 32, car mes cellules font 32pixel. Fin bref ca fonctionne :p Donc je me suis lancer dans l'amélioration des graphismes. mais la ou je bloque c'est qu'une commande du style : //detecte le terrain a droite if obj_tableau_j1.Carte_Joueur[ ((x-96)/32 )+1,(y-160)/32]=1 ne fonctionne pas O_o " Arrays out of bounds " pourtant lorsque je fait le calcul, sa donne la valeur j actuelle + 1 pour le décalage vers la droite. Une idée ? |
|
| |
l0lmanPH Utilisateur confirmé: Rang *
Messages : 226 Localisation : cbna.forumactif.com Projet Actuel : Le Méchant Tueur de Bisounours
Metroid Prime : Némésis
Tutoriel GM
| Sujet: Re: Savoir la valeur de la cellule suivante. Lun 16 Aoû 2010 - 10:14 | |
| Mais tu n'as pas compris comment on utilise les tableaux ma parole !
Les cases sont VIRTUELLES, tu comprends ? Tu peux faire Carte_jeu[i, j].x puisque ces indices contiennent l'id d'une instance.
Et quel est l'intérêt d'avoir deux rooms ? _________________ « Un même visage, un même passé, deux destins différents ? » Metroid Prime : Némésis, fangame et suite du célèbre Metroid Prime 3 : Corruption. Rédaction d'un big-tuto pour le SdZ sur Game Maker... Avancement : 60% hors-ligne, 5% en ligne. |
|
| |
red-error Utilisateur confirmé: Rang ****
Messages : 1015 Projet Actuel :
| Sujet: Re: Savoir la valeur de la cellule suivante. Lun 16 Aoû 2010 - 14:23 | |
| Sinon pour array out of bounds, C'est soit que : La case testée a un index inférieur à 0 (c'est à dire -1,-2 ou autre) La case testée n'est pas initialisée (elle n'existe pas)
Ce que tu peux faire, c'est éviter de tester ces cases qui n'existent pas. Soit en changeant les valeurs de départ et d'arrivée, soit en mettant des min() et max(). |
|
| |
glcraft Utilisateur confirmé: Rang *****
Messages : 1698 Localisation : Entre l'Espagne, l'Italie, la Suisse, L'allemagne et le RU :P Projet Actuel : Jeu de survie avancé
||--------
| Sujet: Re: Savoir la valeur de la cellule suivante. Lun 16 Aoû 2010 - 14:49 | |
| - red-error a écrit:
- Sinon pour array out of bounds,
C'est soit que : La case testée a un index inférieur à 0 (c'est à dire -1,-2 ou autre) La case testée n'est pas initialisée (elle n'existe pas)
Ce que tu peux faire, c'est éviter de tester ces cases qui n'existent pas. Soit en changeant les valeurs de départ et d'arrivée, soit en mettant des min() et max(). nan pas d'accord : il te le dit quand c'est negatif dans la fenetre d'erreur |
|
| |
l0lmanPH Utilisateur confirmé: Rang *
Messages : 226 Localisation : cbna.forumactif.com Projet Actuel : Le Méchant Tueur de Bisounours
Metroid Prime : Némésis
Tutoriel GM
| Sujet: Re: Savoir la valeur de la cellule suivante. Lun 16 Aoû 2010 - 15:35 | |
| Mais c'est normal que ça ne marche pas ! Vérifier la "position d'une case" en faisant le calcul de x/y dans les index du tableau est illogique ! :s _________________ « Un même visage, un même passé, deux destins différents ? » Metroid Prime : Némésis, fangame et suite du célèbre Metroid Prime 3 : Corruption. Rédaction d'un big-tuto pour le SdZ sur Game Maker... Avancement : 60% hors-ligne, 5% en ligne. |
|
| |
glcraft Utilisateur confirmé: Rang *****
Messages : 1698 Localisation : Entre l'Espagne, l'Italie, la Suisse, L'allemagne et le RU :P Projet Actuel : Jeu de survie avancé
||--------
| Sujet: Re: Savoir la valeur de la cellule suivante. Lun 16 Aoû 2010 - 15:57 | |
| d'accord avec toi l0lman a deux conditions : - qu'il n'a pas initialiser - ou qu'il fait des index a virgule flotantes, ce qui fait planter le programme |
|
| |
l0lmanPH Utilisateur confirmé: Rang *
Messages : 226 Localisation : cbna.forumactif.com Projet Actuel : Le Méchant Tueur de Bisounours
Metroid Prime : Némésis
Tutoriel GM
| Sujet: Re: Savoir la valeur de la cellule suivante. Lun 16 Aoû 2010 - 16:43 | |
| Voilà ce que tu dois faire Qual... Actuellement, tu as deux tableaux qui représentent une grille de cases, pour nous, humains. Mais pour l'ordi, lui, c'est un vulgaire tableau à 2D !! Il faut se mettre ça dans la tête : la représentation est souvent TOTALEMENT différente de la manière de traiter les données. Tu vas devoir créer une fonction qui parcourt ce tableau et fait des draw_rectangle ou tout ce que tu veux à des positions x et y qui s'incrément à chaque itération, en n'oubliant pas de faire un draw_sprite (à une position relative à x et y incrémentées) qui, en fonction de la valeur de la "case" du tableau actuelle affiche soit rien soit spr_pionbot soit spr_pionjoueur. This is true programmation. EDIT : Le code... - Code:
-
// scr_AfficherCarte
var cell_width, cell_height, new_x, new_y;
for (i = 0; i < VariableIndexMax; i += 1;) { for (j = 0; j < VariableSousIndexMax; j += 1); { draw_rectangle(new_x, new_y, new_x + cell_width, new_y + cell_height, 0); if (carteJoueur[i, j]) { draw_text(new_x + cell_width / 2, new_y + cell_height / 2, string(carteJoueur[i, j])); } new_x += 15; } new_y += 15; } Comme ça le jeu est affiché indépendamment, sans problèmes... et en plus, et quelles que soient les modifications effectuées sur le tableau. C'est bien la programmation modulaire hein ? _________________ « Un même visage, un même passé, deux destins différents ? » Metroid Prime : Némésis, fangame et suite du célèbre Metroid Prime 3 : Corruption. Rédaction d'un big-tuto pour le SdZ sur Game Maker... Avancement : 60% hors-ligne, 5% en ligne. |
|
| |
Qual Utilisateur confirmé: Rang ****
Messages : 1450 Projet Actuel : Tower Defence
| Sujet: Re: Savoir la valeur de la cellule suivante. Lun 16 Aoû 2010 - 18:07 | |
| - Citation :
- u vas devoir créer une fonction qui parcourt ce tableau et fait des
draw_rectangle ou tout ce que tu veux à des positions x et y qui s'incrément à chaque itération, en n'oubliant pas de faire un draw_sprite (à une position relative à x et y incrémentées) qui, en fonction de la valeur de la "case" du tableau actuelle affiche soit rien soit spr_pionbot soit spr_pionjoueur.
Mais ca c'est bon o_o Ce n'est pas mon problème... Je sais que le tableau est virtuel... - Citation :
- en faisant le calcul de x/y dans les index du tableau est illogique !
Bin non ! a partir du calcul de la position x de l'objet divisé par sa taille, on obtient un chiffre qui correspont au "j" du tableau. ca marche parfaitement tant que l'objet à été créer grace au tableau... Enfin bref, je vous ai envoyé ce que je suis en train de faire : http://www.mediafire.com/?rq4gskc5mhtsa3wUtilisez la touche 1 du keypad pour afficher/ne pas afficher le tableau en chiffre. Donc première room vous cliquez pour inséré des cases noires ensuite cliquez sur le carré marron tout moche a droitre, c'est le bouton " next" Pour l'instant on est pas obliger de mettre 75 cases, c'est mieux pendant la periode de test. Vous voyez qu'ensuite la carte est généré. Mais ce que je veux c'est : si a droite du bloc terrain c'est vide alors la case vide change de sprite pour prendre l'apparence du sprite bordure gauche. et etc etc Mouarf je devrais m'orienter vers les places meeting |
|
| |
l0lmanPH Utilisateur confirmé: Rang *
Messages : 226 Localisation : cbna.forumactif.com Projet Actuel : Le Méchant Tueur de Bisounours
Metroid Prime : Némésis
Tutoriel GM
| Sujet: Re: Savoir la valeur de la cellule suivante. Lun 16 Aoû 2010 - 20:13 | |
| Oh mon Dieu du D&D ! Et tu crées un objet par valeur de case !
Je pense que tu devrais essayer des choses plus simples avant ton projet. Tu acquérais de l'expérience qui te serait utile au niveau des choix de codes. _________________ « Un même visage, un même passé, deux destins différents ? » Metroid Prime : Némésis, fangame et suite du célèbre Metroid Prime 3 : Corruption. Rédaction d'un big-tuto pour le SdZ sur Game Maker... Avancement : 60% hors-ligne, 5% en ligne. |
|
| |
Qual Utilisateur confirmé: Rang ****
Messages : 1450 Projet Actuel : Tower Defence
| Sujet: Re: Savoir la valeur de la cellule suivante. Lun 16 Aoû 2010 - 20:16 | |
| bah j'ai un autre projet en cours, Worms Strike, j'ai pas vraiment eu de difficulté, pourtant c'est un bon jeu. :/ |
|
| |
l0lmanPH Utilisateur confirmé: Rang *
Messages : 226 Localisation : cbna.forumactif.com Projet Actuel : Le Méchant Tueur de Bisounours
Metroid Prime : Némésis
Tutoriel GM
| Sujet: Re: Savoir la valeur de la cellule suivante. Lun 16 Aoû 2010 - 20:44 | |
| Ah oui ?
Il est possible que tu aies réussi, mais ton code doit être lourd et mal optimisé (à mon avis), sans vouloir te vexer. Faire une bataille navale avec un bot exige plus de connaissances au niveau des structures et de leur parcours. _________________ « Un même visage, un même passé, deux destins différents ? » Metroid Prime : Némésis, fangame et suite du célèbre Metroid Prime 3 : Corruption. Rédaction d'un big-tuto pour le SdZ sur Game Maker... Avancement : 60% hors-ligne, 5% en ligne. |
|
| |
[TheDarkTiger] Modérateur
Messages : 7420 Localisation : Essonne
| Sujet: Re: Savoir la valeur de la cellule suivante. Lun 16 Aoû 2010 - 23:02 | |
| Franchement, c'est jouable. Mais c'est plutôt un défit qu'autre chose :gniah:
Pour utiliser les tableaux depuis un certain temps déjà, je te conseille de toujours : - Utiliser du GML ! - Utiliser des variables temporaires qui stockent des indexes : i=x/32; j=y/32; show_message(string(Tableau[i,j]));
- Utiliser les opérateurs round() ou floor() sur ces dites variables : i=floor(x/32); j=floor(y/32); show_message(string(Tableau[i,j]));
- Utiliser un switch case si tu à plusieurs choses à faire plutôt qu'une suite de if : i=floor(x/32); j=floor(y/32); switch(Tableau[i,j]) { case 0 : {show_message("Eau !"); break;} case 1 : {show_message("terre!"); break;} default : break; }
après, c'est une question de style de programmation... _________________ Bonne chance pour vos projets actuels ! Prêt à aider ceux qui en ont besoin ^^ l'antiqueBienvenue au 2630eme utilisateur : Mike Kennedy ! |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Savoir la valeur de la cellule suivante. Lun 16 Aoû 2010 - 23:29 | |
| Pourquoi ne pas utiliser tout simplement : i=x div 32 j=y div 32
:p |
|
| |
red-error Utilisateur confirmé: Rang ****
Messages : 1015 Projet Actuel :
| Sujet: Re: Savoir la valeur de la cellule suivante. Lun 16 Aoû 2010 - 23:32 | |
| Je vais appuyer ce que dit TDT ( aussi parce que c'est exactement ce que je fait). :lng: Sinon pour les bords, je sais ce qu'il te faut : une logique. Y'avais un exemple de routes je ne sais plus où sur le CBNA (mais très mal fichu puisqu'il faisant des tests à chaque fois). Je vais te montrer un exemple si tu veux bien. Je travaille justement sur un système de tiles du même genre je crois. (PS : j'ai pas encore pu lancer ton GMK, tu utilises les extensions qui ne sont pas tolérées en Lite) Edit : par contre Onilink m'apprends les div. |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Savoir la valeur de la cellule suivante. Lun 16 Aoû 2010 - 23:36 | |
| Aussi Qual ne l'as peut être pas dit mais son probleme est réglé, ne vous prenez plus la tête |
|
| |
red-error Utilisateur confirmé: Rang ****
Messages : 1015 Projet Actuel :
| Sujet: Re: Savoir la valeur de la cellule suivante. Mar 17 Aoû 2010 - 0:08 | |
| Ah ben c'est bête, j'avais déjà fait l'exemple pour les images. Ben je le met quand même, c'est toujours utile : http://www.mediafire.com/?s73nsadyvkt0d26(HS : J'ai aussi le niveau supérieur, qui prend en compte les coins qui ratent ici, mais c'est plus compliqué à éditer. Et j'aurai bientôt le niveau supérieur au supérieur, avec les diagonales. Depuis le temps que j'en parle... ) |
|
| |
Qual Utilisateur confirmé: Rang ****
Messages : 1450 Projet Actuel : Tower Defence
| Sujet: Re: Savoir la valeur de la cellule suivante. Mar 17 Aoû 2010 - 1:19 | |
| Whooo O_o Bluffant ton truc, mais j'aurai du le dire. Onilink m'a aider. Je vous montrerai une démo une fois tout le truc peaufiné |
|
| |
Contenu sponsorisé
| Sujet: Re: Savoir la valeur de la cellule suivante. | |
| |
|
| |
| Savoir la valeur de la cellule suivante. | |
|