Untitled
unknown
plain_text
2 months ago
5.9 kB
5
Indexable
import pygame
import random
from settings import *
pygame.init()
pygame.mixer.init()
pygame.font.init()
background = pygame.transform.scale(BACKGROUND_IMAGE_PATH, (WINDOW_WIDTH, WINDOW_HEIGHT))
weapon_sound_effects = { #resource manager or resource dictionary
"blaster weapon": pygame.mixer.Sound(DEFAULT_BLASTER_FIRE_SOUND_EFFECT),
"laser weapon" : pygame.mixer.Sound(r"fire_effect_2.mp3")
}
for sound in weapon_sound_effects:
weapon_sound_effects[sound].set_volume(0.3)
#pygame.mixer_music.load("m1bg.mp3")
#pygame.mixer_music.play()
pygame.mixer.set_num_channels(8)
screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
clock = pygame.time.Clock()
running = True
my_text_x = 30
class GameObject(pygame.sprite.Sprite):
def __init__(self, filename, x, y, w, h):
super().__init__()
self.rect = pygame.Rect(x, y, w, h)
self.image = pygame.image.load(filename)
self.image = pygame.transform.scale(self.image, (w, h))
self.speed = DEFAULT_SPEED
def draw(self):
screen.blit(self.image, (self.rect.x, self.rect.y))
def is_collide(self, gameObject: "GameObject"):
return self.rect.colliderect(gameObject.rect)
class Label():
def __init__(self,x,y, text, font_size, color):
self.font = pygame.font.SysFont("Impact", font_size)
self.color = color
self.text = self.font.render(text, True, color)
self.x = x
self.y = y
def draw(self):
screen.blit(self.text, (self.x, self.y))
def set_text(self, new_text):
self.text = self.font.render(new_text, True, self.color)
class Player(GameObject):
def update(self):
keys = pygame.key.get_pressed()
if keys[pygame.K_a]:
self.rect.x -= self.speed
if keys[pygame.K_d]:
self.rect.x += self.speed
if keys[pygame.K_w]:
self.rect.y -= self.speed
if keys[pygame.K_s]:
self.rect.y += self.speed
if self.rect.x < 0:
self.rect.x = 0
if self.rect.x > WINDOW_WIDTH - self.rect.width:
self.rect.x = WINDOW_WIDTH - self.rect.width
if self.rect.y < 0:
self.rect.y = 0
if self.rect.y > WINDOW_HEIGHT - self.rect.height:
self.rect.y = WINDOW_HEIGHT - self.rect.height
def health(self):
pass
def shoot(self):
c = Cartridge(
BULLET_IMAGE_PATH,
self.rect.x + PLAYER_HITBOX_SIZE/2 - BULLET_HITBOX_WIDTH/2,
self.rect.y + PLAYER_HITBOX_SIZE/2,
BULLET_HITBOX_WIDTH ,
BULLET_HITBOX_HEIGHT)
cartridgies.add(c)
weapon_sound_effects["blaster weapon"].play()
def laser_shoot(self):
laser = pygame.surface.Surface((2,10))
laser.fill((255,0,0))
c = Cartridge(
BULLET_IMAGE_PATH,
self.rect.x + PLAYER_HITBOX_SIZE/2 - BULLET_HITBOX_WIDTH/2,
self.rect.y + PLAYER_HITBOX_SIZE/2,
BULLET_HITBOX_WIDTH ,
BULLET_HITBOX_HEIGHT)
cartridgies.add(c)
weapon_sound_effects["laser weapon"].play()
class Cartridge(GameObject):
def update(self):
self.rect.y -= self.speed
if self.rect.y < 0 - 80:
self.kill()
class Enemy(GameObject):
def __init__(self, filename, x, y, w, h):
super().__init__(filename, x, y, w, h)
self.hp = Enemy_health
self.speed = ENEMY_SPEED
def update(self):
self.rect.y += self.speed
if self.rect.y > WINDOW_WIDTH:
self.rect.y = 0 - self.rect.height*2
self.rect.x = random.randint(0, WINDOW_WIDTH-ENEMY_HITBOX_SIZE)
def take_damage(self, damage = 1):
self.hp -= damage
if self.hp <= 0:
self.kill()
pygame.event.post(pygame.event.Event(EVENT_ENEMY_KILLED))
player = Player(PLAYER_IMAGE_PATH, 350, 500, PLAYER_HITBOX_SIZE, PLAYER_HITBOX_SIZE)
enemies = pygame.sprite.Group()
cartridgies = pygame.sprite.Group()
for i in range(6):
enemy = Enemy(ENEMY_IMAGE_PATH, random.randint(0, WINDOW_WIDTH-ENEMY_HITBOX_SIZE),
0-ENEMY_HITBOX_SIZE*2,
ENEMY_HITBOX_SIZE,ENEMY_HITBOX_SIZE)
enemies.add(enemy)
score_counter = 0
score_text = "SCORE: "+ str(score_counter)
score_label = Label(WINDOW_WIDTH-230, WINDOW_HEIGHT-45, score_text, 40,FONT_COLOR)
change_weapon = False
while running:
clock.tick(FPS)
screen.fill(BACKGROUND_COLOR)
screen.blit(background, (0, 0))
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
if change_weapon:
player.shoot()
change_weapon = False
else:
player.laser_shoot()
change_weapon = True
elif event.type == EVENT_ENEMY_KILLED:
print("ENEMY KILLED")
score_counter +=1
score_text = "SCORE: "+ str(score_counter)
score_label.set_text(score_text)
cartridgies.update()
enemies.update()
player.update()
enemies.draw(screen)
cartridgies.draw(screen)
score_label.draw()
hits = pygame.sprite.groupcollide(enemies, cartridgies,False, True)
for enemy, bullets in hits.items():
for cartridge in bullets:
enemy.take_damage()
player.draw()
pygame.display.update()
pygame.quit()Editor is loading...
Leave a Comment