Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Game

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 8

import pygame #Biblioteca pygame

from menu import * #pegando o arquivo Menu / o uso de "*" aparentemente é para
incluir tudo
from pygame.locals import* #
import math, random, sys, os

class Game():
def __init__(self):
pygame.init()
pygame.display.set_caption("The Nerd Force")
self.running, self.playing = True, False
self.UP_KEY, self.DOWN_KEY, self.START_KEY, self.BACK_KEY = False, False,
False, False
self.DISPLAY_W, self.DISPLAY_H = 720, 480 # Tamanho da tela
self.display = pygame.Surface((self.DISPLAY_W,self.DISPLAY_H))
self.window = pygame.display.set_mode(((self.DISPLAY_W,self.DISPLAY_H)))
self.font_name = 'fonte/PressStart2P-vaV7.ttf'
#self.font_name = pygame.font.get_default_font()
self.BLACK, self.WHITE = (0, 0, 0), (255, 255, 255) #Definindo cores
self.main_menu = MainMenu(self) #Classes
self.options = OptionsMenu(self)
self.credits = CreditsMenu(self)
self.curr_menu = self.main_menu
self.intro = False

# IMAGENS DE INTRODUCAO
def introSlides(self):
current_image = 0
img_names = ["./slide/img1.png", "./slide/img2.png", "./slide/img3.png",
"./slide/img4.png",
"./slide/img5.png", "./slide/img6.png", "./slide/img7.png",
"./slide/img8.png",
"./slide/img9.png", "./slide/img10.png", "./slide/img11.png",
]

imgs = [pygame.image.load(img) for img in img_names]


display_surface = pygame.display.set_mode((1280, 720))
while self.intro:
events = pygame.event.get()
for event in events:
if event.type == pygame.MOUSEBUTTONUP:
current_image += 1
display_surface.blit(imgs[current_image], (0, 0))
pygame.display.update()
if current_image >= 10:
self.intro = False
self.playing = True

def game_loop(self):
while self.intro:
self.introSlides()
while self.playing:
self.check_events()
if self.START_KEY:
self.playing= False
#INICIO
# # # CONFIGURAÇÕES DE TELA
------------------------------------------------------------------
larguraTela, alturaTela = 1020, 620
metadeLargura = larguraTela / 2
metadeAltura = alturaTela / 2
areaTela = larguraTela * alturaTela
tela = pygame.display.set_mode((larguraTela, alturaTela))
bg = pygame.image.load("Cenario/bg2.png")
background = pygame.transform.scale(bg, (larguraTela, alturaTela))
pygame.display.set_caption("The Nerd Force")

pygame.init()
CLOCK = pygame.time.Clock()
FPS = 60
BLACK = (0, 0, 0)

# # # MUSICA
-----------------------------------------------------------------------------------
pygame.mixer.music.load('Musicas/sound_slide1.wav')
pygame.mixer.music.play(-1)

# # # PERSONAGEM
---------------------------------------------------------------------------------
scale_hero=[105,130]
left =
[pygame.transform.scale(pygame.image.load(os.path.join('Personagens',
'Tras1.png')),(scale_hero)),

pygame.transform.scale(pygame.image.load(os.path.join('Personagens', 'Tras2.png')),
(scale_hero)),

pygame.transform.scale(pygame.image.load(os.path.join('Personagens', 'Tras3.png')),
(scale_hero)),

pygame.transform.scale(pygame.image.load(os.path.join('Personagens', 'Tras4.png')),
(scale_hero)),

pygame.transform.scale(pygame.image.load(os.path.join('Personagens', 'Tras5.png')),
(scale_hero))
]
right =
[pygame.transform.scale(pygame.image.load(os.path.join('Personagens',
'Frente0.png')),(scale_hero)),

pygame.transform.scale(pygame.image.load(os.path.join('Personagens',
'Frente1.png')),(scale_hero)),

pygame.transform.scale(pygame.image.load(os.path.join('Personagens',
'Frente2.png')),(scale_hero)),

pygame.transform.scale(pygame.image.load(os.path.join('Personagens',
'Frente3.png')),(scale_hero)),

pygame.transform.scale(pygame.image.load(os.path.join('Personagens',
'Frente4.png')),(scale_hero))
]
tiro_left =
[pygame.transform.scale(pygame.image.load(os.path.join('Personagens',
'tiro1.png')), (scale_hero))]

tiro_right =
[pygame.transform.scale(pygame.image.load(os.path.join('Personagens',
'tiro2.png')), (scale_hero))]

bullet_img =
pygame.transform.scale(pygame.image.load(os.path.join('Bullets', 'bullet2.png')),
(20, 20))
x = 100
y = 395
radius = 80
vel = 5
move_left = False
move_right = False
stepIndex = 0

class Hero:
def __init__(self, x, y):
# walk
self.x = x
self.y = y
self.velx = 5
self.vely = 15
self.face_right = True
self.face_left = False
self.stepIndex = 0
# Jump
self.jump = False
# Bullet
self.bullets = []
self.cool_down_count = 0
# Health
self.hitbox = (self.x, self.y, 64, 64)
self.health = 40
self.lives = 1
self.alive = True

def move_hero(self, userInput):


if userInput[pygame.K_d] and self.x <= larguraTela - radius:
self.x += self.velx
self.face_right = True
self.face_left = False
elif userInput[pygame.K_a] and self.x >= 0:
self.x -= self.velx
self.face_right = False
self.face_left = True
else:
self.stepIndex = 0

def draw(self, tela):


self.hitbox = (self.x, self.y, 78, 90)
pygame.draw.rect(tela, (255, 0, 0), (self.x + 30, self.y - 10,
40, 10))
if self.health >= 0:
pygame.draw.rect(tela, (0, 255, 0), (self.x + 30, self.y -
10, self.health, 10))
if self.stepIndex >= 16:
self.stepIndex = 0
if self.face_left:
tela.blit(left[self.stepIndex // 4], (self.x, self.y))
self.stepIndex += 1
if self.face_right:
tela.blit(right[self.stepIndex // 4], (self.x, self.y))
self.stepIndex += 1

def jump_motion(self, userInput):


if userInput[pygame.K_w] and self.jump is False:
jumpvar = pygame.mixer.Sound('Musicas/jump.wav')
jumpvar.play()
self.jump = True
if self.jump:
self.y -= self.vely * 1.1
self.vely -= 1
if self.vely < -15:
self.jump = False
self.vely = 15

def direction(self):
if self.face_right:
return 1
if self.face_left:
return -1

def cooldown(self):
if self.cool_down_count >= 20:
self.cool_down_count = 0
elif self.cool_down_count > 0:
self.cool_down_count += 1

def shoot(self):
self.hit()
self.cooldown()
if (userInput[pygame.K_SPACE] and self.cool_down_count == 0):
shootvar=pygame.mixer.Sound('Musicas/laser3.wav')
shootvar.play()
bullet = Bullet(self.x, self.y, self.direction())
self.bullets.append(bullet)
self.cool_down_count = 1
for bullet in self.bullets:
bullet.move()
if bullet.off_screen():
self.bullets.remove(bullet)

def hit(self):
for enemy in enemies:
for bullet in self.bullets:
if enemy.hitbox[0] < bullet.x < enemy.hitbox[0] +
enemy.hitbox[2] and enemy.hitbox[
1] < bullet.y < enemy.hitbox[1] + enemy.hitbox[3]:
enemy.health -= 25
player.bullets.remove(bullet)

class Bullet:
def __init__(self, x, y, direction):
self.x = x + 70
self.y = y + 50
self.direction = direction

def draw_bullet(self):
tela.blit(bullet_img, (self.x, self.y))
def move(self):
if self.direction == 1:
self.x += 15
if self.direction == -1:
self.x -= 15

def off_screen(self):
return not (self.x >= 0 and self.x <= larguraTela)

# INIMIGO
-----------------------------------------------------------------------------------
-----
scale_enimy=[100,100]
left_enemy = [

pygame.transform.scale(pygame.image.load(os.path.join('Inimigos', 'T5.png')),
(scale_enimy)),

pygame.transform.scale(pygame.image.load(os.path.join('Inimigos', 'T6.png')),
(scale_enimy)),

pygame.transform.scale(pygame.image.load(os.path.join('Inimigos', 'T7.png')),
(scale_enimy)),

pygame.transform.scale(pygame.image.load(os.path.join('Inimigos', 'T8.png')),
(scale_enimy)),

pygame.transform.scale(pygame.image.load(os.path.join('Inimigos', 'T9.png')),
(scale_enimy)),

pygame.transform.scale(pygame.image.load(os.path.join('Inimigos', 'T10.png')),
(scale_enimy))
]
right_enemy = [

pygame.transform.scale(pygame.image.load(os.path.join('Inimigos', 'F5.png')),
(scale_enimy)),

pygame.transform.scale(pygame.image.load(os.path.join('Inimigos', 'F6.png')),
(scale_enimy)),

pygame.transform.scale(pygame.image.load(os.path.join('Inimigos', 'F7.png')),
(scale_enimy)),

pygame.transform.scale(pygame.image.load(os.path.join('Inimigos', 'F8.png')),
(scale_enimy)),

pygame.transform.scale(pygame.image.load(os.path.join('Inimigos', 'F9.png')),
(scale_enimy)),

pygame.transform.scale(pygame.image.load(os.path.join('Inimigos', 'F10.png')),
(scale_enimy))
]

class Enemy:
def __init__(self, x, y, direction):
self.x = x
self.y = y
self.direction = direction
self.stepIndex = 0
# Health
self.hitbox = (self.x, self.y, 64, 64)
self.health = 40

def step(self):
if self.stepIndex >= 32:
self.stepIndex = 0

def draw(self, tela):


self.hitbox = (self.x, self.y, 78, 90)
pygame.draw.rect(tela, (255, 0, 0), (self.x + 20, self.y - 10,
40, 10))
if self.health >= 0:
pygame.draw.rect(tela, (0, 255, 0), (self.x + 20, self.y -
10, self.health, 10))
self.step()
if self.direction == left:
tela.blit(left_enemy[self.stepIndex // 6], (self.x,
self.y))
if self.direction == right:
tela.blit(right_enemy[self.stepIndex // 6], (self.x,
self.y))
self.stepIndex += 1

def move(self):
self.hit()
if self.direction == left:
self.x -= 3
if self.direction == right:
self.x += 3

def hit(self):
if player.hitbox[0] < enemy.x + 32 < player.hitbox[0] +
player.hitbox[2] and player.hitbox[1] < enemy.y + 32 < player.hitbox[1] +
player.hitbox[3]:
if player.health > 0:
player.health -= 1
if player.health == 0 and player.lives > 0:
player.lives -= 1
player.health = 40
elif player.health == 0 and player.lives == 0:
player.alive = False

def off_screen(self):
return not (self.x >= -80 and self.x <= larguraTela + 30)

# # # FUNÇÃO TELA
------------------------------------------------------------------------------
def draw_game():
tela.fill(BLACK)
tela.blit(background, (0, 0))
# Draw Player
player.draw(tela)
# Draw Bullets
for bullet in player.bullets:
bullet.draw_bullet()
# Draw Enemies
for enemy in enemies:
enemy.draw(tela)
# Player Health
if player.alive == False:
tela.fill((0, 0, 0))
font = pygame.font.Font('fonte/PressStart2P-vaV7.ttf', 32)
text = font.render('GAME OVER! aperte R', True, (104, 47, 47))
textRect = text.get_rect()
textRect.center = (metadeLargura, metadeAltura)
tela.blit(text, textRect)
if userInput[pygame.K_r]:
player.alive = True
player.lives = 1
player.health = 40
font = pygame.font.Font('fonte/PressStart2P-vaV7.ttf', 27)
text = font.render('Pontos: ' + str(kills) + ' Vidas: ' +
str(player.lives), True, (60, 178, 209))
tela.blit(text, (90, 20))

pygame.display.update()
CLOCK.tick(FPS)

player = Hero(250, 410)


enemies = []
kills = 0

# # # LOOP
------------------------------------------------------------------------
run = True
while run:

# # # FECHAR TELA
------------------------------------------------------------
for i in pygame.event.get():
if i.type == pygame.QUIT:
pygame.quit()
sys.exit()
# Input
userInput = pygame.key.get_pressed()

# shoot
player.shoot()

# Movement
player.move_hero(userInput)
player.jump_motion(userInput)

# # # CONTROLE INIMIGOS
if len(enemies) == 0:
rand_nr = random.randint(0, 1)
if rand_nr == 1:
enemy = Enemy(1010, 407, left)
enemies.append(enemy)
if rand_nr == 0:
enemy = Enemy(0, 407, right)
enemies.append(enemy)
for enemy in enemies:
enemy.move()
if enemy.off_screen() or enemy.health <= 0:
enemies.remove(enemy)
if enemy.health <= 0:
kills += 1

# Draw game in windows


draw_game()

#FIM

def check_events(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.running, self.playing = False, False
self.curr_menu.run_display = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RETURN:
self.START_KEY = True
if event.key == pygame.K_BACKSPACE or event.key == pygame.K_ESCAPE:
self.BACK_KEY = True
if event.key == pygame.K_DOWN or event.key == pygame.K_s:
self.DOWN_KEY = True
if event.key == pygame.K_UP or event.key == pygame.K_w:
self.UP_KEY = True

def reset_keys(self):
self.UP_KEY, self.DOWN_KEY, self.START_KEY, self.BACK_KEY = False, False,
False, False

def draw_text(self, text, size, x, y ): #Cor da letra, tamanho


font = pygame.font.Font(self.font_name,size)
text_surface = font.render(text, True, self.WHITE)
text_rect = text_surface.get_rect()
text_rect.center = (x,y)
self.display.blit(text_surface,text_rect)

You might also like