这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 有奖活动 » 生命滑翔机

共1条 1/1 1 跳转至

生命滑翔机

高工
2026-01-07 10:42:36     打赏


image.png

image.png

#!/usr/bin/env python3# -*- coding: utf-8 -*-"""康威生命游戏 - 滑翔机演示运行环境:Termux + Python3"""import osimport timeimport sys
# 定义网格尺寸(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


共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]