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:
|
||||
if missile.collision(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:
|
||||
self.missiles.remove(missile)
|
||||
|
||||
@ -141,6 +148,7 @@ class Enemy(Ship):
|
||||
self.ship_img = self.COLOR_MAP[color]
|
||||
self.missile_img = ENEMY_MISSILE
|
||||
self.mask = pygame.mask.from_surface(self.ship_img)
|
||||
self.color = color
|
||||
|
||||
def move(self, vel_x: int, vel_y: int) -> None:
|
||||
self.x += vel_x
|
||||
@ -158,12 +166,10 @@ def main() -> None:
|
||||
player_vel = 7
|
||||
player_missile_vel = 7
|
||||
enemy_x_vel = 2
|
||||
vel_y = 0
|
||||
vel_x = enemy_x_vel
|
||||
vel_y = 0
|
||||
enemy_missile_vel = 4
|
||||
# velocities = [[5, 0], [0, 2], [-5, 0], [-5, 0], [0, 2], [5, 0]]
|
||||
# velocities = {"down": [0, 2], "right": [2, 0], "left": [-5, 0]}
|
||||
# directions = ["right", "down", "left", "left", "down", "right"]
|
||||
last_enemy_shot = 0
|
||||
|
||||
player = Player(WIDTH / 2, 650)
|
||||
|
||||
@ -200,26 +206,23 @@ def main() -> None:
|
||||
|
||||
# stop game
|
||||
if lost:
|
||||
if lost_count > FPS * 3:
|
||||
if lost_count > FPS * 3: # wait for 3 sec
|
||||
run = False
|
||||
else:
|
||||
continue
|
||||
|
||||
# spawn enemies
|
||||
if len(enemies) == 0:
|
||||
level += 1
|
||||
margin = 75
|
||||
width = 75
|
||||
for x in range(margin, WIDTH - margin, width):
|
||||
for y in range(margin, int(HEIGHT / 2), width):
|
||||
|
||||
match y:
|
||||
case 75:
|
||||
color = "magenta"
|
||||
case 150:
|
||||
color = "cyan"
|
||||
case 300:
|
||||
color = "lime"
|
||||
|
||||
for x in range(margin, WIDTH - margin, margin):
|
||||
for y in range(margin, int(HEIGHT / 2), margin):
|
||||
if y == margin:
|
||||
color = "magenta"
|
||||
elif y == 2 * margin:
|
||||
color = "cyan"
|
||||
elif y == 4 * margin:
|
||||
color = "lime"
|
||||
enemy = Enemy(x, y, color)
|
||||
enemies.append(enemy)
|
||||
|
||||
@ -242,37 +245,23 @@ def main() -> None:
|
||||
|
||||
# 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[:]:
|
||||
# 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():
|
||||
vel_x = -enemy_x_vel
|
||||
elif enemy.x <= 0:
|
||||
vel_x = enemy_x_vel
|
||||
|
||||
enemy.move(vel_x, vel_y)
|
||||
|
||||
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):
|
||||
player.score -= 10
|
||||
player.lives -= 1
|
||||
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)
|
||||
|
||||
|
||||
@ -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