mirror of
https://github.com/kristoferssolo/School.git
synced 2025-10-21 20:10:38 +00:00
added enemy spawn in groups
This commit is contained in:
parent
62fdd541e2
commit
164aaaae93
@ -124,7 +124,14 @@ class Player(Ship):
|
|||||||
for obj in objs:
|
for obj in objs:
|
||||||
if missile.collision(obj):
|
if missile.collision(obj):
|
||||||
objs.remove(obj)
|
objs.remove(obj)
|
||||||
self.score += 50
|
|
||||||
|
# different scores for different colored enemies
|
||||||
|
if obj.color == "lime":
|
||||||
|
self.score += 10
|
||||||
|
elif obj.color == "cyan":
|
||||||
|
self.score += 20
|
||||||
|
elif obj.color == "magenta":
|
||||||
|
self.score += 30
|
||||||
if missile in self.missiles:
|
if missile in self.missiles:
|
||||||
self.missiles.remove(missile)
|
self.missiles.remove(missile)
|
||||||
|
|
||||||
@ -141,6 +148,7 @@ class Enemy(Ship):
|
|||||||
self.ship_img = self.COLOR_MAP[color]
|
self.ship_img = self.COLOR_MAP[color]
|
||||||
self.missile_img = ENEMY_MISSILE
|
self.missile_img = ENEMY_MISSILE
|
||||||
self.mask = pygame.mask.from_surface(self.ship_img)
|
self.mask = pygame.mask.from_surface(self.ship_img)
|
||||||
|
self.color = color
|
||||||
|
|
||||||
def move(self, vel_x: int, vel_y: int) -> None:
|
def move(self, vel_x: int, vel_y: int) -> None:
|
||||||
self.x += vel_x
|
self.x += vel_x
|
||||||
@ -158,12 +166,10 @@ def main() -> None:
|
|||||||
player_vel = 7
|
player_vel = 7
|
||||||
player_missile_vel = 7
|
player_missile_vel = 7
|
||||||
enemy_x_vel = 2
|
enemy_x_vel = 2
|
||||||
vel_y = 0
|
|
||||||
vel_x = enemy_x_vel
|
vel_x = enemy_x_vel
|
||||||
|
vel_y = 0
|
||||||
enemy_missile_vel = 4
|
enemy_missile_vel = 4
|
||||||
# velocities = [[5, 0], [0, 2], [-5, 0], [-5, 0], [0, 2], [5, 0]]
|
last_enemy_shot = 0
|
||||||
# velocities = {"down": [0, 2], "right": [2, 0], "left": [-5, 0]}
|
|
||||||
# directions = ["right", "down", "left", "left", "down", "right"]
|
|
||||||
|
|
||||||
player = Player(WIDTH / 2, 650)
|
player = Player(WIDTH / 2, 650)
|
||||||
|
|
||||||
@ -200,26 +206,23 @@ def main() -> None:
|
|||||||
|
|
||||||
# stop game
|
# stop game
|
||||||
if lost:
|
if lost:
|
||||||
if lost_count > FPS * 3:
|
if lost_count > FPS * 3: # wait for 3 sec
|
||||||
run = False
|
run = False
|
||||||
else:
|
else:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
# spawn enemies
|
||||||
if len(enemies) == 0:
|
if len(enemies) == 0:
|
||||||
level += 1
|
level += 1
|
||||||
margin = 75
|
margin = 75
|
||||||
width = 75
|
for x in range(margin, WIDTH - margin, margin):
|
||||||
for x in range(margin, WIDTH - margin, width):
|
for y in range(margin, int(HEIGHT / 2), margin):
|
||||||
for y in range(margin, int(HEIGHT / 2), width):
|
if y == margin:
|
||||||
|
|
||||||
match y:
|
|
||||||
case 75:
|
|
||||||
color = "magenta"
|
color = "magenta"
|
||||||
case 150:
|
elif y == 2 * margin:
|
||||||
color = "cyan"
|
color = "cyan"
|
||||||
case 300:
|
elif y == 4 * margin:
|
||||||
color = "lime"
|
color = "lime"
|
||||||
|
|
||||||
enemy = Enemy(x, y, color)
|
enemy = Enemy(x, y, color)
|
||||||
enemies.append(enemy)
|
enemies.append(enemy)
|
||||||
|
|
||||||
@ -242,37 +245,23 @@ def main() -> None:
|
|||||||
|
|
||||||
# enemies action
|
# enemies action
|
||||||
|
|
||||||
# for _ in range(len(directions)):
|
|
||||||
# if pygame.time.get_ticks() % 100 == 0:
|
|
||||||
# for direction in directions:
|
|
||||||
# vel_x, vel_y = velocities[direction]
|
|
||||||
# for enemy in enemies[:]:
|
|
||||||
# enemy.move(vel_x, vel_y)
|
|
||||||
|
|
||||||
# if pygame.time.get_ticks() % 10 == 0:
|
|
||||||
# for vel_x, vel_y in velocities:
|
|
||||||
# for enemy in enemies[:]:
|
|
||||||
# enemy.move(vel_x, vel_y)
|
|
||||||
|
|
||||||
for enemy in enemies[:]:
|
for enemy in enemies[:]:
|
||||||
# enemy.move(0, enemy_y_vel)
|
|
||||||
# enemy.move(randint(-enemy_x_vel, enemy_x_vel), randint(0, enemy_y_vel))
|
|
||||||
if enemy.x >= WIDTH - enemy.get_width():
|
if enemy.x >= WIDTH - enemy.get_width():
|
||||||
vel_x = -enemy_x_vel
|
vel_x = -enemy_x_vel
|
||||||
elif enemy.x <= 0:
|
elif enemy.x <= 0:
|
||||||
vel_x = enemy_x_vel
|
vel_x = enemy_x_vel
|
||||||
|
|
||||||
enemy.move(vel_x, vel_y)
|
enemy.move(vel_x, vel_y)
|
||||||
|
|
||||||
enemy.move_missiles(enemy_missile_vel, player)
|
enemy.move_missiles(enemy_missile_vel, player)
|
||||||
|
|
||||||
if randrange(0, 7 * FPS) == 1:
|
|
||||||
enemy.shoot()
|
|
||||||
pass
|
|
||||||
|
|
||||||
if collide(enemy, player) or (enemy.y + enemy.get_height() > HEIGHT):
|
if collide(enemy, player) or (enemy.y + enemy.get_height() > HEIGHT):
|
||||||
player.score -= 10
|
player.score -= 10
|
||||||
player.lives -= 1
|
player.lives -= 1
|
||||||
enemies.remove(enemy)
|
enemies.remove(enemy)
|
||||||
|
if pygame.time.get_ticks() - last_enemy_shot > 2000:
|
||||||
|
choice(enemies).shoot()
|
||||||
|
last_enemy_shot = pygame.time.get_ticks()
|
||||||
|
|
||||||
player.move_missiles(-player_missile_vel, enemies)
|
player.move_missiles(-player_missile_vel, enemies)
|
||||||
|
|
||||||
|
|||||||
@ -1,121 +0,0 @@
|
|||||||
# Author - Kristiāns Francis Cagulis
|
|
||||||
# Date - 25.02.2022
|
|
||||||
# Title - Space invaders
|
|
||||||
|
|
||||||
import pygame
|
|
||||||
import math
|
|
||||||
import random
|
|
||||||
|
|
||||||
BLUE = (16, 16, 69)
|
|
||||||
|
|
||||||
# init game
|
|
||||||
pygame.init()
|
|
||||||
pygame.display.set_caption("Space invaders")
|
|
||||||
|
|
||||||
# 32x32 game icon
|
|
||||||
icon = pygame.image.load("icons/space_invader_enemy_icon.png")
|
|
||||||
pygame.display.set_icon(icon)
|
|
||||||
# 64x64 player icon
|
|
||||||
player = pygame.image.load("icons/space_shuttle_player_icon.png")
|
|
||||||
player_x = 370
|
|
||||||
player_y = 480
|
|
||||||
player_x_change = 0
|
|
||||||
|
|
||||||
# 64x64 enemy icon
|
|
||||||
enemy = pygame.image.load("icons/space_invader_enemy_icon.png")
|
|
||||||
enemy_x = random.randint(0, 736)
|
|
||||||
enemy_y = random.randint(50, 150)
|
|
||||||
enemy_x_change = .2
|
|
||||||
enemy_y_change = 10
|
|
||||||
|
|
||||||
|
|
||||||
# missile
|
|
||||||
missile = pygame.image.load("icons/fireball_icon.png")
|
|
||||||
missile_x = 0
|
|
||||||
missile_y = 480 # player_y
|
|
||||||
missile_x_change = 0
|
|
||||||
missile_y_change = .50
|
|
||||||
missile_state = "ready"
|
|
||||||
|
|
||||||
screen = pygame.display.set_mode((800, 600))
|
|
||||||
|
|
||||||
|
|
||||||
def display_player(x, y):
|
|
||||||
screen.blit(player, (x, y))
|
|
||||||
|
|
||||||
|
|
||||||
def display_enemy(x, y):
|
|
||||||
screen.blit(enemy, (x, y))
|
|
||||||
|
|
||||||
|
|
||||||
def display_missile(x, y):
|
|
||||||
global missile_state
|
|
||||||
missile_state = "fire"
|
|
||||||
screen.blit(missile, (x + 16, y - 10))
|
|
||||||
|
|
||||||
|
|
||||||
def is_collision(enemy_x, enemy_y, missile_x, missile_y):
|
|
||||||
distance = math.sqrt(math.pow(enemy_x - missile_x, 2) + math.pow(enemy_y - missile_y, 2))
|
|
||||||
if distance < 27:
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
running = True
|
|
||||||
|
|
||||||
while running:
|
|
||||||
screen.fill(BLUE)
|
|
||||||
|
|
||||||
# change player pos
|
|
||||||
for event in pygame.event.get():
|
|
||||||
if event.type == pygame.QUIT:
|
|
||||||
running = False
|
|
||||||
if event.type == pygame.KEYDOWN:
|
|
||||||
if event.key == pygame.K_LEFT:
|
|
||||||
player_x_change = -.5
|
|
||||||
if event.key == pygame.K_RIGHT:
|
|
||||||
player_x_change = .5
|
|
||||||
if event.key == pygame.K_SPACE:
|
|
||||||
if missile_state == "ready":
|
|
||||||
missile_x = player_x
|
|
||||||
# missile_state = "fire"
|
|
||||||
display_missile(missile_x, missile_y)
|
|
||||||
|
|
||||||
if event.type == pygame.KEYUP:
|
|
||||||
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
|
|
||||||
player_x_change = 0
|
|
||||||
|
|
||||||
# player pos
|
|
||||||
if player_x + player_x_change > 0 and player_x + player_x_change < 736:
|
|
||||||
player_x += player_x_change
|
|
||||||
|
|
||||||
enemy_x += enemy_x_change
|
|
||||||
enemy_y += enemy_y_change
|
|
||||||
|
|
||||||
# enemy pos
|
|
||||||
if enemy_x >= 736:
|
|
||||||
enemy_x_change = -.2
|
|
||||||
elif enemy_x <= 0:
|
|
||||||
enemy_x_change = .2
|
|
||||||
if enemy_y >= 336:
|
|
||||||
enemy_y_change = -.1
|
|
||||||
elif enemy_y <= 50:
|
|
||||||
enemy_y_change = .1
|
|
||||||
|
|
||||||
collision = is_collision(enemy_x, enemy_y, missile_x, missile_y)
|
|
||||||
if collision:
|
|
||||||
missile_y = 480
|
|
||||||
missile_state = "ready"
|
|
||||||
# score ...
|
|
||||||
|
|
||||||
display_enemy(enemy_x, enemy_y)
|
|
||||||
|
|
||||||
if missile_y <= 0:
|
|
||||||
missile_state = "ready"
|
|
||||||
if missile_state == "fire":
|
|
||||||
display_missile(missile_x, missile_y)
|
|
||||||
missile_y -= missile_y_change
|
|
||||||
|
|
||||||
display_player(player_x, player_y)
|
|
||||||
pygame.display.update()
|
|
||||||
Loading…
Reference in New Issue
Block a user