Accueil > > > THE GAME OF LIFE, AVEC IMPLÉMENTATION GRAPHIQUE
THE GAME OF LIFE, AVEC IMPLÉMENTATION GRAPHIQUE
Information sur la source
Description
Une petite implémentation du jeu de la vie, J'ai vu que un code sur le site avait déjà été posté mais il avait été décrit comme incompréhensible, je poste donc ma version, que je trouve plus efficace. Je pense avoir tout commenté ce qui en valait la peine, mais je peut me tromper : pointez moi les endroits fautifs !
Source
- #Notez que j'ommet volontairement les caracteres accentues, afin d'eviter les erreurs.
- import random
- from Tkinter import *
- import time
- try :
- import psyco
- psyco.full()
- except :pass
-
- def seed (a,b,n): # fabrique une matrice de axb avec 1/n True en moyenne
- "x,y,n"
- sets=[]
- for y in range(0,b):
- t=[]
- for x in range(0,a):
- t.append(random.randint(0,n)==0)
- sets.append(t)
- return sets
-
- def evolve (s): # fait avancer d'une generation la matrice
- sets=[]
- a,b=len(s[0]),len(s) #je prefere verifier la taille "sur place" plutot que de la demander la taille de la matrice
- for y in range(0,b):
- t=[]
- for x in range(0,a):
- state=s[y][x] # on recupere l'etat de la cellule
- nb=s[(y-1)%b][x]+s[(y+1)%b][x]+s[(y-1)%b][(x+1)%a]+s[(y-1)%b][(x-1)%a]+s[y][(x-1)%a]+s[(y+1)%b][(x-1)%a]+s[(y+1)%b][(x+1)%a]+s[y][(x+1)%a]#On cherche l'etat des cellules avoisinantes, le modulo sert a donner une dimension toroidale a l'expace (les bouts se retouchent). NB : True+True=2
- if not state and nb==3:n=True #ces regles correspondent au jeu. nb : nombre de cellule avoisinante en vie; state : etat de la cellule
- elif not state : n=False
- elif state and nb<2 : n=False
- elif state and nb in (2,3) : n=True
- elif state and nb>3 : n=False
- else : #hum..
- print nb, state
- print "fail..."
- n=False
- t.append(n)
- sets.append(t)
- return sets
-
-
-
- class represent : #representation graphique de la matrice!
- def __init__(self,a=128,b=128,n=1,m=1,t=500,istep=1):
- "x,y, 1/n cellule vivante par case au debut, largeur de la cellule, temporisation entre les affichages (s'y rajoutera le temps de calcul.), nombre d'evolution a faire par affichage"
- self.istep,self.a,self.b,self.n,self.m,self.t=istep,a,b,n,m,t#on kick tout ce beau monde en vaiable locales.
- self.root=Tk()
- self.can=Canvas(height=m*b,width=m*a,bg="grey15")#on fait la fenetre.
- self.can.pack()
- self.sets=seed(self.a,self.b,self.n)#on genere la matrice
- self.render()#on affiche le tout
- self.root.after(self.t,self.continu)#on lance la temporisation
- self.root.mainloop()
- def continu (self,trash=None):#"animation"
- #r=time.time()
- for a in range(0,self.istep):#on evolue istep fois
- self.sets=evolve(self.sets)
- #r2=time.time()
- self.render()#on affiche
- #r3=time.time()
- #print "took %ss to calculate, %ss to render"%(r2-r,r3-r2)
- self.root.after(self.t,self.continu)#on relance la temporisation
- def render (self):#calcul du rendu graphique
- self.can.delete(ALL)#on scrap tout
- x,y=0,0#on part de x=0,y=0 et on va ligne par ligne.
- for i in self.sets:
- for j in i :
- if j :#si la cellule est en vie :
- self.can.create_rectangle(x,y,x+self.m,y+self.m,width=1,fill="green")#on fait un rectangle vert, notez que le width empeche le bon fonctionnement avec m<3, le mettre a 0 dans le cas echeant.
- x+=self.m
- y+=self.m
- x=0
-
-
-
- represent(64,64,1,8,150,1)#juste de quoi faire la demo!
#Notez que j'ommet volontairement les caracteres accentues, afin d'eviter les erreurs.
import random
from Tkinter import *
import time
try :
import psyco
psyco.full()
except :pass
def seed (a,b,n): # fabrique une matrice de axb avec 1/n True en moyenne
"x,y,n"
sets=[]
for y in range(0,b):
t=[]
for x in range(0,a):
t.append(random.randint(0,n)==0)
sets.append(t)
return sets
def evolve (s): # fait avancer d'une generation la matrice
sets=[]
a,b=len(s[0]),len(s) #je prefere verifier la taille "sur place" plutot que de la demander la taille de la matrice
for y in range(0,b):
t=[]
for x in range(0,a):
state=s[y][x] # on recupere l'etat de la cellule
nb=s[(y-1)%b][x]+s[(y+1)%b][x]+s[(y-1)%b][(x+1)%a]+s[(y-1)%b][(x-1)%a]+s[y][(x-1)%a]+s[(y+1)%b][(x-1)%a]+s[(y+1)%b][(x+1)%a]+s[y][(x+1)%a]#On cherche l'etat des cellules avoisinantes, le modulo sert a donner une dimension toroidale a l'expace (les bouts se retouchent). NB : True+True=2
if not state and nb==3:n=True #ces regles correspondent au jeu. nb : nombre de cellule avoisinante en vie; state : etat de la cellule
elif not state : n=False
elif state and nb<2 : n=False
elif state and nb in (2,3) : n=True
elif state and nb>3 : n=False
else : #hum..
print nb, state
print "fail..."
n=False
t.append(n)
sets.append(t)
return sets
class represent : #representation graphique de la matrice!
def __init__(self,a=128,b=128,n=1,m=1,t=500,istep=1):
"x,y, 1/n cellule vivante par case au debut, largeur de la cellule, temporisation entre les affichages (s'y rajoutera le temps de calcul.), nombre d'evolution a faire par affichage"
self.istep,self.a,self.b,self.n,self.m,self.t=istep,a,b,n,m,t#on kick tout ce beau monde en vaiable locales.
self.root=Tk()
self.can=Canvas(height=m*b,width=m*a,bg="grey15")#on fait la fenetre.
self.can.pack()
self.sets=seed(self.a,self.b,self.n)#on genere la matrice
self.render()#on affiche le tout
self.root.after(self.t,self.continu)#on lance la temporisation
self.root.mainloop()
def continu (self,trash=None):#"animation"
#r=time.time()
for a in range(0,self.istep):#on evolue istep fois
self.sets=evolve(self.sets)
#r2=time.time()
self.render()#on affiche
#r3=time.time()
#print "took %ss to calculate, %ss to render"%(r2-r,r3-r2)
self.root.after(self.t,self.continu)#on relance la temporisation
def render (self):#calcul du rendu graphique
self.can.delete(ALL)#on scrap tout
x,y=0,0#on part de x=0,y=0 et on va ligne par ligne.
for i in self.sets:
for j in i :
if j :#si la cellule est en vie :
self.can.create_rectangle(x,y,x+self.m,y+self.m,width=1,fill="green")#on fait un rectangle vert, notez que le width empeche le bon fonctionnement avec m<3, le mettre a 0 dans le cas echeant.
x+=self.m
y+=self.m
x=0
represent(64,64,1,8,150,1)#juste de quoi faire la demo!
Conclusion
des heures de fun à regarder des glider se crasher sur des bloc de 2x2...
Sources du même auteur
CALCULATRICE, INTRODUCTION AU LAMBDACALCULATRICE, INTRODUCTION AU LAMBDA Ca fait plusieurs fois que je voix que des personnes ne savent pas utiliser le lambda en python.
c'est pourtant très important ! Je vais donc vous ...
GENERATEUR DE CLEF RSA, TRÈS EFFICACE !GENERATEUR DE CLEF RSA, TRÈS EFFICACE !Bonjour,
Voila une petite pièce de code qui vous permettra de générer la clef privée et public, pour du RSA.
J'utilise l'algorithme de Miler et ...
SERVEUR WEB EN PYTHON.SERVEUR WEB EN PYTHON.Voila j'ai deja poster un ptit serveur en carton :(
mais bon la j'ai fait quelque chose d'un peut plus "interessant" (je crois), j'ai essayer de ga...
SERVEUR HTTP PYTHONSERVEUR HTTP PYTHON Je me suis amusé, à creer un semblant de serveur "http".
Le programme ouvre le port 80,
il attent que le WebBroswer utilise ce port,
il recupère ...
SPAMMEUR, PYTHONSPAMMEUR, PYTHONBon, ce logiciel ne doit pas être utilisé, il montre seulement comment utiliser smtplib pour envoyer de multiples messages, j'ai essayer, et cela marc...
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
jeu de la vie [ par dia100daly ]
je veux poster un code. Mais j'aimerai savoir si c'etait vraiment la peine car c'est la première fois. Pour plus de détail voir sur Wikipédia ( jeu de
codage Windows jeu de caractères [ par creaduff ]
Bonjour,Avant tout, précisons que je ne suis pas un aigle en Python ! Voici mon problème:J'ai écrit une petit programme permettant d'accéder à ma boit
matrice symétrique [ par delaval ]
bonjour, je suis actuellement en train d'écrire une fonction symétrique qui renvoie True or False selon la matrice que je rentre. Voici mon code:class
décomposition LDU d'une matrice [ par map33 ]
Bonjour,nous sommes débutantes en python et un projet de fin de licence nous est demandé sur ce programme.Nous devons trouver le code de la décomposit
Réalisation d'un plus ou moins sur Tkinter [ par kuritsu ]
Bonsoir tout le monde, et je vous souhaite la bonne année à tous par la même occasion. Je viens de me mettre à la programmation sous Python, et j'avo
Charger une matrice d'un fichier [ par Alambiqux ]
Bonjour, J'ai des fichiers colonnes de floats et je souhaiterais les charger dans une liste. Et, également,de manière plus général lorsqu'il s'agit d
Python, jeu de mémory [ par Mattmad ]
Bonjour, je suis en train de plancher sur un jeu de memory via python mais je ne parviens pas à résoudre un "petit" problème, je vous pose la question
créer une simulation d'un jeu de cartes [ par jimux06 ]
# simulation d'un tirage de cartes # dans la version 3.1.x # afficher la date du jour (jj-mm-aaaa) et l'heure (hh:mm:ss), avant chaque jeu # utiliser
Création d'un jeu 2D ! [ par Gatax ]
Salut [^^clinoeil1] Je suis nouveau ici, et depuis qu'elle que temps j'aimerais crée un jeu 2D avec qu'elle que personne 2 ou 3, Mais c'est un peu dif
créer une matrice [ par basmaber ]
Bonjour, est ce que quelqu'un peut m'aider j'ai une liste de ce genre ['I1', '5.', '480.', '480.', '480.', '', 'I2', '0.5', '0.85', '0.85', '0.85', ''
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
974 Application Server (12.2.4.0)974 APPLICATION SERVER (12.2.4.0)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP mySongBook Player (1.0.0)MYSONGBOOK PLAYER (1.0.0)mySongBook Player est un logiciel gratuit permettant l'accès à une archive de tablatures/partitio... Cliquez pour télécharger mySongBook Player
|