Forum

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

Casse Briques

Zordinatueur le 18/03/2013 à 19:08
Voici un casse briques. Pouvez vous le corriger si besoin, et au mieux l'améliorer.

Code
:EffVar SEffecr
:{8,16->dim( [A]
:For(I,1,3
:For(J,1,16
:entaléat(0,1->[A](I,J
:If [A](I, J:Then
:S+1->S
:Output(I, J,"-
:End:End:End
:12->X:7->A:X->B
:-1->(théta):1->Z
:Repeat K=45 ou non(S
:codetouche->K
:min(13,max(1,X-(K=24)+(K=26->X
:Output(8,X," ---           //Les trois tirets sont entourés de 1 espace chacun
:If [A](A,B) et A≤3:Then
:-(théta)->(thêta):0->[A](A,B
:S-1->S
:End
:If A=8 et (B=X+3 ou B=X+2 ou B=X+1)
:Then:-1->(théta)
:B+entaléat(-1,1->B
:Else:If A=8 et (B≠X+3 ou B≠X+2 ou B≠X+1)
:Goto 1:End
:If A=1:1->(théta)
:If B=1 ou B=16:-Z->Z
:A+(théta)->A:B+Z->B
:Output(A,B,"O
:Output(A-(théta),B-Z,"
:End
:Lbl 1
:Effecr
:Output(4,6,"PERDU !
Zordinatueur le 18/03/2013 à 19:13
Je viens de me rendre compte qu'il y a des signes bizarres.

Ceux à côté des B sont des différents de...
Celui à côté du A est un plus petit que...
linkakro le 18/03/2013 à 19:40
Les symboles "différent" peuvent se remplacer par "-" la plupart du temps et ça évite de convertir.
Soit plus précis concernant les symboles "inférieur strict" et "inférieur ou égal", même si le bug laisse penser à un <= plutôt qu'un <.
De plus tu as utilisé un caractère unicode html donc je ne sais pas retrouver l'original.

Maintenant tu sauras que le site ne supporte pas l'unicode et ne suit pas la convention de police des éditeurs de TI. Utilise mon tutoriel de ce site pour les caractères spéciaux qui viendraient d'éditeur contrairement à ce sujet.
Zordinatueur le 18/03/2013 à 19:45
Il s'agit d'un inférieur ou égal à...
linkakro le 18/03/2013 à 19:54
Comme tu ne pourras pas éditer en tant qu'invité, je poste.
Code
:EffVar SEffecr
:{8,16->dim([A]
:For(I,1,3
:For(J,1,16
:entaléat(0,1->[A](I,J
:If [A](I,J:Then
:S+1->S
:Output(I,J,"-
:End:End:End
:12->X:7->A:X->B
:-1->@:1->Z
:Repeat K=45 ou non(S
:codetouche->K
:min(13,max(1,X-(K=24)+(K=26->X
:Output(8,X," --- "
:If [A](A,B) et A<=3:Then
:-@->@:0->[A](A,B
:S-1->S
:End
:If A=8 et (B=X+3 ou B=X+2 ou B=X+1)
:Then
:-1->@
:B+entaléat(-1,1->B
:Else:If A=8 et (X+3-B ou X+2-B ou X+1-B)
:Goto 1:End
:If A=1:1->@
:If B=1 ou B=16:-Z->Z
:A+@->A:B+Z->B
:Output(A,B,"O
:Output(A-@,B-Z," "
:End
:Lbl 1
:Effecr
:Output(4,6,"PERDU !
J'ai évité l'usage de "différent".
J'ai codé "inférieur ou égal" par "<=" mais il appartient au menu 2nde+math(test)
Que les débutants pensent à utiliser la touche [ ( - ) ] pour les négativités au lieu de la touche [-].
J'ai codé thêta par @.
EDIT: J'ai ajoûté l'espace manquant.
Zordinatueur le 18/03/2013 à 19:58
Et sinon, il a l'air bien ?
linkakro le 18/03/2013 à 21:55
Je ne vois pas d'énorme bêtise dans le code déjà et il semble optimisé.
A tester.

EDIT immédiat : je colle dans un éditeur, traduit en anglais et compile. La balle se déplace trop vite pour que je la rattrape.
On peut ralentir avec une boucle for ou des 69!.
Tu as oublié de recopier l'espace qui efface la trainée. Et comme j'ai effectué des copier-coller je ne m'en étais pas aperçu avant d'obtenir une trainée.
un VRAI débutant le 20/03/2013 à 12:26
Est-ce normal que ma calculette considère les [A] comme une erreur de syntaxe ? (ERR: syntaxe ---> voir ---> [A] donc je vais pas raconter des conneries directement. Merci de bien vouloir répondre svp winkle.gif
linkakro le 20/03/2013 à 19:33
C'est la matrice [A] saisie en un seul token par le menu matrice.
euh... le 21/03/2013 à 22:45
AAAAAH d'accord... J'ai rien compris je suis juste un gamin normal pas un génie ^^
linkakro le 21/03/2013 à 23:25
La calculatrice dispose d'un menu appelé matrice. Il s'ouvre avec la touche au dessus de sinus. (en tout cas sur les ti82(stat)/83)
Ce menu permet de saisir des noms de matrices qui apparaissent sous la forme [A],[B], etc. Il suffit de valider avec la touche entrée dans le menu.

Etudier le manuel (dispo sur le site tout82) te permettra d'en apprendre plus par toi-même.
Tu n'as pas besoin d'être un génie pour apprendre et on n'a pas besoin d'être idiot pour se renseigner, avec manuel ou sur forum.
debutant66 le 09/10/2013 à 12:13
Bonjour je viens de recopier le code, mais quand je lance le jeu, je narrive pas a me diriger, jai essayer toutes les touches mais ca ne marche pas, j ai peut etre mal recopier le code. Merci d avance
Alex6542 le 09/10/2013 à 13:45
Bonjour
moi quand je lance le jeu
cela m'indique : Erreur syntaxe
et me redirige au niveau de ->dim((A) a la deuxieme ligne quand je met "voir"
Quelqu'un pourrait m'aider SVP frozen.gif ?
m@thieu41 le 09/10/2013 à 15:03
@Alex:
linkakro a écrit :
C'est la matrice [A] saisie en un seul token par le menu matrice.


@debutant:
Vérifie les lignes:
Code
:codetouche->K
:min(13,max(1,X-(K=24)+(K=26->X
:Output(8,X," ---           //Les trois tirets sont entourés de 1 espace chacun
Silennus le 19/10/2013 à 13:48
Je voudrais voir écris "PERDU!" non pas sur fond "blanc" mais avec le fond du jeu au moment ou on perd svp !
linkakro le 19/10/2013 à 16:27
Alors enlève le dernier EffEcr/ClrHome. Comme ça l'écran ne sera pas effacé.
Silennus le 27/10/2013 à 12:04
C'est bon merci ! Pour l'amélioration du jeu par contre je pense que des carrés ([2nde] ; [0] ; [flèche du bas] x13 ; [entrer]) pour les briques sont mieux et le "°" est mieux adapté pour la balle : plus réaliste !
ld le 27/10/2013 à 12:36
Je suis intéressé je vais tester.
Attila le 28/10/2013 à 22:01
Testé. Jeu génial, code léger. si devais attribuer une note je dirais ... 19/20. Pour qu'il puisse faire mieux la prochaine fois cupsmiley.gif
lombe le 15/11/2013 à 21:08
salut quand je commenc a joue il me dit directement perdu.
on peut me dire pourquoi ?
m@thieu41 le 15/11/2013 à 22:56
Bien sûr: tu as mal recopié le prgm, relis toi...

En particulier les zones suivantes:
Code
:Else:If A=8 et (B!=X+3 ou B!=X+2 ou B!=X+1)
:Goto 1:End
...
:End
:Lbl 1

Tu as pu: oublier un End
Oublier le If
Ou autre, relis toi bien.
Silennus le 17/11/2013 à 11:32
J'i réussi un exploit : Réussir à détruire toutes les briques, mais là le jeu m'indique que j'ai perdu ! Si je ne me trompe pas, il n'y à pas de conditions de victoire ou celle-ci sont réliés au Lbl de la défaite !
linkakro le 17/11/2013 à 15:44
--- lombe
Erreur possible à
:Repeat K=45 ou non(S
et autour du S+1->S.

--- Silennus
Exactement.
Le jeu continue tant que la variable S est non-nulle c'est à dire jusqu'à ce que tout soit détruit.
Le Goto 1 et le Lbl 1 permettent de quitter sauvagement la boucle pour arrêter lors d'une défaite.
Or le Lbl 1 se trouve après la boucle.
Donc le même affichage "perdu" est lié à la défaite et à la victoire.
Corrige cela en remplaçant Lbl 1 par :
Code
:Effecr
:Output(4,6,"VICTOIRE
:Return
:Lbl 1

Le Return ressemble au Stop mais permet de revenir à un programme appelant s'il y en a un, tout comme la fin du programme.
Debutant le 17/11/2013 à 19:43
Comment fait-on pour ralentir la balle? (Pourrais-tu me montrer les lignes à rajouter)
m@thieu41 le 17/11/2013 à 21:18
Bonjour,

Pour ralentir la balle (par rapport à la raquette) tu peux faire comme suit:
Code
:EffVar SEffecr
:{8,16->dim( [A]
:For(I,1,3
:For(J,1,16
:entaléat(0,1->[A](I,J
:If [A](I, J:Then
:S+1->S
:Output(I, J,"-
:End:End:End
:12->X:7->A:X->B
:-1->(théta):1->Z
:Repeat K=45 ou non(S

//Le changement se fait ici:
:For(W,0,1
:For(V,1,100W //100 est arbitraire: si le jeu ne va pas assez vite baisse la valeur, s'il va trop vite monte là au contraire (mais laisse le W ex: si tu veux que ça ailles ~2 fois plus vite tu mets 50W)
:End
:codetouche->K
:min(13,max(1,X-(K=24)+(K=26->X
:Output(8,X," --- //Les trois tirets sont entourés de 1 espace chacun
:End

:If [A](A,B) et A&#8804;3:Then
:-(théta)->(thêta):0->[A](A,B
:S-1->S
:End
:If A=8 et (B=X+3 ou B=X+2 ou B=X+1)
:Then:-1->(théta)
:B+entaléat(-1,1->B
:Else:If A=8 et (B&#8800;X+3 ou B&#8800;X+2 ou B&#8800;X+1)
:Goto 1:End
:If A=1:1->(théta)
:If B=1 ou B=16:-Z->Z
:A+(théta)->A:B+Z->B
:Output(A,B,"O
:Output(A-(théta),B-Z,"
:End
:Lbl 1
:Effecr
:Output(4,6,"PERDU !
linkakro le 17/11/2013 à 21:26
Dans tous les programmes on peut temporiser.
Cela consiste à mettre un calcul ou une boucle qui occupe la calculatrice.
Tu peux par exemple ajoûter avant le codeTouche
Code
For(Y,1,100):End
et changer la valeur 100 pour ajuster.
Si le jeu n'est pas fluide, utilise plusieurs temporisations plus petites placées à plusieurs endroits par rapport aux actions et aux affichages.

Autre temporisation : factorielle 69 : 69!
D'autres factorielles plus petites, et donc courtes dans le temps, sont possibles.

Des modifications plus compliquées sont possibles et ont d'autres effets.
Par exemple m@thieu41 a posté avant moi une variante avec une temporisation et une boucle supplémentaire.

m@thieu41 : je ne comprend pas le but de l'association des deux boucles.
Tu exécutes les déplacements deux fois plus souvent que le reste du programme et tu temporises une seule fois pour chacune.
m@thieu41 le 17/11/2013 à 22:14
Comme il a demandé de ralentir la balle, j'ai compris qu'il voulait ralentir la vitesse de la balle par rapport à celle de la raquette, et non pas la balle et la raquette.
C'est pour ça que j'associe 2 boucles: afin de gérer le déplacements 2 fois plus souvent, tout en ralentissant le prgm entre les 2 déplacements successifs (afin d'éviter à la raquette de faire des "bond": 2 déplacements consécutifs puis un temps (déplacement de la balle)). Là j'ai déplacement de la raquette, un temps (boucle For qui se fait puisque W=1), redéplacement de la raquette, puis un temps (gestion de la balle). Et ça reprend. Du coup ça doit être plus fluide (après il faut modifier la valeur pour que ça rende mieux).
Debutant le 18/11/2013 à 21:34
Merci bigmouth.gif
Question le 18/11/2013 à 22:30
salut moi j'ai un problème pour faire les flèches
qqun pour m'aider??
merci d'avance minied.gif
linkakro le 18/11/2013 à 23:36
La touche [sto->].
Silennus le 27/11/2013 à 18:15
Merci à toi linkakro, je n'ai pas réussi à gagner pour voir si ça a marché, mis je n'en doute pas !
ma triste vie le 16/12/2013 à 22:38
pour moi il me demende toujour didentifier [A] et les"-
linkakro le 16/12/2013 à 23:43
La matrice [A] est dans le menu matrice accessible par la touche matrice..
Si tu avais une calculatrice avec une touche App, ce qui est improbale, le menu serait dans 2nde+x^-1.

Dis quel type d'erreur pour qu'on sache ce qui ne va pas avec les output et "-".
Weilcandy le 14/01/2014 à 23:00
Je suis débutant et je voulais savoir où aller sur ma calculatrice TI 82 stats pour marquer le signe "Théta" ou "@" comme c'est marqué dans le programme ? crazy.gif
linkakro le 15/01/2014 à 02:40
theta=alpha+3
@ est ici un codage humain parmi d'autre pour se débrouiller.
Invité le 12/05/2014 à 23:26
Salut tout le monde et tout d'abord merci pour le programme! cupsmiley.gif

J'ai un petit problème lorsque que je l'utilise. Quand la balle rebondit à l'extrémité de la raquette dans le coin le plus bas possible (colonne 1 de l'écran TI ou colonne 16), la TI me signale une erreur de dimension au niveau du Output.

Je suppose qu'une des variables doit dépasser 8 ou 16 et que la calculatrice ne peut pas afficher le caractère, mais je ne sais pas comment corriger.

Quelqu'un a-t-il le même problème?
linkakro le 13/05/2014 à 00:08
Un pong avait ce problème, je ne me souviens plus pourquoi. Un conflit entre le rebond vertical et l'horizontal. Cela me parait un défaut normal.
C'est déjà bien que tu signales le type erreur domaine mais tu peux consulter les valeurs des variables (en saisissant leur nom dans l'écran principal) A et B toi-même après l'erreur et nous les dire.
linkakro le 13/05/2014 à 19:52
Je teste en le recopiant manuellement et je confirme le problème d'erreur domaine. Je constate que la balle entre dans le dessin de la raquette avant de rebondir. Je suis sûr que cela a un rapport. Mais je ne sais pas encore.

L'impossibilité de se déplacer dans le coin gauche est due au dessin de la raquette qui contient un espace. Cet espace est une manière paresseuse d'effacer la précédente position de la raquette. Tu peux changer si tu veux avec un Output d'effacement juste avant les calculs de X et sans les espaces dans le dessin du curseur.
linkakro le 18/05/2014 à 01:59
Ce programme contient un aléatoire sur la position de la balle, supposé diversifier les rebonds j'imagine. Mais cela ne vérifie pas que le résultat soit sur l'écran. Donc il faut soit l'enlever soit vérifier les coordonnées.
Code
:B+entaléat(-1,1->B
Liightman le 11/10/2014 à 18:22
Bonsoir,

Je rencontre une erreur de "domaine" sur Output(A-@, B-Z, " "

Merci d'avance
linkakro le 11/10/2014 à 23:40
Une ou plusieurs de ces variables on une valeur inadaptée. Consulte leurs valeurs et je pourrais peut-être deviner la cause. Pour cela exécute {A,@,B,Z}.

Mais tu devrais plutôt copier un autre programme car celui-ci a plusieurs défauts. Je m'en aperçois en relisant les derniers messages précédents de la discussion.
Celui de sangohan38 est bien et je l'ai amélioré pour satisfaire des gens.
https://tout82.pages-perso.fre[...]t.php?sujet=279