Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Space Game #1782

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
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 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()