Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- from threading import Thread
- import pygame
- class Game(object):
- def __init__(self):
- # Iniciando o jogo
- pygame.init()
- # Largura e altura padrão
- self.width, self.height = 840, 680
- # Setando configurações da tela
- self.screen = pygame.display.set_mode((self.width, self.height))
- pygame.display.set_caption('Cyber War')
- # Variavel de parada do jogo
- self.quit_game = False
- # Escondendo o mouse
- pygame.mouse.set_visible(False)
- # Centalizando a posição do mouse na tela do jogo
- pygame.mouse.set_pos(self.width / 2, self.height / 2)
- # Tratando a posição anterior do mouse
- self.m_x, self.m_y = 0, 0
- # Sons do jogo
- # music = pygame.mixer.Sound('Sounds/sound.ogg')
- # music.play()
- # Imagens
- self.stars = pygame.image.load_extended('Images/stars.png')
- self.nave = pygame.image.load_extended('Images/nave.png')
- # Cores
- self.white = (255, 255, 255, 100)
- self.rosy_brown = (139, 105, 105)
- self.azure = (131, 139, 139)
- self.green = (127, 255, 0)
- self.gray = (59, 57, 63)
- self.black = (0, 0, 0)
- # Surface
- self.surf_game = pygame.Surface((self.width - 4, self.height - 84))
- # Surface que recebe a munição
- self.target_surf = pygame.Surface((self.width, 15))
- self.target_rect = pygame.Rect(0, 0, self.width, 15)
- # Variavel que pausa o jogo
- self.pause = False
- # Retângulo da nave (oculto)
- self.rect = pygame.Rect(0, 0, 60, 60)
- # Variaveis da nave da nave
- self.lifes = 3
- self.bullet = pygame.Rect(0, 0, 3, 9)
- self.bullet_speed = 18
- self.shoots_given = 0
- # Controla o disparo da nave
- self.shoot = False
- # Setando a fontes de texto
- self.font_default = pygame.font.SysFont('monospace', 15)
- # Setando os fps
- self.clock = pygame.time.Clock()
- self.fps = 30
- # Pausa no jogo
- def pause_game(self):
- pygame.mouse.set_visible(True)
- # Pause loop
- while self.pause:
- for event in pygame.event.get():
- # Só entra em loop se houver evento
- if event:
- # Sai do jogo
- if event.type == pygame.QUIT:
- pygame.quit()
- exit(0)
- # Eventos do tipo pressionamento de teclas
- if event.type == pygame.KEYDOWN:
- # Sai do loop pause com a letra "p"
- if event.key == pygame.K_p:
- # Devolve a posição do mouse
- pygame.mouse.set_pos(self.m_x, self.m_y)
- # Esconde o mouse
- pygame.mouse.set_visible(False)
- # Desativa o pause
- self.pause = False
- # Atualiza a tela
- pygame.display.update()
- # Fps do loop 'pause'
- self.clock.tick(10)
- # Função que inicia o disparo
- def shooting(self):
- self.bullet = pygame.Rect(self.rect.left + 29, self.rect.top, 3, 9)
- self.shoots_given += 1
- self.shoot = True
- # Função principal
- def main_loop(self):
- # Loop principal
- while not self.quit_game:
- # Bg da tela
- self.screen.fill(self.gray)
- # Desenhando a 1° surface
- self.screen.blit(self.surf_game, (2, 2))
- # Desenhando o 1° retângulo, o qual segue o mouse
- pygame.draw.rect(self.surf_game, self.white, self.rect)
- # Bg da 1° surface
- self.surf_game.blit(self.stars, (0, 0))
- # Desenhando a surface target
- self.screen.blit(self.target_surf, (0, 0))
- pygame.draw.rect(self.target_surf, self.gray, self.target_rect)
- # Obtendo posição do mouse
- (self.rect.left, self.rect.top) = (pygame.mouse.get_pos())
- # Dispara o tiro
- if self.shoot:
- # Desenha a munição
- pygame.draw.rect(self.surf_game, self.green, self.bullet)
- # Move a munição
- self.bullet.top -= self.bullet_speed
- # Se munição atingir o topo
- # prepara para outro tiro
- if self.bullet.top <= 0:
- self.shoot = False
- # Ajustando a nave com o mouse
- self.rect.left -= 32
- self.rect.top -= 40
- # Nave segue o retângulo
- (m_x, m_y) = pygame.mouse.get_pos()
- if m_x > 0:
- self.surf_game.blit(self.nave, (self.rect.left, self.rect.top))
- # Setando as Labels de texto
- label0 = self.font_default.render('pos_x: {:<3} pos_y: {:<3}'.format(self.rect.left, self.rect.top),
- 1, self.green)
- label1 = self.font_default.render('Tiros: {:<3} Vidas: {:<3}'.format(self.shoots_given, self.lifes),
- 1, self.green)
- # Desenhando a label de texto
- self.screen.blit(label0, (10, self.height - 60))
- self.screen.blit(label1, (10, self.height - 40))
- # Atualizando
- pygame.display.update()
- # Obtendo eventos
- for event in pygame.event.get():
- # Só entra em loop se existir evento
- if event:
- # Sai do jogo
- if event.type == pygame.QUIT:
- self.quit_game = True
- # Evento de click de mouse
- elif event.type == pygame.MOUSEBUTTONDOWN:
- # Trava tiro único
- if not self.shoot:
- # Inicia um thread para o disparo
- t = Thread(target=self.shooting)
- t.start()
- # Pressionamento de teclas
- elif event.type == pygame.KEYDOWN:
- # Entra em pausa com a letra 'p'
- if event.key == pygame.K_p:
- # Memoriza a posição do mouse
- (self.m_x, self.m_y) = pygame.mouse.get_pos()
- # Aciona o pause
- self.pause = True
- # Chamada da função que
- # trata o pause do jogo
- self.pause_game()
- # Ajustando os fps
- self.clock.tick(self.fps)
- class Menu(object):
- def __init__(self):
- # Inicia o menu
- pygame.init()
- # Altura e largura
- width, height = 560, 625
- # Imagens
- menu_bg = pygame.image.load_extended('Images/menu_bg.png')
- # Cores
- # white = (255, 255, 255)
- dim_gray = (51, 58, 65)
- gray = (163, 163, 163)
- green = (127, 255, 0)
- # Tela
- screen = pygame.display.set_mode((width, height))
- pygame.display.set_caption('Cyber War - Menu')
- screen.fill(dim_gray)
- # Variavel que controla a saída
- quit_menu = False
- # Surface principal
- surf_menu = pygame.Surface((width - 6, height - 6))
- surf_shad = pygame.Surface((width - 6, height - 6))
- surf_shad.set_alpha(140)
- # Surface dos botoẽs
- surf_config = pygame.Surface((180, 35))
- surf_config.set_alpha(60)
- surf_play = pygame.Surface((180, 35))
- surf_play.set_alpha(60)
- surf_quit = pygame.Surface((180, 35))
- surf_quit.set_alpha(60)
- # Item "configuração" do menu
- font_menu = pygame.font.SysFont('comic', 30, 5)
- font_menu.set_italic(True)
- config_label = font_menu.render('Configuração', 1, green)
- # Item "play" do menu
- play_label = font_menu.render('Play', 1, green)
- # Item "quit" do menu
- quit_label = font_menu.render('Quit', 1, green)
- # Posicionando o mouse
- pygame.mouse.set_pos(140, 300)
- # Instância controle de fps
- clock = pygame.time.Clock()
- while not quit_menu:
- # Desenha a surface principal
- screen.blit(surf_menu, (3, 3))
- screen.blit(surf_shad, (3, 3))
- # Desenha o bg da surface principal
- surf_menu.blit(menu_bg, (0, 0))
- # Obtendo a posição do mouse
- (m_x, m_y) = (pygame.mouse.get_pos())
- # Surface do botão configuração
- if 90 + 180 > m_x > 90:
- if 292 + 35 > m_y > 292:
- surf_config.fill(gray)
- screen.blit(surf_config, (90, 292))
- for event in pygame.event.get():
- if event.type == pygame.MOUSEBUTTONDOWN:
- print('Em construção =)')
- # Obtendo a posição do mouse
- (m_x, m_y) = (pygame.mouse.get_pos())
- # Surface do botão quit
- if 90 + 180 > m_x > 90:
- if 372 + 35 > m_y > 372:
- surf_quit.fill(gray)
- screen.blit(surf_quit, (90, 372))
- for event in pygame.event.get():
- if event.type == pygame.MOUSEBUTTONDOWN:
- quit_menu = True
- # Obtendo a posição do mouse
- (m_x, m_y) = (pygame.mouse.get_pos())
- # Surface do botão play
- if 90 + 180 > m_x > 90:
- if 332 + 35 > m_y > 332:
- surf_play.fill(gray)
- screen.blit(surf_play, (90, 332))
- for event in pygame.event.get():
- if event.type == pygame.MOUSEBUTTONDOWN:
- game = Game()
- game.main_loop()
- pygame.display.quit()
- exit(0)
- # Texto dos botões
- screen.blit(config_label, (100, 300))
- screen.blit(play_label, (100, 340))
- screen.blit(quit_label, (100, 380))
- # Atualiza a tela
- pygame.display.update()
- # Obtendo eventos
- for event in pygame.event.get():
- # Só entra em loop se existir evento
- if event:
- # Sai do jogo
- if event.type == pygame.QUIT:
- quit_menu = True
- # Controle de fps
- clock.tick(10)
- if __name__ == '__main__':
- try:
- menu = Menu()
- except KeyboardInterrupt:
- exit(0)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement