Python的Turtle模块-如何使Turtle根据其下方的标记颜色执行操作?
我用Python制作了一个窗口,我想在窗口周围创建一个周界,这样“ant”就不能在窗口外移动或打印。我该怎么做(我已经用邮票画了一个盒子)。兰顿的蚂蚁序列永远不会结束,因此不可能在海龟图形窗口中包含整个图像 如果你有一个固定数量的步骤,你想让蚂蚁做,那么你可以使用这个类来模拟Langton的蚂蚁序列, 并返回所需网格的尺寸: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
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”:
乌龟邮票()
输出:
哇,看起来你真的花了一些时间在这上面。谢谢!:)