Xemnas le 24/04/2012 à 19:22
Bonjour à tous. Je poste ce sujet pour vous demander de l'aide pour créer un jeu. Aujourd'hui j'ai eu l'idée d'un jeu que j'ai décidé d'appeler "Taggle". Ainsi je vais vous expliquer son fonctionnement, mes choix dans le code, puis les problèmes auxquels je suis confronté.
Le jeu
Le jeu se joue (Ouah le pléonasme!) dans un carré de 10 x 10 cases. On contrôle un petit personnage (représenté par un carré pointu

) pouvant se déplacer sur chacune des cases (Bah! Logique! :p ). Le "personnage" doit récolter des gemmes (représentées par des croix) apparaissant aléatoirement sur la grille, afin de gagner des points (à la manière Snake sauf que le personnage n'avance pas tout seul). Cependant des ennemis tenteront de l'empêcher en lui barrant la route, mais il pourra se défendre en envoyant des lasers sur le dos des ennemis, les éliminant. Lorsqu'un ennemi est éliminé, le jeu affiche "Taggle!" et un bonus de points est ajouté au score. Au fil des niveaux, la vitesse des ennemis et leur nombre s'intensifient. A la fin, le score, s'il est assez grand peut s'inscrire dans un top 3 des meilleurs scores du jeu.
Mes choix dans le code
Dans les parties de codes suivantes: A correspond aux abscisses(

, B aux ordonnées(y), et C permet au personnage de savoir de quel côté il est orienté.
Voici tout d'abord la partie de définition de la fenêtre et de préparation au programme:
Code
:EffDessin
:EffEcr
:0->Xmin
:94->Xmax
:0->Xgrad
:0->Ymin
:62->Ymax
:0->Ygrad
:AxesNAff
:GraphOff
:RappelImage 0 / Eh oui, j'ai préparé le terrain. Mais si vous souhaitez faire simple, mettez les horizontales 0,1,7,13,19,25,31,37,43,49,55,61,62 et les verticales
0,1,7,13,19,25,31,37,43,49,55,61,93,94
:4->A
:4->B
:Pt-On(A,B,2
J'ai décidé d'attaquer en premier lieu le déplacement du personnage.
Code
:While A // La condition de boucle à définir à la fin de l'écriture
:codeTouche->[THETA]
:If [THETA]=24 et A=10 ou [THETA]=24 et A=16 ou [THETA]=24 et A=22 ou [THETA]=24 et A=28 ou [THETA]=24 et A=34 ou [THETA]=24 et A=40 ou [THETA]=24 et A=46 ou [THETA]=24 et A=52 ou [THETA]=24 et A=58
:Then
:Pt-Off(A,B,2)
:A-6 -> A
:Pt-On(A,B,2
:Pt-Off(A-1,B-1) // Cette partie sert à donner une forme pointue au personnage
:Pt-Off(A-1,B+1)
:1->C // La variable C sert au laser
:End
:If [THETA]=25 et A=4 ou [THETA]=25 et A=10 ou [THETA]=25 et A=16 ou [THETA]=25 et A=22 ou [THETA]=25 et A=28 ou [THETA]=25 et A=34 ou [THETA]=25 et A=40 ou [THETA]=25 et A=46 ou [THETA]=25 et A=52
:Then
:Pt-Off(A,B,2)
:B+6 -> B
:Pt-On(A,B,2
:Pt-Off(A-1,B+1)
:Pt-Off(A+1,B+1)
:2->C
:End
:If [THETA]=26 et A=4 ou [THETA]=26 et A=10 ou [THETA]=26 et A=16 ou [THETA]=26 et A=22 ou [THETA]=26 et A=28 ou [THETA]=26 et A=34 ou [THETA]=26 et A=40 ou [THETA]=26 et A=46 ou [THETA]=26 et A=52
:Then
:Pt-Off(A,B,2)
:A+6 -> A
:Pt-On(A,B,2
:Pt-Off(A+1,B+1)
:Pt-Off(A+1,B-1)
:3->C
:End
:If [THETA]=34 et A=10 ou [THETA]=34 et A=16 ou [THETA]=34 et A=22 ou [THETA]=34 et A=28 ou [THETA]=34 et A=34 ou [THETA]=34 et A=40 ou [THETA]=34 et A=46 ou [THETA]=34 et A=52 ou [THETA]=34 et A=58
:Then
:Pt-Off(A,B,2)
:B-6 -> B
:Pt-On(A,B,2
:Pt-Off(A-1,B-1)
:Pt-Off(A+1,B-1)
:4->C
:End
:End // J'ai fini cette boucle ici pour vous montrer cette partie du code, en vrai elle ne se finit pas là.
Ensuite j'ai voulu m'attaquer au laser, mauvais choix puisqu'il est sensé réagir avec le "cul" de l'ennemi.
Code
:While A // Il s'agit de la suite de la boucle précédente
:If [THETA]=105 et C=1
:Then
:SauveImage9
:Ligne(A-1,B,2,B)
:For(Z,0,5)
:End
:RappelImage9
:End
:If [THETA]=105 et C=2
:Then
:SauveImage9
:Ligne(A,B+1,A,60)
:For(Z,0,5)
:End
:RappelImage9
:End
:If [THETA]=105 et C=3
:Then
:SauveImage9
:Ligne(A+1,B,60,B)
:For(Z,0,5)
:End
:RappelImage9
:End
:If [THETA]=105 et C=4
:Then
:SauveImage9
:Ligne(A,B-1,A,2)
:For(Z,0,5)
:End
:RappelImage9
:End
:End
A partir de là je n'ai pas continué, je vous rappelle que j'ai commencé aujourd'hui! :p
Mes problèmes
Avec toutes ces données, on va pouvoir voir les problèmes auxquels je suis confronté.
Code
:While A // Il s'agit de la suite de la boucle précédente
:If [THETA]=105 et C=1
:Then
:SauveImage9
:Ligne(A-1,B,2,B)
:For(Z,0,5)
:End
:RappelImage9 // [b]Comment faire pour effacer la ligne cette méthode ne marchant pas?[/b]
:End
:If [THETA]=105 et C=2
:Then
:SauveImage9
:Ligne(A,B+1,A,60)
:For(Z,0,5)
:End
:RappelImage9
:End
:If [THETA]=105 et C=3
:Then
:SauveImage9
:Ligne(A+1,B,60,B)
:For(Z,0,5)
:End
:RappelImage9
:End
:If [THETA]=105 et C=4
:Then
:SauveImage9
:Ligne(A,B-1,A,2)
:For(Z,0,5)
:End
:RappelImage9
:End
:End
Pour faire réagir le programme quand le laser touche le "cul" de l'ennemi, je voudrai utiliser pxl-Test. Mais comment faire pour le faire sur toute la ligne du laser.
D'autre problèmes viendront en edit au fur et à mesure de l'écriture du programme.
Sur ce, merci de m'avoir lu et merci d'avance pour m'aider.
Cordialement, Xemnas