Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我的产卵系统没有';我不工作,也不知道为什么_Python_Pygame_Spawning - Fatal编程技术网

Python 我的产卵系统没有';我不工作,也不知道为什么

Python 我的产卵系统没有';我不工作,也不知道为什么,python,pygame,spawning,Python,Pygame,Spawning,简单地说,我的产卵系统不工作 我正在做一个闪避方块游戏,我希望5分中有1分是空的,这样玩家就可以闪避其他人。当然,这一点是随机的。我试着改变数字,看看我的一些老游戏和类似的游戏,但没有任何效果 编辑:我发布了另外两个文件,这样你就可以运行游戏了。我不认为它们是问题的一部分,因为它们不包含任何与产卵过程相关的内容 这里是我的主要文件: import pygame as pg import random from sprites import * from game_options import *

简单地说,我的产卵系统不工作

我正在做一个闪避方块游戏,我希望5分中有1分是空的,这样玩家就可以闪避其他人。当然,这一点是随机的。我试着改变数字,看看我的一些老游戏和类似的游戏,但没有任何效果

编辑:我发布了另外两个文件,这样你就可以运行游戏了。我不认为它们是问题的一部分,因为它们不包含任何与产卵过程相关的内容

这里是我的主要文件:

import pygame as pg
import random
from sprites import *
from game_options import *

class Game:
    def __init__(self):
        pg.init()   
        pg.mixer.init()
        self.screen = pg.display.set_mode((WIDTH, HEIGHT))
        pg.display.set_caption("BRUH")
        self.clock = pg.time.Clock()
        self.running = True

    def new(self):
        self.SPAWNENEMIES = 1
        self.my_event = pg.event.Event(self.SPAWNENEMIES)
        pg.event.post(self.my_event)
        pg.time.set_timer(self.SPAWNENEMIES, 3000)

        self.spawnpoint1 = 20, -80
        self.spawnpoint2 = 140, -80
        self.spawnpoint3 = 260, -80
        self.spawnpoint4 = 380, -80
        self.spawnpoint5 = 500, -80
        self.spawnpoints = (self.spawnpoint1,self.spawnpoint2,self.spawnpoint3,self.spawnpoint4,self.spawnpoint5)

        self.all_sprites = pg.sprite.Group()
        self.blocks = pg.sprite.Group()
        self.player = Player()
        self.all_sprites.add(self.player)
        self.all_sprites.add(self.blocks)
        g.run()


    def run(self):
        self.running = True
        while self.running:
            self.clock.tick(FPS)
            self.events()
            self.update()
            self.draw()

    def update(self):
        self.all_sprites.update()

    def events(self):
        for event in pg.event.get():
            if event.type == pg.QUIT:
                self.running = False

            if event.type == self.SPAWNENEMIES:
                num = random.randint(0,len(self.spawnpoints))
                #print(num)
                for i in range(5):
                    if num != i:
                        print(i)
                        self.block = Block(self.spawnpoints[i])
                        self.blocks.add(self.block)
                        self.all_sprites.add(self.blocks)    


        dead_blocks = pg.sprite.spritecollide(self.player, self.blocks, True)

        # if dead_blocks:
        #     self.running = False

    def draw(self):
        self.screen.fill(MY_RED)
        self.all_sprites.draw(self.screen)
        pg.display.flip()

g = Game()
while g.running:
    g.new()
g.quit()
下面是game_options.py:

WIDTH = 580
HEIGHT = 800
FPS = 30

# Simple colors
WHITE = (255,255,255)
BLACK = (0,0,0)
GREEN = (0,255,0)
BLUE = (0,0,255)
RED = (255,0,0)
MY_RED = (255, 67, 67)
GREY = (108,106,106)
还有雪碧

import pygame as pg
from game_options import *

class Player(pg.sprite.Sprite):
    def __init__(self):
        pg.sprite.Sprite.__init__(self)
        self.image = pg.Surface((70,70))
        self.image.fill(WHITE)
        self.rect = self.image.get_rect()
        self.rect.center = (WIDTH/2, HEIGHT - 100)
        self.speedx = 0

    def update(self):
        keystate = pg.key.get_pressed()

        if keystate[pg.K_LEFT]:
            self.speedx += -30

        if keystate[pg.K_RIGHT]:
            self.speedx += 30

        self.rect.x = self.speedx

class Block(pg.sprite.Sprite):
    def __init__(self,position):
        pg.sprite.Sprite.__init__(self)
        self.image = pg.Surface((100,70))
        self.image.fill(GREY)
        self.rect = self.image.get_rect()
        self.rect.center = position
        self.speedy = 20

    def update(self):
        self.rect.y += self.speedy

        if self.rect.x > HEIGHT:
            self.kill()
我希望5分中有1分是空的,但由于某种原因,当我运行游戏时,第一批精灵总是没有空的空间。与此同时,比赛继续进行,并取得了预期的结果。没有错误消息


任何帮助都将不胜感激

我对pygame不熟悉,但我不知道一旦通过闪避块,你会在哪里重置这些块。我猜,每次你在现有的积木上添加积木时,它们都会在旧积木上重新绘制,因此不容易确定每次跑步时是否有大量积木倾泻而下

添加一个打印(self.blocks)就可以证明我的猜测:D

...
<Group(15 sprites)>
<Group(19 sprites)>
<Group(23 sprites)>
...
。。。
...
精灵的第一波总是没有空的空间

这是由于:

self.SPAWNENEMIES = 1
将其更改为:

self.SPAWNENEMIES = pg.USEREVENT
事件的id是一个整数。pygame事件系统使用一组整数来识别普通动作(鼠标移动或按钮单击、按键等)。正如文件所说:

用户定义的事件的值应在USEREVENT到NumeEvents-1的范围内

您不应该将
self.com
定义为1,因为1是另一种类型的事件(不确定实际是哪一种),这会造成混乱和意外行为。
似乎在你的例子中,你的V事件实际上被发布了多次,特别是在开始的时候,所以你有两个波叠加。除非碰巧两个波在同一位置都有缺失的块,否则您将看到5个块


另一件您应该解决的问题是:

num = random.randint(0,len(self.spawnpoints))
应该是:

num = random.randint(0,len(self.spawnpoints)-1)
或者,或者:

num = random.randrange(0,len(self.spawnpoints))
职能:


返回一个随机整数N,使a看起来无法正确格式化。有那么大的问题吗?好的,我做了,但有点糟糕,我修复了你的压痕。顺便说一句,试着发布一个(我知道用游戏创建MCVE很困难,但是试着删除所有不必要的东西)。我们无法尝试您的代码,因为缺少
精灵
游戏选项
,如果您将它们发布在此处,恐怕需要检查的代码太多。感谢您修复格式!很抱歉,在上传之前我试着做了一个MCVE,正如stackoverflow向导告诉我的,但我就是做不到。另外,我还发布了其他文件,这些文件没有那么大,或者与繁殖有关。OP正在杀死
Block
类的
update
方法中的精灵,一旦它们超过阈值。实际上这里有一个错误:如果self.rect.y>HEIGHT,则应该是
,而不是
self.x
。所以,是的,他/她实际上并没有杀死他们。哦,那是个打字错误。我要把它改成self.rect。y@M.Michalopoulos我修正了我的答案,很抱歉我之前没抓住要点。谢谢两个修正!产卵系统现在工作正常了!:D