微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PythonPygame及时产生

如何解决PythonPygame及时产生

我正在用Pygame制作游戏(我对python和Pygame还是很陌生,我知道一些基本知识,但这已经足够了),但是当我尝试生成敌人时,它们会在不同的时间出现(他们应该出现在同一行并同时向下移动)

这是给我麻烦的部分:

blocks_list = [enemy_pos]
block_speed = 10
gameover = False

def dropper(blocks_list):
    if len(blocks_list) <= random.randint(5,10):
        dropper.x_pos = (random.randint(1,13) * p_size) + 10
        dropper.y_pos = 0
        blocks_list.append([dropper.x_pos,dropper.y_pos])

def move_blocks():
    for enemy_pos in blocks_list:
        enemy_pos[1] = enemy_pos[1] + block_speed

def draw_blocks(blocks_list):
    long = len(blocks_list)
    print(long)
    
    for enemy_pos in blocks_list:
        pygame.draw.rect(screen,RED,(enemy_pos[0],enemy_pos[1],p_size,p_size))


def drawing(blocks_list):
    screen.fill(BLACK)

    draw_blocks(blocks_list)

    move_blocks()

While not gameover:
    drawing(blocks_list)

THIS are photos of what is happenning

como see deberia de ver

我尝试将其放入while循环中,以查看它是否一次全部显示

完整代码

#IMPORT THE IMPORTANT
import pygame
import sys
import random

pygame.init()



#screen size
SW = 320
SH = 600

#colors
RED = (255,0)
GREEN = (0,255,0)
BLUE = (0,255)
BLACK = (0,0)
WHITE = (255,255)

#Barier vars
barrier1x = SH/20
barrier1y = SH
barrier2x = SW
barrier2y = SH/20

#player vars
p_size = 20
p_x = (SW/2)-(p_size/2)
p_y = (SH/20 * 17)
p_speed = 20
screen = pygame.display.set_mode((SW,SH))

#falling? blocks vars
enemy_pos = [-30,0]
blocks_list = [enemy_pos]
block_speed = 10

gameover = False
clock = pygame.time.Clock()



#functions  
def draw_player():
    pygame.draw.rect(screen,GREEN,(p_x,p_y,p_size))

def dropper(blocks_list):
    if len(blocks_list) <= random.randint(5,dropper.y_pos])

def move_blocks():
    for enemy_pos in blocks_list:
        enemy_pos[1] = enemy_pos[1] + block_speed

def draw_blocks(blocks_list):
    long = len(blocks_list)
    a=1
    print(long)
    
    for enemy_pos in blocks_list:
        pygame.draw.rect(screen,p_size))
    
def barrier():
    pygame.draw.rect(screen,BLUE,(0,barrier1x,barrier1y))
    pygame.draw.rect(screen,barrier2x,barrier2y))
    pygame.draw.rect(screen,(SW-barrier1x,SH-barrier2y,barrier2y))

def collision_always():
    global p_x
    global p_y
    global gameover
    if p_x <= SW/20:
        p_x = p_x + p_speed
    if p_x >= SW-barrier1x:
        p_x = p_x - p_speed
    if p_y <= SW/20:
        p_y = p_y + p_speed
    if p_y >= SH - (SH/20):
        gameover = True;
        print("u ded");

def drawing(blocks_list):
    screen.fill(BLACK)

    barrier()
    
    draw_player()
    
    draw_blocks(blocks_list)

    move_blocks()

    pygame.display.update()

def controls():
    global p_y
    global p_x
    global p_speed
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                p_x = p_x - p_speed
            elif event.key == pygame.K_RIGHT:
                p_x = p_x + p_speed
            elif event.key == pygame.K_UP:
                p_y = p_y - p_speed
            elif event.key == pygame.K_DOWN:
                p_y = p_y + p_speed



#main loop
while not gameover:

    dropper(blocks_list)

    controls()

    collision_always()

    drawing(blocks_list)
    
    clock.tick(30)
    

    

解决方法

由于每次循环迭代都调用[ { "_index":"tags","_type":"_doc","_id":"s0tOBHUBeQiv5rwb5JPA","_score":0.6931472,"_source":{ "tags_slug":"term_a" },"matched_queries":[ <--- "term_a" ] },{ "_index":"tags","_id":"tEtPBHUBeQiv5rwbAZPt","_source":{ "tags_slug":"term_b" },"matched_queries":[ <--- "term_b" ] } ] ,所以它会不断向屏幕添加敌人。如果在一个迭代中添加一些敌人,它们会下降一点,然后在下一个循环迭代中添加更多的敌人,它们将比上一个迭代中创建的敌人更高。 dropper(blocks_list)意味着不一定会在第一次迭代中添加所有敌人。每次迭代都会添加一个随机量。

因此,为了使所有敌人同时掉落,一种选择是在开始循环之前立即将所有敌人全部添加。例如将if len(blocks_list) <= random.randint(5,10)移到dropper(blocks_list)上方。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。