2017-11-29 12 views
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() 
+1

? 아마 당신은'rectangle'에 하나의 요소를 가지고있을 것입니다 만,'min (p의 사각형에 p)에'list에 그것을 사용합니다. 'print (rectangle)'또는'print (type (rectangle))'을 사용하여 검사 할 수 있습니다. – furas

+1

변수'finish = ...'와 함수'def finish (...)'를 가지고 있습니다 -'inside (..., finish)'를 사용할 때 문제가됩니다. '. 'inside (..., finish)'에서'finish' 대신 다른 것을 사용해야합니다. – furas

답변

0

이러한 변수에 다각형을 할당하는 기본값으로 및 winner에 할당 된 None을 반환합니다. 나중에 insidewinner에 호출하면 polygon 대신에 None이 전달됩니다. 당신은이 두 기능 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 

과 :

오류의 마지막 줄에 'rectangle`은 무엇
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