π
<-
Chat plein-écran
[^]

Game of Life

Game of Life

Message non lude Clément.7 » 28 Avr 2016, 18:43

Voici un petit jeu que j'ai créé pendant un cours de maths un peu trop long ( :#roll#: )
J'ai nommé : Game of Life.

Le principe est simple : Vous disposez des cellules sur une grille (ici, 8x16). Si une cellule est en contact (y compris en diagonale) avec deux ou trois autres, elle survit. Sinon elle meurt. Si une case vide est en contact avec trois cellules, une nouvelle cellule s'y crée.

Je préfère prévenir tout de suite, même après beaucoup d'optimisations et de recherches de solutions (additions de matrices, conversions en liste et sommes, chaînes de caractères...) le programme reste très lent. Comptez environ 10 secondes par phase (testé sur une TI-83+.fr) :(.

Lorsque vous lancez le programme, vous disposez d'un éditeur de plateau de jeu. Appuyez sur :f21: ou bien :nsen: pour ajouter/supprimer une cellule. Le curseur sera un gros "+" si vous la case contient une cellule et un petit "+" si elle est vide.
Une fois le tableau prêt, appuyez sur :f31: pour lancer la simulation en mode texte, et :f32: pour le mode graphique.
Les deux modes font la même chose, mais vous pouvez choisir d'afficher le plateau de jeu en grosse lettres ou en plus petites :)

L'éditeur utilise une matrice 8x16 qui prend ~ 1.6 Ko de mémoire RAM. Pour réduire cela vous pouvez exporter le plateau de jeu en appuyant sur :f41: dans l'éditeur. Pour charger le plateau depuis le fichier exporté, appuyez sur :f42:. Vous pouvez dès lors transférer le fichier de plateau (la liste GOLSV pour Game of Life Save) à une autre calculatrice sans pour autant supprimer de matrices :bj:

Attention : Le jeu efface le contenu des matrices [A], [B] et [C] !

Enfin, le programme ne pèse que 1 Ko ! (pile-poil, avant que je ne renomme le programme il faisait 999 octets :D)

Si quelqu'un est intéressé.... :D
Fichiers joints
CEILθGOL.8Xp
(1.03 Kio) Téléchargé 108 fois
Toujours plus loin, toujours plus haut, toujours plus geek !
Créateur du projet Haskier : Jouer ! Sujet sur OpenClassrooms
Programmez en UnderBasic ! https://tiplanet.org/forum/viewtopic.php?t=19009&p=207260
Avatar de l’utilisateur
Clément.7
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Prochain niv.: 29.5%
 
Messages: 348
Inscription: 12 Juin 2013, 15:02
Localisation: Près de Nantes
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: IUT Informatique en 2017-2019
GitHub: ClementNerma

Re: Game of Life

Message non lude Ti64CLi++ » 28 Avr 2016, 20:41

J'adore ce jeu. Par contre, jamais réussi à en programmer un :D
Image
Avatar de l’utilisateur
Ti64CLi++Modo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 32.3%
 
Messages: 3441
Images: 75
Inscription: 04 Juil 2014, 14:40
Localisation: Clermont-Ferrand 63
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: ENS Rennes
GitHub: Ti64CLi

Re: Game of Life

Message non lude Clément.7 » 28 Avr 2016, 20:56

Moi aussi je ne pensais pas pouvoir en programmer mais en fait c'est relativement simple. J'ai un plateau de jeu de 8 lignes par 16 colonnes, je crée une matrice de 10 lignes par 18 colonnes.
Lorsque je veux calculer une étape de l'évolution cellulaire, je copie la matrice [A] dans [B]. Ainsi, si je dois modifier certaines cases, cela n'affectera pas la matrice d'origine qui est en cours de traitement, ce qui aurait pour effet de fausser les résultats.
Je fais une boucle :
Code: Tout sélectionner
For(Y,2,9)
For(X,2,17)
"Le code est ici
End:End

Je calcule ensuite la somme des cases qui entoure la case actuelle. Soit les cases de coordonnées (Y-1;X-1) (Y-1;X) (Y-1;X+1) / (Y;X-1) (Y;X+1) / (Y+1;X-1) (Y+1;X) (Y+1;X+1) -> 8 cases en tout. L'avantage d'avoir fait une plus grande matrice que le plateau de jeu, c'est que si je regarde la matrice aux coordonnées (Y-1;X-1) cela ne générera pas d'erreurs. Sinon j'aurais dû vérifier que X > 1.... ce qui aurait considérablement ralenti le jeu ! Alors certes cela prend (légèrement) plus de RAM mais permet de beaucoup gagner en vitesse :)
Si je reprends le code de tout à l'heure :

Code: Tout sélectionner
For(Y,2,9)
For(X,2,17)
[A](Y-1;X-1)+[A](Y-1;X)+[A](Y-1;X+1)+[A](Y;X-1)+[A](Y;X+1)+[A](Y+1;X-1)+[A](Y+1;X)+[A](Y+1;X+1)->S
If [A](Y,X):Then // Il y a une cellule dans cette case
If S≠2 or S≠3 // Ni 2 ni 3 cellules avoisinantes ? Destruction de la cellule
0->[B](Y,X)
Else // Aucune cellule dans cette case
If S=3 // 3 cellules ? Création d'une cellule dans cette case vide
1->[B](Y,X)
End:End:End

Ensuite, si la case de la matrice (Y;X) vaut 1 (il y a une cellule), s'il la somme des cellules avoisinantes est différente de deux ou trois (condition nécessaire à la survie de la cellule), je mets 0 (pas de cellule) dans la matrice [B] aux coordonnées (Y;X).
Si la case vaut 0 (pas de cellule), si la somme des cellules avoisinantes est de trois (condition nécessaire à la création d'une cellule), je mets 1 (cellule) dans la matrice [B], toujours aux mêmes coordonnées.

Ensuite, je mets [B] dans [A] et le tour est joué ! Il n'y a plus qu'à afficher. Voici l'algorithme d'affiche le plus rapide faisable en TI-Basic z80 :

Code: Tout sélectionner
ClrHome
For(Y,1,8)
For(X,1,16)
If [A](Y+1,X+1)
Output(Y,X,"o
End:End

Et voilà ;) !
Dernière édition par Clément.7 le 28 Avr 2016, 20:59, édité 1 fois.
Toujours plus loin, toujours plus haut, toujours plus geek !
Créateur du projet Haskier : Jouer ! Sujet sur OpenClassrooms
Programmez en UnderBasic ! https://tiplanet.org/forum/viewtopic.php?t=19009&p=207260
Avatar de l’utilisateur
Clément.7
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Prochain niv.: 29.5%
 
Messages: 348
Inscription: 12 Juin 2013, 15:02
Localisation: Près de Nantes
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: IUT Informatique en 2017-2019
GitHub: ClementNerma

Re: Game of Life

Message non lude Ti64CLi++ » 28 Avr 2016, 20:58

J'ai utilisé la meme technique (la matrice plus grande que le plateau de jeu) pour un démineur (que je n'ai pas publié ^^).
En tout cas, encore bravo, il n'y en a pas beaucoup sur TI Planet :D
Image
Avatar de l’utilisateur
Ti64CLi++Modo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 32.3%
 
Messages: 3441
Images: 75
Inscription: 04 Juil 2014, 14:40
Localisation: Clermont-Ferrand 63
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: ENS Rennes
GitHub: Ti64CLi

Re: Game of Life

Message non lude Clément.7 » 28 Avr 2016, 21:00

Merci ;) mais le programme est vraiment trop lent (P.S. j'ai édité mon dernier message)
EDIT: *lent, pas long
Toujours plus loin, toujours plus haut, toujours plus geek !
Créateur du projet Haskier : Jouer ! Sujet sur OpenClassrooms
Programmez en UnderBasic ! https://tiplanet.org/forum/viewtopic.php?t=19009&p=207260
Avatar de l’utilisateur
Clément.7
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Prochain niv.: 29.5%
 
Messages: 348
Inscription: 12 Juin 2013, 15:02
Localisation: Près de Nantes
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: IUT Informatique en 2017-2019
GitHub: ClementNerma

Re: Game of Life

Message non lude grosged » 07 Mai 2016, 17:23

Tu es sur que l'utilisation de liste n'optimiserait pas ? En optant pour une liste, ça n'est plus 2 variables X,Y mais 1 seule comme coordonnée, tout de même.
Sinon, les " If...Then" sont très souvent à l'origine de ralentissements.

Si j'ai bien compris, 3 cellules voisines donneront naissance/laisseront en vie la cellule centrale, et 2 cellules voisines laisseront la cellule centrale en l'état actuel.
Pour le reste, la cellule centrale sera morte.
Avec E=état de la cellule centrale , et V=nb de cellules voisines...
le nouvel état sera :
(V=3) or (E and (V=2
ou encore...
(V=3)+ E*(V=2
Dernière édition par grosged le 07 Mai 2016, 18:15, édité 1 fois.
Avatar de l’utilisateur
grosgedVIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 30.2%
 
Messages: 770
Images: 75
Inscription: 14 Sep 2011, 12:29
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: Game of Life

Message non lude Clément.7 » 07 Mai 2016, 18:13

Malheureusement je n'ai pas réussi à faire plus rapide :(
Et pour les listes non je pense au contraire que ça empirerait car bien non seulement une liste prend plus de place en mémoire mais en plus il faut écrire plusieurs tokens et la calculatrice doit comprendre qu'on veut accéder à tel index de la liste et pas juste à une variable. D'où une plus grande lenteur je pense.
Toujours plus loin, toujours plus haut, toujours plus geek !
Créateur du projet Haskier : Jouer ! Sujet sur OpenClassrooms
Programmez en UnderBasic ! https://tiplanet.org/forum/viewtopic.php?t=19009&p=207260
Avatar de l’utilisateur
Clément.7
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Prochain niv.: 29.5%
 
Messages: 348
Inscription: 12 Juin 2013, 15:02
Localisation: Près de Nantes
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: IUT Informatique en 2017-2019
GitHub: ClementNerma

Re: Game of Life

Message non lude randlog » 07 Mai 2016, 20:30

J'avoue que c'est très très lent.... j'espère que tu trouveras une solution mais c'est déjà pas mal...
Image
Image
Avatar de l’utilisateur
randlogAmbianceur
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 15.4%
 
Messages: 567
Inscription: 05 Sep 2015, 16:23
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Supoptique

Re: Game of Life

Message non lude Clément.7 » 07 Mai 2016, 21:12

En fait à mon avis, il est impossible de faire plus rapide (ou presque), à moins de le recoder en un autre langage plus rapide... Je vais peut-être essayer en Axe avec la liste L1 pour stocker les données, ça devrait passer sans problème...
Toujours plus loin, toujours plus haut, toujours plus geek !
Créateur du projet Haskier : Jouer ! Sujet sur OpenClassrooms
Programmez en UnderBasic ! https://tiplanet.org/forum/viewtopic.php?t=19009&p=207260
Avatar de l’utilisateur
Clément.7
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Prochain niv.: 29.5%
 
Messages: 348
Inscription: 12 Juin 2013, 15:02
Localisation: Près de Nantes
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: IUT Informatique en 2017-2019
GitHub: ClementNerma

Re: Game of Life

Message non lude Ti64CLi++ » 07 Mai 2016, 21:32

Bonne chance pour l'Axe, je veux bien t'aider ;)
Image
Avatar de l’utilisateur
Ti64CLi++Modo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 32.3%
 
Messages: 3441
Images: 75
Inscription: 04 Juil 2014, 14:40
Localisation: Clermont-Ferrand 63
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: ENS Rennes
GitHub: Ti64CLi

Suivante

Retourner vers TI-Basic

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 13 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1665 utilisateurs:
>1607 invités
>54 membres
>4 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)