2016-01-30 51 views
2

我想創建一個射擊類遊戲在Python龜(它基本上是遊戲的副本Boom dots)。但是我遇到很多問題,因爲我對編程很陌生。這一次onkey()命令不起作用。我嘗試了一切,但似乎沒有任何幫助。 我沒有收到任何回溯錯誤。只是當我按下分配給命令的按鈕時,定義的命令不起作用。代碼錯誤的命令onkey()

部分中,我懷疑問題是:

def cannon_left(): 
    cannon_x = cannon_x - 10 
    cannon.goto(cannon_x, 0) 

def cannon_right(): 
    cannon_x = cannon_x + 10 
    cannon.goto(cannon_x, 0) 

def reset1(): 
    live_score = 0 

整個代碼:

import random 
import turtle 

#images 
image_coconut = "Coconut.png" 
image_banana = "Banana.png" 
image_pineapple = "Pineapple.png" 
image_cannon = "Cannon.png" 

#definitions 
live_score = 0 
screen = turtle.Screen() 
wn = turtle.Screen() 
cannon = turtle.Turtle() 
enemy = turtle.Turtle() 
score = turtle.Turtle() 
background = turtle.Turtle() 
reset = turtle.Turtle() 
bullet = turtle.Turtle() 
enemy_x = enemy.xcor() 
enemy_y = enemy.ycor() 
cannon_x = 0 
move_speed = 2 
enemy1 = 0 

def cannon_shooting(x, y): 
    bullet.showturtle() 
    bullet.forward(280) 
    if bullet.ycor() == enemy_y - 10: 
    if not bullet.xcor() == enemy_x - 10: 
     if live_score == 0: 
     live_score = 0 
     else: 
     live_score = live_score + 1 
    if bullet.xcor() == enemy_x - 10: 
     live_score = live_score + 1 
     enemy1 = random.randint(1, 3) 
    bullet.hideturtle() 


#image adding 
screen.addshape(image_coconut) 
screen.addshape(image_banana) 
screen.addshape(image_pineapple) 
screen.addshape(image_cannon) 

def cannon_left(): 
    cannon_x = cannon_x - 10 
    cannon.goto(cannon_x, 0) 

def cannon_right(): 
    cannon_x = cannon_x + 10 
    cannon.goto(cannon_x, 0) 

def reset1(): 
    live_score = 0 

#setup 
bullet.hideturtle() 
bullet.speed(50) 
bullet.penup() 
bullet.shape('circle') 
bullet.goto(0, -140) 
bullet.left(90) 

enemy.speed(0) 
enemy.penup() 
enemy.hideturtle() 
enemy.goto(0, 140) 
screen.addshape(image_coconut) 
enemy.shape(image_coconut) 
enemy.showturtle() 

cannon.speed(0) 
cannon.penup() 
cannon.hideturtle() 
cannon.goto(0, -140) 
screen.addshape(image_cannon) 
cannon.shape(image_cannon) 
cannon.showturtle() 
cannon.left(90) 

score.speed(0) 
score.penup() 
score.hideturtle() 
score.goto(90, -190) 
score.color('white') 
score.write("Your score: %s" % live_score, font=(None, 11, "bold")) 

reset.speed(0) 
reset.penup() 
reset.hideturtle() 
reset.goto(-185, -190) 
reset.color('white') 
reset.write("Reset (R)", font=(None, 11, "bold")) 

#movement 
while True: 
    enemy.forward(move_speed) 
    if enemy.xcor() == 140: 
    enemy.left(180) 
    enemy.forward(move_speed) 
    if enemy.xcor() == -140: 
    enemy.right(180) 
    enemy.forward(move_speed) 
    if enemy1 == 1: 
     screen.addshape(image_banana) 
     enemy.shape(image_banana) 
    if enemy1 == 2: 
     screen.addshape(image_pineapple) 
     enemy.shape(image_pineapple) 
    if enemy1 == 3: 
     enemy.shape(image_coconut) 

#key presses 
wn.onkey(cannon_right, "D") 
wn.onkey(cannon_left, "A") 
wn.onkey(cannon_right, "Right") 
wn.onkey(cannon_left, "Left") 
wn.onkey(cannon_shooting, "SPACE") 
wn.onkey(reset1, "R") 

#others 
wn.listen() 
wn.mainloop() 

注:我在Trinket.io創建遊戲。點擊here轉至Trinket.io版本。

回答

1

Python是一種命令式編程語言。這意味着訂單事宜。這似乎是你的遊戲的主要邏輯聲明的onkey初始化部分作爲一個無限循環之前:

#movement 
while True: 
    enemy.forward(move_speed) 
    ... 

由於這種循環一直運行,這意味着將開始執行,代碼永遠也達不到的部分,其中你設置了鍵映射。

您需要循環中的代碼將此代碼放入函數中,並決定何時需要由Turtle調用它。您不應該將while True作爲函數的一部分,因爲已經存在由Turtle管理的主循環。

+0

謝謝。這有幫助。現在我可以移動大炮。但是敵人(又名椰子)停止移動。我該如何解決這個問題? – righteous