Team get_rekt()'s Game: .get_rekt()
import sys
import random
import pygame
import time
pygame.init()
#OBJECTIVES
#ENEMIES (Spawn more enemies + spawn powerups on dead enemies)
#AMMO (AMMO IF POSSIBLE)
#MAYBE DIFFERENT WEAPONS
# ---Standard Variables---
fps = 60
scrn_w = 1200 #Width
scrn_h = 800 #Height
btn_padding = 10
btn_margin = 10
got_time = 0
got_speed = False
got_freeze = False
# ---Screen & Clock---
screen = pygame.display.set_mode([scrn_w, scrn_h])
clock = pygame.time.Clock()
# ---Music---
pygame.mixer.music.load('lofi.ogg')
pygame.mixer.music.play(-1)
# ---Colors---
BLACK = [0, 0, 5]
GREY = [175, 175, 175]
WHITE = [255, 255, 255]
RED = [220,60,50]
DARK_RED = [125, 0, 0]
GREEN = [80,200,25]
DARK_GREEN = [5, 150, 10]
BLUE = [25,90,170]
LIGHT_BLUE = [120,195,225]
ORANGE = [255,120,0]
# ---Different Screens---
screen_mode = "title"
###########
# ---Title Screen---
title_scrn_color = GREY
title_font = pygame.font.SysFont('impact', 100)
title_button_font = pygame.font.SysFont('impact',30)
# ---- Title Text & Buttons ----
#Title Text
title_surface = title_font.render("GET_REKT()", True,BLUE)#Color needed
title_rect = title_surface.get_rect()
title_rect.x = (scrn_w / 2) - (title_rect.width / 2)
title_rect.y = (scrn_h / 2) - (title_rect.height)
# Title Button
title_btn_txt_surface = title_button_font.render("Start Game", True,BLACK)#Color needed
# Title Button Background
title_btn_bg_rect = title_btn_txt_surface.get_rect()
title_btn_bg_rect.width += 2 * btn_margin
title_btn_bg_rect.height += 2 * btn_margin
title_btn_bg_rect.x = title_rect.midbottom[0] - (title_btn_bg_rect.width / 2)
title_btn_bg_rect.y = title_rect.midbottom[1]
# Title Button Text
title_btn_txt_rect = title_btn_txt_surface.get_rect()
title_btn_txt_rect.x = title_btn_bg_rect.x + btn_margin
title_btn_txt_rect.y = title_btn_bg_rect.y + btn_margin
###########
# ---Power Ups---
def generate_powerup(name=''):
rx = random.randint(50,400)
rxt = random.randint(800,1150)
ry = random.randint(50,300)
ryt = random.randint(500,750)
PU_start_x = random.choice([rx,rxt])
PU_start_y = random.choice([ry,ryt])
health = pygame.Rect([PU_start_x,PU_start_y],[15,15])
speed = pygame.Rect([PU_start_x,PU_start_y],[15,15])
freeze = pygame.Rect([PU_start_x,PU_start_y],[15,15])
powerups = [
{'name': 'health', 'rect': health},
{'name': 'speed', 'rect': speed},
{'name': 'freeze', 'rect': freeze}]
return next(i for i in powerups if i['name'] == name) if name else random.choice(powerups)
current_powerups = [generate_powerup()]
###########
# ---Weapons---
weapon_start_x = random.randint(0,1200)
weapon_start_y = random.randint(0,800)
revolver = pygame.Rect([weapon_start_x,weapon_start_y],[15,15])
tommy = pygame.Rect([weapon_start_x,weapon_start_y],[15,15])
shotgun = pygame.Rect([weapon_start_x,weapon_start_y],[15,15])
weapons = [revolver, tommy, shotgun]
weapon_mode = 0
ammunition = 0
###########
# ---Enemies---
enemies_color = RED
enemies = []
amount_enemies = 3
enemy_width = 22
enemy_height = 22
enemy_speed = 2
safe_space = pygame.Rect(200,200,800,400)
def get_enemy_rect():
while True:
enemy_width = 22
enemy_height = 22
enemy_x = random.randint(0,900)
enemy_y = random.randint(0,900)
# print(enemy_x,", ", enemy_y)
enemy_rect = pygame.Rect([enemy_x,enemy_y],[enemy_width,enemy_height])
if not enemy_rect.colliderect(safe_space):
return enemy_rect
for i in range(amount_enemies):
enemies.append(get_enemy_rect())
###########
# ---Lives/Player---
char_start_x = title_rect.x - 23
char_start_y = title_rect.y + 80
char_width = 22
char_height = 22
char_speed = 3
cur_char_x_vel = 0
cur_char_y_vel = 0
character = pygame.Rect([char_start_x, char_start_y], [char_width, char_height])
direction = "right"
lives = 3
lives_font = pygame.font.SysFont('impact', 30)
###########
# ---Projectiles---
projectiles = []
projectile_width = 10
projectile_height = 5
projectile_color = BLACK
projectile_speed = 5
projectile_direction = []
#Projectile Rectangle is by the pygame.K_Space event
###########
# ---Death Screen---
death_scrn_color = BLACK
death_font = pygame.font.SysFont('impact', 100)
death_button_font = pygame.font.SysFont('impact',30)
death_surface = death_font.render("U.GOT_REKT()", True,DARK_RED)#Color needed
death_rect = title_surface.get_rect()
death_rect.x = (scrn_w / 2) - (death_rect.width / 2)
death_rect.y = (scrn_h / 2) - (death_rect.height)
death_btn_txt_surface = death_button_font.render("Play Again?", True,BLACK)#Color needed
# Title Button Background
death_btn_bg_rect = death_btn_txt_surface.get_rect()
death_btn_bg_rect.width += 2 * btn_margin
death_btn_bg_rect.height += 2 * btn_margin
death_btn_bg_rect.x = death_rect.midbottom[0] - (death_btn_bg_rect.width / 2)
death_btn_bg_rect.y = death_rect.midbottom[1]
# death Button Text
death_btn_txt_rect = death_btn_txt_surface.get_rect()
death_btn_txt_rect.x = death_btn_bg_rect.x + btn_margin
death_btn_txt_rect.y = death_btn_bg_rect.y + btn_margin
while True:
if screen_mode == "title":
screen.fill(title_scrn_color)
screen.blit(title_surface, title_rect)
pygame.draw.rect(screen,RED,title_btn_bg_rect)
screen.blit(title_btn_txt_surface, title_btn_txt_rect)
pressed_keys = pygame.key.get_pressed()
if pressed_keys[pygame.K_UP]:
cur_char_y_vel = -1*char_speed
direction = "up"
elif pressed_keys[pygame.K_DOWN]:
cur_char_y_vel = char_speed
direction = "down"
else:
cur_char_y_vel = 0
if pressed_keys[pygame.K_RIGHT]:
cur_char_x_vel = char_speed
direction = "right"
elif pressed_keys[pygame.K_LEFT]:
cur_char_x_vel = -1*char_speed
direction = "left"
else:
cur_char_x_vel = 0
character.left += cur_char_x_vel
if character.left <= 0:
character.left = 0
elif character.right >= scrn_w:
character.right = scrn_w
character.top += cur_char_y_vel
if character.top <= 0:
character.top = 0
elif character.bottom >= scrn_h:
character.bottom = scrn_h
pygame.draw.rect(screen, DARK_GREEN, character)
for powerup in current_powerups:
rect = powerup['rect']
name = powerup['name']
pygame.draw.rect(screen, GREEN, rect)
for i in range (0, len(projectiles)):
pygame.draw.rect(screen, BLACK, projectiles[i])
for i, projectile in enumerate(projectiles):
if projectile_direction[i] == "up":
projectile.top -= projectile_speed
elif projectile_direction[i] == "right":
projectile.right += projectile_speed
elif projectile_direction[i] == "down":
projectile.top += projectile_speed
elif projectile_direction[i] == "left":
projectile.left -= projectile_speed
elif screen_mode == "play":
screen.fill(WHITE)
if got_freeze == True:
cur_time = time.time()
elapsed_time = int(cur_time - got_time)
text = lives_font.render("Freeze: "+ str(2 - elapsed_time), True, BLACK)
screen.blit(text, [50, 150])
if elapsed_time > 2:
got_freeze = False
enemy_speed = 2
if got_speed == True:
cur_time = time.time()
elapsed_time = int(cur_time - got_time)
text = lives_font.render("Speed Boost: "+ str(5 - elapsed_time), True, BLACK)
screen.blit(text, [50, 100])
if elapsed_time > 5:
got_speed = False
char_speed -= 2
current_time = time.time()
elapsed = int(current_time - start_time)
text = lives_font.render(str(elapsed), True, BLACK)
pressed_keys = pygame.key.get_pressed()
if pressed_keys[pygame.K_UP]:
cur_char_y_vel = -1*char_speed
direction = "up"
elif pressed_keys[pygame.K_DOWN]:
cur_char_y_vel = char_speed
direction = "down"
else:
cur_char_y_vel = 0
if pressed_keys[pygame.K_RIGHT]:
cur_char_x_vel = char_speed
direction = "right"
elif pressed_keys[pygame.K_LEFT]:
cur_char_x_vel = -1*char_speed
direction = "left"
else:
cur_char_x_vel = 0
character.left += cur_char_x_vel
if character.left <= 0:
character.left = 0
elif character.right >= scrn_w:
character.right = scrn_w
character.top += cur_char_y_vel
if character.top <= 0:
character.top = 0
elif character.bottom >= scrn_h:
character.bottom = scrn_h
pygame.draw.rect(screen, DARK_GREEN, character)
for powerup in current_powerups:
rect = powerup['rect']
name = powerup['name']
pygame.draw.rect(screen, GREEN, rect)
if character.colliderect(rect):
if name == 'health':
print('got health')
lives = lives + 1
elif name == 'speed':
print('got speed')
char_speed += 2
got_time = time.time()
got_speed = True
elif name == 'freeze':
print('frozen')
enemy_speed -= 2
got_time = time.time()
got_freeze = True
else:
print('name is', name)
current_powerups.remove(powerup)
#current_powerups.append(generate_powerup())
else:
pass
for i in range (0, len(projectiles)):
pygame.draw.rect(screen, [197,212,208], projectiles[i])
for i, projectile in enumerate(projectiles):
if projectile_direction[i] == "up":
projectile.top -= projectile_speed
elif projectile_direction[i] == "right":
projectile.right += projectile_speed
elif projectile_direction[i] == "down":
projectile.top += projectile_speed
elif projectile_direction[i] == "left":
projectile.left -= projectile_speed
for enemy in enemies:
pygame.draw.rect(screen, ORANGE , enemy)
for enemy in enemies:
if character.x > enemy.left:
enemy.left += enemy_speed
if character.x < enemy.left:
enemy.left -= enemy_speed
if character.y > enemy.top:
enemy.top += enemy_speed
if character.y < enemy.top:
enemy.top -= enemy_speed
if len(enemies) == 0 and screen_mode == "play":
amount_enemies += 2
for i in range(amount_enemies):
enemies.append(get_enemy_rect())
enemies_kill = []
for i in reversed(range(len(enemies))):
for project in range(len(projectiles)):
if projectiles[project].colliderect(enemies[i]):
enemies_kill.append(i)
print("Enemy Died")
if random.random() <= 0.15:
current_powerups.append(generate_powerup())
else:
pass
for i in reversed(range(len(enemies))):
if character.colliderect(enemies[i]):
enemies_kill.append(i)
lives -= 1
else:
pass
a = []
for i in range(0, len(enemies)):
if i not in enemies_kill:
a.append(enemies[i])
enemies = a
#for i in reversed(range(len(enemies_kill))):
# del enemies[i]
lives_surface = lives_font.render('LIVES: ' + str(lives), True, BLACK)
lives_rect = lives_surface.get_rect()
lives_rect.x = scrn_w - lives_rect.width - 50
lives_rect.y = 50
screen.blit(lives_surface, lives_rect)
screen.blit(text, (50, 50))
if lives <= 0:
screen_mode = "death"
elif screen_mode == "death":
score_txt_font = pygame.font.SysFont('impact',30)
score_txt_surface = score_txt_font.render("Wave Enemies: "+str(amount_enemies), True,WHITE)
score_txt_rect = score_txt_surface.get_rect()
score_txt_rect.x = 50
score_txt_rect.y = 50
screen.fill(BLACK)
screen.blit(death_surface, death_rect)
pygame.draw.rect(screen,DARK_RED,death_btn_bg_rect)
screen.blit(death_btn_txt_surface, death_btn_txt_rect)
screen.blit(score_txt_surface,score_txt_rect)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
# Fire a bullet
print("pressed space")
print(direction)
pos = [0,0]
if direction == "up":
projectile_direction.append("up")
pos = character.midtop
h = projectile_width
w = projectile_height
elif direction == "down":
projectile_direction.append("down")
pos = character.midbottom
h = projectile_width
w = projectile_height
elif direction == "right":
projectile_direction.append("right")
pos = character.midright
h = projectile_height
w = projectile_width
elif direction == "left":
projectile_direction.append("left")
pos = character.midleft
h = projectile_height
w = projectile_width
projectile = pygame.Rect([pos[0], pos[1]], [w, h])
projectiles.append(projectile)
if screen_mode == 'title' and event.type == pygame.MOUSEBUTTONDOWN:
mouse_pos = pygame.mouse.get_pos()
if title_btn_bg_rect.collidepoint(mouse_pos):
screen_mode = 'play'
start_time = time.time()
if screen_mode == 'death' and event.type == pygame.MOUSEBUTTONDOWN:
mouse_pos = pygame.mouse.get_pos()
if death_btn_bg_rect.collidepoint(mouse_pos):
screen_mode = 'play'
lives = 3
start_time = time.time()
amount_enemies = 3
enemies = []
for i in range(amount_enemies):
enemies.append(get_enemy_rect())
clock.tick(fps)
pygame.display.flip()
|>> download student-games/get_rekt/game.py