Forum

Catégorie : Programmes
Forum : Aide à la programmation
Vues : 1688
Réponses : 21
Type : discussion
Etat : réponses autorisées

J'ai besoin d'aide - Page 1 / 2

f/x=x² le 18/01/2011 à 16:20
Salut, je débute dans la programmation, donc c'est pour ca que ja sollicite votre aide. godgrace.gif
Mais j'aimerais réaliser un programme que je ne vois nulle part sur ce site, à savoir un casse-briques.
Oulà, oui, je sais, je m'attaque à un gros morceau. cupsmiley.gif
Mais bon, j'aimerais savoir comment réaliser une brique (la balle sera un degré et la barre une succession de -), comment régler la vitesse de la balle (un getkey?) ainsi que sa direction, et puis aussi comment faire pour la faire rebondir sur la barre. (oui je sais ca fait beaucoup minied.gif mais je vous l'ai dit je suis débutant beer.gif )
Donc voilà, merci de répondre, j'ai besoin d'aide (comme l'indique le titre du sujet ahh.gif )
Persalteas le 18/01/2011 à 21:47
alors, je veux bien t'aider car j'ai réussi a faire deux casse briques que j'ai raté tous les deux et en voir un qui maerche me ferait plaisir.

il faut déjà que tu choisisses entre la rapidité du jeu ou les options qu'il présente. les deux ne sont pas possibles.

je te conseille pour les graphismes d'utiliser le mode graphique.

petite aide sur les variables nécéssaires (mais ensuite tu t'adapte si ça te plait pas, moi je te dis ce que j'avais fait moi:

deux variables X et Y pour la balle
deux variables coefficients directeurs de la balle, qui peuvent changer pour que le balle n'aille pas tout le temps dans la même direction
une variable position de la "barre" en bas de l'écran
une variable longueur de cette barre
une variable contenant le numéro du bonus en cours, et 0 si il n'y a pas de bonus
deux variables contenant les positions du bonus qui tombe.
Une matrice qui contient la position des briques (1 si il y a brique, 0 si il n'y a pas brique, 2 si c'est une brique spéciale... )


essaie déjà de faire une boucle de base, ou on peut au moins bouger la barre et la balle se déplace, c'est pas très dur tu devrais y arriver.


ensuite ça se complique, si tu veux je t'aide.

bonne chance.
linkakro le 19/01/2011 à 00:20
persalteas :
Je voulais poster un pavé, mais je n'ai pas fini et tu es déjà passé.
Je suis d'accord avec ce que tu proposes mais tu es plus visionnaire que moi.

édit: désolé pour le petit quiproquo. c'est arrangé.
f/x)x² le 19/01/2011 à 08:52
Une boucle de base? C'est quoi? Lbl X.............Goto X?
Sinon, le fait de faire rebondir la balle sur la barre c'est le principe du pong, c'est l'un des premiers programmes qu'o fait quand on débute. Mais moi je voulais faire un prog:
1) Utile
2) Inédit.
Et y'avait qu'un truc qui remplissait ces deux conditions:le casse-briques.
En fait il faudrait faire un pong + des briques qui se cassent au contact de la balle qui rebondira alors.
Les bonus on verra après. (faudrait tracer un cercle... plus la fonction ligne pour écrire un truc dedans... mais faudrait que ce soit lisible... Arrrgh!)
linkakro le 19/01/2011 à 14:32
La boucle de base avec un peu de contenu reviendra justement à un pong sans adversaire.
Si le pong est graphique, tu auras le loisir des pixel-test.
Les cercles peuvent être faits avec des caractères.
metallica le 19/01/2011 à 14:35
Pour la boucle, il faut mieux utiliser:
Code
:Repeat K=45
:codetouche-)K
...
:End

-) correspond à la flèche [sto->]

Comme ça le jeu s'arrête lorsqu'on appui sur [annul](sur TI en Français)/[Clear](sur TI en Anglais).

Ensuite, fait des calculs en utilisant la variable K pour le déplacement de la barre:
Code
:X-(K=24 et X)+(K=26 et X#86-)X

86 pour une barre de 8 pixels de large.

Ensuite, à toi de jouer.

PS: je te conseil d'utiliser la fonction "ligne" pour la barre.
Persalteas le 20/01/2011 à 21:58
linkakro, f/x , je pense que ce que je propose est suffisamment inédit, car je n'en connais pas de programme rapide qui le fait, et ce n'est pas trop visionnaire, car c'est possible.

f/x, si tu sais déjà faire un pong, reprends la base du pong pour la boucle générale. (la balle qui rebondit partout et la palette qui se déplace.)

je te conseille ensuite de rajouter ensuite des bonus qui "tombent du ciel", ça donnera de la classe à ton prog, et ça le rendra inédit (parce que des casse brique avec bonus il y en a pas beaucoup.
si tu as un bas niveau en progra, c'est déjà assez difficile.

ensuite, rajoute les briques.
c'est le truc le plus dur, tu verras (et linkakro aussi), on a l'impression que c'est simple, mais c'est super dur de faire rebondir la balle sur la brique:

- parce que si la balle touche la brique: la brique disparait donc la balle ne rebondit pas puisqu'il n'y a pas de brique.

- si on fait rebondir la balle avant de coder l'effacement de la brique, et bien, la balle est repartie dans un autre sens, donc la brique n'est pas détruite...

j'ai mis du temps a régler ces deux problèmes.

et une fois que c'était fait, je n'ai jamais réuissi a faire que la balle rebondisse dans la bonne direction.

donc c'est pourquoi je pense qu'il vaut mieux installer les briques en dernier dans le jeu.
f/x=x² le 21/01/2011 à 10:32
Donc voilà un pong basique:
Code
EffEcr
:0->S
:7->A
:entAleat(3,6->B
:entAleat(5,12->C
:-1->D
:-1->E
:1->F
:Lbl1
:EffEcr
:B+D->B
:C+E->C
:A+F->A
:Output(1,11,"SCR:
:Output(1,15,S
:Output(8,A,"===
:Output(B,C,"°
:If B=1:1->D
:If C=1:1->E
:If C=16:-1->E
:codeTouche->K
:If K=24 et A/=/1:-1->F             
:If K=26 et A/=/14:1->F
:If A=1:0->F
:If A=1 et K=26:1->F
:If A=14:0->F
:If A=14 et K=24:-1->F
:If B=7 et C=A ou B=7 et C=A+1 ou B=7 et C=A+2:Goto 0
:If B=8:Goto 2
:Goto 1
:Lbl 0
:-1->D
:S+1->S
:Goto 1
:Lbl 2
:EffEcr
:Output(3,5,"PERDU !
:Output(5,2,"VOTRE SCORE:
:Output(5,14,S
:Pause
:EffEcr
:Stop

Ensuite pour les bonus:il faudrait utiliser rand pour avoir la position aléatoire de là où les bonus tombent.
Mais ja ne sais pas quels nombres ajouter et multiplier ce rand pour arriver à une position significative...
Voici mon idée:
Code
10-)Y
[couleur=#FF0000]???[/couleur]rand-)X
Cercle(X,Y)

Après il faudrait faire tomber le bonus, ca je sais pas comment faire, même si je pense qu'il faudrait utiliser un For(.
linkakro le 21/01/2011 à 23:06
Un for ne convient pas si le cycle général est géré par d'autres paramètres. Surtout si le for n'est pas executé systématiquement.
On utilise une variable à incrémenter et décrémenter, avec des If.

on fait à chaque tour Y+1->Y
on initialise Y lorsqu'on en a besoin
on affiche le bonus lorsque les coordonnées sont valides

Code
Y+1->Y
If Z
10->Y
If Y<17
output(Y,X,"O

---
C'est dommage que ce prog ne soit pas en graph. Car la gestion des briques sera immonde sans pixel-test (lourde mais faisable)

Il faut paramétrer le graph au début et remplacer les Output par des textes ou dessins. Il faut aussi multiplier les valeurs du vecteur de déplacement pour la taille de chaque case.

Les tests ne prendront en compte pas que les coordonnées.

---
Code
:If B=7 et C=A ou B=7 et C=A+1 ou B=7 et C=A+2:Goto 0
:If B=8:Goto 2
:Goto 1
:Lbl 0

// devient

:If B=8:Goto 2
:If non(B=7 et abs(A+1-C)<2):Goto 1
f:x=x² le 24/01/2011 à 13:55
Merci pour les conseils happy.gif
Mais je sais pas comment ca marche les pixel-test.
Voilà le début:
Code
PlotsOff
FnOff
ClrHome
FullScreen
ClrDraw
0->Xmin
94->Xmax
0->Ymin
62->Ymax
CoordOff
LabelOff
AxesOff
Horizontal 0
Horizontal 62
Vertical 0
Vertical 94
For (A,1,7
Text (10,A, "F/X=X²
End
For (A,1,13
Text (A,53,"PRESENTE : "
End
For (A,1,35
Text (35,A,"CASSE-BRIQUES
End
ClrDraw
Menu("CASSE-BRIQUES","JOUER",J,"SCORES",S,"QUITTER",Q
Lbl Q:Stop
Lbl J
[...]
Lbl S
ClrDraw
Text(0,0,"VOTRE MEILLEUR SCORE EST",B
Menu("SCORES","QUITTER",A,"JOUER",C
Lbl A:Goto Q
Lbl C:Goto J

Voilà, les scores seront stockés dans une liste,mais je sais pas coment sélectionner le meilleur score et l'envoyer dans la liste.
Il faudrait que vous m'aidiez pour le [...].
Mais ca commence à prendre forme! bigmouth.gif
linkakro le 25/01/2011 à 00:21
Cela ne casse pas encore des briques ^^ mais ça vient.

Pour facilité la compatibilité entre les pixels (pxl) et les coordonnées (pt ou ligne) on met ceci :
Code
-62->Ymin
0->Ymax
et on met au négatif les coordonnées des fonctions de point avec tout compatible en valeur absolue.

Pour le meilleur score, teste si B est suppérieur à la liste :
Code
Disp B
If B>L1(1)
Then
B->L1(1
Disp "RECORD",B
End


Adaptes le prog de pong pour l'introduire dans ta dernière proposition, d'ici qu'on y ait réfléchi.
Puis si personnes n'achève entre temps, on ajoûtera les briques.
f/x=x² le 25/01/2011 à 12:07
OK, version 2 du casse-briques (non fini, hein!):
Code
PlotsOff
FnOff
ClrHome
FullScreen
ClrDraw
0->Xmin
94->Xmax
-62->Ymin
0->Ymax
CoordOff
LabelOff
AxesOff
Horizontal 0
Horizontal 62
Vertical 0
Vertical 94
For (A,1,7
Text (10,A, "F/X=X²
End
For (A,1,13
Text (A,53,"PRESENTE : "
End
For (A,1,35
Text (35,A,"CASSE-BRIQUES
End
ClrDraw
Menu("CASSE-BRIQUES","JOUER",J,"SCORES",S,"QUITTER",Q
Lbl Q:Stop
Lbl J
EffDessin
[...]
Lbl S
ClrDraw
Text(0,0,"VOTRE MEILLEUR SCORE EST",B
If B>L1(1)
Then
B->L1(1
Texte(1,1,"RECORD"
End
ClrDraw
Menu("SCORES","QUITTER",A,"JOUER",C
Lbl A:Goto Q
Lbl C:Goto J

Mais je sais pas quoi mettre dans les crochets après le EffDessin.
Aidez-moi!
linkakro le 25/01/2011 à 22:42
Entre les crochets ce sera un pong graphique auquel on ajoûtera les briques en dernier lieu.
f/x=x² le 26/01/2011 à 09:35
Donc voilà le casse-briques... sans les briques cupsmiley.gif
Code
PlotsOff
FnOff
ClrHome
FullScreen
ClrDraw
0->Xmin
94->Xmax
-62->Ymin
0->Ymax
CoordOff
LabelOff
AxesOff
Horizontal -62
Horizontal 0
Vertical 0
Vertical 94
For (A,1,7
Text (10,A, "F/X=X²
End
For (A,1,13
Text (A,53,"PRESENTE : "
End
For (A,1,35
Text (35,A,"CASSE-BRIQUES
End
ClrDraw
Menu("CASSE-BRIQUES","JOUER",J,"SCORES",S,"QUITTER",Q
Lbl Q:Stop
Lbl J
EffDessin
EffEcr
0->S
7->A
entAleat(3,6->B
entAleat(5,12->C
-1->D
-1->E
1->F
Lbl 1
EffEcr
B+D->B
C+E->C
A+F->A
Output(1,11,"SCORE:
Output(1,15,S
Output(8,A,"===
Output(B,C,"°
If B=1:1->D
If C=1:1->E
If C=16:-1->E
codeTouche->K
If K=24 et A/=/1:-1->F             
If K=26 et A/=/14:1->F
If A=1:0->F
If A=1 et K=26:1->F
If A=14:0->F
If A=14 et K=24:-1->F
If B=8:Goto 2
If non(B=7 et abs(A+1-C)<2):Goto 1:-1->D
S+1->S
Goto 1
Lbl 2
EffEcr
Output(3,5,"PERDU !
Output(5,2,"VOTRE SCORE:
Output(5,14,S
If S>L1(1
Then
S->L1(1
Output(6,14,"RECORD
End
Pause
EffEcr
Menu ("FINI!","REJOUER",H,"QUITTER",M
Lbl H:Goto J
Lbl M:Stop
Lbl S
ClrDraw
Text(0,0,"VOTRE MEILLEUR SCORE EST",B
ClrDraw
Menu("SCORES","QUITTER",A,"JOUER",C
Lbl A:Goto Q
Lbl C:Goto J

Après faut mettre les briques avec les pxl-test mais je sais pas comment ca marche.
linkakro le 26/01/2011 à 18:50
Tu as fait un copier coller avec deux langues différentes. crazy.gif ^^
Je suis déçu du démarrage de partie que je souhaîte rendre régulier.
Il faut préparer la liste de record au début du prog.

Nous comptions le faire en graphe pour augmenter le plateau. Et le pong n'était pas en graphe.
Je propose d'utiliser des text en remplacement des output.
Il y a une complication car le ° prend plus de largeur que les autres caractères en graphe. (4 en normal et 5 pour le °)
Multiplie les abscisses par 5 et les ordonnées par 6, puis soustraît 5 et 6.
Et choisir les coordonnées maximum.

Si les coordonnées de briques et de balles sont synchronisées, alors c'est plus facile. Pxl-test(Y,X) envoie 0 si le pixel est éteint et 1 si allumé.
Il n'y a qu'à tester un pixel de la prochaine case pour savoir s'il y a un obstacle.

Voici un bricolage incomplet, testé dans wabbitemu. Il manque l'agrandissement du cadre et les briques (et peut-être plus)
Pour les briques, un For au début et des pixel-test.
Code
0ü ( ) dim(L
PlotsOff
FnOff
ClrHome
Full
ClrDraw
0ü ( ) Xmin
94ü ( ) Xmax
ú ( ) 62ü ( ) Ymin
0ü ( ) Ymax
CoordOff
LabelOff
AxesOff
Horizontal ú ( ) 62
Horizontal 0
Vertical 0
Vertical 94
For(A,1,7
Text(10,A," F/X=XÜ
End
For(A,1,13
Text(A,53," PRESENTE : "
End
For(A,1,35
Text(35,A," CASSE-BRIQUES
End
ClrDraw
Menu("CASSE-BRIQUES","JOUER",J,"SCORES",S,"QUITTER",Q
Lbl Q:Stop
Lbl J
ClrDraw
ClrHome
0ü ( ) S
30ü ( ) A
30ü ( ) B
50ü ( ) C
ú ( ) 6ü ( ) D
ú ( ) 5ü ( ) E
ú ( ) 5ü ( ) F
Lbl 1
ClrHome
Text(42,A,"               "
Text(B,C,"    "
B+Dü ( ) B
C+Eü ( ) C
A+Fü ( ) A
Text(42,A,"= = =
Text(B,C,"ô
If B=0:6ü ( ) D
If C=0:5ü ( ) E
If C=75:ú ( ) 5ü ( ) E
getKeyü ( ) K
If K=24 and Aø0:ú ( ) 5ü ( ) F
If K=26 and Aø70:5ü ( ) F
If A=0:0ü ( ) F
If A=0 and K=26:5ü ( ) F
If A=70:0ü ( ) F
If A=70 and K=24:ú ( ) 5ü ( ) F
If B=42:Goto 2
If not(B=36 and abs(A+5-C)<10):Goto 1
ú ( ) 6ü ( ) D
S+1ü ( ) S
Goto 1
Lbl 2
ClrHome
Output(3,5,"PERDU !
Output(5,2,"VOTRE SCORE:
Output(5,14,S
If S>L(1
Then
Sü ( ) L(1
Output(6,7,"RECORD
End
Pause
ClrHome
Menu("FINI!","REJOUER",H,"QUITTER",M
Lbl H:Goto J
Lbl M:Stop
Lbl S
ClrDraw
Text(0,0,"VOTRE MEILLEUR SCORE EST",B
ClrDraw
Menu("SCORES","QUITTER",A,"JOUER",C
Lbl A:Goto Q
Lbl C:Goto J
Persalteas le 27/01/2011 à 14:10
Waw, j'ai raté un sacré bout, moi!

jusque la, linkakro à raison, je n'ai pas testé le bricolage, mais tu as raison de le passer en mode graphique.

mais alors pourquoi tu mets des ClrHome partout?
et ensuite, le passage pour déplacer la palette me semble bizzare...
il est simplifiable je pense...

et puis: Lbl H:Goto J autant mettre J dans le menu directement.

EDIT: j'ai testé le bricolage, eh ben, c'est du bricolage, hein...
linkakro le 27/01/2011 à 18:53
Je ne l'ai pas conçu en entier : c'est plutôt une amélioration du prog lancé par f/x=x² pour le laisser lui ou quiconque le terminer.

Je ne me suis pas acharné dessus car je conçois mon propre casse-brique parallèlement.
f/x=x² le 27/01/2011 à 20:36
Moi je veux bien le finir, mais qu'est-ce qu'il faudrait que je rajoute?
linkakro le 27/01/2011 à 20:50
-Augmente la taille de la zone de jeu en modifiant les tests de bord d'écran
-mets des briques
-génère des rebonds contre les briques

Si je touve du temps je le ferai mais comme ça c'est ouvert à tout le monde.
Persalteas le 28/01/2011 à 09:17
je viens d'en refaire une nouvelle version qui marche avec les briques:

je poste le code dans la rubrique des programmes, tu peux t'inspirer de mon algorithme pour les briques si tu veux.

il a tout de même deux problèmes:

pb majeur: tout ce passe bien quand la balle rencontre une brique, seulement si le choc est en dessous de la brique. pour les briques touchées par la gauche ou par la droite, ça marche de temps en temps (ne me demandez pas pourquoi je ne sais pas), et quand la brique est touchée par le haut, ça ne marche pas du tout.

pb mineur: le coefficient directeur de la balle est tout le temps le même, mais si on ne le sait pas ça ne fait rien. Cela n'empêche pas la balle de toucher toutes les briques.

donc ne le recopie pas mot pour mot (surtout qu'il a pas grand chose a voir avec le tien), il est encore loin d'être parfait.