renix1

Jogo em Pygame

Feb 10th, 2016
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.13 KB | None | 0 0
  1. import pygame
  2. from pygame.locals import *
  3. from sys import exit
  4. from random import randrange
  5.  
  6. pygame.init()
  7. pygame.font.init()
  8. pygame.mixer.pre_init(44100, 32, 2, 4096)
  9.  
  10. font_name = pygame.font.get_default_font()
  11.  
  12. game_font = pygame.font.SysFont(font_name, 72)
  13.  
  14. screen = pygame.display.set_mode((800, 600), 0, 32)
  15.  
  16. background_filename = 'background.jpg'
  17. background = pygame.image.load(background_filename).convert()
  18.  
  19. ship = {
  20.     'surface': pygame.image.load('rola.png').convert_alpha(),
  21.     'position': [randrange(800), randrange(600)],
  22.     'speed': {
  23.         'x': 0,
  24.         'y': 0
  25.     }
  26. }
  27.  
  28. explosion_sound = pygame.mixer.Sound('boom.wav')
  29. explosion_played = False
  30. pygame.display.set_caption('BATCABUNDA GAME')
  31.  
  32. clock = pygame.time.Clock()
  33.  
  34.  
  35. def create_asteroid():
  36.     return {
  37.         'surface': pygame.image.load('illuminati.png').convert_alpha(),
  38.         'position': [randrange(792), -64],
  39.         'speed': randrange(1, 11)
  40.     }
  41.  
  42. ticks_to_asteroid = 90
  43. asteroids = []
  44.  
  45.  
  46. def move_asteroids():
  47.     for asteroid in asteroids:
  48.         asteroid['position'][1] += asteroid['speed']
  49.  
  50.  
  51. def remove_used_asteroids():
  52.     for asteroid in asteroids:
  53.         if asteroid['position'][1] > 600:
  54.             asteroids.remove(asteroid)
  55.  
  56.  
  57. def get_rect(obj):
  58.     return Rect(obj['position'][0],
  59.                 obj['position'][1],
  60.                 obj['surface'].get_width(),
  61.                 obj['surface'].get_height())
  62.  
  63.  
  64. def ship_collided():
  65.     ship_rect = get_rect(ship)
  66.     for asteroid in asteroids:
  67.         if ship_rect.colliderect(get_rect(asteroid)):
  68.             return True
  69.     return False
  70.  
  71. collided = False
  72.  
  73. while True:
  74.  
  75.     if not ticks_to_asteroid:
  76.         ticks_to_asteroid = 90
  77.         asteroids.append(create_asteroid())
  78.     else:
  79.         ticks_to_asteroid -= 1
  80.  
  81.     ship['speed'] = {
  82.         'x': 0,
  83.         'y': 0
  84.     }
  85.  
  86.     for event in pygame.event.get():
  87.         if event.type == QUIT:
  88.             exit()
  89.  
  90.     pressed_keys = pygame.key.get_pressed()
  91.  
  92.     if pressed_keys[K_UP]:
  93.         ship['speed']['y'] = -13
  94.     elif pressed_keys[K_DOWN]:
  95.         ship['speed']['y'] = 13
  96.  
  97.     if pressed_keys[K_LEFT]:
  98.         ship['speed']['x'] = -13
  99.     elif pressed_keys[K_RIGHT]:
  100.         ship['speed']['x'] = 13
  101.  
  102.     screen.blit(background, (0, 0))
  103.  
  104.     move_asteroids()
  105.  
  106.     for asteroid in asteroids:
  107.         screen.blit(asteroid['surface'], asteroid['position'])
  108.  
  109.     if not collided:
  110.         collided = ship_collided()
  111.         ship['position'][0] += ship['speed']['x']
  112.         ship['position'][1] += ship['speed']['y']
  113.  
  114.         screen.blit(ship['surface'], ship['position'])
  115.     else:
  116.         if not explosion_played:
  117.             explosion_played = True
  118.             explosion_sound.play()
  119.             ship['position'][0] += ship['speed']['x']
  120.             ship['position'][1] += ship['speed']['y']
  121.  
  122.             screen.blit(ship['surface'], ship['position'])
  123.         else:
  124.             text = game_font.render('PIZZA OVER 9000', 1, (255, 0, 0))
  125.             screen.blit(text, (335, 250))
  126.  
  127.     pygame.display.update()
  128.     time_passed = clock.tick(30)
  129.  
  130.     remove_used_asteroids()
Advertisement
Add Comment
Please, Sign In to add comment