pygame随机精灵生成

时间:2020-08-18 10:05:56

标签: python pygame

使用下面的代码,我只会产生1个敌人。它落在随机的x坐标上,但是没有更多了。即使我在循环之前创建了一个敌人列表。

代码:

import pygame
import sys
import random

pygame.init()
        
#MAIN GAME

game_screen = pygame.display.set_mode((600, 600))
pygame.display.set_caption("Beer Goggles")

bg = pygame.image.load("bg.png")
bg_image = pygame.transform.scale(bg, (600, 600))

class Object:
    def __init__(self, image_path, width, height, x, y):

        self.image_path = image_path
        self.width = width
        self.height = height
        self.x = x
        self.y = y

        player = pygame.image.load(image_path)
        self.player_main = pygame.transform.scale(player, (width,height))

    def draw(self, background):
        background.blit(self.player_main, (self.x, self.y))

def enemy():
    enemy_list = []

    for e in range(0, 200):
        x_cor = random.randint(25, 361)
        e = Object("enemy.png", 70, 70, x_cor, 25)
        enemy_list.append(e)

        return enemy_list

#Main Objects
        
player1 = Object("crate.png", 70, 70, 25, 500)
list1 = enemy()

#ladies
fat_lady = Object("fat_lady.png", 300, 300, 360, 180)

#title

#title = Object("bgog.png", 150, 100, 360, 25)

# Main Loop

direction = 0

game_on = True

while game_on:
    clock = pygame.time.Clock() 
    clock.tick(60)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_on = False
            pygame.quit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                direction = 1
            elif event.key == pygame.K_LEFT:
                direction = -1
        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_RIGHT or event.key == pygame.K_LEFT:
                direction = 0

    game_screen.fill((0,0,0))
    game_screen.blit(bg_image, (0,0))

    #title.draw(game_screen)
    player1.draw(game_screen)
    fat_lady.draw(game_screen)

    for enemy in list1:
        a = random.randint(5, 25)
        enemy.draw(game_screen)
        enemy.y += a

    #move

    if direction > 0:
        player1.x = player1.x + 10
    elif direction < 0:
        player1.x = player1.x - 10

    #boundries

    if player1.x <= 25:
        player1.x = 25
    elif player1.x >= 360:
        player1.x = 360

    #collisions

    pygame.display.update()

quit()

1 个答案:

答案 0 :(得分:0)

在功能enemy中,您需要确定return语句的大小。

def enemy():

    enemy_list = []

    for e in range(0, 200):

        x_cor = random.randint(25, 361)
        e = Object(70, 70, x_cor, 25)
        enemy_list.append(e)

    return enemy_list

但是,这会使您所有的敌人一下子跌倒。您可能需要某种计时器。

您可以使用time.time()。它给出自纪元以来经过的秒数。在循环外使用start这两个变量,在循环内使用now这两个变量,求它们的差并与一定时间进行比较。然后将start设置为now重置计时器。示例:

import time
start = time.time()
desired_time_in_seconds = 1
while True:
    now = time.time()
    if now - start > desired_time_in_seconds:
        print("this is printed every", desired_time_in_seconds, "second")
        start = now

顺便说一下,pygame.time.get_ticks()与time.time()的作用相同,但是返回自上一帧以来经过的时间(以毫秒为单位)。现在就您而言:

start = time.time()
def enemy():
    now = time.time()
    enemy_list = []
    if now  - start > certain_seconds:
        x_cor = random.randint(25, 361)
        e = Object("enemy.png", 70, 70, x_cor, 25)
        enemy_list.append(e)
        start = now
    return enemy_list

while True:
    list1 = enemy()