self.direction = direction\r
self.objectif = objectif\r
self.speed = speed\r
+ self.alive = True\r
\r
def avance(self):\r
'''\r
Vérifie que l'objectif n'est pas atteint et avance le pnj dans la direction\r
'''\r
+ if not self.alive:\r
+ return\r
if self.check_objectif():\r
return\r
else:\r
self.objectif = new_objectif\r
return True\r
return False\r
+ \r
+ def kill(self):\r
+ self.sprite = pygame.transform.scale_by(pygame.image.load("assets/blood.png"), 3.0)\r
+ self.alive = False\r
+ player.killcounter += 1\r
+ if player.killcounter == game.pnj_number:\r
+ village.final_boss()\r
+ elif player.killcounter >= game.pnj_number+8:\r
+ game.game_over()\r
\r
class Village:\r
def __init__(self, nb_pnj: int) -> None:\r
for p in self.liste_pnj:\r
village_sprites.append((p.x, p.y, p.sprite))\r
return village_sprites\r
+ \r
+ def check_kill(self)->None:\r
+ player_rect = pygame.Rect(player.x-50, player.y-50, 100, 100)\r
+ for p in self.liste_pnj:\r
+ if p.alive and player_rect.collidepoint(p.x, p.y):\r
+ p.kill()\r
+ \r
+ def final_boss(self)->None:\r
+ for i in ("A", "B", "C", "D", "E", "F", "G", "H"):\r
+ start_waypoint = Waypoint(i)\r
+ objective_waypoint = start_waypoint.get_new_connected()\r
+ self.liste_pnj.append(Pnj(start_waypoint.x, start_waypoint.y, "assets/pnj/knight.png", start_waypoint.get_direction(start_waypoint, objective_waypoint), objective_waypoint, 10))\r
+ \r
\r
class Player:\r
def __init__(self)-> None:\r
self.mov_speed = 8\r
self.rotate_speed = 5\r
self.angle = 90\r
+ self.killcounter = 0\r
\r
def rotate(self, angle: math.degrees)-> None:\r
self.angle += angle*self.rotate_speed\r
self.y = new_y\r
elif(game.test_collision(pygame.Rect(new_x-50, self.y-50, 100, 100), game.collisions) == False):\r
self.x = new_x\r
+ village.check_kill()\r
\r
class Game:\r
def __init__(self):\r
self.is_paused = False\r
+ self.pnj_number = 5\r
pygame.font.init()\r
self.font = pygame.font.SysFont('Comic Sans MS', 30)\r
self.load_sprites()\r
self.load_collisions()\r
\r
def load_sprites(self):\r
- self.perso_sprite = pygame.image.load("assets/perso_sprite.png")\r
+ self.perso_sprite = pygame.image.load("assets/Horse2.png")\r
self.map_sprite = pygame.image.load("assets/map3.png")\r
\r
def load_collisions(self):\r
angle_surface = self.font.render("angle: "+str(player.angle), False, (0, 0, 0))\r
x_surface = self.font.render("x: "+str(player.x), False, (0, 0, 0))\r
y_surface = self.font.render("y: "+str(player.y), False, (0, 0, 0))\r
+ kill_surface = self.font.render("kills: "+str(player.killcounter), False, (0, 0, 0))\r
screen.blit(angle_surface, (0,0))\r
screen.blit(x_surface, (0,30))\r
screen.blit(y_surface, (0,60))\r
+ screen.blit(kill_surface, (0,90))\r
#pygame.draw.rect(screen, "blue",pygame.Rect(player.x-50, player.y-50, 100, 100))\r
\r
def check_input(self):\r
\r
def draw_player(self):\r
#pygame.draw.rect(screen, "red", pygame.Rect(player.x, player.y, 50, 50))\r
- img = pygame.transform.rotozoom(self.perso_sprite, -player.angle-90, 0.2)\r
+ img = pygame.transform.rotozoom(self.perso_sprite, -player.angle-90, 1)\r
screen.blit(img, (540-img.get_rect().centerx, 360-img.get_rect().centery))\r
\r
def draw_village(self):\r
\r
def display_all(self):\r
# fill the screen with a color to wipe away anything from last frame\r
- screen.fill("purple")\r
+ screen.fill("gray")\r
screen.blit(self.map_sprite, (540-player.x, 360-player.y))\r
\r
self.draw_village()\r
# flip() the display to put your work on screen\r
pygame.display.flip()\r
\r
+ def game_over(self)->None:\r
+ screen.blit(pygame.image.load("assets/gameover.png"), (0,0))\r
+ # flip() the display to put your work on screen\r
+ pygame.display.flip()\r
+ while True:\r
+ for event in pygame.event.get():\r
+ if event.type == pygame.QUIT:\r
+ exit()\r
+\r
player = Player()\r
game = Game()\r
#pnj = Pnj(800, 900, "assets/MiniPeasant.png", "south", Waypoint("H"), 3)\r
-village = Village(20)\r
+village = Village(game.pnj_number)\r
\r
while running:\r
# poll for events\r