From b72ff1d2ae6fccdb120f0dbf1bec7d5cf493e3ce Mon Sep 17 00:00:00 2001 From: matheus-1618 Date: Thu, 23 Sep 2021 18:04:20 -0300 Subject: [PATCH 1/2] =?UTF-8?q?Abstra=C3=A7=C3=A3o:=20Criando=20superclass?= =?UTF-8?q?e=20Pirata.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sprites.py | 150 ++++++++++++++--------------------------------------- 1 file changed, 38 insertions(+), 112 deletions(-) diff --git a/sprites.py b/sprites.py index 6539369..46fba04 100644 --- a/sprites.py +++ b/sprites.py @@ -309,10 +309,12 @@ def __init__(self, jogo, x, y, w, h): self.rect.x = x self.rect.y = y -class Pirata_esquerda(pygame.sprite.Sprite): +# Abstração: +from abc import ABC, abstractmethod +class Pirata (pygame.sprite.Sprite, ABC): def __init__(self,jogo,img,x,y): - self.groups = jogo.all_sprites,jogo.pirates_l1,jogo.pirates_l2 - pygame.sprite.Sprite.__init__(self,self.groups) + self.groups = jogo.all_sprites + # pygame.sprite.Sprite.__init__(self,self.groups) self.jogo=jogo self.image = img self.rect = self.image.get_rect() @@ -320,27 +322,19 @@ def __init__(self,jogo,img,x,y): self.hit_rect.center = self.rect.center self.pos = vec(x,y) self.rect.center = self.pos - self.dir = vec(-1,0) self.speed= choice(PIRATA_SPEED) + self.dir = vec(-1,0) self.vel = self.dir *self.speed self.last_position = vec(x,y) - self.health =PIRATA_HEALTH self.distance = vec(0,0) + self.health =PIRATA_HEALTH self.last_update = pygame.time.get_ticks() - def update(self): self.vel = self.dir *self.speed self.pos += self.vel* self.jogo.dt self.rect.center = self.pos self.hit_rect.centerx= self.pos.x - - #Respawnando após sair do mapa ou "morrer" - if self.pos.x < - 20: - self.jogo.resnasce('pirate_l') - if self.health <= 0: - self.jogo.xp_total+=PIRATA_XP - self.jogo.resnasce('pirate_l') def draw_health(self): if self.health >= 10: @@ -354,77 +348,50 @@ def draw_health(self): if self.health < PIRATA_HEALTH: pygame.draw.rect(self.image, col, self.health_bar) -class Pirata_direita(pygame.sprite.Sprite): + +class Pirata_esquerda(Pirata): def __init__(self,jogo,img,x,y): + super().__init__(jogo, img, x, y) + self.groups = jogo.all_sprites,jogo.pirates_l1,jogo.pirates_l2 + pygame.sprite.Sprite.__init__(self,self.groups) + self.dir = vec(-1,0) + + def update(self): + super().update() + #Respawnando após sair do mapa ou "morrer" + if self.pos.x < - 20: + self.jogo.resnasce('pirate_l') + if self.health <= 0: + self.jogo.xp_total+=PIRATA_XP + self.jogo.resnasce('pirate_l') + +class Pirata_direita(Pirata): + def __init__(self,jogo,img,x,y): + super().__init__(jogo, img, x, y) self.groups = jogo.all_sprites, jogo.pirates_r1,jogo.pirates_r2 pygame.sprite.Sprite.__init__(self,self.groups) - self.jogo=jogo - self.image = img - self.rect = self.image.get_rect() - self.hit_rect = PIRATA_HIT_RECT.copy() - self.hit_rect.center = self.rect.center - self.pos = vec(x,y) - self.rect.center = self.pos self.dir = vec(1,0) - self.speed= choice(PIRATA_SPEED) - self.vel = self.dir *self.speed - self.last_position = vec(x,y) - self.distance = vec(0,0) - self.health =PIRATA_HEALTH - self.last_update = pygame.time.get_ticks() - def update(self): - self.vel = self.dir *self.speed - self.pos += self.vel* self.jogo.dt - self.rect.center = self.pos - self.hit_rect.centerx= self.pos.x + super().update() #Respawnando após sair do mapa ou "morrer" if self.pos.x > self.jogo.map.width: self.jogo.resnasce('pirate_r') if self.health <= 0: self.jogo.xp_total+=PIRATA_XP self.jogo.resnasce('pirate_r') - - def draw_health(self): - if self.health > 15: - col = GREEN - elif self.health > 10: - col = YELLOW - else: - col = RED - width = int(self.rect.width * self.health / PIRATA_HEALTH) - self.health_bar = pygame.Rect(0, 0, width, 6) - if self.health < PIRATA_HEALTH: - pygame.draw.rect(self.image, col, self.health_bar) -class Pirata_cima(pygame.sprite.Sprite): +class Pirata_cima(Pirata): def __init__(self,jogo,img,x,y): - self.groups = jogo.all_sprites,jogo.pirates_b1,jogo.pirates_b2 - pygame.sprite.Sprite.__init__(self,self.groups) - self.jogo=jogo - self.image = img - self.rect = self.image.get_rect() - self.hit_rect = PIRATA_HIT_RECT.copy() - self.hit_rect.center = self.rect.center - self.pos = vec(x,y) - self.rect.center = self.pos + super().__init__(jogo, img, x, y) + self.groups = jogo.all_sprites,jogo.pirates_b1,jogo.pirates_b2 + pygame.sprite.Sprite.__init__(self,self.groups) self.dir = vec(0,-1) - self.speed= choice(PIRATA_SPEED) - self.vel = self.dir *self.speed - self.last_position = vec(x,y) - self.distance = vec(0,0) - self.health =PIRATA_HEALTH - self.last_update = pygame.time.get_ticks() - def update(self): - self.vel = self.dir *self.speed - self.pos += self.vel* self.jogo.dt - self.rect.center = self.pos - self.hit_rect.centerx= self.pos.x - + + super().update() #Respawnando após sair do mapa ou "morrer" if self.pos.y < - 20: self.jogo.resnasce('pirate_b') @@ -432,64 +399,23 @@ def update(self): self.jogo.xp_total+=PIRATA_XP self.jogo.resnasce('pirate_b') - def draw_health(self): - if self.health > 15: - col = GREEN - elif self.health > 10: - col = YELLOW - else: - col = RED - width = int(self.rect.width * self.health / PIRATA_HEALTH) - self.health_bar = pygame.Rect(0, 0, width, 6) - if self.health < PIRATA_HEALTH: - pygame.draw.rect(self.image, col, self.health_bar) - - -class Pirata_baixo(pygame.sprite.Sprite): +class Pirata_baixo(Pirata): def __init__(self,jogo,img,x,y): + super().__init__(jogo, img, x, y) self.groups = jogo.all_sprites, jogo.pirates_t1, jogo.pirates_t2 pygame.sprite.Sprite.__init__(self,self.groups) - self.jogo = jogo - self.image = img - self.rect = self.image.get_rect() - self.hit_rect = PIRATA_HIT_RECT.copy() - self.hit_rect.center = self.rect.center - self.pos = vec(x,y) - self.rect.center = self.pos self.dir = vec(0,1) - self.speed= choice(PIRATA_SPEED) - self.vel = self.dir *self.speed - self.last_position = vec(x,y) - self.distance = vec(0,0) - self.health =PIRATA_HEALTH - self.last_update = pygame.time.get_ticks() - - def update(self): - self.vel = self.dir *self.speed - self.pos += self.vel* self.jogo.dt - self.rect.center = self.pos - self.hit_rect.centerx= self.pos.x - + + super().update() #Respawnando após sair do mapa ou "morrer" if (self.pos.y > 20+ self.jogo.map.height): self.jogo.resnasce('pirate_t') if self.health <= 0: self.jogo.xp_total+=PIRATA_XP self.jogo.resnasce('pirate_t') - - def draw_health(self): - if self.health > 15: - col = GREEN - elif self.health > 10: - col = YELLOW - else: - col = RED - width = int(self.rect.width * self.health / PIRATA_HEALTH) - self.health_bar = pygame.Rect(0, 0, width, 6) - if self.health < PIRATA_HEALTH: - pygame.draw.rect(self.image, col, self.health_bar) + #------Barra de vida do barco------# def draw_boat_health(surf, x, y, pct): From 26a1d022a502eb3f204981e33dbe7918d045693f Mon Sep 17 00:00:00 2001 From: matheus-1618 Date: Thu, 23 Sep 2021 18:10:37 -0300 Subject: [PATCH 2/2] =?UTF-8?q?Coes=C3=A3o:=20Criando=20fun=C3=A7=C3=A3o?= =?UTF-8?q?=20sortea=5Fposicao.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OneBit.py | 154 +++++++++++++++-------------------------------------- sprites.py | 25 +++------ 2 files changed, 51 insertions(+), 128 deletions(-) diff --git a/OneBit.py b/OneBit.py index 79db30a..498261a 100644 --- a/OneBit.py +++ b/OneBit.py @@ -210,6 +210,7 @@ def new(self): self.init_load = False self.last_respawn= pygame.time.get_ticks() self.last_spawn = pygame.time.get_ticks() + #------Criando sprites------# self.all_sprites = pygame.sprite.Group() #Grupo geral @@ -234,18 +235,23 @@ def new(self): self.cannon4=pygame.sprite.Group() #Criando sprites de itens: - self.Meat1= pygame.sprite.Group() - self.Meat2= pygame.sprite.Group() - self.Meat3= pygame.sprite.Group() - self.Meat4= pygame.sprite.Group() - self.Rum1= pygame.sprite.Group() - self.Rum2= pygame.sprite.Group() - self.Rum3= pygame.sprite.Group() - self.Rum4= pygame.sprite.Group() - self.tesouro1= pygame.sprite.Group() - self.tesouro2= pygame.sprite.Group() - self.tesouro3= pygame.sprite.Group() - self.tesouro4= pygame.sprite.Group() + # self.Meat1= pygame.sprite.Group() + # self.Meat2= pygame.sprite.Group() + # self.Meat3= pygame.sprite.Group() + # self.Meat4= pygame.sprite.Group() + # self.Rum1= pygame.sprite.Group() + # self.Rum2= pygame.sprite.Group() + # self.Rum3= pygame.sprite.Group() + # self.Rum4= pygame.sprite.Group() + # self.tesouro1= pygame.sprite.Group() + # self.tesouro2= pygame.sprite.Group() + # self.tesouro3= pygame.sprite.Group() + # self.tesouro4= pygame.sprite.Group() + + # Itens + self.lista_meat = [pygame.sprite.Group() for i in range(0,4)] + self.lista_rum = [pygame.sprite.Group() for i in range(0,4)] + self.lista_tesouro = [pygame.sprite.Group() for i in range(0,4)] #------Criando objetos no mapa------# @@ -325,38 +331,23 @@ def new(self): self.camera = Camera(self.map.width, self.map.height) self.draw_debug = False + def sortea_posicao (self, listaItem, tipoDeObjeto, string, tamanho): + aleatorio = choice(range(1,5)) + + for i in range(1,tamanho+1): + if aleatorio == i : self.spawan_na_posicaoX (listaItem, tipoDeObjeto, string, i) + + def spawan_na_posicaoX (self, lista_item, tipoDeObjeto,string, num): + + for sprite in lista_item[num-1].sprites(): + sprite.kill() + self.last_spawn = pygame.time.get_ticks() #Pegando tempo de spawn + for tile_object in self.map.tmxdata.objects: + if tile_object.name == string + str(num): #Na posicao X que será spawnado + tipoDeObjeto(self,tile_object.x, tile_object.y) + + def resnasce(self,string): - #Spawnando tesouros pelo mapa - if string == 'Tesouro': - aleatorio=choice([1,2,3,4]) #Sorteando posição de respawn - if aleatorio==1: - for sprite in self.tesouro1.sprites(): - sprite.kill() - self.last_spawn = pygame.time.get_ticks() #Pegando tempo de spawn - for tile_object in self.map.tmxdata.objects: - if tile_object.name == 'Tesouro1': #Posição 1 - Tesouro(self,tile_object.x, tile_object.y) - if aleatorio==2: - for sprite in self.tesouro2.sprites(): - sprite.kill() - self.last_spawn = pygame.time.get_ticks() #Pegando tempo de spawn - for tile_object in self.map.tmxdata.objects: - if tile_object.name == 'Tesouro2': #Posição 2 - Tesouro(self,tile_object.x, tile_object.y) - if aleatorio==3: - for sprite in self.tesouro3.sprites(): - sprite.kill() - self.last_spawn = pygame.time.get_ticks() #Pegando tempo de spawn - for tile_object in self.map.tmxdata.objects: - if tile_object.name == 'Tesouro3': #Posição 3 - Tesouro(self,tile_object.x, tile_object.y) - if aleatorio==4: - for sprite in self.tesouro4.sprites(): - sprite.kill() - self.last_spawn = pygame.time.get_ticks() #Pegando tempo de spawn - for tile_object in self.map.tmxdata.objects: - if tile_object.name == 'Tesouro4': #Posição 4 - Tesouro(self,tile_object.x, tile_object.y) #Spawnando canhões nas ilhas if string=='cannons': @@ -452,69 +443,17 @@ def resnasce(self,string): if tile_object.name == 'pirate_b2': Pirata_cima(self,self.pirate_cima[PIRATA_CIMA], tile_object.x, tile_object.y) + #Spawnando tesouros pelo mapa + if string == 'Tesouro': + self.sortea_posicao(self.lista_tesouro, Tesouro ,'Tesouro',4) + #Respawn Carnes: if string == 'Meat': - aleatorio=choice([1,2,3,4]) #Sorteando posição de respawn - if aleatorio==1: - for sprite in self.Meat1.sprites(): - sprite.kill() - self.last_spawn = pygame.time.get_ticks() #Pegando tempo de spawn - for tile_object in self.map.tmxdata.objects: - if tile_object.name == 'Meat1': #Posição 1 - Carne(self,tile_object.x, tile_object.y) - if aleatorio==2: - for sprite in self.Meat2.sprites(): - sprite.kill() - self.last_spawn = pygame.time.get_ticks() #Pegando tempo de spawn - for tile_object in self.map.tmxdata.objects: - if tile_object.name == 'Meat2': #Posição 2 - Carne(self,tile_object.x, tile_object.y) - if aleatorio==3: - for sprite in self.Meat3.sprites(): - sprite.kill() - self.last_spawn = pygame.time.get_ticks() #Pegando tempo de spawn - for tile_object in self.map.tmxdata.objects: - if tile_object.name == 'Meat3': #Posição 3 - Carne(self,tile_object.x, tile_object.y) - if aleatorio==4: - for sprite in self.Meat2.sprites(): - sprite.kill() - self.last_spawn = pygame.time.get_ticks() #Pegando tempo de spawn - for tile_object in self.map.tmxdata.objects: - if tile_object.name == 'Meat4': #Posição 4 - Carne(self,tile_object.x, tile_object.y) + self.sortea_posicao(self.lista_meat, Carne,'Meat',4) #Respawn Rum: if string == 'Rum': - aleatorio=choice([1,2,3,4]) #Sorteando posição de respawn - if aleatorio==1: - for sprite in self.Rum1.sprites(): - sprite.kill() - self.last_spawn = pygame.time.get_ticks() #Pegando tempo de spawn - for tile_object in self.map.tmxdata.objects: - if tile_object.name == 'Rum1': #Posição 1 - Rum(self,tile_object.x, tile_object.y) - if aleatorio==2: - for sprite in self.Rum2.sprites(): - sprite.kill() - self.last_spawn = pygame.time.get_ticks() #Pegando tempo de spawn - for tile_object in self.map.tmxdata.objects: - if tile_object.name == 'Rum2': #Posição 2 - Rum(self,tile_object.x, tile_object.y) - if aleatorio==3: - for sprite in self.Rum3.sprites(): - sprite.kill() - self.last_spawn = pygame.time.get_ticks() #Pegando tempo de spawn - for tile_object in self.map.tmxdata.objects: - if tile_object.name == 'Rum3': #Posição 3 - Rum(self,tile_object.x, tile_object.y) - if aleatorio==4: - for sprite in self.Rum4.sprites(): - sprite.kill() - self.last_spawn = pygame.time.get_ticks() #Pegando tempo de spawn - for tile_object in self.map.tmxdata.objects: - if tile_object.name == 'Rum4': #Posição 4 - Rum(self,tile_object.x, tile_object.y) + self.sortea_posicao(self.lista_rum, Rum,'Rum',4) def run(self): @@ -908,9 +847,7 @@ def update(self): #------Player colide com Itens------# - lista_tesouro=[self.tesouro1, self.tesouro2, self.tesouro3, self.tesouro4] - - for i in lista_tesouro: + for i in self.lista_tesouro: hits = pygame.sprite.spritecollide (self.boat, i, False, pygame.sprite.collide_mask) for hit in hits: channel2=self.sound_effects['pirata2'].play() @@ -920,9 +857,7 @@ def update(self): #Criando lista para armazenar carne - lista_carne=[self.Meat1, self.Meat2, self.Meat3, self.Meat4] - - for i in lista_carne: + for i in self.lista_meat: hits = pygame.sprite.spritecollide (self.boat, i, False, pygame.sprite.collide_mask) for hit in hits: channel2=self.sound_effects['pirata4'].play() @@ -930,11 +865,8 @@ def update(self): self.xp_total+=CARNE_XP hit.kill() self.resnasce('Meat') - - #Criando lista para armazenar bebida - lista_rum=[self.Rum1, self.Rum2, self.Rum3, self.Rum4] - for i in lista_rum: + for i in self.lista_rum: hits = pygame.sprite.spritecollide (self.boat, i, False, pygame.sprite.collide_mask) for hit in hits: channel2=self.sound_effects['pirata3'].play() diff --git a/sprites.py b/sprites.py index 46fba04..1a3dee3 100644 --- a/sprites.py +++ b/sprites.py @@ -47,8 +47,6 @@ def __init__(self, jogo, x, y): #Pegando a ultima direção e tiro self.last_dir = self.dir self.last_shot = 0 - - #Controle e direção: self.esquerda = "" @@ -129,8 +127,6 @@ def teclas(self): self.last_dir = self.dir dir = self.last_dir - - #Atualizando para o jogo def update(self): self.teclas() @@ -415,7 +411,7 @@ def update(self): if self.health <= 0: self.jogo.xp_total+=PIRATA_XP self.jogo.resnasce('pirate_t') - + #------Barra de vida do barco------# def draw_boat_health(surf, x, y, pct): @@ -457,8 +453,8 @@ def draw_boat_xp(surf, x, y, pct): class Carne(pygame.sprite.Sprite): def __init__(self, jogo, x, y): - self.groups = jogo.all_sprites, jogo.Meat1, jogo.Meat2, jogo.Meat3, jogo.Meat4 - + self.groups = jogo.all_sprites, jogo.lista_meat[0], jogo.lista_meat[1], jogo.lista_meat[2], jogo.lista_meat[3] + # Construtor da classe mãe pygame.sprite.Sprite.__init__(self, self.groups) self.jogo = jogo @@ -466,9 +462,7 @@ def __init__(self, jogo, x, y): self.rect = self.image.get_rect() self.pos = vec (x, y) self.rect.center = self.pos - - def update(self): - + def update(self): now = pygame.time.get_ticks() #Pegando tempo delta_respawn = now - self.jogo.last_spawn @@ -479,8 +473,7 @@ def update(self): class Rum (pygame.sprite.Sprite): def __init__(self, jogo, x, y): - self.groups = jogo.all_sprites, jogo.Rum1, jogo.Rum2, jogo.Rum3, jogo.Rum4 - + self.groups = jogo.all_sprites, jogo.lista_rum[0], jogo.lista_rum[1], jogo.lista_rum[2], jogo.lista_rum[3] # Construtor da classe mãe pygame.sprite.Sprite.__init__(self, self.groups) self.jogo = jogo @@ -490,7 +483,6 @@ def __init__(self, jogo, x, y): self.rect.center = self.pos def update(self): - now = pygame.time.get_ticks() #Pegando tempo delta_respawn = now - self.jogo.last_spawn @@ -501,8 +493,7 @@ def update(self): class Tesouro(pygame.sprite.Sprite): def __init__(self, jogo, x, y): - self.groups = jogo.all_sprites, jogo.tesouro1, jogo.tesouro2, jogo.tesouro3, jogo.tesouro4 - + self.groups = jogo.all_sprites, jogo.lista_tesouro[0], jogo.lista_tesouro[1], jogo.lista_tesouro[2], jogo.lista_tesouro[3] # Construtor da classe mãe pygame.sprite.Sprite.__init__(self, self.groups) self.jogo = jogo @@ -510,8 +501,8 @@ def __init__(self, jogo, x, y): self.rect = self.image.get_rect() self.pos = vec (x, y) self.rect.center = self.pos - - def update(self): + + def update(self): now = pygame.time.get_ticks() #Pegando tempo delta_respawn = now - self.jogo.last_spawn