生活随笔
收集整理的這篇文章主要介紹了
Conway生命游戏
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
生命游戲建立在9個方格的網格中,每個細胞有8個相鄰細胞。
游戲有三個規則:
1. 如果一個細胞周圍有3個細胞為生(一個細胞周圍共有8個細胞),則該細胞為生(即該細胞若原先為死,則轉為生,若原先為生,則保持不變) 。
2. 如果一個細胞周圍有2個細胞為生,則該細胞的生死狀態保持不變;
3. 在其它情況下,該細胞為死(即該細胞若原先為生,則轉為死,若原先為死,則保持不變)
import sys, argparse
import numpy
as np
import matplotlib.pyplot
as plt
import matplotlib.animation
as animationON =
255
OFF =
0
vals = [ON, OFF]
def randomGrid(N):return np.random.choice(vals, N*N, p=[
0.2,
0.8]).reshape(N, N)
def addGlider(i, j, grid):"""adds a glider with top left cell at (i, j)"""glider = np.array([[
0,
0,
255], [
255,
0,
255], [
0,
255,
255]])grid[i:i+
3, j:j+
3] = glider
def addGosperGliderGun(i, j, grid):gun = np.zeros(
11*
38).reshape(
11,
38)gun[
5][
1] = gun[
5][
2] =
255gun[
6][
1] = gun[
6][
2] =
255gun[
3][
13] = gun[
3][
14] =
255gun[
4][
12] = gun[
4][
16] =
255gun[
5][
11] = gun[
5][
17] =
255gun[
6][
11] = gun[
6][
15] = gun[
6][
17] = gun[
6][
18] =
255gun[
7][
11] = gun[
7][
17] =
255gun[
8][
12] = gun[
8][
16] =
255gun[
9][
13] = gun[
9][
14] =
255gun[
1][
25] =
255gun[
2][
23] = gun[
2][
25] =
255gun[
3][
21] = gun[
3][
22] =
255gun[
4][
21] = gun[
4][
22] =
255gun[
5][
21] = gun[
5][
22] =
255gun[
6][
23] = gun[
6][
25] =
255gun[
7][
25] =
255gun[
3][
35] = gun[
3][
36] =
255gun[
4][
35] = gun[
4][
36] =
255grid[i:i+
11, j:j+
38] = gun
def update(frameNum, img, grid, N):newGrid = grid.copy()
for i
in range(N):
for j
in range(N):total = int((grid[i, (j-
1)%N] + grid[i, (j+
1)%N] + grid[(i-
1)%N, j] + grid[(i+
1)%N, j] + grid[(i-
1)%N, (j-
1)%N] + grid[(i-
1)%N, (j+
1)%N] + grid[(i+
1)%N, (j-
1)%N] + grid[(i+
1)%N, (j+
1)%N])/
255)
if grid[i, j] == ON:
if (total <
2)
or (total >
3):newGrid[i, j] = OFF
else:
if total ==
3:newGrid[i, j] = ONimg.set_data(newGrid)grid[:] = newGrid[:]
return img,
def main():parser = argparse.ArgumentParser(description=
"Runs Conway's Game of Life simulation.")parser.add_argument(
'--grid-size', dest=
'N', required=
False)parser.add_argument(
'--mov-file', dest=
'movfile', required=
False)parser.add_argument(
'--interval', dest=
'interval', required=
False)parser.add_argument(
'--glider', action=
'store_true', required=
False)parser.add_argument(
'--gosper', action=
'store_true', required=
False)args = parser.parse_args()N =
100if args.N
and int(args.N) >
8:N = int(args.N)updateInterval =
50if args.interval:updateInterval = int(args.interval)grid = np.array([])
if args.glider:grid = np.zeros(N*N).reshape(N, N)addGlider(
1,
1, grid)
elif args.gosper:grid = np.zeros(N*N).reshape(N, N)addGosperGliderGun(
10,
10, grid)
else:grid = randomGrid(N)fig, ax = plt.subplots()img = ax.imshow(grid, interpolation=
'nearest')ani = animation.FuncAnimation(fig, update, fargs=(img, grid, N, ),frames =
10,interval=updateInterval,save_count=
50)
if args.movfile:ani.save(args.movfile, fps=
30, extra_args=[
'-vcodec',
'libx264'])plt.show()
if __name__ ==
'__main__':main()
對于argparse的參考有以下的資料
https://blog.csdn.net/lis_12/article/details/54618868
https://www.cnblogs.com/zknublx/p/6106343.html
對于Matplotlib庫的參考主要有:
https://www.cnblogs.com/LHWorldBlog/p/7819331.html
http://python.jobbole.com/85106/
總結
以上是生活随笔為你收集整理的Conway生命游戏的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。