def layAnEgg(level, socket): inventory, lvl = look_inventory(socket, level) food = get_food(inventory) if (not enough_food_incant(level, food)): search_food_incant_mode(level, food, socket) socket.Fork() EmptyCacheIgnoreBroadcast(socket, level)
def look_inventory(socket, lvl): socket.Inventory() resp, level = EmptyCacheIgnoreBroadcast(socket, lvl) if level != lvl: return resp, level if len(resp) > 0 and resp[0] != "ko": resp[0] = resp[0][2:-2].split(', ') return resp, level
def incant(socket, food, lvl): dire, mess, level = search_before_broadcast(socket, food, lvl) if level != lvl: return -1, [], level if dire != -1 and lvl != 1: return dire, mess, lvl while food >= lvl + 3: count = 0 SendIncantBroadcast(socket, lvl) resp, level = EmptyCacheIgnoreBroadcast(socket, lvl) if level != lvl: return dire, mess, level socket.Look() resp, level = EmptyCacheIgnoreBroadcast(socket, lvl) if level != lvl: return dire, mess, level resp = resp[:1] if len(resp) > 0 and resp[0] != "ko": resp = resp[0][2:-2].split(',') content = resp[0].split(' ') for item in content: if item == "player": count += 1 if count == number_of_people_to_incant(lvl): socket.Look() resp, level = EmptyCacheIgnoreBroadcast(socket, lvl) if level != lvl: return dire, mess, level resp = resp[:1] resp = resp[0][2:-2].split(',') get_all_item_here(socket, resp[0], lvl) set_stones(socket, lvl) socket.Incantation() resp, level = EmptyCacheIgnoreBroadcastIncant(socket, lvl) if level != lvl: return dire, mess, level else: ko_incant(socket, lvl) return dire, mess, lvl inventory, level = look_inventory(socket, lvl) if level != lvl: return dire, mess, level food = get_food(inventory) return dire, mess, lvl
def set_stones(socket, lvl): items = GetNeededRessources(lvl) for obj in items: content = obj.split(' ') for i in range(int(content[1])): socket.Set(content[0]) resp, level = EmptyCacheIgnoreBroadcast(socket, lvl) if level != lvl: return level return lvl
def move_to_free_tile(socket, lvl): socket.Look() resp, level = EmptyCacheIgnoreBroadcast(socket, lvl) if level != lvl: return tile, level if len(resp) > 0 and resp[0] != "ko": resp = resp[0][2:-2].split(',') for tile in range(len(resp)): if "player" not in resp[tile]: return tile, lvl return 0, lvl
def go_to_tile(nb_forward, nb_side, socket, lvl): for i in range(nb_forward): socket.Forward() resp, level = EmptyCacheIgnoreBroadcast(socket, lvl) if level != lvl: return level if (nb_side < 0): socket.Left() resp, level = EmptyCacheIgnoreBroadcast(socket, lvl) if level != lvl: return level elif (nb_side > 0): socket.Right() resp, level = EmptyCacheIgnoreBroadcast(socket, lvl) if level != lvl: return level nb_side = abs(nb_side) for i in range(nb_side): socket.Forward() resp, level = EmptyCacheIgnoreBroadcast(socket, lvl) if level != lvl: return level
def ko_incant(socket, lvl): socket.Look() resp, level = EmptyCacheIgnoreBroadcast(socket, lvl) if level != lvl: return level resp = resp[:1] resp = resp[0][2:-2].split(',') get_all_item_here(socket, resp[0], lvl) tile, level = move_to_free_tile(socket, lvl) if level != lvl: return level mov_to_tile(tile, lvl, socket) return lvl
def search_food_incant_mode(lvl, food, socket): while food < lvl + 8: location, item, level = IsThereItem(socket, ["food"], lvl) if level != lvl: return level if (location >= 0): mov_to_tile(location, lvl, socket) socket.Take(item) resp, level = EmptyCacheIgnoreBroadcast(socket, lvl) if level != lvl: return level inventory, level = look_inventory(socket, lvl) if level != lvl: return level food = get_food(inventory) print("search food incant: food i got: " + str(food)) else: for i in range(lvl): socket.Forward() resp, level = EmptyCacheIgnoreBroadcast(socket, lvl) if level != lvl: return level
def survive_mode(lvl, food, socket): while food < lvl + 1: location, item, level = IsThereItem(socket, ["food"], lvl) if level != lvl: return level if (location >= 0): mov_to_tile(location, lvl, socket) socket.Take(item) resp, level = EmptyCacheIgnoreBroadcast(socket, lvl) if level != lvl: return level inventory, level = look_inventory(socket, lvl) if level != lvl: return level food = get_food(inventory) print ("SURVIVE: food i got: " + str(food)) else: socket.Forward() resp, level = EmptyCacheIgnoreBroadcast(socket, lvl) if level != lvl: return level return lvl
def EmptyCacheFocusBroadcast(socket, lvl): mess = [] dire = -1 message = [] direction = -1 incant = False resp = [] while (len(resp) == 0): resp = socket.ReadSocket() check_dead(resp) i = 0 while i < len(resp): if resp[i].find("message") != -1: direction, message = parse_message(socket, resp[i]) print("ID DIFFERENCE " + str(socket.target_id) + " ?= " + str(message[0])) if (len(message) >= 3 and message[1] == "INCANT" and int(message[2]) == lvl and socket.target_id == message[0]): dire = direction mess = message keep = 1 resp.pop(i) elif resp[i].find("Elevation underway") != -1: incant = True resp.pop(i) elif resp[i].find("Current level:") != -1: print("FOUND CURRENT LEVEL") ret = re.findall('\d+', resp[i]) if len(ret) > 0: if int(ret[0]) != lvl: return dire, mess, resp, int(ret[0]) else: i += 1 if incant is True: ret_incant, level = EmptyCacheIgnoreBroadcast(socket, lvl) if (level != lvl): return dire, mess, resp, level for response in ret_incant: if "Current level:" in response: ret = re.findall('\d+', response) if len(ret) > 0: if int(ret[0]) != lvl: return dire, mess, resp, int(ret[0]) return dire, mess, resp, lvl print("FOCUSBROADCAST resp = " + str(resp) + " mess = " + str(mess) + " dire = " + str(dire)) return dire, mess, resp, lvl
def IsThereItem(socket, requested_item, lvl): socket.Look() resp, level = EmptyCacheIgnoreBroadcast(socket, lvl) if level != lvl: return -1, "None", level resp = resp[:1] if len(resp) > 0 and resp[0] != "ko": resp = resp[0][2:-2].split(',') for tile in range(len(resp)): content = resp[tile].split(' ') for item in content: for req_item in requested_item: if item in req_item.split(' '): return tile, item, lvl for tile in range(len(resp)): content = resp[tile].split(' ') for item in content: if item == "food": return tile, item, lvl return -1, "None", lvl
def get_all_item_here(socket, here, lvl): tile = here.split(' ') for item in tile: if (item != 'player'): socket.Take(item) EmptyCacheIgnoreBroadcast(socket, lvl)