Making Clone Enemies
I'm making a simple game in pygame, in which you're supposed to dodge or shoot the targets that descend through the screen. So far, I've created the ship movement, the bullet movem
Solution 1:
Don't use time.time()
. Use pygame.time.get_ticks()
to return the number of milliseconds since pygame.init()
was called. Define the time when the next enemy must appear. Create a new enemy when the current time exceeds the calculated time and increase the time by the time interval during which new enemies are continuously created:
next_enemy_time = 0whileTrue:
# [...]
current_time = pygame.time.get_ticks()
if current_time > next_enemy_time:
next_enemy_time = current_time + 3000# 3000 milliseconds == 3 seconds# [...] create new enemy
You don't need an enemy clone at all. Use a list to mange multiple enemies:
classENEMY(ROCKET):
# [...]defdraw_enemy(self, rocket, bullet):
pygame.draw.rect(screen, enemy_color, self.enemy_rect)
self.enemy_y += self.enemy_speed
self.enemy_rect.topleft = (self.enemy_x, self.enemy_y)
enemies = []
whileTrue:
# [...]if current_time > next_enemy_time:
next_enemy_time = current_time + 3000
enemies.insert(0, ENEMY())
# [...]
Draw the enemies in a loop and remove the enemies from the list if the y-coordinate is greater than the height of the screen:
whileTrue:
# [...]for enemy in enemies:
enemy.draw_enemy(rocket, bullet)
for i, enemy inenumerate(enemies):
if enemy.enemy_y > screen_height:
del enemies[i:]
break# [...]
Complete example:
import pygame, sys
import random
import time
pygame.init()
clock = pygame.time.Clock()
time0 = time.time()
has_passed = False
screen_width = 600
screen_height = 800
enemyWidth = 30
enemyHeight = 10
bg_color = (94, 50, 50)
enemy_color = (0, 0, 0)
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Space Race Game")
classROCKET:
def__init__(self):
self.rocketImg = pygame.image.load("spaceship.png")
self.rocket_x = screen_width/2 - 32
self.rocket_y = screen_height/2 + 150defdraw_rocket(self):
screen.blit(self.rocketImg, (self.rocket_x, self.rocket_y))
defmove_rocket(self):
key = pygame.key.get_pressed()
if key[pygame.K_LEFT] and self.rocket_x + 15 > 0:
self.rocket_x -= 5if key[pygame.K_RIGHT] and self.rocket_x < screen_width - 40:
self.rocket_x += 5classBULLET(ROCKET):
def__init__(self):
super().__init__()
self.bullet_width = 10
self.bullet_height = 20
self.bullet_x = self.rocket_x + 25
self.bullet_y = self.rocket_y
self.move = [0, 0]
self.bullet_speed = 7
self.bullet_rect = pygame.Rect(self.bullet_x, self.bullet_y, self.bullet_width, self.bullet_height)
defdraw_bullet(self, rocket, bullet):
key = pygame.key.get_pressed()
if key[pygame.K_SPACE] and self.move[1] == 0:
self.bullet_x = rocket.rocket_x + 25
self.move[1] = -1
self.bullet_y += self.move[1] * self.bullet_speed
self.bullet_rect.topleft = (self.bullet_x, self.bullet_y)
if self.bullet_y < self.rocket_y - 10:
pygame.draw.rect(screen, (0, 0, 0), self.bullet_rect)
if self.bullet_y < - 20:
self.bullet_y = self.rocket_y
self.move[1] = 0classENEMY(ROCKET):
def__init__(self):
super().__init__()
self.enemy_width = enemyWidth
self.enemy_height = enemyHeight
self.enemy_x = random.randint(self.enemy_width, screen_width - self.enemy_width)
self.enemy_y = 0
self.enemy_speed = 1
self.enemy_rect = pygame.Rect(self.enemy_x, self.enemy_y, self.enemy_width, self.enemy_height)
defdraw_enemy(self, rocket, bullet):
pygame.draw.rect(screen, enemy_color, self.enemy_rect)
self.enemy_y += self.enemy_speed
self.enemy_rect.topleft = (self.enemy_x, self.enemy_y)
rocket = ROCKET()
bullet = BULLET()
randomNum = random.randint(enemyWidth, screen_width - enemyWidth)
next_enemy_time = 0
enemies = []
whileTrue:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
current_time = pygame.time.get_ticks()
if current_time > next_enemy_time:
next_enemy_time = current_time + 3000
enemies.insert(0, ENEMY())
screen.fill(bg_color)
rocket.draw_rocket()
rocket.move_rocket()
bullet.draw_bullet(rocket, bullet)
for enemy in enemies:
enemy.draw_enemy(rocket, bullet)
for i, enemy inenumerate(enemies):
if enemy.enemy_y > screen_height:
del enemies[i:]
break
pygame.display.flip()
clock.tick(60)
Post a Comment for "Making Clone Enemies"