Не удалось избавиться от проблемы (_tkinter.TclError: неверный тип события или "UP"). - PullRequest
0 голосов
/ 29 января 2020

Я впервые запускаю Linux монетный двор. Я пытался кодировать проблему python, но в течение двух дней у меня постоянно возникают проблемы из-за интерфейса Linux, пожалуйста

Это мой код: -

    import turtle
    import time
    boxsize=200
    caught=False
    score=0
    #function that are called in keypress
    def up():
        mouse.forward(10)
        checkbound()

    def left():
        move.left(45)

    def right():
        move.right(45)

    def back():
        mouse.backward(10)
        checkbound()

    def quitTurtles():
        window.bye()
    #stop the mouse from leaving the square set size
    def checkbound():
        global boxsize
        if mouse.xcor()>boxsize:
            mouse.goto(boxsize, mouse.ycor())
        if mouse.xcor()<-boxsize:
             mouse.goto(-boxsize, mouse.ycor())
        if mouse.ycor()>boxsize:
            mouse.goto(mouse.xcor(),boxsize)

        if mouse.ycor()<-boxsize:
            mouse.goto(mouse.xcor(),-boxsize)

    #set up screen
    window=turtle.Screen()
    mouse=turtle.Turtle()
    cat=turtle.Turtle()
    mouse.penup()
    mouse.penup()
    mouse.goto(100,100)

    #add key listeners
    window.onkeypress(up ,'UP')
    window.onkeypress(right ,'left')
    window.onkeypress(left ,'Right')
    window.onkeypress(back ,'DOWN')
    window.onkeypress(quitTurtles, "Escape")

    difficulty=window.numinput("difficulty","Enter a difficulty from 1 to 5",minval=1,maxval=5)
    window.listen()
    #main loop
    #note how it changes with difficulty
    while not caught:
        cat.setheading(cat.towards(mouse))
        cat.forward(8+diffficulty)
        score=score+1
        if cat.distance(mouse)<5:
            caught=true

        time.sleep(0.2-(0.1*difficulty))
    window.textinput("GAME OVER","WELL DONE YOU SCORED:"+str(score*difficulty))
    window.bye()

and this the error

1 Ответ

0 голосов
/ 29 января 2020

У этого кода есть несколько проблем, многие из которых будут препятствовать его правильной работе:

Подставлено move для mouse:

def up():
    mouse.forward(10)
    checkbound()

def left():
    move.left(45)

Ненужное global объявление как boxsize не назначено:

def checkbound():
    global boxsize

В коде копировать-вставить не изменилось mouse на cat:

mouse=turtle.Turtle()
cat=turtle.Turtle()
mouse.penup()
mouse.penup()

Переменная difficulty не пишется последовательно:

    cat.forward(8+diffficulty)
    time.sleep(0.2-(0.1*difficulty))

Неправильный регистр для логического значения:

 caught=true

Как отмечалось в комментариях, общее несоответствие в регистре имен ключей:

window.onkeypress(right ,'left')
window.onkeypress(left ,'Right')
window.onkeypress(back ,'DOWN')

Проблемы с изображением большего размера использование sleep() в управляемой событиями среде и отсутствие нарисованных границ, чтобы игрок знал пределы. Вместо того, чтобы решать эти проблемы один за другим в SO вопросах, давайте переработаем этот код, чтобы он работал в среде событий черепахи и играл как игра:

from turtle import Screen, Turtle

BOX_SIZE = 600

# functions that are called in keypress
def up():
    mouse.forward(15)
    checkbound()

def left():
    mouse.left(45)

def right():
    mouse.right(45)

def back():
    mouse.backward(15)
    checkbound()

def checkbound():
    ''' stop the mouse from leaving the square set size '''

    if mouse.xcor() > BOX_SIZE/2:
        mouse.goto(BOX_SIZE/2, mouse.ycor())
    elif mouse.xcor() < -BOX_SIZE/2:
        mouse.goto(-BOX_SIZE/2, mouse.ycor())

    if mouse.ycor() > BOX_SIZE/2:
        mouse.goto(mouse.xcor(), BOX_SIZE/2)
    elif mouse.ycor() < -BOX_SIZE/2:
        mouse.goto(mouse.xcor(), -BOX_SIZE/2)

def move():
    global score

    cat.setheading(cat.towards(mouse))
    cat.forward(2 * difficulty)
    score += 1

    if cat.distance(mouse) < 5:
        screen.textinput("GAME OVER", "WELL DONE YOU SCORED: {}".format(score * difficulty))
        screen.bye()
    else:
        screen.ontimer(move, 200 - 100 * difficulty)

score = 0

# set up screen
screen = Screen()

marker = Turtle()
marker.hideturtle()
marker.penup()
marker.goto(-BOX_SIZE/2, -BOX_SIZE/2)
marker.pendown()
for _ in range(4):
    marker.forward(BOX_SIZE)
    marker.left(90)

difficulty = int(screen.numinput("difficulty", "Enter a difficulty from 1 to 5", minval=1, maxval=5))

cat = Turtle()
cat.shapesize(2)
cat.penup()

mouse = Turtle()
mouse.penup()
mouse.goto(200, 200)

# add key listeners
screen.onkeypress(up, 'Up')
screen.onkeypress(right, 'Left')
screen.onkeypress(left, 'Right')
screen.onkeypress(back, 'Down')
screen.onkeypress(screen.bye, 'Escape')
screen.listen()

screen.ontimer(move, 1000)  # give player a chance to move hand from keyboard to mouse

screen.mainloop()
...