Omnimaga
Calculator Community => [FR] Section Francophone => [FR] Programmation Axe Parser => Topic started by: trotithuthur on September 18, 2011, 05:33:10 am
-
Bonjour à tous, un nouveau problème vient à moi... Est-il possible de supprimer (ou changer...) un pointeur statique? Par exemple (le problème):
:If A=1
:[...]->GDB1
:End
:If A=2
:[......]->GDB1
:End
(Les [...] représente des codes hexa corrects)
Le problème est que lors de la compilation, j'obtiens une erreur Dupplicate sur le 2eme GDB...
Comment parer cela? A part stocker le 2eme code dans GDB2 etc...
-
Est-il possible de supprimer (ou changer...) un pointeur statique?
Mots-clés dans la question: pointeur statique.
C'est un pointeur statique, pas une variable. Donc, non, ton code est inconcevable.
Pourrais tu développer un peu plus ce que tu veux, pour trouver une solution plus adaptée ?
Genre donner l'hex code présent dans chaque [] et dire ce que tu veux en faire, par exemple (sprite,...).
-
Désolé, en fait, il s'agit de code pour des map, et donc par exemple A est le numéro du niveau,et chaque niveau une map différente, mais je crois avoir parer le problème, en utilisantdes fonctions, je réécris l'affichage de la map un GDB= 1 niveau, et j'appelle la fonction dans la partie déplacement du personnage par exemple.
Je ne sais pas si j'ai été assez clair... :/
En gros (très gros...):
:Repeat getkey(15)
:code déplacement
:If A=1
:sub(N1)
:End
:If A=2
:sub(N2)
:End
:End
:Lbl N1
:[...]->GDB1
:sub(AFF)
:Return
:Lbl N2
:[...]->GDB2
:sub(AFF)
:Return
:Lbl AFF
:code affichage map
:Return
-
Problème: la routine AFF, comment elle sait avec quel pointeur elle doit afficher ?
Est-ce que tous les hex codes que tu mets dans tes GDB font la même taille ? Si oui, quelle taille ?
-
Oui il font tous la meme taille, exemple:
[000000000000]->GDBX
[011011000110]
[011010111100]
[011100011100]
[011011111110]
[011111111110]
[011111111110]
[000000000000]
Mais je pense en effet au probleme de la fonction aff... je pense que je vais mettre ce code dans les fonctions N1... Parce que le pointeur à besoin d'être connu... donc bon, sinon on peut blinder la fonction AFF de conditions, mais ça revient au même, une fonction d'affichage différente pour chaque GDB...
-
Oui il font tous la meme taille
:w00t:
Solution simple:
mets ceci au debut de ton code (en remplaçant les corneries que j'ai mises par les vraies données de tes niveaux).
.level1
[000000000000]->GDB1
[011011000110]
[011010111100]
[011100011100]
[011011111110]
[011111111110]
[011111111110]
[000000000000]
.level2
[000000000000]
[011011000110]
[011010111100]
[011100011100]
[011011111110]
[011111111110]
[011111111110]
[000000000000]
.etc
Puis affecte le numero du niveau à une variable, par exemple N.
Au début, N=0 et tu es au niveau 1.
Puis tu passes au niveau suivant avec N++. Donc N=1 et tu es au niveau 2.
En fait, N=niveau-1.
Pour la routine AFF, fait en fonction du pointeur N*48+GDB1.
Si je sais compter, cela devrait marcher.
-
Merci! Effectivement j'avais penser à un truc comme ça, pour le choix de la 'partie' du GDB, je mettais GDB1+8, etc... x)
Tu es sur du 48? Je mettrai plutôt 96...?
EDIT:j'ai du me gourer ailleurs, mais j'obtiens la bonne map avec 48, et 96... ::)
RE-EDIT: tu as raison,c'est bien 48, au temps pour moi, donc merci, ça marche parfaitement :)
-
Tu es sur du 48? Je mettrai plutôt 96...?
RE-EDIT: tu as raison,c'est bien 48, au temps pour moi, donc merci, ça marche parfaitement :)
C'est 48 et pas 96 car pour faire un nombre en hexa, il faut 2 chiffres. Donc tu as compté 96 chiffres mais il y a 48 nombres ;)
-
Oui voilà 8*16, divisé par 2 :)
Encore merci ;)
-
De rien :) moi aussi j' ai dû poser des questions un jour, donc j'aime bien rendre la pareille.
-
*bump*
Et si les codes hexa ne sont pas tous de la même taille ?
-
Dans ce cas, tu
es dans la m peux faire ceci
[code hex 1]→GDB1
[code hex 2]→GDB2
[code hex 3]→GDB3
.etc
{GDB1,GDB2,GDB3,etc}→Str1
et le pointeur au debut du niveau se trouve à {Str1+N}, c'est-à-dire que pour accéder au premier octet du niveau actuel, tu fais {{Str1+N}}, et pour accéder au second octet du niveau actuel, {{Str1+N}+1}.
Cela devrait fonctionner théoriquement.
Crédits: Ceci m'a été inspiré par Aichi, pas tout à fait dans ces circonstances mais quand même.
En fait, tu stockes tous les pointeurs GDB à partir de Str1
-
Dans ce cas, tu es dans la m
:w00t:
Merci, je teste dès que j'en arrive à la partie-là de mon programme, je donnerai des nouvelles.
-
Ça sent le zContest ! :rire mechant:
-
Ça sent surtout le nécropost O.O
Oui, c'est pour stocker les niveaux de Lost :)