| Home | Code/Games | About me |
|---|
a 2D platformer
The code:
import pygame, sys
import data.library as lb
pygame.init()
window_size = [1024, 512]
screen = pygame.display.set_mode(window_size)
pygame.display.set_caption("sphonic")
icon = pygame.image.load('data/player.png').convert_alpha()
pygame.display.set_icon(icon)
clock = pygame.time.Clock()
background = pygame.image.load('data/background.png').convert()
pygame.event.set_allowed([pygame.QUIT, pygame.KEYDOWN])
pygame.mixer.music.load('data/bg_music.mp3')
pygame.mixer.music.play(-1)
chekpoints = False
def menu():
button_surface = pygame.Surface((256, 144))
button_surface_rect = button_surface.get_rect(center = (window_size[0] / 2, window_size[1] / 3 * 2))
normal_mode_button = pygame.image.load('data/normal mode.png').convert()
hard_mode_button = pygame.image.load('data/hard mode.png').convert()
button_surface.blit(pygame.transform.scale(background, (256, 144)), (0, 0))
button_surface.blit(normal_mode_button, (0, 0))
button_surface.blit(hard_mode_button, (0, 80))
icon = pygame.transform.scale2x(pygame.image.load('data/player.png').convert_alpha())
icon_rect = icon.get_rect(center = (window_size[0] / 2, window_size[1] / 4))
screen.blit(pygame.transform.scale(background, window_size), (0, 0))
screen.blit(button_surface, button_surface_rect)
screen.blit(icon, icon_rect)
lb.write(None, 60, 'sphonic', True, (150, 150, 150), screen, (window_size[0] / 2, window_size[1] / 5 * 2))
pygame.display.update()
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if pygame.key.get_pressed()[pygame.K_UP]: chekpoints = True; game(chekpoints)
if pygame.key.get_pressed()[pygame.K_DOWN]: chekpoints = False; game(chekpoints)
clock.tick(60)
player = pygame.image.load('data/player.png').convert_alpha()
player_rect = player.get_rect(center = (window_size[0] / 2, window_size[1] / 4))
tile = pygame.image.load('data/tile.png').convert()
class Enemy(pygame.sprite.Sprite):
def __init__(self, pos = [0, 0]):
super().__init__()
self.enemy = pygame.image.load('data/enemy.png').convert()
self.enemy_rect = self.enemy.get_rect(center = (32 * pos[0] - 16, 32 * pos[1] - 16))
screen.blit(self.enemy, self.enemy_rect)
objective = pygame.image.load('data\objective.png').convert()
objective_rect = objective.get_rect(center = (32 * 31 + 16, 32 * 10 + 16))
map_list = ['data/levels/level1.txt', 'data/levels/level2.txt', 'data/levels/level3.txt', 'data/levels/levels4.txt','data\levels\end.txt']
level = 1
def change_places():
if level == 1:
player_rect.center = (window_size[0] / 2, window_size[1] / 4)
objective_rect.center = (32 * 31 + 16, 32 * 10 + 16)
elif level == 2:
player_rect.center = (32 * 0 + 16, 32 * 0 + 16)
objective_rect.center = (32 * 31 + 16, 32 * 7 + 16)
elif level == 3:
player_rect.center = (32 * 0 + 16, 32 * 0 + 16)
objective_rect.center = (32 * 31 + 16, 32 * 0 + 16)
elif level == 4:
player_rect.center = (32 * 0 + 16, 32 * 0 + 16)
objective_rect.center = (32 * 31 + 16, 32 * 0 + 16)
elif map_list[level - 1] == 'data\levels\end.txt':
player_rect.center = (32 * 16 + 16, 32 * 9 + 16)
objective_rect.center = (32 * -1 + 16, 32 * -1 + 16)
enemy_list = []
def enemy_placer():
global enemy_list
if level == 1:
enemy_list = []
elif level == 2:
enemy_list = []
elif level == 3:
enemy_list = []
elif level == 4:
enemy_list = [Enemy([16, 14]), Enemy([22, 13]), Enemy([30, 13]), Enemy([25, 7]), Enemy([12, 6]), Enemy([3, 3]), Enemy([14, 2]), Enemy([19, 2])]
elif map_list[level - 1] == 'data\levels\end.txt':
enemy_list = []
def game(check):
global player_rect, level
change_places()
jump_sfx = pygame.mixer.Sound('data/Jump.mp3')
die_sfx = pygame.mixer.Sound('data/death.mp3')
win_sfx = pygame.mixer.Sound('data/level_complete.mp3')
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if pygame.key.get_pressed()[pygame.K_ESCAPE]: level = 1; menu()
screen.blit(pygame.transform.scale(background, window_size), (0, 0))
rect_list = lb.drawMap(lb.loadMap(map_list[level - 1]), screen, tile, None, 32)
player_rect = lb.moveLRcol(player_rect, 10, 42.5, 5, 37.5, rect_list, jump_sfx, 0.2)
player_rect.x, player_rect.y = lb.boundaries(player_rect.x, player_rect.y, 0, 0, window_size[0] - 32, window_size[1] + 32)
enemy_placer()
screen.blit(player, player_rect)
# write fps
lb.write(None, 20, str(int(clock.get_fps())), True, 'cyan', screen, (10, 10))
screen.blit(objective, objective_rect)
for i in enemy_list:
if player_rect.colliderect(i.enemy_rect):
if check:
die_sfx.play()
game(check)
else:
die_sfx.play()
level = 1
game(check)
if player_rect.colliderect(objective_rect):
win_sfx.play()
level += 1
game(check)
if player_rect.top >= window_size[1]:
if check:
die_sfx.play()
game(check)
else:
die_sfx.play()
level = 1
game(check)
if map_list[level - 1] == 'data\levels\end.txt':
if not check:
lb.write(None, 50, "Congratulations!", True, (230, 230, 230), screen, (window_size[0] / 2, window_size[1] / 4))
lb.write(None, 50, "you completed the game on the hard difficulty", True, (230, 230, 230), screen, (window_size[0] / 2, window_size[1] / 4 + 35))
else:
lb.write(None, 50, "Congratulations!", True, (230, 230, 230), screen, (window_size[0] / 2, window_size[1] / 4))
lb.write(None, 50, "you completed the game on the normal difficulty", True, (230, 230, 230), screen, (window_size[0] / 2, window_size[1] / 4 + 35))
pygame.display.update()
clock.tick(60)
menu()