Omnimaga

Calculator Community => [FR] Section Francophone => [FR] Programmation Axe Parser => Topic started by: Belette furtive on November 09, 2011, 11:58:55 am

Title: remplacer des tiles
Post by: Belette furtive on November 09, 2011, 11:58:55 am
Bonjour à tous. Je tente de faiire un programme où le joueur doit ramasser des clés pour débloquer des portes et supprimer les ennemis.
J'ai fait la map, une touche pour frapper et ai placé  des clefs sur la map.
En fait, le problème, c'est que je ne sais pas comment supprimer les portes quand on passe dessus sauf en stockant le numéro de la tile du sol dans le nombre d'octet de l'image de la porte après le pointeur.
Cette technique ne marche que pour une porte en particulier, comment faire pour que cela fonctionne quelle que soit la porte ?
Title: Re: remplacer des tiles
Post by: Hayleia on November 09, 2011, 12:07:47 pm
La porte doit etre supprimée quand tu marche dessus avec une clé
ou
Toutes les portes doivent etre supprimées quand tu as une clé
?

Dans le deuxieme cas, tu peux utiliser une boucle for du genre
For(r1,0 ou 1,taille de la map)
  .le 0 ou 1 depend de comment tu fais ta tilemap
  If {...}=porte
    rien→{...}
  End
End


Dans le premier cas, je pense que tu peux accéder a l'octet qui t'interesse en faisant {Y/(largeur map)*(largeur map)+X} ou X et Y sont les coordonnées du personnage mais cela n'est pas sur. Il ya peut etre une faute de calcul.
Title: Re: remplacer des tiles
Post by: Belette furtive on November 11, 2011, 07:16:29 am
Plutôt le 1er cas.
En fait, je voudrais que quand on a au moins une clé et que on passe sur une porte, elle soit supprimée (ça je sais le faire)
mais aussi que cela fonctionne quelle que soit la porte et sa position sur la carte.
Title: Re: remplacer des tiles
Post by: Wellen on November 11, 2011, 08:03:42 am
Ce qu'il faut faire, comme le dit Hayleia (t'as vu jme suis pas trompé :P), c'est réussir à trouver une relation entre les coordonnées de la porte sur laquelle est le personnage (donc les coordonnées du personnage), la largeur et la hauteur de la map, pour accéder au bon octet. Tu cherches d'abord à savoir dans quelle ligne de ton tableau tu te trouves, puis tu y ajoutes ta coordonnée en colonnes (X)
ça doit plutôt être si je ne me trompe pas :
[ ( Y/(hauteur) ) * (largeur+1) ] + X

Title: Re: remplacer des tiles
Post by: Belette furtive on November 11, 2011, 09:02:43 am
Donc, pour une map de 36*16 Tiles avec le dessin du sol qui porte le numéro 0, je devrais avoir : 
0→{((B/16)*(36+1))+A}
Où A et B sont les coordonnées de mon personnage ?
Title: Re: remplacer des tiles
Post by: Wellen on November 11, 2011, 09:22:20 am
Si ma méthode est juste, oui :)
je te conseille quand même de faire des essais (avec des emplacement extrêmes genre les bords de maps, et des emplacements dont tu connais l'emplacement exact dans les octets, et de comparer avec ce que ça donne) et de me dire si je me suis planté ^^

Après, tu peux évidemment optimiser, c'était pour que ça soit clair toutes ces horribles parenthèses
Title: Re: remplacer des tiles
Post by: Belette furtive on November 13, 2011, 11:37:09 am
Je pense que tu t'es planté  ;D

J'ai fait plusieurs essais en modifiant les coordonnées, la formule, les variables utilisées... mais rien ne marche. :banghead:
Par contre, ça fait toujours un changement mais jamais sur les bon octets.

Voilà le code si ça peut aider.
Code: [Select]
.GAU

0→{L₁+2}→{L₁+5}→{L₁+8}→{L₁+11}

2→{L₁}
1→{L₁+1}
21→{L₁+3}
1→{L₁+7}

11→{L₁+4}
14→{L₁+10}
34→{L₁+6}
25→{L₁+9}

.emplacemennt des clés


0→B→A
.Coordonnées du personnage sur la carte

1→U
2→V
.Coordonnées du personnage sur l'écran


0→Z
.Suivant la valeur de Z, un des 4 sprites de l'épée sera choisi


[000040FF40000000]→Pic3
[000002FF02000000]
[081C080808080808]
[1010101010381010]
.l'arme du personnage


[6142245868605050]→Pic2
[8642241A16060A0A]
[4C524C5EED8C1233]
[327A327AB73248CC]
.le personnage


Lbl DPL
Repeat getKey(15)
If getKey(3)
If (sub(ZIP,A+U+1,B+V)→r₁=0
0→Z
If A<24 and (U=5)
A+1→A
ElseIf U<11
U+1→U
End
ElseIf r₁=2
sub(POR)
End
End
If getKey(2) and (sub(ZIP,A+U-1,B+V)=0
1→Z
If (U=5) and (A>0)
A-1→A
ElseIf U>0
U-1→U

End
End
If getKey(1) and (sub(ZIP,A+U,B+V+1)=0
2→Z
If B<8 and (V=4)
B+1→B
ElseIf V<7
V+1→V

End
ElseIf getKey(4) and (sub(ZIP,A+U,B+V-1)=0
3→Z
If B>0 and (V=4)
B-1→B
ElseIf V>0
V-1→V
End
End


DispGraph
ClrDraw
sub(TLM
sub(CLE)
Pt-Off(U*8,V*8,Z*8+Pic2

If getKey (54)
If Z=0
8→E
0→S→L
ElseIf Z=1
-8→E
0→S
1→L
ElseIf Z=2
0→E
8→S
2→L
ElseIf Z=3
0→E
-8→S
3→L
End
Pt-On(U*8+E,V*8+S,L*8+Pic3
End
End
Return
.la getkey 54 gère l'attaque


[0000000000000000]→Pic1
.le sol

[463971918A858989]
.les murs

[2424241818242424
.les barrieres

[111111111111111111111111111111111111]→GDB1
[100100000000000000000000000000010001]
[100100100111100000000000000000010001]
[100100100111111100111001111001210001]
[100100100000000000110000000001010001]
[100100100000000000111001100001010001]
[100200111111111100000001100001010001]
[100200001110000100000001100001000001]
[100100001110000100111101100111100001]
[100100000020000000110001100000111111]
[100100000020000000110111111100000001]
[100100001110000100110011000000000001]
[100101111110000100111111010011111001]
[100101111111110100000000100011111001]
[100100000000000100000000100111111001]
[111111111111111111111111111111111111]


Lbl CLE
0→r₅
For(r₁,0,3)
{r₁*3+L₁→r₄}-A→r₂
{r₄+1}-B→r₃
If r₂=U and (r₃=V) and ({r₄+2}=0)
{r₄+2}+1→{r₄+2}
End
!If {r₄+2}
If r₂<12 and (r₃<8
Pt-Off(r₂*8,r₃*8,[0000E0BFE5000000]
End
Else
r₅+1→r₅
End
End
Return

.Ce label gère les clés


Lbl POR
0→{((B/16)*(36+1))+A+GDB1}
Return
.Celui ci doit gérer les portes


Lbl TLM
For(Y,0,8
For(X,0,11
sub(ZIP,X+A,Y+B)→r₁
Pt-On(X*8,Y*8,r₁*8+Pic1)
End
End
DispGraph
Return

Lbl ZIP
r₂*36+r₁→r₁
{r₁/2+GDB1}→r₂
If r₁^2
r₂^16
Else
r₂/16
End
Title: Re: remplacer des tiles
Post by: annoyingcalc on November 13, 2011, 11:53:07 am
Bienvenue S'il vous plaît présenter votre auto http://www.omnimaga.org/index.php?board=10.0
Title: Re: remplacer des tiles
Post by: Hayleia on November 13, 2011, 01:13:35 pm
Bienvenue S'il vous plaît présenter votre auto http://www.omnimaga.org/index.php?board=10.0
O.O
...votre auto...
XD
Je pense qu'il y a un probleme de traduction pour "yourself". C'est evidemment toi qu'il faut présenter, pas ton auto, mais je pense que tout le monde avait compris.
Title: Re: remplacer des tiles
Post by: Belette furtive on November 13, 2011, 01:14:10 pm
Voilà qui est fait (bien que avec un peu retard).

PS: tout va bien, j'avais compris!
Title: Re: remplacer des tiles
Post by: Hayleia on November 13, 2011, 01:21:13 pm
Pour le retard, tout est relatif. Ma presentation n'est arrivée que vers les 30 posts XD
Title: Re: remplacer des tiles
Post by: Belette furtive on November 13, 2011, 01:43:04 pm
Quelle rapidité exceptionnelle !!
Title: Re: remplacer des tiles
Post by: annoyingcalc on November 13, 2011, 02:01:58 pm
Bienvenue S'il vous plaît présenter votre auto http://www.omnimaga.org/index.php?board=10.0
O.O
...votre auto...
XD
Je pense qu'il y a un probleme de traduction pour "yourself". C'est evidemment toi qu'il faut présenter, pas ton auto, mais je pense que tout le monde avait compris.
Désolé je utiliser Google translate
Title: Re: remplacer des tiles
Post by: Hayleia on November 13, 2011, 02:19:57 pm
Quelle rapidité exceptionnelle !!
En fait, moi personne ne m'a dit de me présenter D: donc j'ai du decouvrir le board par moi même, d'où la lenteur ;)

Désolé je utiliser Google translate
Yeah, we saw that XD
No, seriously, Google translate is understandable, and you wanted to help, so don't apologize for nothing :)
Title: Re: remplacer des tiles
Post by: DJ Omnimaga on November 13, 2011, 11:17:12 pm
Il est généralement préférable en anglais par contre de vérifier sa grammaire et son orthographe avant de traduire, sinon ça donne des résultats encore moins jolis :P
Title: Re: remplacer des tiles
Post by: Belette furtive on November 14, 2011, 07:06:09 am
Et sinon, pour le programme?
Title: Re: remplacer des tiles
Post by: Belette furtive on November 15, 2011, 02:31:06 pm
Vive moi !  :angel:

j'ai réussi grâce à cette formule :
0→{(18*(B+4)+A+1)+GDB1}

Au fait, dans mon cas, un octet fait bien deux tiles de long non ?