0
승리와 마무리가 관련된 모든 것을 넣기 전까지는 모든 것이 잘 작동했습니다. 이전에 작동했던 코드, 이제는 반복 할 수 없습니다. 일어날 일은 그들이지도에서 다른 곳으로가는 특정 거리를 가로 질렀을 때입니다. 나는 다른 것을 입어도 상관 없습니다. 이것은 단지 시험입니다. 오류 코드가 계속 표시됩니다.경계가 아닌 벽을 만드는 Python 거북이 게임. NoneType 오류 코드 (반복 가능하지 않음)를 수정했습니다.
`Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Program Files\Python36\lib\tkinter\__init__.py", line 1699, in
__call__
return self.func(*args)
File "C:\Program Files\Python36\lib\turtle.py", line 686, in eventfun
fun()
File "E:\Home made game\original.py", line 183, in k1
elif win(player):
File "E:\Home made game\original.py", line 37, in win
return inside(position, winner)
File "E:\Home made game\original.py", line 7, in inside
x1 = min(p[0] for p in rectangle)
TypeError: 'NoneType' object is not iterable'
다음은 나머지 코드입니다. 그러나
river = drawRiver(layout)
bridge = drawBridge(layout)
planks = drawPlanks(layout)
winner = winLine(layout)
, 두 기능 drawPlanks 및 winLine는 다각형을 반환하지 않습니다 :
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()
? 아마 당신은'rectangle'에 하나의 요소를 가지고있을 것입니다 만,'min (p의 사각형에 p)에'list에 그것을 사용합니다. 'print (rectangle)'또는'print (type (rectangle))'을 사용하여 검사 할 수 있습니다. – furas
변수'finish = ...'와 함수'def finish (...)'를 가지고 있습니다 -'inside (..., finish)'를 사용할 때 문제가됩니다. '. 'inside (..., finish)'에서'finish' 대신 다른 것을 사용해야합니다. – furas