Python 随机产生敌人

Python 随机产生敌人,python,random,pygame,Python,Random,Pygame,我正在制作一个小的2d游戏,目标是尽可能多地吃粪便,但是我在随机的时间里很难产生粪便。我希望粪便在敌人的y位置产卵,然后像rpg一样向前射击 导入pygame 从pygame.locals导入* 从numpy.random导入rand pygame.init() pygame.display.set_标题(‘臭甲虫’) 屏幕宽度=800 屏幕高度=600 游戏运行=正确 pl_x=int(屏幕宽度/10) pl_y=int(屏幕高度/2) pl_宽度=80 pl_高度=40 pl_等级=30 e

我正在制作一个小的2d游戏,目标是尽可能多地吃粪便,但是我在随机的时间里很难产生粪便。我希望粪便在敌人的y位置产卵,然后像rpg一样向前射击

导入pygame
从pygame.locals导入*
从numpy.random导入rand
pygame.init()
pygame.display.set_标题(‘臭甲虫’)
屏幕宽度=800
屏幕高度=600
游戏运行=正确
pl_x=int(屏幕宽度/10)
pl_y=int(屏幕高度/2)
pl_宽度=80
pl_高度=40
pl_等级=30
en_宽度=80
en_高度=40
en_x=屏幕宽度-屏幕宽度/10-屏幕宽度
en_y=int(屏幕高度/2)
en_yvel=-10
po_宽度=50
po_高度=30
po_x=720
po_y=en_y
po_xvel=15
screen=pygame.display.set_模式((屏幕宽度、屏幕高度))
clock=pygame.time.clock()
运行游戏时:
时钟滴答(10)
po_延迟=兰特(1)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
游戏运行=错误
如果event.type==MOUSEBUTTONDOWN:
如果event.button==4且pl_y>pl_vel:
pl_y-=pl_水平
elif event.button==5且pl_y<屏幕高度-pl_宽度:
pl_y+=pl_水平
如果po_延迟<0.01:
船尾(Pou_x,Pou_y)
en_y+=en_yvel
如果en_y=屏幕高度-en_高度:
en_yvel=-en_yvel
屏幕填充((0,0,0))
pygame.draw.rect(屏幕,(105255125),(像素x,像素y,像素宽度,像素高度))
pygame.display.update()
pygame.draw.rect(屏幕,(255、125、115),(en_x、en_y、en_宽度、en_高度))
pygame.display.update()
pygame.quit()

您可以使用pygame的时间模块随机生成敌人。我假设您正在为此使用OOP。首先,当初始化敌人类时,记录它第一次生成的时间

class Enemy:
    def __init__(self):
        self.start = time.time()
        # other code
然后你可以计算出自从你的敌人上次开火以来经过的时间。您可以在主游戏循环中执行类似于
now=time.time()
的操作,并获得差异

enemy = Enemy()
while True:
    now = time.time()
    time_passed = now - enemy.start()
现在,您可以将此
时间\u passed
用作您可能创建的
spawn\u buy()
函数的参数,该函数可能如下所示:

def spawn(self, t):
   counter = t % random.randint(1, 10)
   if counter >= 0 and counter <=  0.2:
       #spawn enemy
def spawn(self,t):
计数器=t%random.randint(1,10)

如果计数器>=0且计数器如果要管理多个“便池”,则必须创建一个列表。每个“poop”都是一个对象(对象的实例)

用板条箱装一个类
船尾
,它可以
更新位置并
绘制船尾:

class Poop:
    def __init__(self, x, y, w, h):
        self.rect = pygame.Rect(x, y-h//2, w, h)
        self.vel = -15
    def update(self):
        self.rect.x += self.vel
    def draw(self, surf):
        pygame.draw.rect(surf, (255, 200, 125), self.rect)

poops = []
使用计时器事件生成粪便。用于重复创建一个。时间以毫秒为单位设置。设置随机时间,例如,将时间设置在0.5到4秒之间(当然,您可以选择自己的时间间隔):

min_time,max_time=5004000 0.5秒到4秒
spawn_event=pygame.USEREVENT+1
pygame.time.set_计时器(生成事件,随机.randint(最小时间,最大时间))
注意,在pygame中可以定义客户事件。每个事件都需要一个唯一的id。用户事件的id必须从
pygame.USEREVENT
开始。在本例中,
pygame.USEREVENT+1
是计时器事件的事件id,该事件会生成poops

当事件在事件循环中发生时,创建一个新的poop,并设置一个新的随机时间:

pygame.event.get()中事件的
:
# [...]
如果event.type==spawn\u事件:
pygame.time.set_计时器(生成事件,随机.randint(最小时间,最大时间))
poops.append(Poop(en_x,en_y+en_yvel+en_height//2,50,30))
在循环中更改粪便的位置,如果它们离开左侧的窗口,则将其从列表中删除:

用于便池中的便池[:]:
poop.update()
如果船尾正右舷:
pl_y-=pl_水平
elif event.button==5且pl_y<屏幕高度-pl_宽度:
pl_y+=pl_水平
如果event.type==spawn\u事件:
pygame.time.set_计时器(生成事件,随机.randint(最小时间,最大时间))
poops.append(Poop(en_x,en_y+en_yvel+en_height//2,50,30))
en_y+=en_yvel
如果en_y=屏幕高度-en_高度:
en_yvel=-en_yvel
对于便池中的便池[:]:
poop.update()

如果大便正确,到目前为止你试过什么?有什么效果吗?似乎您在随机帧期间调用了
poop(po_x,po_y)
函数,这个
poop()函数做什么?你如何把粪便移到屏幕上?如果你能更详细地解释你现在正在做什么,下一步你会遇到什么问题,我们可以更容易地帮助你解决这个问题!我尝试过几种方法,比如,如果随机生成的数字低于某个阈值,它会生成一个show_poop变量。我得到的是true,poop函数只是另一次失败的尝试,我尝试创建一个包含关于poop的所有信息的函数,然后如果随机生成的数字低于阈值,我将调用该函数。