Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
180 changes: 180 additions & 0 deletions Python/space_game.py
Original file line number Diff line number Diff line change
@@ -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()