gpt4 book ai didi

python - 如何在用 Python 编写的游戏中发射无限子弹?

转载 作者:太空宇宙 更新时间:2023-11-04 05:49:51 25 4
gpt4 key购买 nike

我的游戏代码很长,但我会粘贴重要的部分,即子弹射击部分。该游戏本质上是一款真人快打式的游戏,但带有飞行机器人和子弹。

在游戏循环之前,我首先为子弹和机器人预定义函数:

                def robotr(xr,yr):
gameDisplay.blit(robrimg, (xr,yr))

def robotl(xl,yl):
gameDisplay.blit(roblimg, (xl,yl))

def bulletsr(xbr,ybr):
pygame.draw.circle(gameDisplay, THECOLORS['orange'],(xbr,ybr), 10)

def bulletsl(xbl,ybl):
pygame.draw.circle(gameDisplay, THECOLORS['orange'],(xbl,ybl), 10)

然后是移动物体的众多变量:

                xr = 929
yr = 250
xl = 250
yl = 250
####
xbr=950
ybr=300
xbl=380
ybl=300
#####
xbr_change = 0
ybr_change = 0
ybl_change = 0
xbl_change = 0
####
xr_change = 0
yr_change = 0
xl_change = 0
yl_change = 0
robotr_speed = 3000
robotl_speed = 3000

在那之后,代码运行了很长时间(大约多了 300-400 行),但是到了我射出子弹的地方,我有一个这样的事件来表示子弹随着机器人“移动”用箭头键移动。:

                            if event.type == pygame.KEYDOWN:
#-------PLAYER 1 MOVEMENT-------
#OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
if event.key == pygame.K_a:
xr_change = -5
xbr_change = -5 #I have to change the position of the bullet as well so that it doesn't stay in one place and rather shoots from the robot (duh.)

然后是一个类似的代码来发射子弹:

                                #-------FIRE CANNON MK1-------
#OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
if event.key == pygame.K_LSHIFT:
bulletsfx=pygame.mixer.Sound ('boomchickchickmp3.ogg')
bulletsfx.play()
bulletsfx.set_volume(0.2)
xbl_change = 5
if xbl_change == 5:
bulletsl(xbl,ybl)
xbl=xl

当然,右边的机器人我也多次定义了这样的代码。

在我的程序接近尾声时(这是我结束的简短形式,因为我有额外的变量所以东西不会从屏幕上掉下来,但现在忽略它)我有这样的代码所以我可以重新定义更改回“0”以便可以重复使用移动等等:

                            if event.type == pygame.KEYUP:
#Player 1 events
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT or event.key == pygame.K_UP or event.key == pygame.K_DOWN or event.key == pygame.K_RCTRL or event.key == pygame.K_DELETE: #or event.key == pygame.K_RSHIFT:
xr_change = 0
yr_change = 0
xbr_change= 0
ybr_change= 0
#Player 2 events
if event.key == pygame.K_a or event.key == pygame.K_d or event.key == pygame.K_w or event.key == pygame.K_s or event.key == pygame.K_LCTRL or event.key == pygame.K_f: #or event.key == pygame.K_LSHIFT:
xl_change = 0
yl_change = 0
xbl_change= 0
ybl_change= 0





##
xr += xr_change
yr += yr_change
xl += xl_change
yl += yl_change
##
xbr += xbr_change
ybr += ybr_change
xbl += xbl_change
ybl += ybl_change
##
bulletsr(xbr,ybr)
bulletsl(xbl,ybl)
robotr(xr,yr)
robotl(xl,yl)

pygame.display.update()
clock.tick(320)

现在我的问题是,当我发射子弹时,它会发射,但我只能发射一次,直到它从我的程序屏幕上消失(没关系,我做到了,所以一旦它消失它就会返回机器人屏幕也是如此)。否则,如果我一直按这个键射击,它只是将子弹坐标返回到它原来应该在的位置(就像我射击,如果我再次射击,我可以看到子弹消失回到它原来的位置)。

子弹的数量不是无限的,我想知道如何修改函数和一些变量(可能)来实现这一点。

最佳答案

您需要在缺少的代码中使用 Sprite 。它也可以在没有 Sprite 的情况下完成,但这将是一项艰巨的任务。

  1. 做一类子弹,这样你就可以用它做不同的物体。
  2. 在每次按下射击按钮时为子弹对象创建一个实例并不断更新它。
  3. 在更新方法中,您将使子弹移动。
  4. 最后一步是在子弹对象离开屏幕后将其销毁。一种简单的方法是放置一个 if 语句来检查是否达到了特定的 x 或 y 长度,如果是,则删除该 Sprite 或对象(在本例中为项目符号)。

这是我使用的项目符号类的示例。在此假设字符位于屏幕底部并向上发射子弹 y += -10

class Bullet(pygame.sprite.Sprite):
def __init__(self):
super(Bullet, self).__init__()
self.image = pygame.Surface([10,40])
self.image.fill(RED)
self.rect = self.image.get_rect()

def update(self):
self.rect.y -= 10

如果您仍然需要查看完整图片,可以在此处查看我的代码:https://github.com/deepaksandhu/SpaceTurds/blob/master/game.py

这里还有一个制作子弹的优秀教程: http://programarcadegames.com/python_examples/show_file.php?file=bullets.py

关于python - 如何在用 Python 编写的游戏中发射无限子弹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30770897/

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