电子网首页 > 开源与设计

康威生命游戏-滑翔机演示

2025-12-27 13:38 | 来源:电子世界报


image.png

image.png

#!/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

推荐技术

返回顶部