main.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import random
  2. import json
  3. # from ant import Ant
  4. # from gatherer import Gatherer
  5. from blob.fsm_ant import FSMAnt
  6. from board import Board
  7. class Blob_Manager:
  8. DROP_VALUE = 25
  9. def __init__(self, board, max_scouters):
  10. """
  11. :type board: Board
  12. :type max_scouters: int
  13. """
  14. self.board = board
  15. self.knowledge = dict()
  16. self.knowledge['food'] = []
  17. self.knowledge['max_scouters'] = max_scouters
  18. self.scouters = []
  19. for _ in range(max_scouters):
  20. self.add_scouter()
  21. def save(self):
  22. return json.dumps(self.knowledge)
  23. def load(self, file):
  24. line = file.readline()
  25. json_acceptable_string = line.replace("'", "\"")
  26. k = json.loads(json_acceptable_string)
  27. self.knowledge['food'] = [tuple(x) for x in k['food']]
  28. self.knowledge['max_scouters'] = k['max_scouters']
  29. while len(self.scouters) < self.knowledge['max_scouters']:
  30. self.add_scouter()
  31. def move(self):
  32. for scouter in self.scouters:
  33. scouter.move()
  34. scouter.update()
  35. if self.board.has_food(scouter.x, scouter.y) and (scouter.x, scouter.y) not in self.knowledge['food']:
  36. self.food_discovered(scouter.x, scouter.y)
  37. def add_scouter(self):
  38. if len(self.scouters) < self.knowledge['max_scouters']:
  39. if len(self.knowledge['food']) != 0:
  40. index = random.randrange(len(self.knowledge['food']))
  41. (x, y) = self.knowledge['food'][index]
  42. else:
  43. print("This will be nice in the future")
  44. x = 0
  45. y = 0
  46. self.scouters.append(FSMAnt(self.board, self.knowledge, x, y, Blob_Manager.DROP_VALUE))
  47. else:
  48. print("Max scouters already reached !")
  49. def reset(self, x, y):
  50. for scouter in self.scouters.copy():
  51. if scouter.x == x and scouter.y == y:
  52. self.scouters.remove(scouter)
  53. for food in self.knowledge['food'].copy():
  54. if food == (x, y):
  55. self.knowledge['food'].remove(food)
  56. self.knowledge['max_scouters'] -= 1
  57. def food_discovered(self, x, y):
  58. self.knowledge['food'].append((x, y))
  59. self.knowledge['max_scouters'] += 1
  60. for _ in range(1):
  61. self.scouters.append(FSMAnt(self.board, self.knowledge, x, y, Blob_Manager.DROP_VALUE))
  62. print("Food discovered in (" + str(x) + ", " + str(y) + ") - Total scouters : " + str(len(self.scouters)))