

# 定义网格尺寸(Termux终端建议宽度≥40,高度≥20)WIDTH = 40HEIGHT = 20
def init_grid(): """初始化网格,创建滑翔机初始状态""" # 创建全死细胞的网格(0=死,1=活) grid = [[0 for _ in range(WIDTH)] for _ in range(HEIGHT)] # 滑翔机初始位置(放在网格左上角,方便观察移动) # 滑翔机形状: # .O. # ..O # OOO glider_pos = [(1, 3), (2, 1), (2, 3), (3, 2), (3, 3)] for (y, x) in glider_pos: if 0 <= y < HEIGHT and 0 <= x < WIDTH: grid[y][x] = 1 return grid
def count_neighbors(grid, y, x): """计算指定细胞周围的活邻居数量""" neighbors = 0 # 遍历8个方向的邻居 for dy in (-1, 0, 1): for dx in (-1, 0, 1): if dy == 0 and dx == 0: continue # 跳过自身 # 循环边界(让世界无限延伸,超出边界则从另一侧出现) ny = (y + dy) % HEIGHT nx = (x + dx) % WIDTH neighbors += grid[ny][nx] return neighbors
def next_generation(grid): """计算下一代细胞状态""" new_grid = [[0 for _ in range(WIDTH)] for _ in range(HEIGHT)] for y in range(HEIGHT): for x in range(WIDTH): live_neighbors = count_neighbors(grid, y, x) # 应用康威生命游戏规则 if grid[y][x] == 1: # 当前是活细胞 if live_neighbors == 2 or live_neighbors == 3: new_grid[y][x] = 1 # 存活 else: new_grid[y][x] = 0 # 死亡 else: # 当前是死细胞 if live_neighbors == 3: new_grid[y][x] = 1 # 复活 return new_grid
def draw_grid(grid): """在终端绘制网格""" # 清屏(兼容Termux和Linux) os.system('clear' if os.name == 'posix' else 'cls') # 绘制网格 for row in grid: line = ''.join(['■' if cell == 1 else ' ' for cell in row]) print(line) # 显示提示信息 print("n康威生命游戏 - 滑翔机演示 | 按 Ctrl+C 退出")
def main(): """主程序""" try: # 初始化网格(创建滑翔机) grid = init_grid() # 无限循环运行游戏 while True: draw_grid(grid) grid = next_generation(grid) time.sleep(0.5) # 控制帧率,0.5秒刷新一次 except KeyboardInterrupt: # 捕获Ctrl+C,优雅退出 print("nn游戏已退出,感谢体验!") sys.exit(0)
if __name__ == "__main__": main()
压缩包:life in life.zip
我要赚赏金
