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
Autorisation : Membre
Nb de messages : 2086
Inscrit le : Sam 23 Jan 2010, 20:09
Posté le : Lun 24 Déc 2012, 10:01
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 ) 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.
uninternaute Invité
Posté le : Lun 24 Déc 2012, 13:42
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
Autorisation : Membre
Nb de messages : 8
Inscrit le : Sam 22 Déc 2012, 12:32
Posté le : Lun 24 Déc 2012, 16:41
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
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
uninternaute Invité
Posté le : Mer 26 Déc 2012, 19:07
ça me fait dimension invalide
voilà mon cocode
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 :
Autorisation : Membre
Nb de messages : 8
Inscrit le : Sam 22 Déc 2012, 12:32
Posté le : Jeu 27 Déc 2012, 0:28
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
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Dim 30 Déc 2012, 15:32
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)