Tawnymender12


Code/Games

Home Code/Games About me

sphonic

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()