Poster un nouveau sujet Poster une réponse
Besoin d'aide pour la réalisation d'un petit jeu.
Auteur Message
TH0M2610



Autorisation : Membre
Nb de messages : 3
Inscrit le : Ven 31 Déc 2010, 14:37
Posté le : Ven 02 Sep 2011, 16:10   Citer 

Bonjour à tous.

Tout d'abord je tiens à dire que je suis un peu débutant.

J'ai commencé à réaliser un petit jeu qui consiste à déplacer un caractère (un personnage) sur l'écran jusqu'à une case de l'écran qui mènera à la salle suivante, en passant par toutes les cases seulement une seule fois.

Le terrain est parsemé de 4 obstacles (du moins pour le 1er niveau) à position aléatoire qui sont aussi des caractères.

Ce mini-jeu ressemble grandement à ce qu'on peut voir parfois dans les jeux Pokémon ou The Legend Of Zelda en 2D.
Si le personnage passe deux fois sur la même case, il doit recommencer la salle.

Bien sûr j'ai pris en compte le fait que ça ne soit pas toujours possible, à cause de l'apparition totalement aléatoire des obstacles, mais je ne suis pas assez expérimenté pour que ça soit possible.

Voilà, mon actuel problème :
Je cherche un moyen d'empêcher le traversement des obstacles.

Voici mon début :


Code

EffEcr
1->X
1->Y
entAléat(1,16)->A
entAléat(1,8)->B
entAléat(1,16)->C
entAléat(1,8)->D
entAléat(1,16)->E
entAléat(1,8)->F
entAléat(1,16)->G
entAléat(1,8)->H
Output(B,A,"O"
Output(D,C,"O"
Output(F,E,"O"
Output(H,G,"O"
Repeat K=105
Output(W,V,"*"
Output(Y,X,"X"
X->V
Y->W
codeTouche->K
X-(K=24)+(K=26)->X
Y-(K=25)+(K=34)->Y
If X=0
1->X
If X=17
16->X
If Y=0
1->Y
If Y=9
8->Y
End



Voilà, merci de votre aide. happy.gif

 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Ven 02 Sep 2011, 16:48   Citer 

Je n'ai pas le temps d'étudier complètement ton code immédiatement, mais je compte le faire bientôt.

Ton concept me rappelle celui-ci :
https://tout82.pages-perso.free.fr/forum/sujet.php?sujet=2236
http://www.mediafire.com/file/4ztpdt95524vnzi/BOMBER.83p
Sauf que le tiens propose apparamment une succession de défis... bigmouth.gif

---------- EDIT :
Pour le moment j'empêche de traverser les obstacles mais je ne réinitialise pas la salle.

Code
EffEcr
1->X
1->Y
entAléat(1,16->A
entAléat(1,8->B
entAléat(1,16->C
entAléat(1,8->D
entAléat(1,16->E
entAléat(1,8->F
entAléat(1,16->G
entAléat(1,8->H
Output(B,A,"O
Output(D,C,"O
Output(F,E,"O
Output(H,G,"O
Repeat K=105
Output(W,V,"*
Output(Y,X,"X
X->V
Y->W
Repeat K
codeTouche->K
End
min(16,max(1,X-(K=24)+(K=26->X
min(8,max(1,Y-(K=25)+(K=34->Y
If X=A et Y=B ou X=C et Y=D ou X=E et Y=F ou X=G et Y=H
Then
W->Y
V->X
End
End

Il reste plusieurs améliorations à employer, en particulier liste et boucle dont on pourra contrôler la taille selon le niveau.

----------------------
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)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
TH0M2610



Autorisation : Membre
Nb de messages : 3
Inscrit le : Ven 31 Déc 2010, 14:37
Posté le : Sam 03 Sep 2011, 20:59   Citer 

Oh putain ! J'avais pas pensé à ça ! Ça reste encore un peu louche pour moi mais je vais étudier ça. winkle.gif
Merci !
Mais il reste le problème du fait qu'il faut qu'on ne puisse pas repasser sur la même case sous peine de perdre...
Une connaissance m'a dit qu'il fallait faire un "tableau".

 Adresse email Haut de page Bas de page 
 
Google_AdSense



Publicité    



 
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Sam 03 Sep 2011, 21:10   Citer 

Je peux proposer une autre méthode avec une matrice :

Code
:Lbl DP
:EffEcr
:{8,16 -> dim([A]    //atribue à la matrice [A] une dimention verticale de 8 et
horizontale de 16; "dim(" est dans [matrice][droite]; "[A] est dans [matrice]
:Remplir(0,[A]   // remplit la matrice de 0 (0=libre)
:For(A,1,nombre_d'obstacles   //nombre_d'obstacle doit être remplacer par un
nombre, une variable ou un calcul
:Lbl 1
:entAléat(1,16->X     //abscisse de l'obstacle
:entAléat(1,8->Y      //ordonnée de l'obstacle
:If [A](Y,X      // dans une matrice, on met la ligne avant la colonne
:Goto 1          // s'il y a déjà un obstacle, on revient à avant le tirage (on
reprend au Lbl 1
:1->[A](Y,X      //1=obstacle
:Output(Y,X,"O       //O peut être remplacé par un autre caractère symbolisant
l'obstacle
:End        //Fin du tirage aléatoire des obstacles

:Lbl 2
:entAléat(1,16->X     //abscisse de l'arrivée
:entAléat(1,8->Y      //ordonnée de l'arrivée
:If [A](Y,X
:Goto 2          // s'il y a déjà un obstacle, on revient à avant le tirage (on
reprend au Lbl 2
:2->[A](Y,X     //2=arrivée
:Output(Y,X,"!       //! peut être remplacé par un autre caractère symbolisant
l'arrivée

:Lbl 3
:entAléat(1,16->X     //abscisse du départ
:entAléat(1,8->Y      //ordonnée du départ
:If [A](Y,X
:Goto 3          // s'il y a déjà un obstacle ou si c'est l'arrivée, on revient
à avant le tirage (on reprend au Lbl 3
:3->[A](Y,X      //3=on y est déja passé
:Output(Y,X,"+       //+ peut être remplacé par un autre caractère symbolisant
le personnage

:1->E        //si E=0, on est déjà passé sur la case
:1->V        //si V=0, on aréussit le niveau
:While E et V

:Repeat K      //attend que l'on appuit sur une touche
:CodeTouche ->K      //"CodeTouche" est dans [prgm][droite] et attribue à chaque
touche un nombre (gauche=24, haut=25, droite=26, bas=34)
:End

:X+(K=26)-(K=24->S   //nouvelle abscisse dans S
:Y+(Y=34)-(Y=25->T   //Nouvelle ordonnée dans T


:If T=0 ou T=9 ou S=0 ou S=17   //on est sortit de l'écran + évite un bug dans
les tests suivants
:End    //comme le If n'utilise pas de Then, ferme la boucle du While sans
modifier la position du perso

:If 3=[A](T,S
:0->E         //E=0 signifie que l'on doit recommencer (on sort d'abord de la
boucle pour ne pas ralentir la TI)

:If 1=[A](T,S   //il y a un obstacle
:End    //comme le If n'utilise pas de Then, ferme la boucle du While sans
modifier la position du perso

:If 2=[A](T,S  //on est arrivé au bout du niveau
:0->V          //si V=0 : niveau fini

:Output(Y,X,"X     //X peut être remplaé par un autre symbôle représentant une
case où l'on est déjà passé (on marque la case que l'on est en train de quiter)
:Output(Y,X,"+       //+ peut être remplacé par un autre caractère symbolisant
le personnage (on marque le nouvel emplacement du personnage)
:S->X
:T->Y

:End      //termine la boucle While

:If non(E     //si on est allé sur une case où on était déjà
:Goto DP      //on recommence (on reprend au Lbl DP)

:Output(4,2,"NIVEAU TERMINE    //si la boucle While s'arrête et que l'on ne
doit pas recommencer, alors, on a réussit.



En espérant avoir suffisament bien expliqué
Sandro

PS : je n'ai pas testé, donc si ça ne marche pas, décrit moi le bug, la valeur des variables et, si ça bug, aussi le type d'erreur (ERR:???????) ainsi que l'emplacement de l'erreur (appuie sur 2 et recopie moi la ligne (en la situant s'il y en a plusieurs d'identiques dans le programme) et indique moi sur quel carractère s'arrête le curseur).

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
Poster un nouveau sujet Poster une réponse





  Page générée en 6 requêtes