Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.
Pong
AngusYoung972 le 15/02/2014 à 13:29
Salut à tous voici mon premier programme, dites ce que vous en pensez 
Code
ClrHome
Output(1,1,"****************
Output(2,1," * PONG *
Output(4,5,"* V1.1 *
Output(6,5,"* 2014 *
Output(7,1,"****************
Output(8,7,"====
Pause
Lbl 1
randInt(9,15)->I
7->X
1->Y
1->C
1->R
0->S
Lbl 0
ClrHome
Output(Y,I,"O
Output(8,X,"====
If Y<8
Y+C->Y
If Y=7 and Iù (
) X-1 and I÷ (
) X+4
Then
-1->C
1+S->S
End
If Y=1
1->C
If Y=8
Then
Output(1,1,"****************
Output(7,1,"****************
Output(3,1," * EPIC FAIL! *
Output(5,1," * SCORE: *
Output(5,12,S
Pause
Goto 1
End
If S=50
Then
Disp "SCORE = ",S
Stop
End
If Y<8
I-R->I
If I÷ (
) 1
-1->R
If Iù (
) 16
1->R
getKey->K
If K=24 and X-1>0
X-1->X
If K=26 and X÷ (
) 12
X+1->X
If K=45
Stop
Goto 0
téléchargement: http://www.mediafire.com/downl[...]blh8td8/PONG.7z

Cytropus le 15/02/2014 à 20:43
très bon programme

, pas mal du tout.
seul bémol à mon sens: le Lbl 0 et le Goto 0 qui ralentissent le programme au cours du temps.
Je te conseil de le remplacer par une boucle:
Lbl 0 => While 1
Goto 0 => End
dans tout les cas, beau programme (et bonnes vacances à toute la zone C )
AngusYoung972 le 15/02/2014 à 21:55
Merci pour vos réponses!

AngusYoung972 le 15/02/2014 à 22:03
Cytropus a écrit :
Je te conseil de le remplacer par une boucle:
Lbl 0 => While 1
Goto 0 => End
J'ai remplacé la Lbl et le Goto comme tu me le conseillais et en effet ça a un peu diminué la taille de mon programme, et il à l'air légèrement plus fluide mais ce n'est peut-être qu'une impression

raboulave le 16/02/2014 à 16:09
Pas mal pas mal

Quelques petits trucs :
- randInt t'es pas obligé de mettre la deuxième parenthèse. C'est peut-être crade mais des fois ça permet d'économiser une ligne
- Je suis d'accord avec les gars pour condamner les Lbl et Goto même si j'en ai beaucoup utilisé moi-même au début
- À la toute fin, If K = 26 and X < 16 plutôt que <= 12 non ? Enfin c'est sûrement une erreur de recopie
- Quand tu n'as qu'une seule instruction dans un If et qu'elle est plutôt courte, tu peux économiser une ligne en mettant deux points :
Exemple, If I >= 16: I->R
- On peut faire plus fort que remplacer Lbl 0 et Goto 0 par respectivement While 1 et End. Sachant que K = 45 stoppe ton programme, pourquoi ne pas remplacer Lbl 0 par Repeat K = 45, tu vires évidemment le If K = 45, et les lignes Stop et Goto 0 deviennent :
Code
End
EffEcr
Output(1,1,"
Ainsi tu as un "quit" carrément plus propre
- Et sinon, un truc qui peut te demander un peu plus de temps à implémenter mais qui ne peut que rendre ton app meilleure : tu as du scintillement parce que tu ClrHome à chaque tour de boucle (je vais considérer que ton Lbl 0 est désormais une boucle

).
Une solution légèrement plus complexe, mais qui enlèverait le scintillement, serait de retenir les coordonnées antérieures au pad et à la boule et d'afficher du vide à la place. Pour la boule ce sera facile, tu n'as qu'à gérer un caractère. Pour le pad tu devras réfléchir un peu plus, mais ça se fait. Et tu auras un truc tout beau tout propre.
Je comprends bien que tu ne voies pas ce que je veux dire, c'est un peu dur à expliquer comme ça ^^, je te redirige donc vers le très bon tuto TI-Basic d'anciennement le site du zéro qui t'explique toussa toussa :
https://fr.openclassrooms.com:[...]ple-deplacement
SI tu enlèves ton ClrHome, tu auras le problème dont Lanfeust parle dans le paragraphe "Derniers bugs" : tes objets laisseront des grosses traînées derrière eux. Il t'explique alors ce que j'essayais de t'expliquer, à savoir effacer derrière eux.
Et en prime, tu peux jeter un oeil à ses conditions :
X-(K=24)+(K=26)->X
Y-(K=25)+(K=34)->Y
C'est peut-être moins clair mais tu peux toi aussi utiliser ce fonctionnement dans ton programme.
Je m'explique : Une condition vaut 1 lorsqu'elle est vraie et 0 lorsqu'elle est fausse. Tu peux alors jouer avec ces valeurs pour raccourcir ton code.
Ici dans ton code, je prends les lignes :
Code
If K=24 and X-1>0
X-1->X
If K=26 and X÷ (
) 12
X+1->X
Avec cette méthode, je transforme donc en :
Code
X-(K=24 and X-1>0)->X
X+(K=26 and X<=12)->X
Ainsi, si la condition est remplie, elle vaut 1, sinon elle vaut 0 et donc il n'y aura aucun changement !
Tu n'as plus de If. C'est très fort.
J'avoue ne pas avoir testé lorsqu'il y a un and mais ça devrait fonctionner y'a pas de raison.

Ne t'inquiètes pas moi aussi je bitais rien à ça au début j'ai recopié sans réfléchir ^^
(Ah et X-1>0 c'est pareil que X>1 si tu veux vraiment aller jusqu'au bout

)
Je te laisse donc avec ce gros pavé sur les bras et j'attends avec impatience ton code mis à jour !

linkakro le 16/02/2014 à 18:00
Je confirme que n'importe quelle condition peut être à l'intérieur d'un calcul. Il faut seulement veiller à placer des parenthèses aux bons endroits.
Et le Goto 1 dans tout ça ? C'est selon moi le plus important des changements pour la rigueur. (cependant il n'agit qu'entre deux parties donc son influence indésirable est faible)
Par contre garder exactement le même raisonnement et ordre des actions devient un peu compliqué.
Code
ClrHome
Output(1,1,"****************
Output(2,1," * PONG *
Output(4,5,"* V1.1 *
Output(6,5,"* 2014 *
Output(7,1,"****************
Output(8,7,"====
Pause
Repeat K=45 // quitte si presse Annul
randInt(9,15->I
7->X
1->Y
1->C
1->R
0->S
ClrHome
Repeat Y=8 or S=50 or K=45 // défaite, gain, échappement
Output(Y,I,"O
Output(8,X,"====
If Y<8
Y+C->Y
If Y=7 and Iù (
) X-1 and I÷ (
) X+4
Then
-1->C
1+S->S
End
If Y=1
1->C
If Y<8
I-R->I
If I÷ (
) 1
-1->R
If Iù (
) 16
1->R
getKey->K
Output(Y,I," "
Output(8,X," "
min(12,max(1,X-(K=24)+(K=26->X
End
If S-50 and K-45
Then
Output(1,1,"****************
Output(7,1,"****************
Output(3,1," * EPIC FAIL! *
Output(5,1," * SCORE: *
End
Output(5,12,S
End m@thieu41 le 16/02/2014 à 18:22
Bonjour,
Citation
- Quand tu n'as qu'une seule instruction dans un If et qu'elle est plutôt courte, tu peux économiser une ligne en mettant deux points :
Exemple, If I >= 16: I->R
Ce n'est pas exact: tu ne gagne pas réellement à faire ça, puisque tu remplace un retour à la ligne (qui prend un octet en mémoire), par le token ":", qui prend lui aussi un octet en mémoire.
Par contre, lorsque les conditions et/ou instructions conditionnelles deviennent complexes et longues, mettre tout sur la même ligne risque de nuire à la lisibilité.
De manière générale, les parenthèses/guillemets/accolades/crochets fermants peuvent être omis avant un retour à la ligne ou un sto (
http://www.tout82.org/t50-cand[...]-l-optimisation )
AngusYoung972 le 17/02/2014 à 18:49
Salut à tous et merci beaucoup pour vos réponses c'est super sympa de m'aider

pour l'instant je n'ai hélas pas beaucoup de temps pour arranger mon programme.. :/
AngusYoung972 le 19/02/2014 à 16:36
En fait je ne comprend pas pourquoi While 1 / End remplace Lbl 0 / Goto 0, pouvez vous m'expliquer?linkakro le 19/02/2014 à 16:57
https://tout82.pages-perso.fre[...].php?sujet=2741
Le 1 est compris comme "Vrai" dans les conditions. Donc la condition de "While 1" est vraie donc la boucle est toujours répétée, c'est une boucle infinie.
Goto 0 est toujours exécuté et il renvoi au Label du même nom, "Lbl 0" donc cela simule donc une boucle infinie.
Les actions telles que "If K=45:Stop" interrompent la boucle ou le programme.
Il est plus rigoureux d'utiliser une boucle algorithmique telle que While ou Repeat avec une condition plutôt que d'utiliser des sauts Goto et des Stop.
Obed le 06/09/2014 à 02:46
Quelles ligne font que la barre se deplace de droite à gauche et gauche à droite?
Car sur tout les jeux de ce type (casse brique, pong...) ma barre se deplace soit dans une seule direction, soit pas du tout (je suis sur ti82 plus).linkakro le 06/09/2014 à 20:28
Dans le premier programme.
Code
getKey->K
If K=24 and X-1>0
X-1->X
If K=26 and X÷ (
) 12 // ÷ (
) est inférieur ou égal dans la police TI
X+1->X
Dans celui que j'ai posté.
Code
getKey->K
//...
min(12,max(1,X-(K=24)+(K=26->X
Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.