Ir para conteúdo
Fórum Script Brasil
  • 0

Duvida, restart e fluxo de tela (gamemenu)


O Berna

Pergunta

Olá amigos, estou estudando python, e tenho o código abaixo, com o jogo a funcionar perfeitamente.
Pois bem, eu gostaria de adicionar uma função após a checagem de vitoria/derrota, que permita o REINÍCIO da partida, sem eu precisar ter de sair da simulação no x e simular novamente pela idle.

O código segue abaixo:

# Importação das Bibliotecas
import pygame
from pygame.locals import *
import math
import random
# Iniciando o Jogo
pygame.init()
width, height = 1000, 480
screen = pygame.display.set_mode((width, height))
comando = [False, False, False, False]
heropos = [100,100]
precisao = [0,0]
projeteis = []
badtimer=100
badtimer1=0
badguys=[[640,100]]
healthvalue=194
# Carregando Imagens
hero = pygame.image.load("data/imgs/hero.png")
piso = pygame.image.load("data/imgs/piso.png")
prato = pygame.image.load("data/imgs/prato.png")
projetil = pygame.image.load("data/imgs/projetil.png")
badguyimg1 = pygame.image.load("data/imgs/zumbi.png")
badguyimg=badguyimg1
healthbar = pygame.image.load("data/imgs/healthbar.png")
health = pygame.image.load("data/imgs/health.png")
gameover = pygame.image.load("data/imgs/gameover.png")
youwin = pygame.image.load("data/imgs/youwin.png")
# 3.1 - Load audio
hit = pygame.mixer.Sound("data/audio/colisaoMesa.wav")
zumbi = pygame.mixer.Sound("data/audio/inimigo.wav")
shoot = pygame.mixer.Sound("data/audio/disparo.wav")
hitHero = pygame.mixer.Sound("data/audio/colisaoHeroi.wav")
hit.set_volume(1)
hitHero.set_volume(0.5)
zumbi.set_volume(0.50)
shoot.set_volume(0.25)
pygame.mixer.music.load('data/audio/trilha.wav')
pygame.mixer.music.play(-1, 0.0)
pygame.mixer.music.set_volume(0.25)
# LoopingGame
running = 1
exitcode = 0
while running:
badtimer-=1
# Limpar Ecrã
screen.fill(0)
# Tela de Fundo
for x in range (int(width/piso.get_width()+1)):
for y in range (int(height/piso.get_height()+1)):
screen.blit(piso,(x*100,y*100))
# Desenhar Mesas de Pratos #
screen.blit(prato,(0,10))
screen.blit(prato,(0,125))
screen.blit(prato,(0,240))
screen.blit(prato,(0,355 ))
# Posição e Rotação do Herói
posicao = pygame.mouse.get_pos()
angulo = math.atan2(posicao[1]-(heropos[1]+0),posicao[0]-(heropos[0]+0))
herorot = pygame.transform.rotate(hero, 360-angulo*57.29)
heropos1 = hero.get_rect()
heropos1.move_ip(heropos[0]-herorot.get_rect().width/2, heropos[1]-herorot.get_rect().height/2)
screen.blit(herorot, heropos1)
# Desenhar Projéteis
for bala in projeteis:
index=0
velx=math.cos(bala[0])*10
vely=math.sin(bala[0])*10
bala[1]+=velx
bala[2]+=vely
if bala[1]<-64 or bala[1]>1000 or bala[2]<-64 or bala[2]>480:
projeteis.pop(index)
index+=1
for disparo in projeteis:
projetilUm = pygame.transform.rotate(projetil, 360-disparo[0]*57.29)
screen.blit(projetilUm, (disparo[1], disparo[2]))
# 6.3 - Draw badgers
if badtimer==0:
badguys.append([1000, random.randint(50,430)])
badtimer=100-(badtimer1*2)
if badtimer1>=35:
badtimer1=35
else:
badtimer1+=5
index=0
for badguy in badguys:
if badguy[0]<-64:
badguys.pop(index)
badguy[0]-=7
# 6.3.1 - Attack castle
badrect=pygame.Rect(badguyimg.get_rect())
badrect.top=badguy[1]
badrect.left=badguy[0]
if badrect.left<64:
hit.play()
healthvalue -= random.randint(5,20)
badguys.pop(index)
#6.3.2 - Check for collisions
index1=0
if badrect.colliderect(heropos1):
hit.play()
hitHero.play()
healthvalue -= random.randint(5,20)
badguys.pop(index)
for bullet in projeteis:
bullrect=pygame.Rect(projetil.get_rect())
bullrect.left=bullet[1]
bullrect.top=bullet[2]
if badrect.colliderect(bullrect):
zumbi.play()
precisao[0]+=1
badguys.pop(index)
projeteis.pop(index1)
index1+=1
# 6.3.3 - Next bad guy
index+=1
for badguy in badguys:
screen.blit(badguyimg, badguy)
# 6.4 - Draw clock
font = pygame.font.Font(None, 50)
survivedtext = font.render(str(int((15000-pygame.time.get_ticks())/60000))+":"+str(int((15000-pygame.time.get_ticks())/1000%60)).zfill(2), True, (255,255,255))
textRect = survivedtext.get_rect()
textRect.topright=[950,5]
screen.blit(survivedtext, textRect)
# 6.5 - Draw health bar
screen.blit(healthbar, (125,2))
for health1 in range(healthvalue):
screen.blit(health, (health1+128,5))
# Atualizar Ecrã
pygame.display.flip()
# Disparar Eventos
for event in pygame.event.get():
# Checar Evento (Botão X de Sair)
if event.type==pygame.QUIT:
# Sair do Jogo
pygame.quit()
exit(0)
#Controles da Matriz de Movimento
if event.type == pygame.KEYDOWN:
if event.key==K_w:
comando[0]=True
elif event.key==K_a:
comando[1]=True
elif event.key==K_s:
comando[2]=True
elif event.key==K_d:
comando[3]=True
if event.type == pygame.KEYUP:
if event.key==pygame.K_w:
comando[0]=False
elif event.key==pygame.K_a:
comando[1]=False
elif event.key==pygame.K_s:
comando[2]=False
elif event.key==pygame.K_d:
comando[3]=False
#Controles da Matriz de Disparo do Projetil
if event.type==pygame.MOUSEBUTTONDOWN:
shoot.play()
posicao=pygame.mouse.get_pos()
precisao[1]+=1
projeteis.append([math.atan2(posicao[1]-(heropos1[1]+32),posicao[0]-(heropos1[0]+26)),heropos1[0]+32,heropos1[1]+32])
# Movimentação do Herói
if comando[0]:
heropos[1]-=5
elif comando[2]:
heropos[1]+=5
if comando[1]:
heropos[0]-=5
elif comando[3]:
heropos[0]+=5
#10 - Win/Lose check
if pygame.time.get_ticks()>=15000:
running=0
exitcode=1
if healthvalue<=0:
running=0
exitcode=0
if precisao[1]!=0:
accuracy=precisao[0]*1.0/precisao[1]*100
else:
accuracy=0
# 11 - Win/lose display
if exitcode==0:
pygame.font.init()
font = pygame.font.Font(None, 24)
text = font.render("Precisão de Acerto: "+str(float(accuracy))+"%", True, (255,0,0))
textRect = text.get_rect()
textRect.centerx = screen.get_rect().centerx
textRect.centery = screen.get_rect().centery+24
screen.blit(gameover, (0,0))
screen.blit(text, textRect)
else:
pygame.font.init()
font = pygame.font.Font(None, 24)
text = font.render("Accuracy: "+str(float(accuracy))+"%", True, (0,255,0))
textRect = text.get_rect()
textRect.centerx = screen.get_rect().centerx
textRect.centery = screen.get_rect().centery+24
screen.blit(youwin, (0,0))
screen.blit(text, textRect)
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit(0)
pygame.display.flip()
Editado por O Berna
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...