Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.
Position d'un ennemi aléatoire
MrSheepSheep le 25/11/2012 à 17:26
Bonjour, je débute en programmation (j'ai fait mon premier programme de Pythagore cette semaine) et je me suis lancé dans un genre de Space Invaders ou l'on contrôle un petit vaisseau spatial. Le but est de tirer sur ses ennemis pour gagner des points. Au fur et à mesure que le temps passe, les ennemis apparaissent de plus en plus vite. Des qu'un ennemi est détruit, il rapporte des points (aléatoirement entre 10 et 20)
Ça, c'est mon idée. Maintenant que j'ai créé le mouvement du vaisseau, je voudrais créer l'apparition des ennemis sur une colonne aléatoire (comprise entre 1 et 16) qui avancent d'une ligne vers le bas toutes les X secondes.
J'ai un peu de mal à trouver les fonctions que je dois utiliser...
Vous pourriez m'aider à faire ce programme ?
Voilà ce que j'ai fait pour l'instant :
("ø"est un "=" barré et ü un "Sto")
Aussi, je me demande où je vais mettre l'apparition des ennemis sachant que cela doit se passer en même temps que le mouvement...
linkakro le 26/11/2012 à 19:30
Bienvenue.
Le nombre aléatoire en lui-même se génrère avec une des fonctions du menu math\prb.
Ce qui te servira sera randInt(A,B) qui génère un aléatoire entier entre A et B.
La méthode de base pour les ennemis serait d'avoir quelques variables pour chaque ennemi.
Par la suite on peut tout stocker dans une liste ou une matrice, mais on n'en est pas encore là.
L'emplacement de la génération de l'ennemi ne laisse pas beaucoup de choix : juste avant les If ou le getKey.
A la limite si les calculs de contrôle des ennemis sont trop lent, tu peux les séparer de l'affichage et placer tous les affichages à proximité des If de déplacement.
----
Voici un tutoriel :
http://www.siteduzero.com/tuto[...]tml#part_407872 MrSheepSheep le 27/11/2012 à 07:44
J'utilise donc (pour ma ti-82 stats FR) entAleat(0,16) -> A pour la colonne aléatoire, et ensuite il faut les faire descendre en ligne droite...
J'ai modifié le mouvement du vaisseau pour qu'il soit plus net. Le léger clignotement m'agace
Voici le nouveau code :
Code
:8ü (
) A
:150ü (
) D
:randInt(1,16)ü (
) E
:0ü (
) F
:ClrHome
:Lbl0
:getKeyü (
) K
:Outpout(8,A,"H
:While 1
:For(Z,0,D
:Outpout (F,E,"V
:If Fø9:F+1ü (
) F
:If F=9:randInt(1,16)ü (
) E
:End
:End
:If K=24 and A-1ø0
:Then
:ClrHome
:Outpout(8,A,"
:A-1ü (
) A
:End
:If K=26 and A+1ø17
:Then
:EffEcr
:Outpout(8,A,"
:A+1ü (
) A
:End
:Goto 0
Pouvez-vous me dire pourquoi j'obtiens une erreur lors de mon Outpout(F,E,"V") ?
Je pense pourtant avoir donné les deux variables au préalable.
Sinon, merci pour le tutoriel, mais j'en tire déja toutes les informations dont j'ai besoin ^^
blg_flg le 27/11/2012 à 17:31
Outpout...
C'est quel type d'erreur?
MrSheepSheep le 27/11/2012 à 18:12
Une erreur de type DOMAIN
Je comprends pas pourquoi :/Cytropus le 27/11/2012 à 18:27
le entAlét doit être entre 1 et 16

MrSheepSheep le 27/11/2012 à 18:31
Merci de la remarque, j'avais complètement oublié que c'était impossible d'écrire sur la colonne 0 ^^"
En revanche, ca ne change rien. J'ai toujours la même erreur

Peut-être me conseillerez-vous de changer les quelques lignes concernant les ennemis ?
Je rappelle qu'un ennemi apparaît une fois que l'ennemi d'avant est descendu de 2 lignes (1->3 par ex.)
et qu'ils vont assez lentement selon le niveau de difficulté (j'utilise donc for et une variable dont la valeur change en fonction du niveau de difficulté). Mais il faut déja que j'arrive à faire descendre mon ennemi, parce que soit il descend mais la colonne (E) change sans arrêt, soit il ne descend pas !
linkakro le 28/11/2012 à 23:18
Pour l'instant il y a une seule paire de variables pour tous les ennemis : E et F.
Il faut soit une variable par position (dire "y a un ennemi ici" ou "y a pas d'ennemi") soit quelques variables par ennemis (dire "l'ennemi N est ici").
Cela nécessitera probablement de répéter le code d'ennemi plusieurs fois avec des variables différentes.
J'aurais conseillé (MAIS...*) de ne pas placer la boucle de temporisation autour de la génération d'ennemi, cela déplace l'ennemi plusieurs fois.
*MAIS... cela peut améliorer la fluidité tout en arrivant à tes fins.
Mon idée originale était de placer une temporisation vide entre les générations et le déplacements, puis de diminuer sa durée pour augmenter la difficulté.
A VOIR donc.
Je n'ai pas examiné le code plus en profondeur, au moins pour l'instant. Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.