Untitled

 avatar
unknown
plain_text
a month ago
5.9 kB
4
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