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
Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Mar 24 Avr 2012, 21:14
Pour commence, pour les tests, je pense qu'il serait plus facile d'utiliser une matrice de 10*10 plutôt que des pixel-test.
sinon, la méthode rappelImage X ne fait que colorier en noir les pixels qui sont noir dans l'image mais pas à l'écran, mais ça n'éfface pas l'écran.
Tu peut donc soit tenter d'effacer toute la ligne (avec ligne(..,0)) puis remplir les "trous" apparuts en rapellant l'image, ou alors effacer l'écran puis rapeller l'image, soit calculer où il faut effacer précisément un pout de ligne.
Sandro
---------------------- mort à l'inutile, place à la mémoire libre et aux programmes
Autorisation : Membre
Nb de messages : 12
Inscrit le : Lun 16 Mai 2011, 18:10
Posté le : Mer 25 Avr 2012, 18:43
J'ai réglé ce problème tout seul merci quand même.
Pour faire apparaître des gemmes il me faut un aléatoire entre 10 choix séparés de 6 à partir de 4 (4,10,16,22,28,34,40,46,52,5
J'ai réussi les dix choix à partir de 4 mais seulement séparés de un avec partEnt(NbrAléat*10+4 . Que dois-je faire?
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Jeu 26 Avr 2012, 22:47
Comme tu ne connaissais pas la fonction entAléat, c'était plus difficile de concevoir une formule.
remarque : entaléat() existe à partir de la ti82stat.
difficulté : Multiplier NbrAléat par 10 ne pourra jamais générer 10, 9 au maximum, tant qu'on effectue une troncature avec ent(). Ceci est un exemple mais je le considère explicite.
On obtient ces deux possibilités.(l'une des deux vient de sandro, l'autre est sa traduction)
Code
4+6entaléat(0,9
4+6(ent(10*NbrAléat
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)