Forum

Catégorie : Programmes
Forum : Les programmes des internautes
Vues : 2137
Réponses : 14
Type : discussion
Etat : réponses autorisées

Casse brique version bêta

Persalteas le 28/01/2011 à 10:02
alors je vous présente mon casse brique (enfin mon deuxième casse brique), qui n'est malheureusement pas fini, mais qui est déjà classe.

ses avantages: pas trop lent pour un casse briques en basic
beaux graphismes (enfin même si je les poste pas tous ici)
léger en octets.
vu que c'est une matrice qui gère les briques, ça va être très simple de faire un éditeur de niveaux

ses inconvénients: eh bien le rebond sur brique ne fonctionne pas à tout les coups.

voilà la partie principale de mon code:

Code

:FonctNAff
:AxesNAff
:Normal
:Flottant
:1->Xmin
:95->Xmax
:1->Ymin
:63->Ymax
:EffDessin

ici il y a une longue portion de code réservée à la présentation du jeu (persalteas présente cassebrique etc...)que je ne poste pas car 1) c'est long et je suis flemmard, 2) je ne souhaite pas dévoiler mes super graphismes tout de suite.

:Lbl 0
:Menu("--CASSE BRIQUE--","JOUER",1,"QUITTER",Q
:Lbl 1
:Horizontale 1
:Horizontale 63
:Verticale 1
:Verticale 95
:For(K,5,95,3
:Pt-Aff(K,4
:End
:18->L
:0->S
:20->P
:2->E:2->F
:[[1,1,1,1,1,1,1,1,1][1,1,1,1,1,1,1,1,1][1,1,1,1,1,1,1,1,1][1,1,1,1,1,1,1,1,1]]->[C]
:For(X,3,83,10
:For(Y,3,24,6
:[C]((Y-3)/6+1,(X-3).1+1->K
:Ligne(X,63-Y,X+9,63-Y,K
:Ligne(X,63-Y,X,58-Y,K
:Ligne(X,58-Y,X+9,58-Y,K
:Ligne(X+9,63-Y,X+9,58-Y,K
:End
:End
:25->X:9->Y
:For(K,P,P+L,3
:Pt-Aff(K,4,2
:End
:Texte(32,25,"PRESS ENTER...
:Pause
:Texte(32,25,"   tapez 51 espaces ici(ça fait env 3 lignes)    "
:Repeat K=45
:codeTouche->K
:If K=24 et P>5:Then
:Pt-NAff(P+L,4,2
:P-3->P
:Pt-Aff(P,4,2
:End
:If K=26 et P+L<91:Then
:Pt-NAff(P,4,2
:P+3->P
:Pt-Aff(P,4,2
:End
:Pt-NAff(X,Y,2
:X+E->X
:Y+F->Y
:Pt-Aff(X,Y,2
:If Y<6 et non(X>P et X<P+L):Goto P
:0->Q
:0->R
:0->T
:0->U
:If pxl-Test(61-Y-F,X+E-1:1->Q
:If pxl-Test(63-Y-F,X+E+1:1->R
:If pxl-Test(63-Y-F,X+E-3:1->T
:If pxl-Test(65-Y-F,X+E-1:1->U
:If U et Y<10:S+2->S
:If Q ou U:-F->F
:If T ou R:-E->E
:If (Q ou R ou T ou U) et Y>10 et Y<58 et X>5 et X<90:Then
:0->A
:If Q:1->A
:If R:2->A
:If T:3->A
:If U:4->A
:prgmZBRICK
:End
:End
:Lbl P
:EffDessin
:Horizontale 1
:Horizontale 63
:Verticale 1
:Verticale 95
:For(A,1,95
:Pt-Aff(A,40
:Pt-Aff(A,39
:Pt-Aff(95-A,29
:Pt-Aff(95-A,28
:End
:Texte(26,35,"PERDU  !
:Texte(39,30,"SCORE :    ",S
:Pause
:Lbl Q
:EffDessin
bon et ici il y a toute la tripotée de commandes habituelles pour effacer les variables et remmettre les paramètres de la calto à zéro, j'ai la flemme de les recopier, vous les connaissez.


oupps!! j'ai écrit en language Ti 83+, ce qui n'est pas très approprié sur ce forum... remplacez les Pt-Aff( par Pt-On( et les Pt-NAff( par Pt-Off(.

et maintenant le programme ZBRICK que le programme appelle:

Code

:arrondi((62-Y)/6,0->I
:arrondi(X.1,0->J
:If A=1:Then
:0->R
:For(A,4,1,-1
:If [C](A,J:A->R
:If R:0->A
:End
:R-1->R
:End
:
:If A=2:Then
:I->R
:J+1->J
:End
:
:If A=3:Then
:I->R
:J-1->J
:End
:
:If A=4:I->R
:
:If A=1 ou A=4:R-1->R
:If A=2 ou A=3:R-2->R
:0->[C](R+1,J
:S+10->S
:6R+3->R
:10J-7->J
:Ligne(J,63-R,J+9,63-R,0
:Ligne(J,63-R,J,58-R,0
:Ligne(J,58-R,J+9,58-R,0
:Ligne(J+9,63-R,J+9,58-R,0



je veux bien admettre que mon code est compliqué, si il y a un algorithme que vous ne comprenez pas demandez moi.

Je ne comprends pas vraiment moi même le programme ZBRICK, je l'ai programmé un peu au hasard, au fur et à mesure de modifs quand ça ne marchait pas.

résultat, je ne sais pas pourquoi ma balle ne rebondit pas à tout les coups.

J'accepte donc vos idées sur le rebondissement de la balle sur une brique.

Je veux bien savoir aussi si vous savez comment faire pour que la balle ne rebondisse pas selon la même direction si elle tombe en plein centre de la balle ou sur un bord.

merci!!
linkakro le 28/01/2011 à 21:45
La balle est-elle de la même taille que les briques ?
Cela peut impliquer pas mal de choses.
(pas grande envie de recopier)

Je me demande pourquoi tu fais des pixel-test alors que tu as une matrice.

====

J'ai testé quelque chose où ça change le coefficient directeur mais la vitesse donne l'impression d'augmenter.
Mais surtout cela apporte de nombreuses complications que je ne souhaîte pas surmonter (bien que j'ai une idée de solution)
Je me limite à la variation de rebond sur la barre.

Montre-moi la partie qui gère le rebond sur la barre et je te montrerai comment je m'y prend.
f/x=x² le 31/01/2011 à 09:02
Désolé de casser le suspense mais ta "magnifique présentation" c'est en fait ça:
Code
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

godgrace.gif
ld le 31/01/2011 à 10:34
Ne peut tu pas utiliser la commande "remplir (1,[C])" ?
a la place de :
:[[1,1,1,1,1,1,1,1,1][1,1,1,1,1,1,1,1,1][1,1,1,1,1,1,1,1,1][1,1,1,1,1,1,1,1,1]]->[C] crazy.gif
ld le 31/01/2011 à 10:44
:0->Q
:0->R
:0->T
:0->U
Utilise "Effvar Q", c'est plus rapide. happy.gif

:If Q:1->A
:If R:2->A
:If T:3->A
:If U:4->A
Signifie "if Q=1:1->A" n'es pas ?
Çà doit pouvoir donner:

(Q)+2(R)+3(T)+4(U
A(Rep=/=0)+Rep(Rep=0->A
ld le 31/01/2011 à 10:46
Je vais le tester, il à l'air bien. Tank you ! glasses.gif
linkakro le 31/01/2011 à 23:04
l.davin a écrit :
Ne peut tu pas utiliser la commande "remplir (1,[C])" ?
a la place de :
:[[1,1,1,1,1,1,1,1,1][1,1,1,1,1,1,1,1,1][1,1,1,1,1,1,1,1,1][1,1,1,1,1,1,1,1,1]]->[C] crazy.gif

La méthode pas jolie sert à créer des niveaux remplis différemments, avec des motifs ...
tandis que remplir(1,[C] n'est utile que pour un remplissage complet.

===================
l.davin a écrit :
:If Q:1->A
:If R:2->A
:If T:3->A
:If U:4->A
Signifie "if Q=1:1->A" n'es pas ?
Çà doit pouvoir donner:

(Q)+2(R)+3(T)+4(U
A(Rep=/=0)+Rep(Rep=0->A
Tu as inversé des tests et puis il y a plus simple.
Tu veux plutôt dire
Code
Q+2R+3T+4U
If Rép:Rép->A
Par contre il faut que les variables ne soient pas à 1 en même temps et elles doivent être absoluement booléennes.
Persalteas le 01/02/2011 à 21:42
alors...

1) ma présentation est beaucoup mieux que ça, cherche pas.

2) le passage qui fait rebondir la balle sur la barre: et bien justement: il y en a pas.il y a un passage qui t'envoie perdre si tu n'es pas sur la barre par contre, c'est le Goto P.

3) une balle de la même taille que les briques: ah bon? qu'est-ce qui te fait penser ça? ma balle fait 3x3 alors que mes briques font 9x6. ça explique les pixel test.

ensuite vous embêtez pas pour le coup des 4 variables, je n'ai pas l'intention de laisser cette portion de code comme ça, c'est juste temporaire le temps que je le finisse.
linkakro le 01/02/2011 à 23:28
A la place de la ligne du If avec goto P
Code
If Y=7
Then
P+L/2-X-1->V
If abs(V)<=L/2+1
-2->F
If abs(V)>=L/6 et V
E-2abs(V)/V->E
min(max(E,-2),2)->E
End
If Y=7 et abs(V)>L/2+1
Goto P
C'est imbitable mais succint. (Il n'y a que moi qui comprend ces sacs-de-noeuds ^^)

Si la balle rebondit sur le tiers du milieu, elle ne réagit pas. Sur les bords on peut amortir ou générer une inclinaison.

ps:-un des tests est un peu incomplet mais l'ensemble doit règler le problème. (du moins c'est ainsi dans mon prototype)
-la ligne du min/max sert à ce que la balle ait un coefficient directeur compris entre -1 et 1 (sinon le déplacement en abscisse devient de 4,6,8 pixels... pour la montée de 2 pixels)
ld le 02/02/2011 à 11:48
Punaise ! J'ai impression d'avoir à faire à un oracle ! ahh.gif
Bravo linkakro, je te dis respet. glasses.gif
Persalteas le 02/02/2011 à 15:26
yeah! tu as assuré!

je comprends le code, je ne l'aurait pas trouvé tout seul.

par contre je ne comprends pas "imbitable mais succint". on ne t'as jamais dit de parler clairement sur un forum ? xD
paul le 14/04/2011 à 09:26
j'ai un pb au niveau de la second matrice {C} dans le pgmZBRICK une erreur de dim avec le ",J"
made2kill le 14/04/2011 à 09:27
Euh tu as bien mis la matrice et non la lettre entourée de crochets ?
paul le 14/04/2011 à 19:33
oai oai quand même
linkakro le 14/04/2011 à 20:16
Une erreur de dim vient d'une valeur, pas de la syntaxe. La valeur contenue dans J est fausse. L'erreur peut venir de n'impote où apparaît J.