Advertisement
ctw6avq

Cyber War - 2D

Aug 15th, 2016
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 11.07 KB | None | 0 0
  1. #!/usr/bin/env python3
  2.  
  3. from threading import Thread
  4. import pygame
  5.  
  6.  
  7. class Game(object):
  8.  
  9.     def __init__(self):
  10.  
  11.         # Iniciando o jogo
  12.         pygame.init()
  13.  
  14.         # Largura e altura padrão
  15.         self.width, self.height = 840, 680
  16.  
  17.         # Setando configurações da tela
  18.         self.screen = pygame.display.set_mode((self.width, self.height))
  19.         pygame.display.set_caption('Cyber War')
  20.  
  21.         # Variavel de parada do jogo
  22.         self.quit_game = False
  23.  
  24.         # Escondendo o mouse
  25.         pygame.mouse.set_visible(False)
  26.  
  27.         # Centalizando a posição do mouse na tela do jogo
  28.         pygame.mouse.set_pos(self.width / 2, self.height / 2)
  29.  
  30.         # Tratando a posição anterior do mouse
  31.         self.m_x, self.m_y = 0, 0
  32.  
  33.         # Sons do jogo
  34.         # music = pygame.mixer.Sound('Sounds/sound.ogg')
  35.         # music.play()
  36.  
  37.         # Imagens
  38.         self.stars = pygame.image.load_extended('Images/stars.png')
  39.         self.nave = pygame.image.load_extended('Images/nave.png')
  40.  
  41.         # Cores
  42.         self.white = (255, 255, 255, 100)
  43.         self.rosy_brown = (139, 105, 105)
  44.         self.azure = (131, 139, 139)
  45.         self.green = (127, 255, 0)
  46.         self.gray = (59, 57, 63)
  47.         self.black = (0, 0, 0)
  48.  
  49.         # Surface
  50.         self.surf_game = pygame.Surface((self.width - 4, self.height - 84))
  51.  
  52.         # Surface que recebe a munição
  53.         self.target_surf = pygame.Surface((self.width, 15))
  54.         self.target_rect = pygame.Rect(0, 0, self.width, 15)
  55.  
  56.         # Variavel que pausa o jogo
  57.         self.pause = False
  58.  
  59.         # Retângulo da nave (oculto)
  60.         self.rect = pygame.Rect(0, 0, 60, 60)
  61.  
  62.         # Variaveis da nave da nave
  63.         self.lifes = 3
  64.         self.bullet = pygame.Rect(0, 0, 3, 9)
  65.         self.bullet_speed = 18
  66.         self.shoots_given = 0
  67.  
  68.         # Controla o disparo da nave
  69.         self.shoot = False
  70.  
  71.         # Setando a fontes de texto
  72.         self.font_default = pygame.font.SysFont('monospace', 15)
  73.  
  74.         # Setando os fps
  75.         self.clock = pygame.time.Clock()
  76.         self.fps = 30
  77.  
  78.     # Pausa no jogo
  79.     def pause_game(self):
  80.         pygame.mouse.set_visible(True)
  81.  
  82.         # Pause loop
  83.         while self.pause:
  84.  
  85.             for event in pygame.event.get():
  86.                 # Só entra em loop se houver evento
  87.                 if event:
  88.  
  89.                     # Sai do jogo
  90.                     if event.type == pygame.QUIT:
  91.                         pygame.quit()
  92.                         exit(0)
  93.  
  94.                     # Eventos do tipo pressionamento de teclas
  95.                     if event.type == pygame.KEYDOWN:
  96.  
  97.                         # Sai do loop pause com a letra "p"
  98.                         if event.key == pygame.K_p:
  99.                             # Devolve a posição do mouse
  100.                             pygame.mouse.set_pos(self.m_x, self.m_y)
  101.                             # Esconde o mouse
  102.                             pygame.mouse.set_visible(False)
  103.  
  104.                             # Desativa o pause
  105.                             self.pause = False
  106.  
  107.             # Atualiza a tela
  108.             pygame.display.update()
  109.  
  110.             # Fps do loop 'pause'
  111.             self.clock.tick(10)
  112.  
  113.     # Função que inicia o disparo
  114.     def shooting(self):
  115.         self.bullet = pygame.Rect(self.rect.left + 29, self.rect.top, 3, 9)
  116.         self.shoots_given += 1
  117.         self.shoot = True
  118.  
  119.     # Função principal
  120.     def main_loop(self):
  121.  
  122.         # Loop principal
  123.         while not self.quit_game:
  124.  
  125.             # Bg da tela
  126.             self.screen.fill(self.gray)
  127.  
  128.             # Desenhando a 1° surface
  129.             self.screen.blit(self.surf_game, (2, 2))
  130.  
  131.             # Desenhando o 1° retângulo, o qual segue o mouse
  132.             pygame.draw.rect(self.surf_game, self.white, self.rect)
  133.  
  134.             # Bg da 1° surface
  135.             self.surf_game.blit(self.stars, (0, 0))
  136.  
  137.             # Desenhando a surface target
  138.             self.screen.blit(self.target_surf, (0, 0))
  139.             pygame.draw.rect(self.target_surf, self.gray, self.target_rect)
  140.  
  141.             # Obtendo posição do mouse
  142.             (self.rect.left, self.rect.top) = (pygame.mouse.get_pos())
  143.  
  144.             # Dispara o tiro
  145.             if self.shoot:
  146.  
  147.                 # Desenha a munição
  148.                 pygame.draw.rect(self.surf_game, self.green, self.bullet)
  149.  
  150.                 # Move a munição
  151.                 self.bullet.top -= self.bullet_speed
  152.  
  153.                 # Se munição atingir o topo
  154.                 # prepara para outro tiro
  155.                 if self.bullet.top <= 0:
  156.                     self.shoot = False
  157.  
  158.             # Ajustando a nave com o mouse
  159.             self.rect.left -= 32
  160.             self.rect.top -= 40
  161.  
  162.             # Nave segue o retângulo
  163.             (m_x, m_y) = pygame.mouse.get_pos()
  164.             if m_x > 0:
  165.                 self.surf_game.blit(self.nave, (self.rect.left, self.rect.top))
  166.  
  167.             # Setando as Labels de texto
  168.             label0 = self.font_default.render('pos_x: {:<3}    pos_y: {:<3}'.format(self.rect.left, self.rect.top),
  169.                                               1, self.green)
  170.             label1 = self.font_default.render('Tiros: {:<3}    Vidas: {:<3}'.format(self.shoots_given, self.lifes),
  171.                                               1, self.green)
  172.  
  173.             # Desenhando a label de texto
  174.             self.screen.blit(label0, (10, self.height - 60))
  175.             self.screen.blit(label1, (10, self.height - 40))
  176.  
  177.             # Atualizando
  178.             pygame.display.update()
  179.  
  180.             # Obtendo eventos
  181.             for event in pygame.event.get():
  182.  
  183.                     # Só entra em loop se existir evento
  184.                     if event:
  185.  
  186.                         # Sai do jogo
  187.                         if event.type == pygame.QUIT:
  188.                             self.quit_game = True
  189.  
  190.                         # Evento de click de mouse
  191.                         elif event.type == pygame.MOUSEBUTTONDOWN:
  192.  
  193.                             # Trava tiro único
  194.                             if not self.shoot:
  195.  
  196.                                 # Inicia um thread para o disparo
  197.                                 t = Thread(target=self.shooting)
  198.                                 t.start()
  199.  
  200.                         # Pressionamento de teclas
  201.                         elif event.type == pygame.KEYDOWN:
  202.  
  203.                             # Entra em pausa com a letra 'p'
  204.                             if event.key == pygame.K_p:
  205.  
  206.                                 # Memoriza a posição do mouse
  207.                                 (self.m_x, self.m_y) = pygame.mouse.get_pos()
  208.  
  209.                                 # Aciona o pause
  210.                                 self.pause = True
  211.  
  212.                                 # Chamada da função que
  213.                                 # trata o pause do jogo
  214.                                 self.pause_game()
  215.  
  216.             # Ajustando os fps
  217.             self.clock.tick(self.fps)
  218.  
  219.  
  220. class Menu(object):
  221.     def __init__(self):
  222.  
  223.         # Inicia o menu
  224.         pygame.init()
  225.  
  226.         # Altura e largura
  227.         width, height = 560, 625
  228.  
  229.         # Imagens
  230.         menu_bg = pygame.image.load_extended('Images/menu_bg.png')
  231.  
  232.         # Cores
  233.         # white = (255, 255, 255)
  234.         dim_gray = (51, 58, 65)
  235.         gray = (163, 163, 163)
  236.         green = (127, 255, 0)
  237.  
  238.         # Tela
  239.         screen = pygame.display.set_mode((width, height))
  240.         pygame.display.set_caption('Cyber War - Menu')
  241.         screen.fill(dim_gray)
  242.  
  243.         # Variavel que controla a saída
  244.         quit_menu = False
  245.  
  246.         # Surface principal
  247.         surf_menu = pygame.Surface((width - 6, height - 6))
  248.         surf_shad = pygame.Surface((width - 6, height - 6))
  249.         surf_shad.set_alpha(140)
  250.  
  251.         # Surface dos botoẽs
  252.         surf_config = pygame.Surface((180, 35))
  253.         surf_config.set_alpha(60)
  254.  
  255.         surf_play = pygame.Surface((180, 35))
  256.         surf_play.set_alpha(60)
  257.  
  258.         surf_quit = pygame.Surface((180, 35))
  259.         surf_quit.set_alpha(60)
  260.  
  261.         # Item "configuração" do menu
  262.         font_menu = pygame.font.SysFont('comic', 30, 5)
  263.         font_menu.set_italic(True)
  264.         config_label = font_menu.render('Configuração', 1, green)
  265.  
  266.         # Item "play" do menu
  267.         play_label = font_menu.render('Play', 1, green)
  268.  
  269.         # Item "quit" do menu
  270.         quit_label = font_menu.render('Quit', 1, green)
  271.  
  272.         # Posicionando o mouse
  273.         pygame.mouse.set_pos(140, 300)
  274.  
  275.         # Instância controle de fps
  276.         clock = pygame.time.Clock()
  277.  
  278.         while not quit_menu:
  279.  
  280.             # Desenha a surface principal
  281.             screen.blit(surf_menu, (3, 3))
  282.             screen.blit(surf_shad, (3, 3))
  283.  
  284.             # Desenha o bg da surface principal
  285.             surf_menu.blit(menu_bg, (0, 0))
  286.  
  287.             # Obtendo a posição do mouse
  288.             (m_x, m_y) = (pygame.mouse.get_pos())
  289.  
  290.             # Surface do botão configuração
  291.             if 90 + 180 > m_x > 90:
  292.                 if 292 + 35 > m_y > 292:
  293.                     surf_config.fill(gray)
  294.                     screen.blit(surf_config, (90, 292))
  295.  
  296.                     for event in pygame.event.get():
  297.                         if event.type == pygame.MOUSEBUTTONDOWN:
  298.                             print('Em construção =)')
  299.  
  300.             # Obtendo a posição do mouse
  301.             (m_x, m_y) = (pygame.mouse.get_pos())
  302.  
  303.             # Surface do botão quit
  304.             if 90 + 180 > m_x > 90:
  305.                 if 372 + 35 > m_y > 372:
  306.                     surf_quit.fill(gray)
  307.                     screen.blit(surf_quit, (90, 372))
  308.  
  309.                     for event in pygame.event.get():
  310.                         if event.type == pygame.MOUSEBUTTONDOWN:
  311.                             quit_menu = True
  312.  
  313.             # Obtendo a posição do mouse
  314.             (m_x, m_y) = (pygame.mouse.get_pos())
  315.  
  316.             # Surface do botão play
  317.             if 90 + 180 > m_x > 90:
  318.                 if 332 + 35 > m_y > 332:
  319.                     surf_play.fill(gray)
  320.                     screen.blit(surf_play, (90, 332))
  321.  
  322.                     for event in pygame.event.get():
  323.                         if event.type == pygame.MOUSEBUTTONDOWN:
  324.                             game = Game()
  325.                             game.main_loop()
  326.                             pygame.display.quit()
  327.                             exit(0)
  328.  
  329.             # Texto dos botões
  330.             screen.blit(config_label, (100, 300))
  331.             screen.blit(play_label, (100, 340))
  332.             screen.blit(quit_label, (100, 380))
  333.  
  334.             # Atualiza a tela
  335.             pygame.display.update()
  336.  
  337.             # Obtendo eventos
  338.             for event in pygame.event.get():
  339.  
  340.                 # Só entra em loop se existir evento
  341.                 if event:
  342.  
  343.                     # Sai do jogo
  344.                     if event.type == pygame.QUIT:
  345.                         quit_menu = True
  346.  
  347.         # Controle de fps
  348.         clock.tick(10)
  349.  
  350.  
  351. if __name__ == '__main__':
  352.     try:
  353.         menu = Menu()
  354.     except KeyboardInterrupt:
  355.         exit(0)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement