Poster un nouveau sujet Poster une réponse
enchainement d'ennemis
Auteur Message
uninternaute
Invité
Posté le : Dim 23 Déc 2012, 23:56   Citer 

Bonjours. Voilà mon problème, je me suis lancé dans un programme, en fait c'est un jeu d'adresse, un "X" que l'on promene dans une zone limitée sur l'écran des calculs (long : 1-16, larg : 4-6) doit eviter de toucher les "O" qui arrivent vers lui (ils sont dans la meme zone), mais le probleme c'est que je ne crée qu'un seul "O" à la fois, comment faire pour en avoir 1 à chaque ligne verticale ?

J'ai un peu de mal à m'exprimer ce soir, si jamais vous n'avez pas compris ce que j'ai demandé, dites le je vous ecrirez le code que j'ai fait pour l'instant

Mais en gros c'est comme un de ces jeux de voitures sur neogeo ou megadrive (où l'on doit esquiver les voitures devant nous, sauf que la tout ce passe à l'horizontale)
Merci d'avance

  Haut de page Bas de page 
 
Persalteas



Autorisation : Membre
Nb de messages : 2086
Inscrit le : Sam 23 Jan 2010, 20:09
Posté le : Lun 24 Déc 2012, 10:01   Citer 

Il te faut utiliser une matrice de 4 par 16 contenant les positions des ennemis, et redessiner la matrice a chaque tour de boucle en fonction de ses valeurs.

Une technique plus optimisée et plus rapide (mais plus difficile winkle.gif ) consisterait a faire du scrolling avec des chaines: en utilisant 4 chaines de caractères (une par horizontale) que tu décales d'un pas vers la gauche avec "sous-chaine" en rajoutant un blanc vers la droite a chaque tour de boucle (ou un nouveau O si un nombre aléatoire le décide).

Tu fais ça pour chacune des 4 chaines, puis tu affiche une chaine par ligne.

 Adresse email Haut de page Bas de page 
 
uninternaute
Invité
Posté le : Lun 24 Déc 2012, 13:42   Citer 

ah d'accord, mais je ne suis pas du tout familier avec les matrices et les chaines, un petit exemple d'utilisation ainsi qu'une explication seraient les biens venus

  Haut de page Bas de page 
 
maxence



Autorisation : Membre
Nb de messages : 8
Inscrit le : Sam 22 Déc 2012, 12:32
Posté le : Lun 24 Déc 2012, 16:41   Citer 

Si tu as du mal horisontalement, je te conseil de commencer d'abord verticalement, c'est bien plus simple. Tu affiche ton "O" en bas de l'écran, et tu utilise la commande Disp "" pour faire remonter tout l'écran vers le haut.

Non seulement c'est plus simple, mais c'est aussi plus léger et plus rapide.

Après c'est plus simple de passer horisontalement. Mais biensur tu fait comme tu veux winkle.gif

Pour les chaines de caractères, tu peux faire comme ceci:

Code

sous-chaîne(chaîne1+"O", 2, 16)->chaîne1



Avec "chaine1" une ligne de ton scroling qui est composé au total de 4 lignes.
le fait de faire ' chaine1+"O" ' rajoute un "O" à la fin de ta chaine.

la commande "sous-chaine" s'utilise de cette manière:
sous-chaine( chaineÀCouper, premierCaractèreDeLaNouvelleChaine, longueurDeLaNouvelleChaine )

par exemple: sous-chaine( "BONJOUR", 2, 4) te donne "ONJO"

J'espere que tu a compris mon exemple, persaelorus rex te conseilera mieux que moi sur les matrices winkle.gif

 Adresse email Haut de page Bas de page 
 
uninternaute
Invité
Posté le : Mer 26 Déc 2012, 19:07   Citer 

ça me fait dimension invalide cry.gif

voilà mon cocode happy.gif

Code

:1->E                 // variable permetaant au jeu de continuer
:5->A                 // position du "X" (selon la largeur)
:1->B                 // position du "X" (selon la longeur)
:0->F                  // score         
:0->C                   // position ennemie (larg)
:0->D                   // position ennemie (long)
:EffEcr
:For (I,1,16)
:output (3,I,"-
:Output (7,I,"-
:End                   // limites de l'ecran de jeu
:output (2,1,"score:
:While E=1              // continuer le jeu
:Output (2,7,F
:codetouche->T
:If T (> ou =)24 et T (< ou =)26 ou T=34:Output (A,B," "
:If T=24:B+1->B
:If T=25:A-1->A
:If T=26:B-1->B
:If T=34:A+A->A
:min (6,A->A:max (4,A->A
:min (10,B->B:max (1,B->B
:Output (A,B,"X



Ca c'est le début du code identique aux trois versions du programme,
pour la version 1 (avec 1 ennemie a la fois:


Code

:If D=0
:Then
:entaleat(4,6)->C
:15->D
:End
:Output (C,D+1," "
:Output (C,D,"O
:D-1->D
:If C=A et D=B:0->E             // si il y a colision, la partie se termine
:F+B->F
:End


sans grand interet vous l'aurez vu, voici ce que j'ai rajouté pour les chaines :

Code

:" "->Chaine1
:" "->Chaine2
:" "->Chaine3
:sous-chaine(Chaine1+"O",2,15)->Chaine1
:sous-chaine(Chaine2+"O",2,15)->Chaine2
:sous-chaine(Chaine3+"O",2,15)->Chaine3
:F+B->F
:End


qui ne marche pas bigmouth.gif
quand au troisieme code avec la matrice, c'est un vrai desastre, je ne prefere pas en parler happy.gif

  Haut de page Bas de page 
 
maxence



Autorisation : Membre
Nb de messages : 8
Inscrit le : Sam 22 Déc 2012, 12:32
Posté le : Jeu 27 Déc 2012, 0:28   Citer 

C'est normal.

Tout d'abord si tu veux que ton jeu se déroule sur toute la largeur de l'écran,


Code

il faut que tu mette
sous-chaine(chaine1+"O", 2, 16)->chaine1

et non pas
sous-chaine(chaine1+"O", 2, 15)->chaine1



mais surtout, il faut que tes chaines de base soient composées de 16 espaces et non pas un seul, car tu ne peux pas découper une phrase de 16 caractère à partir d'une phrase de 2 caractères, c'est de la que viens ton erreur, mais désolé, c'est de ma faute j'avais oublier de te le préciser winkle.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 : Dim 30 Déc 2012, 15:32   Citer 

Continuez comme ça, cela promet. C'est en effet la première fois que quelqu'un cite cette méthode à ma connaissance sur ce forum.
(j'ai déjà utilisé une chaine mais pas de cette façon)

Cependant cette méthode me semble plus adaptée pour générer plusieurs obstacles par ligne qu'un par ligne comme demandé.

Je propose de stocker une abscisse d'obstacle par ligne, dans une liste ou dans quelques variables numériques. Ainsi il reste à incrémenter ces abscisses pour simuler l'avancée et enfin la collision.

Concernant l'affichage il y a plusieurs solutions/complications.
-Les chaines sont idéales pour l'affichage du déplacement horizontal.
-Les listes sont idéales pour l'affichage du déplacement vertical avec Disp.
-La matrice peut gérer n'importe quoi mais n'apporte pas d'avantage d'affichage.

Quand je dis que l'affichage est idéal, c'est qu'une fonction d'affichage permet de gérer à elle toute seule une ligne entière voire tout l'écran.
Sinon il faut écrire des instruction d'effacement et d'écriture répétées ou dans des boucles.

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



Publicité    



 
Erdnuss



Autorisation : Membre
Nb de messages : 30
Inscrit le : Mer 14 Déc 2011, 20:42
Posté le : Sam 05 Jan 2013, 19:18   Citer 

Le


Code
:If T=24:B+1->B
:If T=25:A-1->A
:If T=26:B-1->B
:If T=34:A+A->A       //////////////  c est pas plutôt A+1 ???



Peut se remplacer par :


Code
:B+(T=24)-(T=26->B
A-(T=25)+(T=34->A



Ça fonctionne car si T=24, alors (T=24) vaut 1, sinon, 0

----------------------
Il y a 11 sortes de personnes. Ceux qui connaissent le unaire et ceux qui ne le connaissent pas.
 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