]> git.ayabusa.dev Git - jeu-gtc.git/commitdiff
added gameover
authorayabusa <lebgpub@gmail.com>
Wed, 23 Oct 2024 18:11:41 +0000 (20:11 +0200)
committerayabusa <lebgpub@gmail.com>
Wed, 23 Oct 2024 18:11:41 +0000 (20:11 +0200)
assets/Horse.png [new file with mode: 0644]
assets/Horse.xcf [new file with mode: 0644]
assets/Horse2.png [new file with mode: 0644]
assets/blood.png [new file with mode: 0644]
assets/blood.xcf [new file with mode: 0644]
assets/gameover.png [new file with mode: 0644]
assets/gameover.xcf [new file with mode: 0644]
assets/pnj/knight.png [new file with mode: 0644]
game.py

diff --git a/assets/Horse.png b/assets/Horse.png
new file mode 100644 (file)
index 0000000..d0c3d3e
Binary files /dev/null and b/assets/Horse.png differ
diff --git a/assets/Horse.xcf b/assets/Horse.xcf
new file mode 100644 (file)
index 0000000..d57bc4a
Binary files /dev/null and b/assets/Horse.xcf differ
diff --git a/assets/Horse2.png b/assets/Horse2.png
new file mode 100644 (file)
index 0000000..9ac19e0
Binary files /dev/null and b/assets/Horse2.png differ
diff --git a/assets/blood.png b/assets/blood.png
new file mode 100644 (file)
index 0000000..a059834
Binary files /dev/null and b/assets/blood.png differ
diff --git a/assets/blood.xcf b/assets/blood.xcf
new file mode 100644 (file)
index 0000000..15d8468
Binary files /dev/null and b/assets/blood.xcf differ
diff --git a/assets/gameover.png b/assets/gameover.png
new file mode 100644 (file)
index 0000000..4624aaa
Binary files /dev/null and b/assets/gameover.png differ
diff --git a/assets/gameover.xcf b/assets/gameover.xcf
new file mode 100644 (file)
index 0000000..40a6e48
Binary files /dev/null and b/assets/gameover.xcf differ
diff --git a/assets/pnj/knight.png b/assets/pnj/knight.png
new file mode 100644 (file)
index 0000000..42476cc
Binary files /dev/null and b/assets/pnj/knight.png differ
diff --git a/game.py b/game.py
index 8a4e7cdfab3b47202c2d414c0f2f38f0fe2a76b4..b7ddee7f5b9db1345897217008142ddcfd7f0711 100644 (file)
--- a/game.py
+++ b/game.py
@@ -77,11 +77,14 @@ class Pnj:
         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
@@ -127,6 +130,15 @@ class Pnj:
                     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
@@ -148,6 +160,19 @@ class Village:
         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
@@ -156,6 +181,7 @@ class Player:
         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
@@ -170,17 +196,19 @@ class Player:
             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
@@ -200,9 +228,11 @@ class Game:
         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
@@ -218,7 +248,7 @@ class Game:
     \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
@@ -227,7 +257,7 @@ class Game:
 \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
@@ -239,10 +269,19 @@ class Game:
         # 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