

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
康威生命游戏 - 滑翔机演示
运行环境:Termux + Python3
"""
import os
import time
import sys
# 定义网格尺寸(Termux终端建议宽度≥40,高度≥20)
WIDTH = 40
HEIGHT = 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("\n\n游戏已退出,感谢体验!")
sys.exit(0)
if __name__ == "__main__":
main()压缩包:life in life.zip