|
|
@@ -0,0 +1,70 @@
|
|
|
+import pygame
|
|
|
+from tiles import *
|
|
|
+from variables import *
|
|
|
+from world import World
|
|
|
+
|
|
|
+class Farmer:
|
|
|
+ def __init__(self, x: int, y: int, world: World, display: pygame.display):
|
|
|
+ """Un fermier, avec ses coordonnées (x, y)"""
|
|
|
+ self.display = display
|
|
|
+ self.x: int = x
|
|
|
+ self.y: int = y
|
|
|
+ self.world: World = world
|
|
|
+ self.neighbors_list: list = self.neighbors(self.x, self.y, self.world)
|
|
|
+
|
|
|
+ def draw(self):
|
|
|
+ """Affiche le fermier"""
|
|
|
+ image = pygame.transform.scale(FARMER, (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))
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ def neighbors(self, x: int, y: int, world: World) -> list:
|
|
|
+ """Prend la position d'une tuile ((x, y), qui n'est pas son centre), et renvoie la position des tuiles adjacentess dans une liste"""
|
|
|
+ x_centre = x
|
|
|
+ y_centre = y
|
|
|
+
|
|
|
+ res = []
|
|
|
+
|
|
|
+ top_tile = (x_centre, y_centre - world.gap - world.tile_height)
|
|
|
+ bottom_tile = (x_centre, y_centre + world.gap + world.tile_height)
|
|
|
+ left_high_tile = (x_centre - world.gap - 3 * world.tile_width // 4, y_centre - world.gap // 2 - world.tile_height // 2)
|
|
|
+ left_bottom_tile = (x_centre - world.gap - 3 * world.tile_width // 4, y_centre + world.gap // 2 + world.tile_height // 2)
|
|
|
+ right_high_tile = (x_centre + world.gap + 3 * world.tile_width // 4, y_centre - world.gap // 2 - world.tile_height // 2)
|
|
|
+ right_bottom_tile = (x_centre + world.gap + 3 * world.tile_width // 4, y_centre + world.gap // 2 + world.tile_height // 2)
|
|
|
+
|
|
|
+ res.append(top_tile)
|
|
|
+ res.append(bottom_tile)
|
|
|
+ res.append(left_high_tile)
|
|
|
+ res.append(left_bottom_tile)
|
|
|
+ res.append(right_high_tile)
|
|
|
+ res.append(right_bottom_tile)
|
|
|
+
|
|
|
+ return res
|
|
|
+
|
|
|
+ def next_tuile(self, world: World) -> tuple:
|
|
|
+ """Prend les coordonnées du nid et renvoie les coordonnées de la tuile sur laquelle le fermier doit aller pour s'en rapprocher le plus"""
|
|
|
+ res = (0, 0)
|
|
|
+ x_nest = world.pos_list[0]["x"]
|
|
|
+ y_nest = world.pos_list[0]["y"]
|
|
|
+
|
|
|
+ min = WINDOW_WIDTH ** 2 * 2
|
|
|
+ for tuile in self.neighbors_list:
|
|
|
+ x, y = tuile
|
|
|
+
|
|
|
+ x = abs(x - x_nest)
|
|
|
+ y = abs(y - y_nest)
|
|
|
+
|
|
|
+ hypo = x ** 2 + y ** 2
|
|
|
+
|
|
|
+ if min > hypo :
|
|
|
+ min = hypo
|
|
|
+ res = tuile
|
|
|
+
|
|
|
+ return(res)
|
|
|
+
|
|
|
+
|
|
|
+ def way_to_follow(self, world: World):
|
|
|
+ """Renvoie les coordonées par lesquelles va passer le fermier sous forme d'une liste"""
|
|
|
+ return None
|
|
|
+
|