Jelajahi Sumber

Le joueur peut manger les graines, et une autre réapparaît aléatoirement

Hvrnbi 2 minggu lalu
induk
melakukan
603d321e8a
4 mengubah file dengan 68 tambahan dan 8 penghapusan
  1. 2 0
      .gitignore
  2. 10 5
      main.py
  3. 44 1
      player.py
  4. 12 2
      world.py

+ 2 - 0
.gitignore

@@ -3,3 +3,5 @@
 __pycache__/
 
 .vscode/
+
+images/*.kra

+ 10 - 5
main.py

@@ -25,7 +25,7 @@ def main():
     player = Player(world.pos_list[1]["x"], world.pos_list[1]["y"], world, display) # On initialise le joueur sur la première tuile en dessous du nid
 
     nest = Nest(0, display)
-
+    
     ### Boucle principale ###
     while True:
 
@@ -35,16 +35,20 @@ def main():
             # On gère les touches
             if event.type == pygame.KEYDOWN:
                 if event.key == pygame.K_z:
-                    player.move("up")
+                    if player.moving:
+                        player.move("up")
 
                 elif event.key == pygame.K_s:
-                    player.move("down")
+                    if player.moving:
+                        player.move("down")
 
                 elif event.key == pygame.K_q:
-                    player.move("left")
+                    if player.moving:
+                        player.move("left")
 
                 elif event.key == pygame.K_d:
-                    player.move("right")
+                    if player.moving:
+                        player.move("right")
             
             # Fermeture du jeu
             if event.type == QUIT:
@@ -56,6 +60,7 @@ def main():
         world.draw()
         nest.draw(world.pos_list[0], 0)
         player.draw()
+        player.action()
 
         pygame.display.update()
         clock.tick(FPS)

+ 44 - 1
player.py

@@ -13,12 +13,17 @@ class Player:
         self.picture =  PLAYER_RU
         self.world: World = world
         self.next_move = "up"
+        self.moving = True
+        self.egg = 0
+        self.actions_till_next_farmer = 10
+        self.last_tile = self.find_current_tile()
 
     def draw(self):
         """Affiche le joueur"""
         image = pygame.transform.scale(self.picture, (self.world.tile_width, self.world.tile_height))
         self.display.blit(image, (self.x - self.world.tile_width // 2, self.y - self.world.tile_height // 2))  #la valeur ici est arbitraire mais marche. elle est la pour centrer l'affichage du joueur sur une tuile, a changer dans le futur
-    
+        # On dessine l'oeuf si besoin
+        
     
     def move(self, direction: str):
         """Modifie les coordonnées x et y du joueur en fonction de la direction donnée"""
@@ -84,3 +89,41 @@ class Player:
                         self.next_move = "up"
                         self.move("right")
 
+
+    def find_current_tile(self):
+        """Renvoie la tuile sur laquelle se trouve le joueur"""
+        found = False
+        i = 0
+        while not found and i < len(self.world.pos_list):
+            if self.world.pos_list[i] == {"x": self.x, "y": self.y}:
+                found = True
+            else:
+                i += 1
+
+        if found:
+            return self.world.tiles_list[i]
+        else:
+            print("Aucune tuile trouvée")
+
+    
+    def action(self):
+        """L'action de ce tour"""
+        tile = self.find_current_tile()
+        if (tile.x, tile.y) != (self.last_tile.x, self.last_tile.y):
+            if tile.tiletype == "seed":
+                self.moving = False
+                self.seed()
+                tile.tiletype = "green"
+                self.world.spawn_new_seed()
+
+            self.actions_till_next_farmer -= 1
+            self.last_tile = tile
+            self.moving = True
+
+    
+    def seed(self):
+        if self.egg == 0:
+            self.egg = 1
+        else:
+            print("Il y a déjà un oeuf")
+

+ 12 - 2
world.py

@@ -26,8 +26,8 @@ class World:
 
 
     def random_tile_type(self) -> str:
-        """Renvoie une chaine de caractère contenant 'green' ou 'seed' avec une probabilité respective de 80% et 20%"""
-        t_type = ["green"] * 4 + ["seed"]
+        """Renvoie une chaine de caractère contenant 'green' ou 'seed' avec une probabilité respective de 90% et 10%"""
+        t_type = ["green"] * 9 + ["seed"]
         return choice(t_type)
 
     
@@ -61,6 +61,7 @@ class World:
         # Le nombre de colonnes doit être impair
         if self.nb_col % 2 != 0:
             self.nb_col += 1
+            print("Il y a déjà un oeuf")
 
         res = []
         x = center[0]
@@ -168,3 +169,12 @@ class World:
             res.append({"x": x, "y": y})
 
         return res
+
+
+    def spawn_new_seed(self):
+        """Place aléatoirement une nouvelle graine dans le monde"""
+        tile = choice(self.tiles_list[1:])
+        while tile.tiletype == "seed":
+            tile = choice(self.tiles_list[1:])
+        tile.tiletype = "seed"
+