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()

在函数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()。它给出自epoch以来经过的秒数。使用两个变量,循环外的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()

最新更新