gpt4 book ai didi

python - 我无法在Python太空入侵者游戏中射击时移动我的角色(使用Zelle图形包)

转载 作者:太空宇宙 更新时间:2023-11-03 19:59:58 25 4
gpt4 key购买 nike

我必须使用 Zelle 图形包为我的中级 Python 类制作一个太空入侵者游戏。我在射弹方面遇到了一些问题,它将运行代码,射击子弹,并继续移动子弹,但是当子弹移动时,我无法移动角色。我认为这是一个非常简单的问题,但我的编程经验还不够。谢谢。

from graphics import *
from time import *
game_over = False
win = GraphWin("skulls and bones", 500, 500)
skull = Image(Point(250, 450), "skull_2.gif")
skull.draw(win)
bullet = Circle(Point(250, 250), 10)
bullet.setFill("red")


def bone():
value = 0
key = win.getKey()
if key == "x":
bullet.draw(win)
return bullet


def space_ship_move():
key = win.getKey()
if key == "a":
skull.move(-10, 0)
if key == "d":
skull.move(10, 0)
if key == "x":
bone()
for i in range(100):
sleep(1)
bone().move(0, -5)
return key


while not game_over:
space_ship_move()'''

最佳答案

有两个问题:首先,win.getKey() 会阻塞,直到用户按下某个键。您不想这样做 - 请使用 win.checkKey()。其次,您需要将动画和输入处理分离,因为您希望子弹在没有输入的情况下也能移动。您可以使用以下结构来完成此操作:

def space_ship_move():       
handle_input()
animate()
sleep(0.1)

handle_input() 大部分是您已经拥有的内容:

bullet = None
bulletAnimStep = -1

def bone():
global bullet, bulletAnimStep

if bullet is not None:
bullet.undraw()
bullet = Circle(Point(250, 250), 10)
bullet.setFill("red")
bullet.draw(win)
bulletAnimStep = 0

def handle_input():
key = win.checkKey()
if key == "a":
skull.move(-10, 0)
if key == "d":
skull.move(10, 0)
if key == "x":
bone()

我认为 bone() 应该负责创建新的子弹。这就是当前函数的作用。它还将 bulletAnimStep 设置为 0,表示我们正处于子弹动画的开头。我们的 animate() 可以使用该信息来决定何时停止子弹动画。它看起来是这样的:

def animate():
global bulletAnimStep

#animate bullet
if bulletAnimStep >= 0:
bulletAnimStep += 1
bullet.move(0, -5)
if bulletAnimStep >= 100:
#the bullet has gone far enough
bullet.undraw()
bulletAnimStep = -1

关于python - 我无法在Python太空入侵者游戏中射击时移动我的角色(使用Zelle图形包),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59308083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com