Contact me:

Python实现简单的生命游戏

 1 # Conway's Game of Life
 2 import random, time, copy
 3 WIDTH = 60
 4 HEIGHT = 20
 5 
 6 # Create a list of list for the cells:
 7 nextCells = []
 8 for x in range(WIDTH):
 9     column = [] # Create a new column.
10     for y in range(HEIGHT):
11         if random.randint(0, 1) == 0: #0\1两个整数中随机取一个
12             column.append('#') # Add a living cell.
13         else:
14             column.append(' ') # Add a dead cell.
15     nextCells.append(column) # nextCells is a list of column lists.
16 
17 while True: # Main program loop.
18     print('\n\n\n\n\n') # Separate each step with newlines.
19     currentCells = copy.deepcopy(nextCells)#深度拷贝
20 
21     # Print currentCells on the screen:
22     for y in range(HEIGHT):
23         for x in range(WIDTH):
24             print(currentCells[x][y], end='') # Print the # or space “end不换行
25         print() # Print a newline at the end of the row.
26 
27     # Calculate the next step's cells based on current step's cells:
28     for x in range(WIDTH):
29         for y in range(HEIGHT):
30             # Get neighboring coordinates:
31             # `% WIDTH` ensures leftCoord is always between 0 and WIDTH - 1,巧妙简化边界
32             leftCoord  = (x - 1) % WIDTH
33             rightCoord = (x + 1) % WIDTH
34             aboveCoord = (y - 1) % HEIGHT
35             belowCoord = (y + 1) % HEIGHT
36 
37             # Count number of living neighbors:
38             numNeighbors = 0
39             if currentCells[leftCoord][aboveCoord] == '#':
40                 numNeighbors += 1 # Top-left neighbor is alive.
41             if currentCells[x][aboveCoord] == '#':
42                 numNeighbors += 1 # Top neighbor is alive.
43             if currentCells[rightCoord][aboveCoord] == '#':
44                 numNeighbors += 1 # Top-right neighbor is alive.
45             if currentCells[leftCoord][y] == '#':
46                 numNeighbors += 1 # Left neighbor is alive.
47             if currentCells[rightCoord][y] == '#':
48                 numNeighbors += 1 # Right neighbor is alive.
49             if currentCells[leftCoord][belowCoord] == '#':
50                 numNeighbors += 1 # Bottom-left neighbor is alive.
51             if currentCells[x][belowCoord] == '#':
52                 numNeighbors += 1 # Bottom neighbor is alive.
53             if currentCells[rightCoord][belowCoord] == '#':
54                 numNeighbors += 1 # Bottom-right neighbor is alive.
55 
56             # Set cell based on Conway's Game of Life rules:
57             if currentCells[x][y] == '#' and (numNeighbors == 2 or
58 numNeighbors == 3):
59                 # Living cells with 2 or 3 neighbors stay alive:
60                 nextCells[x][y] = '#'
61             elif currentCells[x][y] == ' ' and numNeighbors == 3:
62                 # Dead cells with 3 neighbors become alive:
63                 nextCells[x][y] = '#'
64             else:
65                 # Everything else dies or stays dead:
66                 nextCells[x][y] = ' '
67     time.sleep(1) # Add a 1-second pause to reduce flickering.

 

posted @ 2020-05-12 10:21  impwa  阅读(387)  评论(0编辑  收藏  举报