Salut, je débute dans la programmation, donc c'est pour ca que ja sollicite votre aide.
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.
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 mais je vous l'ai dit je suis débutant )
Donc voilà, merci de répondre, j'ai besoin d'aide (comme l'indique le titre du sujet )
Autorisation : Membre
Nb de messages : 2164
Inscrit le : Sam 23 Jan 2010, 20:09
Posté le : Mar 18 Jan 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.
Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mer 19 Jan 2011, 0: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é.
---------------------- 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)
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!)
Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mer 19 Jan 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.
---------------------- 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)
Autorisation : Membre
Nb de messages : 2164
Inscrit le : Sam 23 Jan 2010, 20:09
Posté le : Jeu 20 Jan 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² Invité
Posté le : Ven 21 Jan 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:
Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Ven 21 Jan 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
---------------------- 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)
Merci pour les conseils
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!
Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mar 25 Jan 2011, 0: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.
---------------------- 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)
Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mar 25 Jan 2011, 22:42
Entre les crochets ce sera un pong graphique auquel on ajoûtera les briques en dernier lieu.
---------------------- 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)
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.
Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mer 26 Jan 2011, 18:50
Tu as fait un copier coller avec deux langues différentes. ^^
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
---------------------- 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)
Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Jeu 27 Jan 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.
---------------------- 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)
Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Jeu 27 Jan 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.
---------------------- 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)
Autorisation : Membre
Nb de messages : 2164
Inscrit le : Sam 23 Jan 2010, 20:09
Posté le : Ven 28 Jan 2011, 9: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.