farmer.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import pygame
  2. from tiles import *
  3. from variables import *
  4. from world import World
  5. class Farmer:
  6. def __init__(self, x: int, y: int, world: World, display: pygame.display):
  7. """Un fermier, avec ses coordonnées (x, y)"""
  8. self.display = display
  9. self.x: int = x
  10. self.y: int = y
  11. self.world: World = world
  12. self.neighbors_list: list = self.neighbors(self.x, self.y, self.world)
  13. self.origin: Tile = self.find_current_tile()
  14. self.destination: Tile = world.pos_list[0]
  15. def draw(self):
  16. """Affiche le fermier"""
  17. image = pygame.transform.scale(FARMER, (self.world.tile_width, self.world.tile_height))
  18. self.display.blit(image, (self.x - self.world.tile_width // 2, self.y - self.world.tile_height // 2))
  19. def neighbors(self, x: int, y: int, world: World) -> list:
  20. """Prend la position d'une tuile ((x, y), qui n'est pas son centre), et renvoie la position des tuiles adjacentess dans une liste"""
  21. x_centre = x
  22. y_centre = y
  23. res = []
  24. top_tile = (x_centre, y_centre - world.gap - world.tile_height)
  25. bottom_tile = (x_centre, y_centre + world.gap + world.tile_height)
  26. left_high_tile = (x_centre - world.gap - 3 * world.tile_width // 4, y_centre - world.gap // 2 - world.tile_height // 2)
  27. left_bottom_tile = (x_centre - world.gap - 3 * world.tile_width // 4, y_centre + world.gap // 2 + world.tile_height // 2)
  28. right_high_tile = (x_centre + world.gap + 3 * world.tile_width // 4, y_centre - world.gap // 2 - world.tile_height // 2)
  29. right_bottom_tile = (x_centre + world.gap + 3 * world.tile_width // 4, y_centre + world.gap // 2 + world.tile_height // 2)
  30. res.append(top_tile)
  31. res.append(bottom_tile)
  32. res.append(left_high_tile)
  33. res.append(left_bottom_tile)
  34. res.append(right_high_tile)
  35. res.append(right_bottom_tile)
  36. return res
  37. def next_tuile(self) -> tuple:
  38. """Prend la tuile à atteindre et renvoie les coordonnées de la tuile sur laquelle le fermier doit aller pour s'en rapprocher le plus"""
  39. res = (0, 0)
  40. x_nest = self.destination["x"]
  41. y_nest = self.destination["y"]
  42. min = WINDOW_WIDTH ** 2 * 2
  43. for tuile in self.neighbors_list:
  44. x, y = tuile
  45. x = abs(x - x_nest)
  46. y = abs(y - y_nest)
  47. hypo = x ** 2 + y ** 2
  48. if min > hypo :
  49. min = hypo
  50. res = tuile
  51. return(res)
  52. def find_current_tile(self):
  53. """Renvoie la tuile sur laquelle se trouve le fermier"""
  54. found = False
  55. i = 0
  56. for tile in self.world.pos_list:
  57. if SPACE > abs(tile["x"] - self.x) and SPACE > abs(tile["y"] - self.y):
  58. found = True
  59. if found:
  60. return tile
  61. else:
  62. print("Aucune tuile trouvée")
  63. def is_at_nest(self) -> bool:
  64. """Renvoie True si le fermier est au nidn False sinon"""
  65. res = False
  66. if self.find_current_tile() == self.world.pos_list[0]:
  67. res = True
  68. return res
  69. def is_at_origin(self) -> bool:
  70. """Renvoie True si le fermier est au nidn False sinon"""
  71. res = False
  72. if self.find_current_tile() == self.origin:
  73. res = True
  74. return res
  75. def change_destination(self) -> None:
  76. """Change la tuile destination du fermier lorsqu'il touche le nid"""
  77. if self.is_at_nest() :
  78. self.destination = self.origin
  79. elif self.is_at_origin():
  80. self.destination = self.world.pos_list[0]
  81. def way_to_follow(self):
  82. """Renvoie les coordonées par lesquelles va passer le fermier sous forme d'une liste"""
  83. return None