Page 1 of 2

[Axe] Tape

Unread postPosted: 03 Nov 2012, 17:53
by smixi
Bonjour bonjour, je nouveau sur le forum et j'ai commencé l'axe il y'a pas longtemps.
Je commence avec un jeu simple : Tape
Le but du jeu : appuyer sur Haut/Bas/Droite/Gauche en fonction d'un cercle s'affichant en haut, en bas, à gauche ou à droite de l'écran. Aussi, j'ai rajouté un cercle au milieu, ca permet d'utiliser une autre main et donc "rajouter un peu de difficulté". Vous avez donc un certain temps pour appuyer sur un maximum de touche. Si l'on appuye sur 2 touches en même temps, la partie se termine.

Un petit apercu : Image


Ce qu'il y aura : - Plusieurs mode de jeu, "survie" ( ou le temps défile, si on appuie sur la mauvaise touche, la partie se termine, et si l'on appuie sur la bonne, le temps augmente.)
- Un top 3 des meilleurs scores.
- Un menu tout beau.
- Des flèches a la place des cercles
- Le menu Option ( pas encore intégré, mais disponible ... ) avec le choix de la touche pour le cercle du milieu, et le choix du mode de jeu.

Source :
Code: Select all
.ATAPE
:0→A→B
:500→G
:0→X
:.MENU
:ClrDrawDispGraph
:Repeat getKey(15)
:   Text(1,1,"1=JOUER)2=OPTION)3=CREDIT
:   .JOUER
:   If getKey(34)
:      MAX()
:End
:.OPTION
:If getKey(26)
:End
:If getKey(18)
:   ClrDrawDispGraph
:Text(25,32,"SMIXI"
:Pause 3200
:End
:
:End
:
:Lbl MAX
:Repeat getKey(15) or X=1
:   AL()
:   TOU()
:   B++
:End
:ClrDrawDispGraph
:Text(30,32,"SCORE:"
:Text(54,32,B►Dec
:Pause 1800
:Repeat getKey(9) or getKey(15)
:End
:0→X→A→B+500→G
:ClrDrawDispGraph
:Return
:
:.Touche
:Lbl TOU
:
:Repeat X=1 or getKey(A) or getKey(A+4) or getKey(15)
:   
:   G--
:   Text(44,30,G►Dec
:   Pause 18
:   If G=0
:      1→X
:End
:
:End
:
:If (getKey(1) xor getKey(2) xor getKey(3) xor getKey(4) xor getKey(9))=0
:   
:1→X
:
:End
:
:Return
:.Alea
:Lbl AL
:
:1+(rand^5)→A
:.affichage des fleches
:If A=5
:   CER(47,32)
:End
:If A=1
:   CER(47,65)
:End
:If A=2
:   CER(0,32)
:End
:If A=3
:   CER(95,32)
:End
:If A=4
:   CER(47,0)
:End
:Return
:Lbl CER
:ClrDraw
:For(P,1,15
:   Circle(r1,r2,P
:   DispGraph
:   Pause 4
:End

Re: [Axe] Tape

Unread postPosted: 03 Nov 2012, 19:08
by Hayleia
C'est ton premier jeu ?
Parce que si c'est le cas, félicitations il est très bien codé pour un premier jeu :)
Je ne dis pas qu'il est parfait, mais il est bien organisé et tout déjà :)

Du coup, je me dis que tu as déjà dû programmé en Basic avant de te lancer dans l'Axe, je me trompe ? :D
Ça se voit un peu par les habitudes qui étaient bonnes en Basic et qui ne le sont plus en Axe, comme ne pas fermer guillemets et parenthèses à la fin des instructions Text. En basic, ça économise des octets. En Axe, ça n'économise rien dans le programme une fois compilé et ça peut induire le compilateur en erreur (d'où bugs potentiels).
Autre chose, Axe (version 1.1.2) supporte les labels avec des noms jusqu'à 5 caractères, si tu veux des noms plus parlants ;)

Et côté optimisation, voilà ce que j'ai trouvé pour l'instant ^^
(en gros, ce que tu ne reconnais pas dans ton code, c'est moi qui l'ai fait :P)
Code: Select all
.ATAPE
0->A->B->X
500->G
.MENU
ClrDrawDispGraph
Repeat getKey(15)
   Text(1,1,"1=JOUER)2=OPTION)3=CREDIT")
   .JOUER
   If getKey(34)
      MAX()
   End
   .OPTION
   If getKey(26)
      .Pourquoi y'a rien là ?
   End
   If getKey(18)
      ClrDrawDispGraph
      Text(25,32,"SMIXI")
      Pause 3200
   End
End

Lbl MAX
Repeat X=1 or getKey(15)
   AL()
   TOU()
   B++
End
ClrDrawDispGraph
Text(30,32,"SCORE:",B>Dec)
Pause 1800
While 1
EndIf getKey(9) or getKey(15)
0->X->A->B
500->G
ClrDrawDispGraph
Return

.Touche
Lbl TOU

Repeat X=1 or getKey(A) or getKey(A+4) or getKey(15)
   Text(44,30,G-- >Dec)
   Pause 18
   !If G
      1->X
   End
End

!If getKey(1) xor getKey(2) xor getKey(3) xor getKey(4) xor getKey(9)
   1->X
End

Return
.Alea
Lbl AL

Data(47,0,95,47,47)->GDB1X
Data(65,32,32,0,32)->GDB1Y
rand^5+1->A
.affichage des fleches
CER({A+GDB1X-1},{A+GDB1Y-1})
Return
Lbl CER
ClrDraw
For(P,1,15)
   Circle(r1,r2,P)
   DispGraph
   Pause 4
End

Re: [Axe] Tape

Unread postPosted: 03 Nov 2012, 19:12
by nikitouzz
moi j'ai trouvé ça c'est pas grand chose mais bon :

Code: Select all
:.ATAPE
0->A->B->X
500->G
.MENU
ClrDrawDispGraph
Repeat getKey(15)
   Text(1,1,"1=JOUER)2=OPTION)3=CREDIT")
   .JOUER
   If getKey(34)
      MAX()
   End
   .OPTION
   If getKey(18)
      ClrDrawDispGraph
      Text(25,32,"SMIXI")
      Pause 3200
   End
End

Lbl MAX
while 1
   AL()
   TOU()
   B++
EndIf X=1 or getKey(15)
ClrDrawDispGraph
Text(30,32,"SCORE:",B>Dec)
Pause 1800
While 1
EndIf getKey(9) or getKey(15)
0->X->A->B
500->G
ClrDrawDispGraph
Return

.Touche
Lbl TOU

Repeat X=1 or getKey(A) or getKey(A+4) or getKey(15)
   Text(44,30,G-- >Dec)
   Pause 18
   G??1->X
End
getKey<5 or getKey(9)??1->X
Return
.Alea
Lbl AL

Data(47,0,95,47,47)->GDB1X
Data(65,32,32,0,32)->GDB1Y
rand^5+1->A
.affichage des fleches
CER({A+GDB1X-1},{A+GDB1Y-1})
Return
Lbl CER
ClrDraw
For(P,1,15)
   Circle(r1,r2,P)
   DispGraph
   Pause 4
End

Re: [Axe] Tape

Unread postPosted: 03 Nov 2012, 19:18
by smixi
Merci Hayleia et Nikitouzz, effectivement je m'entrainais en basic. Merci d'avoir optimisé mon code, je copie ca dans ma calculette, en plus je viens de lire vite fait la doc du.rar de l'axe et j'ai lu : "If you have constants in your expression, try putting them at the end if at all possible", d'ou le rand^5+1->A ? sinon j'ai pas bien bien compris l'utilisation des Datas et de GDB, faudrais que tu m'explique :/ ( et que je revises les Datas, parce que j'ai pas du tout pratiqué ca :/)
A quoi correspond le "?" ?
Merci !

Re: [Axe] Tape

Unread postPosted: 03 Nov 2012, 19:23
by nikitouzz
enfaite le ? est une conditons, :

Code: Select all
:If X=3
:9->A
:End


peut etre remplacer par :

Code: Select all
:X=3?9->A


---------------------------------
Code: Select all
:!If X=3
:9->A
:End


peut etre remplacer par :

Code: Select all
:X=3??9->A

Re: [Axe] Tape

Unread postPosted: 03 Nov 2012, 19:42
by Hayleia
smixi wrote:"If you have constants in your expression, try putting them at the end if at all possible", d'ou le rand^5+1->A ?

Non. Le fait de mettre le +1 après le rand^5 c'est pour éviter d'avoir à mettre des parenthèses.

Si je me mets dans la tête du processeur qui effectue les calculs de droite à gauche, voilà ce que ça donne pour calculer 1+(rand^5):
> 1
> sauvegarde en mémoire
> rand
> ^5
> ajoute le résultat précédent à la sauvegarde du 1

Si je me mets dans la tête du processeur qui effectue les calculs de droite à gauche, voilà ce que ça donne pour calculer rand^5+1:
> rand
> ^5
> +1

On économise donc deux calculs, donc de la vitesse et de la place ;)
__________

smixi wrote:sinon j'ai pas bien bien compris l'utilisation des Datas et de GDB, faudrais que tu m'explique :/ ( et que je revises les Datas, parce que j'ai pas du tout pratiqué ca :/)

J'ai mis ça:
Data(47,0,95,47,47)->GDB1X
Data(65,32,32,0,32)->GDB1Y

Du coup, {GDB1X}=47, {GDB1X+1}=0, {GDB1X+2}=95, etc
De même, {GDB1Y}=65, etc.

Ce que tu veux, c'est ça:
:If A=1
: CER(47,65)
:End
:If A=2
: CER(0,32)
:End
:If A=3
: CER(95,32)
:End
:If A=4
: CER(47,0)
:End
:If A=5
: CER(47,32)
:End


C'est à dire ça:
:If A-1=0
: CER(47,65)
:End
:If A-1=1
: CER(0,32)
:End
:If A-1=2
: CER(95,32)
:End
:If A-1=3
: CER(47,0)
:End
:If A-1=4
: CER(47,32)
:End

Tu veux donc des Data qui retournent (47,65) quand A-1=0; (0,32) quand A-1=1, etc.
D'où Data(47,0,95,47,47)->GDB1X ; Data(65,32,32,0,32)->GDB1Y et les {A-1+GDB1X} et {A-1+GDB1Y} ;)

Re: [Axe] Tape

Unread postPosted: 03 Nov 2012, 20:30
by smixi
C'bon j'ai compris pour les datas :D.
Par contre j'ai tester le code de nikitouzz, ca marche pas, je comprend pas pourquoi il fait "!If G?1->X" puisque comme il l'a expliqué cela revient a "G??1->X".

Re: [Axe] Tape

Unread postPosted: 03 Nov 2012, 20:36
by nikitouzz
ah oui je me suis tromper ^^ pardon

j'ai corriger mon post a deux endroit ;)

Re: [Axe] Tape

Unread postPosted: 03 Nov 2012, 23:16
by smixi
Y'a un bug que je n'arrive pas à corriger, dans le menu, quand j'appuis sur 'Clr' dans le 'menu', ca lance une partie au lieu de quitter :/. Sinon je trouve pas de tutoriel au niveau des appVar. Merci d'avance.

Re: [Axe] Tape

Unread postPosted: 03 Nov 2012, 23:52
by nikitouzz
Code: Select all
Repeat getKey(15)
   Text(1,1,"1=JOUER)2=OPTION)3=CREDIT")
   .JOUER
   If getKey(34)
      MAX()
   End
   .OPTION
   If getKey(18)
      ClrDrawDispGraph
      Text(25,32,"SMIXI")
      Pause 3200
   End
End


remplace sa par :

Code: Select all
while 1
   Text(1,1,"1=JOUER)2=OPTION)3=CREDIT")
   .JOUER
   If getKey(34)
      MAX()
   End
   .OPTION
   If getKey(18)
      ClrDrawDispGraph
      Text(25,32,"SMIXI")
      Pause 3200
   End
returnIf getKey(15)
End