蟒蛇海龟游戏,制作不在边界外的墙壁,修复NoneType错误代码,不可迭代



一切都运行良好,直到我输入了涉及获胜和完成的所有内容,然后它一直告诉我以前有效的代码现在不可迭代。应该发生的事情是,当他们越过一定距离时,他们会到达地图上的其他地方,我不在乎穿其他衣服,这只是一个测试。我不断收到错误代码。

`Exception in Tkinter callback
Traceback (most recent call last):
File "C:Program FilesPython36libtkinter__init__.py", line 1699, in 
__call__
return self.func(*args)
File "C:Program FilesPython36libturtle.py", line 686, in eventfun
fun()
File "E:Home made gameoriginal.py", line 183, in k1
elif win(player):
File "E:Home made gameoriginal.py", line 37, in win
return inside(position, winner)
File "E:Home made gameoriginal.py", line 7, in inside
x1 = min(p[0] for p in rectangle)
TypeError: 'NoneType' object is not iterable'

这是我代码的其余部分。

from turtle import Turtle, Screen
def inside(point, rectangle):
x, y = point
# not efficient, just a quick solution
x1 = min(p[0] for p in rectangle)
y1 = min(p[1] for p in rectangle)
x2 = max(p[0] for p in rectangle)
y2 = max(p[1] for p in rectangle)
return x1 < x < x2 and y1 < y < y2
def not_safe(turtle):
position = turtle.position()
return inside(position, river) and not inside(position, bridge)
def winLine(turtle):
turtle.up()
turtle.color('red')
turtle.goto(-WIDTH / 2, 0)
turtle.down()
turtle.begin_poly()
turtle.begin_fill()
turtle.forward(WIDTH)
turtle.right(90)
turtle.forward(50)
turtle.right(90)
turtle.forward(WIDTH)
turtle.end_fill()
turtle.end_poly()
def win(turtle):
position = turtle.position()
return inside(position, winner)
def drawTree(t, sd):
for i in range(4):
layout.down()
t.forward(sd)
t.right(90)
layout.up()
def drawRiver(turtle):
turtle.color('darkblue', 'blue')
turtle.goto(-WIDTH / 2, 0)
turtle.begin_poly()
turtle.begin_fill()
turtle.forward(WIDTH)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
turtle.forward(WIDTH)
turtle.end_fill()
turtle.end_poly()
return turtle.get_poly()
def tree(branchLen,layout):
if branchLen > 6:
layout.down()
layout.forward(branchLen)
layout.right(20)
tree(branchLen-6,layout)
layout.left(40)
tree(branchLen-6,layout)
layout.right(20)
layout.backward(branchLen)
layout.up()
def main():
layout.speed('fastest')
layout.left(90)
layout.up()
layout.backward(100)
layout.down()
layout.color("brown")
tree(36,layout)
layout.right(90)
layout.up()

def drawBridge(turtle):
turtle.goto(150, 25)
turtle.color('rosybrown4', 'saddlebrown')
turtle.begin_poly()
turtle.begin_fill()
turtle.forward(100)
turtle.left(90)
turtle.forward(150)
turtle.left(90)
turtle.forward(100)
turtle.left(90)
turtle.end_fill()
turtle.end_poly()
return turtle.get_poly()
def drawPlanks(turtle):
layout.goto(149, -125)
for i in range(37):
layout.pensize(.1)
layout.down()
layout.color("black")
layout.forward(.3)
layout.left(90)
layout.forward(99)
layout.left(90)
layout.forward(.3)
layout.left(90)
layout.forward(99)
layout.left(90)
layout.up()
layout.forward(4)
layout.goto(149, 25)
layout.down()
layout.left(90)
layout.forward(100)
layout.pensize(.1)
layout.up()
layout.goto(149, -125)
layout.down()
layout.right(90)
layout.forward(151)
layout.up()
layout.goto(49, -125)
layout.down()
layout.forward(151)
wn = Screen()
wn.bgcolor('lightgreen')
WIDTH = wn.window_width()
layout = Turtle(visible=False)
layout.speed('fastest')
layout.penup()
river = drawRiver(layout)
bridge = drawBridge(layout)
planks = drawPlanks(layout)
winner= winLine(layout)
layout.up()
layout.right(90)
# Tree locations
layout.goto(222, 198)
main()
layout.goto(-334, 155)
main()
layout.goto(132, 140)
main()
layout.goto(50, -222)
main()
layout.goto(200, -122)
main()
layout.goto(-362,200)
main()
layout.goto(-222, 198)
main()
layout.goto(350, 350)
main()
layout.goto(-200, -150)
main()
layout.color("blue")
layout.goto(0, -50)
player = Turtle('arrow')
player.color('grey')
player.penup()
player.goto(0, -200)
player.setheading(90)

def k1():
player.forward(45)
if not_safe(player):
player.goto(0, -200)
player.setheading(90)
elif win(player):
player.goto(200, 100)
def k4():
player.back(45)
if not_safe(player):
player.goto(0, -200)
player.setheading(90)
elif win(player):
player.goto(200, 100)
def k2():
player.left(30)
def k3():
player.right(30)
wn.onkey(k1, "Up")
wn.onkey(k2, "Left")
wn.onkey(k3, "Right")
wn.onkey(k4, "Down")
wn.listen()
wn.mainloop()

您正在为这些变量分配一个多边形:

river = drawRiver(layout)
bridge = drawBridge(layout)
planks = drawPlanks(layout)
winner = winLine(layout)

但是,drawPlanks 和 winLine 这两个函数不返回多边形;它们默认返回None,分配给plankswinner;后来,当你在winner上调用inside时,它会传递None而不是polygon作为参数。您需要为这两个函数添加return turtle.get_poly()

def winLine(turtle):
turtle.up()
turtle.color('red')
turtle.goto(-WIDTH / 2, 0)
turtle.down()
turtle.begin_poly()
turtle.begin_fill()
turtle.forward(WIDTH)
turtle.right(90)
turtle.forward(50)
turtle.right(90)
turtle.forward(WIDTH)
turtle.end_fill()
turtle.end_poly()
return turtle.get_poly()      # <-- here

和:

def drawPlanks(turtle):
layout.goto(149, -125)
for i in range(37):
layout.pensize(.1)
layout.down()
layout.color("black")
layout.forward(.3)
layout.left(90)
layout.forward(99)
layout.left(90)
layout.forward(.3)
layout.left(90)
layout.forward(99)
layout.left(90)
layout.up()
layout.forward(4)
layout.goto(149, 25)
layout.down()
layout.left(90)
layout.forward(100)
layout.pensize(.1)
layout.up()
layout.goto(149, -125)
layout.down()
layout.right(90)
layout.forward(151)
layout.up()
layout.goto(49, -125)
layout.down()
layout.forward(151)
return turtle.get_poly()      # <-- and there

最新更新