Poster un nouveau sujet Poster une réponse
Des Jeux en Vrac!
Auteur Message
AngusYoung972



Autorisation : Membre
Nb de messages : 8
Inscrit le : Sam 15 Fév 2014, 13:21
Posté le : Sam 15 Mar 2014, 17:53   Citer 

Salut à tous, aujourd'hui je vous présente quelques jeux que j'ai programmé:
Pong : http://www.mediafire.com/download/jospe3msb331bvk/PONG.8xp
Allumettes : http://www.mediafire.com/download/atay815yumorm30/ALLUMET.8xp
VVV : http://www.mediafire.com/download/pfr7962jlir146c/VVV.8xp
OXX (morpion) : http://www.mediafire.com/download/l4elbbrpasr8twi/OXX.8xp
Plus ou Moins : http://www.mediafire.com/download/wkqr6c13x92pfg1/PM.8xp

Dites ce que vous en pensez winkle.gif

----------------------
ACDC! --> http://www.youtube.com/user/angusyoung972
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Dim 16 Mar 2014, 14:34   Citer 

J'aurais apprécié que les codes soient postés.
Mais le plus important aurait été de les décrire quelque peu.

**** Ton jeu d'allumettes peut être beaucoup optimisé.

Une alternative sera bien plus judicieuse que deux conditions.

Code
If J=1 or J=3 or J=5 or J=7
Then
...//joueur 1
Else
...//joueur 2
End



Pour tester la parité d'un nombre :

Code
If fPart(J/2 // impaire
If not(fPart(J/2 // paire


Et on peut multiplier par ".5" plutôt que diviser par 2.

Tu n'as pas besoin d'incrémenter une variable et analyser sa parité pour connaître deux joueurs. Tu peux avoir une valeur pour chaque joueur. Puis tu as le choix entre une condition et un calcul pour contrôler le changement d'état. C'est plus simple que de prévoir des conditions de nombreux états différents ou de parité.

Tu peux coder deux personnes avec deux valeurs 0 et 1 d'une variable J, et passer de l'un à l'autre avec not(J->J.
Idem avec les valeurs 1 et 2 et le calcul 3-J->J

Utiliser deux fois le même code suivant le nombre d'humains choisi n'apporte que peu d'avantages. Ici la vitesse du programme n'a pas d'importance donc tu as tout intérêt à affecter une variable avec le menu et lire cette variable pour connaître le nombre de camps et donc gérer soit une IA soit un humain pour un des deux joureurs.

Je te suggères de t'inspirer de mon jeu BATON.

**** ton jeu VVV
Je constate qu'il s'agit d'éviter les paires d'obstacles dans une largeur de trois positions. L'aspect est agréable.

Je te suggères de remplacer des conditions telles que
If K=24 and X-1>=7:X-1->X
par
If K=24 and X>7:X-1->X
Cela permet de se débarrasser des caractères spéciaux qui apportent des contraintes dans les supports d'échanges textuels tels que forum.

Tu n'as pas besoin d'exécuter l'affichage des accotements de la route à chaque itération de la boucle. Tu peux le placer à l'initialisation du jeu.

Tu peux afficher les obstacles séparés avec Output(Y,7,"0 0") pour n'avoir qu'un seul Output et éviter par la même occasion une alternative Then/End.

Ceci est terriblement déconseillé.

Code
Lbl 1
...
While 1
...
If Y<1
Then
S+1üS
Goto 1
End
...
End

En effet le programme ralentit progressivement après chaque exécution du Goto 1. Le Goto permet de sortir de l'alternative Then/End et de la boucle While. Il ne faut jamais sortir d'une alternative ou d'une boucle par un Goto pour les exécuter à nouveau.
La rigueur imposerait de ne pas utiliser Goto, bien qu'il soit possible de l'utiliser sans problème dans certaines situations.
Utiliser Goto sans modération est aussi une cause de BUGS.
https://tout82.pages-perso.free.fr/forum/sujet.php?sujet=2757

Une solution partielle du langage TI-Basic serait de placer l'incrément du score S avec la génération au début et enlever les mots-clés d'alternative Then/End pour diminuer la gravité du ralentissement qui hélas demeure.

Code
Lbl 1
S+1->S
...
While 1
...
If Y<1
Goto 1
...
End



Une solution rigoureuse algorithmique serait de placer des conditions adéquates dans des entêtes de boucles, de placer toutes les actions dans un ordre judicieux, et éventuellement de placer d'autres alternatives autour d'autres actions de la boucle.
Hélas les actions initiales telles que la génération d'un obstacle sera dans certains programme répétée à deux endroits.

C'est ton jeu et j'en ai assez alors je te laisse te débrouiller tant que je n'aurai pas de demande explicite.

**** OXX

OXX est simpliste. Il ne contrôle pas ce qui a déjà été joué, deux boutons différents permettent de jouer et donc n'empêche aucune triche et surtout le curseur efface les jetons à son passage.
Malgré la simplicité de ses fonctionnalité, un manque d'optimisation le rend bien plus encombrant que nécessaire.

Les conditions d'ajustement positions avant le calcul de la prochaine position pourrait avoir un avantage dans d'autres langages ou situations, mais cela n'apporte rien ici et le code supplémentaire qui en dépend est donc superflu.

Dans le code suivant l'effacement n'a lieu que si une touche est pressée mais aucune vérification de sa validité n'est effectuée donc appuyer sur une touche innutile causera un clignotement.
Code
ClrHome
4üX
3üY
Output(3,7,"!
Output(3,9,"!
Output(5,7,"!
Output(5,9,"!
Output(7,7,"!
Output(7,9,"!
Output(4,6,"-+-+-
Output(6,6,"-+-+-
Repeat K=45 // condition de sortie
getKeyüK
If K // pour ne pas clignoter pour rien // K non-nul
Output(Y,X," " // effacement
If K=26 and X<12
X+2üX
If K=24 and X>4
X-2üX
If K=34 and Y<7
Y+2üY
If K=25 and Y>1
Y-2üY
Output(Y,X,". // curseur
If K=21
Then
Output(Y,X,"O
4üX
End
If K=31
Then
Output(Y,X,"X
4üX
End
End



**** PM , +ou-
Je suis content de voir un programme simple pour un jeu simple.

Néanmoins tu peux utiliser une boucle plutôt qu'un Stop et un Goto. Retiens cette habitude pour tous tes programmes et tu éviteras des ennuis tels que le Goto dans ton jeu d'obstacle VVV.


Code
ClrHome
randInt(0,100->I
Repeat X=I
Prompt X
If X>I
Disp "-
If X<I
Disp "+
End
Disp "OK!



----------------------
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)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
AngusYoung972



Autorisation : Membre
Nb de messages : 8
Inscrit le : Sam 15 Fév 2014, 13:21
Posté le : Dim 23 Mar 2014, 12:13   Citer 

Je te remercie pour tes conseils, ils m'ont bien aidé.
J'ai notamment pu optimiser mon jeu d'allumettes :

Code
ClrHome
Output(2,1," Allumettes 1.4
Output(4,1,"By AngusYoung972
Output(6,5,"Ts1 2014
Pause
ClrHome
Menu("   Allumettes   ","  1 joueur",7,"  2 joueurs",9
Lbl 7
16üX
1üJ
ClrHome
While 1
Output(4,1,"!!!!!!!!!!!!!!!
Output(4,X,"               
If fPart(J/2
Then
Output(1,9,"Joueur 1
Disp "1÷N÷3
Prompt N
ClrHome
Else
Output(1,14,"IA
Pause
randInt(1,3üN
Output(1,1,N
Pause
End
If N=1
X-1üX
If N=2
X-2üX
If N=3
X-3üX
If 1ùX
Then
Output(1,1,"Perdu!
Pause
Stop
End
J+1üJ
End

Lbl 9
16üX
1üJ
ClrHome
Lbl 1
Output(4,1,"!!!!!!!!!!!!!!!
Output(4,X,"               
If fPart(J/2
Then
Output(1,9,"Joueur 1
Else
Output(1,9,"Joueur 2
End
Disp "1÷N÷3
Prompt N
ClrHome
If N=1
X-1üX
If X>1
Then
If N=2
X-2üX
If N=3
X-3üX
End
If 1ùX
Then
Disp "Perdu!
Pause
Stop
End
J+1üJ
Goto 1


je ne connaissais pas la fonction pour la parité d'un nombre, et j'avoue que ça change tout! winkle.gif
Penses-tu que je peux encore l'améliorer (surtout au niveau de l'IA)?

----------------------
ACDC! --> http://www.youtube.com/user/angusyoung972
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Dim 23 Mar 2014, 13:46   Citer 

La parité est la divisibilité par 2, il suffit donc de diviser et observer la partie décimale, ce que je fais avec fPart/partDéc.

Ton IA est aléatoire.
Il y a une stratégie infaillible aux allumettes. Je l'ai programmée dans mon programme d'allumettes (qui dans ma machine est "batons").
Mon IA utilise cette stratégie quand elle peut, systématiquement en difficulté maximale, mais choisi aléatoirement entre cette stratégie et l'aléatoire en difficulté moyenne.
Je te laisse découvrir cette stratégie. Tu pourrais la trouver tout seul ou en observant mon programme. D'ailleurs si tu l'exécutes plusieurs fois tu devrais facilement voir ce qui se passe.

Sache aussi que mon programme contient des défauts dont je n'avais pas conscience lorsque je l'ai écris. Notamment les Goto mal utilisés, à remplacer par des boucles et alternatives.

Je maintiens que je préfères (en cette année 2014 au moins) placer une alternative pour traiter une IA à la place d'un joueur, mais avoir une seule boucle de jeu.

Code
2->M
Menu("","1",1,"2",2
Lbl 1
1->M
Lbl 2
1->J
16->A
While A>1
 If J=1
 Then
  //J1
 Else
  If M=1
  Then
   //IA
  Else
   //J2
  End
 End
 3-J->J
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)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
Poster un nouveau sujet Poster une réponse





  Page générée en 6 requêtes