Autorisation : Membre
Nb de messages : 8
Inscrit le : Sam 15 Fév 2014, 13:21
Posté le : Sam 15 Fév 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
Autorisation : Membre
Nb de messages : 407
Inscrit le : Lun 07 Nov 2011, 12:09
Posté le : Sam 15 Fév 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 )
---------------------- 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 : 8
Inscrit le : Sam 15 Fév 2014, 13:21
Posté le : Sam 15 Fév 2014, 22:03
Citer : Cytropus
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
- 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:443/informatique/cours/le-ti-basic-3/exemple-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.
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 !
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Dim 16 Fév 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
---------------------- 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 : 848
Inscrit le : Mer 18 Juil 2012, 18:44
Posté le : Dim 16 Fév 2014, 18:22
Bonjour,
Citer
- 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é.
Autorisation : Membre
Nb de messages : 8
Inscrit le : Sam 15 Fév 2014, 13:21
Posté le : Lun 17 Fév 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.. :/
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.
---------------------- 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)
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).
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Sam 06 Sep 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
---------------------- 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)