Autorisation : Membre
Nb de messages : 36
Inscrit le : Dim 12 Jui 2011, 17:50
Posté le : Ven 01 Juil 2011, 15:00
J'ai cree une suite de minijeux. En voici un tres connu: le jeu "Copter".
Amusez-vous bien! ^^
Code
Prgm "COPTER"
# SIGNIFIE "ESPACE"
EffEcr
Output(4,4,"COPTER BY CAM!
EffEcr
4->Y:1->X:7->N
Repeat X=7
Output(Y,X,"I-O
For(L,1,50:End
Output(Y,X,"### "
X+1->X:End
Goto 1
Lbl 1
entAleat(1,3->A
entAleat(5,7->C
16->B:16->D
N+1->N
While 1
Output(Y,X,"I-O
If N>5:Then
Output(C,D,"I
Output(C+1,D,"I
End
Output(A,B,"I
Output(A+1,B,"I
For(L,1,4 //OU// For(L,1,2
codeTouche->K
If K=25 et Y>1:Then
Output(Y,X,"###
Y-1->Y:End
If K=34 et Y<8:Then
Output(Y,X,"###
Y+1->Y:End
End
Output(A,B,"#
Output(A+1,B,"#
B-1->B
If N>5:Then
Output(C,D,"#
Output(C+1,D,"#
D-1->D:End
If B=0:Goto 1
If Y=A ou Y=A+1:Then
If X=B ou X+1=B ou X+2=B
Goto 2:End
If Y=C ou Y=C+1:Then
If X=D ou X+1=D ou X+2=D
Goto 2:End:End
Lbl 2:EffEcr
Output(4,4,"PERDU!
Pause
Output(6,4,"SCORE:
1->A
Repeat A=N
Output(6,10,A
For(L,1,50:End
A+1->A:End
Pause:EffEcr
Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Ven 01 Juil 2011, 15:52
Pas mal mais un peu trop facile je trouve (même avec le "for(L,1,2".
Dommage aussi que les obstactes au mileu soit si rares (je parle de ceux sans trou au milieu (que une chance sur 9)).
Optimisation:
Code
EffEcr
Output(4,4,"COPTER BY CAM!
EffEcr
4->Y:1->X:7->N
Repeat X=7 //je me trompe ou il n'y a pas de "End" qui termine cette boucle
Output(Y,X,"I-O
For(L,1,50:End
Output(Y,X,"### //1 octé
X+1->X:End
Goto 1 //ligne à supprimer : 3 octés
Lbl 1
entAleat(1,3->A
entAleat(5,7->C
16->B:16->D //remplacer le 2nd 16 par B fait gagner un octé mais
je sais pas pour la vitesse
N+1->N
While 1
Output(Y,X,"I-O
If N>5:Then
Output(C,D,"I
Output(C+1,D,"I
End
Output(A,B,"I
Output(A+1,B,"I
For(L,1,4 //OU// For(L,1,2 //OU rien du tout ??
codeTouche->K
If K=25 et Y>1:Then
Output(Y,X,"###
Y-1->Y:End
If K=34 et Y<8:Then
Output(Y,X,"###
Y+1->Y:End
End
Output(A,B,"#
Output(A+1,B,"#
B-1->B
If N>5:Then
Output(C,D,"#
Output(C+1,D,"#
D-1->D:End
If non(B:Goto 1 //1 octé
If Y=A ou Y=A+1:Then
If X=B ou X+1=B ou X+2=B
Goto 2:End
If Y=C ou Y=C+1:Then
If X=D ou X+1=D ou X+2=D
Goto 2:End:End
Lbl 2:EffEcr
Output(4,4,"PERDU!
Pause
Output(6,4,"SCORE:
1->A
Repeat A=N
Output(6,10,A
For(L,1,50:End
A+1->A:End
Pause:EffEcr
sandro
---------------------- mort à l'inutile, place à la mémoire libre et aux programmes
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Sam 02 Juil 2011, 21:02
Code
ClrHome
4->Y
DelVar N
For(X,1,8
Output(Y,X,"I-O
For(L,1,30
End
Output(Y,X," "
End
ClrHome
Lbl 1
randInt(1,3->A
randInt(5,7->C
16->X
Y->Z
Lbl 2
getKey->K
min(8,max(1,Y-(K=25)+(K=34->Y
ClrHome
Output(Y,8,"I-O
Output(A,X,"I
Output(A+1,X,"I
Output(C,X,"I
Output(C+1,X,"I
Output(Z,X,"I
X-1->X
N+not(X->N
If not(X
Goto 1
If X-9 or not(Y=A or Y=A+1 or Y=C or Y=C+1 or Y=Z
Goto 2
ClrHome
Output(4,4,"PERDU!
Pause
Output(6,4,"SCORE
For(A,0,N
Output(6,10,A
End
Pause
ClrHome
Il y a désormais systématiquement un obstacle en face afin de pimenter le jeu.
Certaines autres modifications auraient pu être faites plus facilement dans l'ancienne version que dans l'actuelle.
PS : c'est parfois plus facile de modifier que de créer.
Edit : une petite erreur de copie corrigée et une petite amélioration de syntaxe.
---------------------- 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 : 72
Inscrit le : Jeu 26 Mai 2011, 16:41
Posté le : Dim 03 Juil 2011, 12:16
Il y a un probleme avec ton prog, linkakro. ça me met "perdu" à tout bout de champ, parfois quand ça demarre, parfois au beau milieu de la partie alors que le mur est passé derriere moi et que le suivant arrive. Il doit y avoir une erreur dans ton recopiage Ah oui et on traverse certains murs
Sinon beau travail, un prog simple, fluide et ludique. Bravo
---------------------- En école d'ingénieurs depuis cette année.
Continue de programmer sur ma ti malgré les 3 tonnes quotidiennes de devoirs ^^
Fan de metallica et de tous autres groupes sachant jouer du vrai métal. (yeah!!!)
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Dim 03 Juil 2011, 15:47
Effectivement il y a un problème.
Il se produit quand on essaie de se ballader juste après avoir passé l'obstacle.
Il y a deux façons de régler ça mais l'une d'elles autorise une colision de la queue dès que la tête est passée.
-soit on remplace "X<7" par "X=/=9"
-soit on ajoûte "or X>9"
J'édite le code avec la première solution car la queue fantôme n'est pas grâve et car le code est plus léger.
---------------------- 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 : 178
Inscrit le : Sam 02 Avr 2011, 12:53
Posté le : Dim 03 Juil 2011, 16:52
Citer
If X=/=9 or not(Y=A or Y=A+1 or Y=C or Y=C+1 or Y=Z
je ne savais pas qu'on pouvais fair dans une ligne de condition comme ça
"or not(Y=A"
en plus je viens d'apprendre que
"if Y" veut dire "si Y#0"
"if not(Y" veut dire "si Y=0"
^^ merci
(Ps: c est un petit jeux sympa perso je n'aime pas les jeux non graphique mais ça ce n'est que moi )
---------------------- "Des millions de gens ont vu tomber une pomme, Newton est le seul a s'être demandé pourquoi ."
"L'urgent est fait, l'impossible est en cours.
un probléme a toujours une solution, la solution est de trouver le probléme, pour les miracles, prévoir un délai ...
"
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Dim 03 Juil 2011, 17:39
En plus je n'ai pas fermé la parenthèse, ce qui fait que toute la fin de la ligne dépend de "not(".
On peut même écrire X-9 à la place de X=/=9.
C'est plus facile à écrire et il n'y a plus de risque qu'un débutant demande le sens de "=/=".
Encore une édition apportée au programme.
---------------------- 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 : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Dim 03 Juil 2011, 21:55
C'est quoi que tu ne comprend pas?
Bon je te donne l'a signification des variables:
A: partie inférieure du "mur" du haut (parfois hors obstacle pil en face de nous) ; tout à la fin, affichage du compteur de score (1,2,3,4,...,score-1, score)
C:partie inférieure du "mur" du bas (parfois hors obstacle pil en face de nous)
K : code touche
N: score
X : pour les 10 premières lignes : abscisse de l'hélico ; enssuite abscisse de l'obstacle
Y : ordonné de l'hélicoptère
En espérant t'avoir aidé
Sandro
PS : si tu bloque encore, explique-moi où.
---------------------- mort à l'inutile, place à la mémoire libre et aux programmes
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Dim 03 Juil 2011, 22:39
snap :
Et Z sert pour l'obstacle systématique.
X-9 signifie X=/=9
somme(Y={A,A+1,...
{A,A+1,...} est une liste
donc Y={A,A+1,...} pratique le test "Y=" sur chaque élément de la liste et crée une liste contenant 0 pour faux et 1 pour vrai.
Puis la somme nous indique combien de tests de la liste sont vrais.
not(somme) est vrai si la somme est nulle, c'est-à-dire si aucune égalité n'est vraie.
Enfin on teste "abscisse d'obstacle différent d'abscisse d'hélico OU ordonnée d'hélico différent d'ordonnée de chaque obstacle" c'est-à-dire "pas de colision".
====
sandro:
Le score N comptait le nombre d'obstacles dans ma version et maintenant il mesure la distance parcourue.
Je n'aime pas la mesure de distance. C'est pour ça qu' il y avait un octet "en trop".
J'ai oublié la liste. Bonne idée de la mettre !
Le While est plus léger et est plus rapide au moins au début.
Mais le programme risque de ralentir peu à peu à cause du End parfois non lu (la boucle While n'est alors pas fermée).
Je m'emmêle les crayons alors je poursuivrai plus tard.
---------------------- 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 : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Lun 04 Juil 2011, 11:13
Désolé, je n'ai pas fait attention, j'ai confondu X et N dans le "N+non(X -> N"
Je reposte un nouveau code cette fois-ci sans Goto:
Code
ClrHome
4 -> Y
DelVar N
For(X,1,8
Output(Y,X,"I-O
For(L,1,30
End
Output(Y,X," // 3espaces
End
ClrHome
Delvar XWhile not(X
randInt(1,3 -> A
randInt(5,7 -> C
16 -> X
Y -> Z
While X and (X-9 or not(sum(Y={A,A+1,C,C+1,Z
getKey -> K
min(8,max(1,Y-(K=25)+(K=34 -> Y
ClrHome
Output(Y,8,"I-O
Output(A,X,"I
Output(A+1,X,"I
Output(C,X,"I
Output(C+1,X,"I
Output(Z,X,"I
X-1 -> X
N+not(X -> N
End
End
ClrHome
Output(4,4,"PERDU!
Pause
Output(6,4,"SCORE
For(A,0,N
Output(6,10,A
69!
End
Pause
ClrHome
sandro
---------------------- mort à l'inutile, place à la mémoire libre et aux programmes
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Lun 04 Juil 2011, 13:36
Cela devient excellent.
Mais encore une chose :
Code
DelVarXWhile not(X
// remplacé par :
Repeat X
Si on déplace le N+not(X->N entre les deux End, on peut écrire simplement N+1->N
mais cela comptera la colision comme réussite.
Quitte à utiliser 69! à la fin, on peut aussi l'utiliser au début à la place de For(L,1,30):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 : 364
Inscrit le : Dim 13 Fév 2011, 14:17
Posté le : Lun 04 Juil 2011, 14:55
Sa devient de mieux en mieux se qu'on pourrait faire, ce serai mettre une sorte de tir qu'on ne peut faire que 1 ou 2 fois et qui detruit un bout du mur pour qu'on puisse passer. Mais bon la j'ai pasle temps de le faire je vous laisse gérer sa ^^
Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Ven 23 Sep 2011, 20:25
c'est X le problème, il doit apartenir à l'interval [1;16] et être un entier.
Cherche quandest-ce que tu as fait une erreur, elle est propablement due à une erreur de signe sur une ligne contenant X (peut-être "16 -> X" )
Sandro
---------------------- mort à l'inutile, place à la mémoire libre et aux programmes
Apfel Invité
Posté le : Ven 23 Sep 2011, 20:40
problème résolu merci beaucoup
bleachis Invité
Posté le : Dim 25 Sep 2011, 11:55
que veut dire Delvar sur une calculatrice en francais?
---------------------- 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 : 3
Inscrit le : Mar 13 Déc 2011, 18:58
Posté le : Jeu 15 Déc 2011, 21:18
Salut, j'ai un gros problème, lorsque le jeu se lance je ne peut pas déplacer le vaisseau, du coup je ne dépasse jamais 0 ! ^^'
Si qqn pouvait me répondre ça serais gentil
Merci,
Streembad
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Ven 16 Déc 2011, 17:36
Vérifie les parenthèses et virgules de cette ligne :
min(8,max(1,Y-(K=25)+(K=34->Y
---------------------- 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 : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Mar 03 Jan 2012, 20:27
bloqué, c'est quoi ton problème? Une erreur (si oui quel est le message d'erreur et où s'arrête le curseur si tu choisie voir (goto en anglais)) ? un mauvais affichage? ...
Sandro
---------------------- mort à l'inutile, place à la mémoire libre et aux programmes
Autorisation : Membre
Nb de messages : 2
Inscrit le : Sam 24 Mar 2012, 22:58
Posté le : Sam 24 Mar 2012, 23:10
Bonjour à tous, j' ai un problème. Ça m' indique une erreur à la ligne :
WhileX et (x-9 ou non(somme(y=(a,a+1,c,c+1,z
Le curseur pour indiquer l' erreur clignote sur la virgule située après a+1 et avant c . Celle indiqué en orange plus haut (faut bien regarder). Voilà, si vous pouviez m' aidez sachant que je ne sais pas coder. Ha et j' ai regardé la valeur de a qui est 1 et de x qui est 16. Merci
Autorisation : Membre
Nb de messages : 2
Inscrit le : Sam 24 Mar 2012, 22:58
Posté le : Dim 25 Mar 2012, 12:18
@sandro, salut, effectivement, c' était une bête erreur ! Merci, le jeu fonctionne maintenant, pourtant j' avais regardé entièrement si j' avais bien recopier le code avant de poster ! Mais je ne l' avais pas remarqué ! Merci
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Jeu 20 Fév 2014, 0:09
Il n'y a pas de dièze dans une TI utilisée normalement en TI-Basic. Remplace ça par n'importe quel symbole car c'est seulement du texte.
---------------------- 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 : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mar 04 Mar 2014, 18:22
Le record, c'est toujours pareil dans tous les jeux. Tu affiches une mémoire du record, tu compares le score au record puis tu stockes si nécessaire.
Code
Output(6,4,"SCORE
For(A,0,N
Output(6,10,A
69!
End
// ajoute ça, et ton record est T
Output(7,4,"RECORD
If N>T
N->T
Pause
ClrHome
Tu devrais stocker dans quelque chose de plus sûr que des nombres. Je propose une liste personnalisée.
Tu remplaces T par une liste lCOPT. Il faut saisir le "l" avec le menu 2nde+stats ou le catalogue.
Code
Output(6,4,"SCORE
For(A,0,N
Output(6,10,A
69!
End
// ajoute ça, et ton record est T
Output(7,4,"RECORD
If N>lCOPT(1
N->lCOPT(1
Pause
ClrHome
et tu places au début du programme :
Code
1->dim(lCOPT
###
Ajouter de la difficulté n'est pas si simple, il faut changer de technique.
---------------------- 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)
Bonjour, je l'ai fais sur ma calculette mais je n'arrive pas a le déplacer sur les cotes ...
J'ai beau appuyer sur toutes les touche ça avance tout droit.
Merci
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Dim 07 Déc 2014, 22:13
Les deux premiers programmes contrôlent le déplacement ainsi.
Code
codeTouche->K
If K=25 et Y>1:Then
Output(Y,X,"###
Y-1->Y:End
If K=34 et Y<8:Then
Output(Y,X,"###
Y+1->Y:End
End
Le troisième programme utilise ceci. "getKey" est la version anglaise de codeTouche.
Code
getKey->K
min(8,max(1,Y-(K=25)+(K=34->Y
Une erreur peut venir de ces fragments si tes touches flêches ne fonctionnent pas.
---------------------- 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)