[英]How to run a class or function per key in a python turtle game?
當我按下向左或向右按鈕時,我的角色應該向左或向右射擊,而在游戲開始時,我的角色將射擊。 當我嘗試按向左或向右時,什么也沒有發生。 當“球”撞到汽車上時,它應該消失了。希望有人能幫忙!
import turtle, random, math, time, os, sys
from pygame import mixer
from tkinter import *
def main():
mixer.init()
WIDTH = 800
HEIGHT = 600
fenster = turtle.Screen()
fenster.setup(WIDTH, HEIGHT,0,0)
fenster.title("Crossy Road von Julian")
fenster.bgpic('back.gif')
fenster.tracer(0)
colors = ["white", "orange", "yellow", "blue", "gray"]
images = ["a.gif", "b.gif", "c.gif", "p.gif", "f.gif"]
music = ["m.waf"]
sound1 = mixer.Sound("m.wav")
sound1.play()
for image in images:
turtle.register_shape(image)
class Bus(turtle.Turtle):
def __init__(self):
super(Bus, self).__init__()
self.penup()
self.shape("square")
self.shapesize(4,40)
self.pencolor("white")
self.setpos(0, -260)
self.in_game_speed = 0
def update(self):
self.goto(self.xcor() + self.in_game_speed, self.ycor())
if self.xcor() > WIDTH:
self.setx(-600)
self.fillcolor("Gray")
class ShootLeft(turtle.Turtle):
def __init__(self):
super(ShootLeft, self).__init__()
self.penup()
self.shape("circle")
self.shapesize(0.5)
self.pencolor("white")
self.fillcolor("white")
self.setpos(0,-200)
self.directions = ["left"]
self.direction = "left"
self.in_game_speed = 0.3
def update(self):
self.goto(self.xcor() - self.in_game_speed, self.ycor())
class ShootRight(turtle.Turtle):
def __init__(self):
super(ShootRight, self).__init__()
self.penup()
self.shape("circle")
self.shapesize(0.5)
self.pencolor("white")
self.fillcolor("white")
self.setpos(0,-200)
self.directions = ["right"]
self.direction = "right"
self.in_game_speed = 0.3
def update(self):
self.goto(self.xcor() + self.in_game_speed, self.ycor())
class Auto(turtle.Turtle):
def __init__(self):
super(Auto, self).__init__()
self.penup()
self.shape("square")
self.shapesize(2,5)
self.directions = ["left", "right"]
self.direction = "left"
self.in_game_speed = 0.2
def is_collision(self, other):
a = self.xcor() - other.xcor(self)
b = self.ycor() - other.ycor(self)
distance = math.sqrt((a**2) + (b**2))
if distance < 25:
return True
else:
return False
def update(self):
if self.is_collision(ShootLeft):
pass
if self.is_collision(ShootRight):
pass
if self.direction == "right":
self.goto(self.xcor() + self.in_game_speed, self.ycor())
else:
self.goto(self.xcor() - self.in_game_speed, self.ycor())
class Spieler(turtle.Turtle):
def __init__(self, auto):
super(Spieler, self).__init__()
self.penup()
self.shape("p.gif")
self.shapesize(1,1)
self.setpos(0, -200)
self.in_game_speed = 4.3
self.speed(0)
self.score = 0
def right(self):
self.goto(self.xcor() + self.in_game_speed, self.ycor())
def left(self):
self.goto(self.xcor() - self.in_game_speed, self.ycor())
def up(self):
self.goto(self.xcor(), self.ycor() + self.in_game_speed)
def down(self):
self.goto(self.xcor(), self.ycor() - self.in_game_speed)
def powershell(self):
os.system('start powershell.exe')
def is_collision(self, other):
a = self.xcor() - other.xcor()
b = self.ycor() - other.ycor()
distance = math.sqrt((a**2) + (b**2))
if distance < 25:
return True
else:
return False
def update(self):
for auto in group_1:
if self.is_collision(auto):
sys.exit()
group_1 = []
for auto in range(1):
auto = Auto()
auto.sety(-200)
auto.setx(900)
auto.in_game_append = 1
auto.shape("a.gif")
group_1.append(auto)
bus = Bus()
sl = ShootLeft()
sr = ShootRight()
spieler = Spieler(auto)
turtle.listen()
fenster.onkeypress(spieler.right,"d")
fenster.onkeypress(spieler.left,"a")
fenster.onkeypress(spieler.powershell,"p")
running = True
while running:
fenster.update()
spieler.update()
for auto in group_1:
auto.update()
bus.update()
fenster.onkeypress(sl.update(),"Left")
fenster.onkeypress(sr.update(),"Right")
turtle.mainloop()
main()
sl向左射擊,sr向右射擊
問題是這兩行:
fenster.onkeypress(sl.update(),"Left")
fenster.onkeypress(sr.update(),"Right")
首先,它們不需要處於循環中-在循環足夠之前調用它們一次。 其次,它們的第一個參數應該是要調用的函數,而不是被調用的函數。 由於sl
和sr
不返回函數,因此將是:
fenster.onkeypress(sl.update, "Left")
fenster.onkeypress(sr.update, "Right")
running = True
while running:
還有其他問題,但這似乎解決了您的直接問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.