Python的Turtle模块-如何使Turtle根据其下方的标记颜色执行操作?

Python的Turtle模块-如何使Turtle根据其下方的标记颜色执行操作?,python,turtle-graphics,python-turtle,Python,Turtle Graphics,Python Turtle,我用Python制作了一个窗口,我想在窗口周围创建一个周界,这样“ant”就不能在窗口外移动或打印。我该怎么做(我已经用邮票画了一个盒子)。兰顿的蚂蚁序列永远不会结束,因此不可能在海龟图形窗口中包含整个图像 如果你有一个固定数量的步骤,你想让蚂蚁做,那么你可以使用这个类来模拟Langton的蚂蚁序列, 并返回所需网格的尺寸: import turtle SCREEN_WIDTH = 600 # You can customize this SCREEN_HEIGHT = 600 # You c

我用Python制作了一个窗口,我想在窗口周围创建一个周界,这样“ant”就不能在窗口外移动或打印。我该怎么做(我已经用邮票画了一个盒子)。

兰顿的蚂蚁序列永远不会结束,因此不可能在海龟图形窗口中包含整个图像

如果你有一个固定数量的步骤,你想让蚂蚁做,那么你可以使用这个类来模拟Langton的蚂蚁序列, 并返回所需网格的尺寸:

import turtle

SCREEN_WIDTH = 600 # You can customize this
SCREEN_HEIGHT = 600 # You can customize this
steps = 1000 # You can customize this

class LangtonsAnt:
    def __init__(self, steps):
        self.grid = [["AW"]]
        self.facing = 0
        self.steps = steps
        
    def current_index(self):
        for i, row in enumerate(self.grid):
            for j, cell in enumerate(row):
                if "A" in cell:
                    return i, j
                
    def switch_color(self, i, j):
        if "W" in self.grid[i][j]:
            self.grid[i][j] = "B"
        else:
            self.grid[i][j] = "W"
            
    def turn_cw(self):
        self.facing += 1
        if self.facing > 3:
            self.facing = 0
            
    def turn_ccw(self):
        self.facing -= 1
        if self.facing < 0:
            self.facing = 3
            
    def forward(self):
        i, j = self.current_index()
        self.switch_color(i, j)
        if self.facing == 0:
            if len(self.grid[i]) > j + 1:
                self.grid[i][j + 1] = "A" + self.grid[i][j + 1]
            else:
                self.grid[i].append("AW")
                for idx, row in enumerate(self.grid):
                    if idx != i:
                        row.append("W")
        elif self.facing == 1:
            if len(self.grid) > i + 1:
                self.grid[i + 1][j] = "A" + self.grid[i + 1][j]
            else:
                self.grid.append(["AW" if idx == j else "W" for idx in range(len(self.grid[i]))])
        elif self.facing == 2:
            if j:
                self.grid[i][j - 1] = "A" + self.grid[i][j - 1]
            else:
                self.grid[i] = ["AW"] + self.grid[i]
                for idx, row in enumerate(self.grid):
                    if idx != i:
                        row.insert(0, "W")
        elif self.facing == 3:
            if i:
                self.grid[i - 1][j] = "A" + self.grid[i - 1][j]
            else:
                self.grid.append(["AW" if idx == j else "W" for idx in range(len(self.grid[i]))])

    def current_color(self):
        for row in self.grid:
            for cell in row:
                if "A" in cell:
                    return cell[1]

    def dimensions(self):
        for _ in range(self.steps):
            self.forward()
            if self.current_color() == "W":
                self.turn_cw()
            else:
                self.turn_ccw()
        return len(self.grid[0]), len(self.grid)

wn = turtle.setup(SCREEN_WIDTH, SCREEN_HEIGHT)
test = LangtonsAnt(steps)
turtle.speed("fastest")
turtle.shape("square")
s = min(SCREEN_WIDTH, SCREEN_HEIGHT) / max(test.dimensions())
turtle.shapesize(s / 20, s / 20)
turtle.penup()
for i, v in enumerate(test.grid):
    for j, w in enumerate(v):
        turtle.goto((-SCREEN_WIDTH + s)/ 2 + j * s, (SCREEN_HEIGHT - s) / 2 - i * s)
        if "B" in w:
            turtle.stamp()
导入海龟
屏幕宽度=600#您可以自定义此选项
屏幕高度=600#您可以自定义此设置
步骤=1000#您可以自定义此步骤
LangtonsAnt级:
定义初始化(自身,步骤):
self.grid=[[“AW”]]
自面向=0
self.steps=步骤
def当前_索引(自身):
对于i,枚举(self.grid)中的行:
对于j,枚举(行)中的单元格:
如果单元格中有“A”:
返回i,j
def开关颜色(自身、i、j):
如果自网格[i][j]中的“W”:
self.grid[i][j]=“B”
其他:
self.grid[i][j]=“W”
def转向(自):
自面向+=1
如果自面向>3:
自面向=0
def逆时针旋转(自身):
自面向-=1
如果自面向<0:
自我面向=3
def转发(自):
i、 j=自身当前指数()
自切换颜色(i,j)
如果self.faceting==0:
如果len(自网格[i])>j+1:
自网格[i][j+1]=“A”+自网格[i][j+1]
其他:
self.grid[i].append(“AW”)
对于idx,枚举(self.grid)中的行:
如果idx!=一:
第行追加(“W”)
elif self.faceting==1:
如果len(自网格)>i+1:
self.grid[i+1][j]=“A”+self.grid[i+1][j]
其他:
self.grid.append([“AW”如果idx==j,则表示idx在范围内(len(self.grid[i]))]))
elif self.faceting==2:
如果j:
self.grid[i][j-1]=“A”+self.grid[i][j-1]
其他:
self.grid[i]=[“AW”]+self.grid[i]
对于idx,枚举(self.grid)中的行:
如果idx!=一:
第行。插入(0,“W”)
elif self.faceting==3:
如果我:
self.grid[i-1][j]=“A”+self.grid[i-1][j]
其他:
self.grid.append([“AW”如果idx==j,则表示idx在范围内(len(self.grid[i]))]))
def当前颜色(自身):
对于self.grid中的行:
对于行中的单元格:
如果单元格中有“A”:
返回单元[1]
def尺寸(自):
对于范围内的(自步):
self.forward()
如果self.current_color()=“W”:
self.turn_cw()
其他:
自转角(逆时针)
返回len(自网格[0]),len(自网格)
wn=海龟。设置(屏幕宽度、屏幕高度)
测试=LangtonsAnt(步骤)
乌龟。速度(“最快”)
龟形(“方形”)
s=最小值(屏幕宽度、屏幕高度)/最大值(测试尺寸()
乌龟.形状大小(s/20,s/20)
乌龟
对于枚举(test.grid)中的i,v:
对于枚举(v)中的j,w:
海龟.跳转((-SCREEN\u WIDTH+s)/2+j*s,(SCREEN\u HEIGHT-s)/2-i*s)
如果w中的“B”:
乌龟邮票()
输出:


哇,看起来你真的花了一些时间在这上面。谢谢!:)