Last active
September 23, 2022 13:49
-
-
Save donno2048/fcda66673377d374a6695ea2c48f3cf7 to your computer and use it in GitHub Desktop.
Very simple game
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from os import environ | |
environ['PYGAME_HIDE_SUPPORT_PROMPT'] = '1' | |
from pygame import Rect, init, K_LEFT, K_RIGHT, K_UP, K_DOWN, K_RETURN, K_ESCAPE, K_r, K_p, QUIT | |
from pygame.event import get | |
from pygame.font import Font | |
from pygame.key import get_pressed | |
from pygame.display import set_mode, flip | |
from pygame.draw import rect | |
from pygame.time import delay | |
from random import randint, choice | |
# from pygame.mixer import init as m_init, music | |
# m_init() | |
# music.load("bg.mp3") | |
# music.play(-1, 0) | |
init() | |
screen = set_mode((800, 600)) | |
player = Rect(0, 0, 50, 50) | |
enemies = [] | |
enemies_speed = [] | |
font = Font(None, 36) | |
highscore = 0 | |
game_over = True | |
def add_enemy(): | |
global enemies, enemies_speed | |
enemy = Rect(0, 0, 50, 50) | |
if player.left > 100: | |
enemy.x = randint(0, player.left - 100) | |
if enemy.right < 700: | |
enemy.x = choice([enemy.x, randint(enemy.right + 50, 750)]) | |
else: | |
enemy.x = randint(player.right + 50, 750) | |
if player.top > 100: | |
enemy.y = randint(0, player.top - 100) | |
if enemy.bottom < 500: | |
enemy.y = choice([enemy.y, randint(enemy.bottom + 50, 550)]) | |
else: | |
enemy.y = randint(player.bottom + 50, 550) | |
enemies.append(enemy) | |
enemies_speed.append((choice([-1, 1]) * randint(1, 5), choice([-1, 1]) * randint(1, 5))) | |
def main_menu(): | |
global player, enemies, enemies_speed | |
screen.blit(font.render(f"Press ENTER to {'play' if game_over else 'continue'}", 1, (0, 0, 255)), (100, 100)) | |
screen.blit(font.render("Press ESC to exit", 1, (0, 0, 255)), (120, 200)) | |
screen.blit(font.render("Score: " + str(len(enemies)), 1, (0, 0, 255)), (140, 300)) | |
screen.blit(font.render("Highscore: " + str(highscore), 1, (0, 0, 255)), (160, 400)) | |
flip() | |
if game_over: | |
player = Rect(0, 0, 50, 50) | |
enemies = [] | |
enemies_speed = [] | |
while True: | |
for e in get(): | |
if e.type == QUIT: | |
exit() | |
keys = get_pressed() | |
if keys[K_RETURN]: | |
play() | |
break | |
if keys[K_ESCAPE]: | |
exit() | |
def play(): | |
global player, enemies, enemies_speed, highscore, game_over | |
running, counter, game_over = True, 0, True | |
while running: | |
for e in get(): | |
if e.type == QUIT: | |
exit() | |
keys = get_pressed() | |
if keys[K_LEFT]: player.x -= 5 | |
if keys[K_RIGHT]: player.x += 5 | |
if keys[K_UP]: player.y -= 5 | |
if keys[K_DOWN]: player.y += 5 | |
if keys[K_r]: | |
player = Rect(0, 0, 50, 50) | |
enemies = [] | |
enemies_speed = [] | |
if keys[K_p]: | |
running = False | |
game_over = False | |
if keys[K_ESCAPE]: | |
exit() | |
if player.bottom > 600: player.y = 0 | |
if player.top < 0: player.y = 600 - player.height | |
if player.right > 800: player.x = 0 | |
if player.left < 0: player.x = 800 - player.width | |
screen.fill((0, 0, 0)) | |
for i in range(len(enemies)): | |
enemies[i] = enemies[i].move(enemies_speed[i]) | |
if (enemies[i].left < 0 or enemies[i].right > 800) and (enemies[i].top < 0 or enemies[i].bottom > 600): | |
enemies_speed[i] = (-enemies_speed[i][0], -enemies_speed[i][1]) | |
elif enemies[i].left < 0 or enemies[i].right > 800: | |
enemies_speed[i] = (-enemies_speed[i][0], enemies_speed[i][1]) | |
elif enemies[i].top < 0 or enemies[i].bottom > 600: | |
enemies_speed[i] = (enemies_speed[i][0], -enemies_speed[i][1]) | |
rect(screen, (255, 0, 0), enemies[i]) | |
rect(screen, (0, 255, 0), player) | |
counter = (counter + 1) % 60 | |
if not counter: add_enemy() | |
for i in range(len(enemies)): | |
if enemies[i].colliderect(player): | |
running = False | |
screen.blit(font.render("Score: " + str(len(enemies)), 1, (0, 0, 255)), (0, 0)) | |
flip() | |
delay((20 + 1000 * (not running)) * game_over) | |
highscore = max(highscore, len(enemies)) | |
while True: | |
main_menu() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment