📜  Python|兰顿的蚂蚁(1)

📅  最后修改于: 2023-12-03 15:19:18.396000             🧑  作者: Mango

Python | 兰顿的蚂蚁

简介

兰顿的蚂蚁是一个经典的模拟系统,它模拟了一只蚂蚁在一个黑白相间的格子上行走的过程。蚂蚁初始位于格子的某一位置,面对一个方向(初始时通常向上),每次移动一步,遇到黑格子就变成白格子,遇到白格子就变成黑格子,并且向左转90度或向右转90度。虽然规则非常简单,但是这个系统展现出了意想不到的复杂性,可以展现蚁群行为和非线性动力学的现象。

在Python编程中,我们可以用pygame库创建画布,在其上模拟蚂蚁的行走过程。蚂蚁的位置和朝向用二维平面直角坐标系来表示,黑白格子用0和1表示。

实现步骤
  1. 导入pygame和numpy库
import pygame
import numpy as np
  1. 设定画布大小和格子大小
width, height = 800, 800
cell_size = 5
  1. 初始化黑白格子二维数组
board = np.zeros((height // cell_size, width // cell_size))
  1. 设定蚂蚁初始位置和初始方向
x, y = len(board) // 2, len(board[0]) // 2
direction = 0  # up
  1. 创建画布并循环模拟蚂蚁行走过程
pygame.init()
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("Langton's Ant")

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    if board[x][y] == 0:
        # turn right
        direction = (direction + 1) % 4
        board[x][y] = 1
    else:
        # turn left
        direction = (direction - 1) % 4
        board[x][y] = 0
        
    # change color
    pygame.draw.rect(screen, (255 * board[x][y],) * 3, 
                     (y * cell_size, x * cell_size, cell_size, cell_size))
                     
    # move forward
    if direction == 0:
        x -= 1
    elif direction == 1:
        y += 1
    elif direction == 2:
        x += 1
    else:
        y -= 1
        
    # wrap around edges
    x = x % len(board)
    y = y % len(board[0])

    pygame.display.update()
运行结果

运行上述程序,即可看到蚂蚁在黑白格子上行走的过程,一开始看似随机的行走路径逐渐呈现出周期性的规律。由于规则的简单性和非线性系统的特性,蚂蚁行走过程中不断出现复杂的现象。

运行结果

结语

通过编写兰顿的蚂蚁模拟程序,我们可以更加深刻地理解复杂系统的运作原理,也可以更好地理解Python编程语言的常用数据结构和模块。如果你对此感兴趣,欢迎深入学习更加实用的Python应用。