1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- import random
- import json
- # from ant import Ant
- # from gatherer import Gatherer
- from blob.fsm_ant import FSMAnt
- from board import Board
- class Blob_Manager:
- DROP_VALUE = 25
- def __init__(self, board, max_scouters):
- """
- :type board: Board
- :type max_scouters: int
- """
- self.board = board
- self.knowledge = dict()
- self.knowledge['food'] = []
- self.knowledge['max_scouters'] = max_scouters
- self.scouters = []
- for _ in range(max_scouters):
- self.add_scouter()
- def save(self):
- return json.dumps(self.knowledge)
- def load(self, file):
- line = file.readline()
- json_acceptable_string = line.replace("'", "\"")
- k = json.loads(json_acceptable_string)
- self.knowledge['food'] = [tuple(x) for x in k['food']]
- self.knowledge['max_scouters'] = k['max_scouters']
- while len(self.scouters) < self.knowledge['max_scouters']:
- self.add_scouter()
- def move(self):
- for scouter in self.scouters:
- scouter.move()
- scouter.update()
- if self.board.has_food(scouter.x, scouter.y) and (scouter.x, scouter.y) not in self.knowledge['food']:
- self.food_discovered(scouter.x, scouter.y)
- def add_scouter(self):
- if len(self.scouters) < self.knowledge['max_scouters']:
- if len(self.knowledge['food']) != 0:
- index = random.randrange(len(self.knowledge['food']))
- (x, y) = self.knowledge['food'][index]
- else:
- print("This will be nice in the future")
- x = 0
- y = 0
- self.scouters.append(FSMAnt(self.board, self.knowledge, x, y, Blob_Manager.DROP_VALUE))
- else:
- print("Max scouters already reached !")
- def reset(self, x, y):
- for scouter in self.scouters.copy():
- if scouter.x == x and scouter.y == y:
- self.scouters.remove(scouter)
- for food in self.knowledge['food'].copy():
- if food == (x, y):
- self.knowledge['food'].remove(food)
- self.knowledge['max_scouters'] -= 1
- def food_discovered(self, x, y):
- self.knowledge['food'].append((x, y))
- self.knowledge['max_scouters'] += 1
- for _ in range(1):
- self.scouters.append(FSMAnt(self.board, self.knowledge, x, y, Blob_Manager.DROP_VALUE))
- print("Food discovered in (" + str(x) + ", " + str(y) + ") - Total scouters : " + str(len(self.scouters)))
|