diff --git a/space_game.py b/space_game.py new file mode 100644 index 00000000..41d063ed --- /dev/null +++ b/space_game.py @@ -0,0 +1,180 @@ +import pygame +import os +pygame.init() +pygame.font.init() +pygame.mixer.init() + +WIDTH, HEIGHT = 900, 500 + +WIN = pygame.display.set_mode((WIDTH, HEIGHT)) +pygame.display.set_caption("First Game!!!") + +WHITE = (255, 255, 255) +BLACK = (0, 0, 0) +YELLOW = (255, 255, 0) +RED = (255, 0, 0) + +VEL = 5 + +BULLET_VEL = 7 +MAX_BULLETS = 10 + +BULLET_HIT_SOUND = pygame.mixer.Sound(os.path.join('Assets', 'Grenade+1.mp3')) +BULLET_FIRE_SOUND = pygame.mixer.Sound(os.path.join('Assets', 'Gun+Silencer.mp3')) + +YELLOW_HIT = pygame.USEREVENT + 1 +RED_HIT = pygame.USEREVENT + 2 + +FPS = 60 + +BORDER = pygame.Rect(WIDTH/2 - 5, 0, 10, HEIGHT) + +HEALTH_FONT = pygame.font.SysFont('century gothic', 40) +WINNER_FONT = pygame.font.SysFont('century gothic', 40) + +SPACESHIP_WIDTH, SPACESHIP_HEIGHT = 55, 40 + +YELLOW_SPACESHIP_IMAGE = pygame.image.load(os.path.join('Assets', 'spaceship_yellow.png')) +YELLOW_SPACESHIP = pygame.transform.rotate(pygame.transform.scale(YELLOW_SPACESHIP_IMAGE, (SPACESHIP_WIDTH, SPACESHIP_HEIGHT)), 90) + +RED_SPACESHIP_IMAGE = pygame.image.load(os.path.join('Assets', 'spaceship_red.png')) +RED_SPACESHIP = pygame.transform.rotate(pygame.transform.scale(RED_SPACESHIP_IMAGE, (SPACESHIP_WIDTH, SPACESHIP_HEIGHT)), 270) + +SPACE = pygame.transform.scale(pygame.image.load(os.path.join('Assets', 'space.png')), (WIDTH, HEIGHT)) + +def yellow_handle_movement(keys_pressed, yellow): + if keys_pressed[pygame.K_a] and yellow.x - VEL > 0: + yellow.x -= VEL + if keys_pressed[pygame.K_d] and yellow.x + VEL + yellow.width - 10 < BORDER.x: + yellow.x += VEL + if keys_pressed[pygame.K_w] and yellow.y - VEL > 0: + yellow.y -= VEL + if keys_pressed[pygame.K_s] and yellow.y + yellow.height + VEL < HEIGHT - 15: + yellow.y += VEL + +def red_handle_movement(keys_pressed, red): + if keys_pressed[pygame.K_LEFT] and red.x - VEL > BORDER.x + BORDER.width: + red.x -= VEL + if keys_pressed[pygame.K_RIGHT] and red.x + VEL + red.width < WIDTH + 10: + red.x += VEL + if keys_pressed[pygame.K_UP] and red.y - VEL > 0: + red.y -= VEL + if keys_pressed[pygame.K_DOWN] and red.y + red.height + VEL < HEIGHT - 15: + red.y += VEL + +def handle_bullets(yellow_bullets, red_bullets, yellow, red): + for bullet in yellow_bullets: + bullet.x += BULLET_VEL + if red.colliderect(bullet): + pygame.event.post(pygame.event.Event(RED_HIT)) + yellow_bullets.remove(bullet) + elif bullet.x > WIDTH: + yellow_bullets.remove(bullet) + + for bullet in red_bullets: + bullet.x -= BULLET_VEL + if yellow.colliderect(bullet): + pygame.event.post(pygame.event.Event(YELLOW_HIT)) + red_bullets.remove(bullet) + elif bullet.x < 0: + red_bullets.remove(bullet) + + + +def draw_window(yellow, red, yellow_bullets, red_bullets, red_health, yellow_health): + WIN.blit(SPACE, (0, 0)) + pygame.draw.rect(WIN, BLACK, BORDER) + + WIN.blit(YELLOW_SPACESHIP, (yellow.x, yellow.y)) + WIN.blit(RED_SPACESHIP, (red.x, red.y)) + + red_health_text = HEALTH_FONT.render("Health: " + str(red_health), 1, WHITE) + yellow_health_text = HEALTH_FONT.render('Health: ' + str(yellow_health), 1, WHITE) + + WIN.blit(yellow_health_text, (WIDTH - red_health_text.get_width() - 10,10)) + WIN.blit(red_health_text, (10, 10)) + + for bullet in yellow_bullets: + pygame.draw.rect(WIN, YELLOW, bullet) + for bullet in red_bullets: + pygame.draw.rect(WIN, RED, bullet) + + pygame.display.update() + + + +def draw_winner(text): + draw_text = WINNER_FONT.render(text, 1, WHITE) + WIN.blit(draw_text, (WIDTH//2 - draw_text.get_width()//2, HEIGHT//2 - draw_text.get_height()//2)) + pygame.display.update() + pygame.time.delay(5000) + + + +def main(): + + yellow = pygame.Rect(100, 300, SPACESHIP_WIDTH, SPACESHIP_HEIGHT) + red = pygame.Rect(700, 300, SPACESHIP_WIDTH, SPACESHIP_HEIGHT) + + yellow_bullets = [] + red_bullets = [] + + red_health = 3 + yellow_health = 3 + + clock = pygame.time.Clock() + + run = True + + while run: + + clock.tick(FPS) + + for event in pygame.event.get(): + if event.type == pygame.QUIT: + run = False + pygame.quit() + + if event.type == pygame.KEYDOWN: + if event.key == pygame.K_LCTRL and len(yellow_bullets) < MAX_BULLETS: + bullet = pygame.Rect(yellow.x + yellow.width, yellow.y + yellow.height//2 - 2, 10, 5) + yellow_bullets.append(bullet) + BULLET_FIRE_SOUND.play() + + if event.key == pygame.K_RCTRL and len(red_bullets) <= MAX_BULLETS: + bullet = pygame.Rect(red.x, red.y + red.height//2 - 2, 10, 5) + red_bullets.append(bullet) + BULLET_FIRE_SOUND.play() + + if event.type == RED_HIT: + red_health -= 1 + BULLET_HIT_SOUND.play() + if event.type == YELLOW_HIT: + yellow_health -= 1 + BULLET_HIT_SOUND.play() + + winner_text = '' + if red_health <= 0: + winner_text = 'YELLOW WINS !!!' + + if yellow_health <= 0: + winner_text = 'RED WINS !!!' + + if winner_text != '': + draw_winner(winner_text) + break + + keys_pressed = pygame.key.get_pressed() + yellow_handle_movement(keys_pressed,yellow) + red_handle_movement(keys_pressed, red) + + + handle_bullets(yellow_bullets, red_bullets, yellow, red) + draw_window(yellow, red, yellow_bullets, red_bullets, yellow_health, red_health) + + + main() + + +if __name__ == '__main__': + main()