C'est comme ça? Est-ce un peu différent du jeu de la vie réelle? Il semble que cela s'appelle aussi un jeu d'invasion.
[Wikipédia Life Game](https://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B2%E3%83%BC%E3 % 83% A0) Cliquez ici pour la définition réelle. Peut-être que ce que je veux faire est différent des jeux de la vie.
J'écris habituellement python, donc j'ai adopté python cette fois aussi python est facile (^ q ^)
Cliquez ici pour le code Nous avons confirmé l'opération avec Ubuntu 14.04 + Python 3.5.
Python est fonctionnel et facile à écrire, donc pour et si les instructions peuvent être réduites et c'est vraiment facile à écrire Au début, je pensais l'écrire orienté objet, Cela semblait plutôt cool de combiner la notation d'inclusion de liste et la fonction, donc Je n'ai pas fait de cours cette fois.
main.py
def next_state(f, i, j):
s = f[i][j]
e = environment(f, i, j)
if all(map(lambda x: x == s, e)):
return s
else:
num_friend = len(list(filter(lambda x: x == s, e)))
num_enemy = len(list(filter(lambda x: x != s, e)))
prob = 50 + (num_friend - num_enemy) * 6
alive = random.randint(0, 100) < prob
if alive:
return FRIEND if s == FRIEND else ENEMY
else:
return ENEMY if s == FRIEND else FRIEND
Cliquez ici pour la logique principale L'environnement actuel pour 8 cellules autour d'une cellule est acquis et l'état de l'étape suivante est déterminé. Plus il y a d'alliés autour de vous, plus il est facile de survivre, et plus vous avez d'ennemis, plus il est facile de mourir. Utilisez lambda et débarrassez-vous-en (^ q ^)
Finalement, la bataille sera sortie sous forme de vidéo GIF.
main.py
def output_field(f, step):
f = list(filter(lambda x: not all(list(map(lambda e: e == '*', x))) , f))
f = list(map(lambda x: list(filter(lambda e: e != '*', x)), f))
f = list(map(lambda x: list(map(object2color ,x)) ,f))
arr = np.array(f, dtype=np.int8)
image = Image.fromarray(arr.astype('uint8'))
image.save('./tmp/' + '%07d.png' % step)
Ce code convertit un tableau bidimensionnel en valeurs RVB et le renvoie dans le répertoire tmp. Enfin, il est converti en GIF par ImageMagick et envoyé dans le répertoire de sortie. Puisque nous avons affaire à un tableau à deux dimensions, le lambda est dupliqué. S'il y a lambda, c'est facile (^ q ^)
Oh, ça fait du bien. Si vous ne définissez pas de paramètres, il convergera dans un certain état. Il peut être intéressant de créer une cellule de commandant et de corriger le taux de victoire de la masse ○ environnante. C'est une implémentation originale qui est un peu différente des règles de Wikipédia, donc ce n'est peut-être pas un jeu de la vie, mais je suis personnellement satisfait.
J'ai joué avec Lisp ces derniers temps, ce qui rend lambda plus facile à utiliser (ou plus, j'essaye de l'utiliser) S'il y a lambda, c'est facile (^ q ^)
Recommended Posts