*** Von youtube ausgeliehen ***
Ist es so Ist es ein bisschen anders als das eigentliche Lebensspiel? Es scheint, dass es auch ein Invasionsspiel genannt wird.
[Wikipedia 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) Klicken Sie hier für die eigentliche Definition. Vielleicht unterscheidet sich das, was ich machen möchte, von Lebensspielen.
Normalerweise schreibe ich Python, also habe ich auch dieses Mal Python übernommen Python ist einfach (^ q ^)
Klicken Sie hier für den Code Wir haben den Betrieb mit Ubuntu 14.04 + Python 3.5 bestätigt.
Python ist funktional und einfach zu schreiben, also für und wenn Anweisungen reduziert werden können und es wirklich einfach zu schreiben ist Zuerst dachte ich, ich würde es objektorientiert schreiben, Es schien ziemlich cool, nur die Listeneinschlussnotation und die Funktion zu kombinieren Diesmal habe ich keinen Unterricht gemacht.
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
Klicken Sie hier für die Hauptlogik Die aktuelle Umgebung für 8 Zellen um eine Zelle wird erfasst und der Zustand des nächsten Schritts bestimmt. Je mehr Verbündete um dich herum sind, desto leichter ist es zu überleben und je mehr Feinde du hast, desto leichter ist es zu sterben. Benutze Lambda und werde es los (^ q ^)
Schließlich wird der Kampf als GIF-Video ausgegeben.
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)
Dieser Code konvertiert ein zweidimensionales Array in RGB-Werte und gibt es an das Verzeichnis tmp aus. Schließlich wird es von ImageMagick in GIF konvertiert und in das Ausgabeverzeichnis ausgegeben. Da es sich um ein zweidimensionales Array handelt, wird das Lambda dupliziert. Wenn es Lambda gibt, ist es einfach (^ q ^)
Oh, es fühlt sich gut an. Wenn Sie keine Parameter entwickeln, konvergiert diese in einem bestimmten Zustand. Es kann interessant sein, eine Kommandantenzelle zu erstellen und die Gewinnrate der umgebenden Masse zu korrigieren. Es ist eine originelle Implementierung, die sich ein wenig von den Regeln von Wikipedia unterscheidet. Es ist also vielleicht kein Lebensspiel, aber ich persönlich bin zufrieden.
Ich habe in letzter Zeit mit Lisp gespielt, was die Verwendung von Lambda vereinfacht (oder mehr, ich versuche es zu verwenden). Wenn es Lambda gibt, ist es einfach (^ q ^)
Recommended Posts