[PYTHON] Zura fait comme un jeu de la vie

Qu'est-ce qu'un jeu de la vie?

Vidéo *** Emprunté à youtube ***

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.

Essayons de le faire

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.

Un petit commentaire

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

Sortie vers l'image

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

J'ai essayé de jouer

movie.gif 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.

Impressions

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

Zura fait comme un jeu de la vie
J'ai fait un jeu de vie avec Numpy
〇✕ J'ai fait un jeu
J'ai fait un jeu de puzzle (comme) avec Tkinter of Python
J'ai fait un jeu rogue-like avec Python
J'ai fait un jeu de cueillette avec Python
Faisons un jeu de squash
J'ai fait un jeu d'éclairage de sapin de Noël avec Python
J'ai créé un jeu d'introduction au festival scolaire avec Ren'py
J'ai fait un jeu mono tombé avec Sense HAT
Créez un jeu à la Tetris!
J'ai fait un jeu de frappe simple avec tkinter de Python
Créez un jeu de vie mis à jour manuellement avec tkinter
J'ai fait un jeu de combat Numer0n en Java (j'ai aussi fait de l'IA)
J'ai fait un texte Python
Fait une commande pour FizzBuzz
J'ai fait un robot discord
Jeu de vie avec Python [je l'ai fait] (sur terminal et Tkinter)
J'ai créé un jeu appelé Battle Ship en utilisant pygame et tkinter
Création d'un outil CLI client / serveur WebSocket (comme WebSocket version netcat)
J'ai créé un chat-holdem de serveur de jeu de poker en utilisant websocket avec python
J'ai créé une application Web qui trace le journal de vie enregistré sur Google Home comme un diagramme de Gantt.