Skip to content Skip to sidebar Skip to footer

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"