簡體   English   中英

無法擺脫 (_tkinter.TclError: bad event type or keysym "UP") 問題

[英]Couldn't get rid of (_tkinter.TclError: bad event type or keysym "UP") problem

我第一次運行 Linux mint。 我嘗試編寫一個 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()

這是錯誤

這段代碼有幾個問題,其中許多會使其無法正常運行:

mouse替代move

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

def left():
    move.left(45)

沒有分配作為boxsize不必要的global聲明:

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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM