def get_fight_data(env, adversary): data = [] # setup adversary adversary_health = db.ret_val(env, "adversary", "name", adversary, "health") adversary_power = db.ret_val(env, "adversary", "name", adversary, "power") # setup player player_health = ag_utilities.get_player_val(env, "health") # setup player - weapon player_weapon_power = 0 player_weapon_list = ag_utilities.get_player_val(env, "weapon") for weapon in player_weapon_list: power = db.ret_val(env, "weapon", "name", weapon, "power") if power > player_weapon_power: player_weapon_name = weapon player_weapon_power = power # player armor player_armor_protection = 0 player_armor_list = ag_utilities.get_player_val(env, "armor") for armor in player_armor_list: player_armor_protection += db.ret_val(env, "armor", "name", armor, "protection") data.append(["adversary_health", adversary_health]) data.append(["adversary_power", adversary_power]) data.append(["player_health", player_health]) data.append(["player_armor_protection", player_armor_protection]) data.append(["player_weapon_name", player_weapon_name]) data.append(["player_weapon_power", player_weapon_power]) return data
def update_after_action(env, location, content_type, content_name): # update player score player_points_earned = ag_utilities.get_player_val(env, "points_earned") content_points = db.ret_val(env, content_type, "name", content_name, "points") total_points = player_points_earned + content_points env = ag_utilities.set_player_val(env, "points_earned", total_points) # update player inventory inventory = ag_utilities.get_player_val(env, content_type) inventory.append(content_name) env = ag_utilities.set_player_val(env, content_type, inventory) # deactivate content env = db.upd_val(env, "content", "name", content_name, "available", False) env = db.upd_val(env, "content", "name", content_name, "active", False) env = db.upd_val(env, "content", "name", content_name, "menu_idx", "") # update the menu_indexes of the remaining content items records = db.ret_recs(env, "content", [["location", location], ["active", True]]) menu_idx = 0 for record in records: menu_idx += 1 content_name = db.ret(record, "name") env = db.upd_val(env, "content", "name", content_name, "menu_idx", str(menu_idx)) env = ag_utilities.game_over_check(env) return env
def process_action(env, location, menu_idx): records = db.ret_recs(env, "content", [["location", location], ["menu_idx", menu_idx]]) name = db.ret(records[0], "name") content_type = db.ret(records[0], "content_type") action = db.ret_val(env, "content_type", "name", content_type, "action").lower() if action == "fight": return fight(env, location, name) elif action == "pickup": return pickup(env, location, content_type, name)
def get_items_prompt(env, location): prompt = "" prompt_options = [] records = db.ret_recs(env, "content", [["location", location], ["active", True]]) for record in records: content_type = db.ret(record, "content_type") name = db.ret(record, "name") action = db.ret_val(env, "content_type", "name", content_type, "action") menu_idx = db.ret(record, "menu_idx") prompt += f"\n{action} {name} - {menu_idx}" prompt_options.append(str(menu_idx)) return [prompt, prompt_options]
def fight(env, location, adversary_name): ag_utilities.print_pause(f"You are fighting the {adversary_name}...") while True: time.sleep(1) fight_data = get_fight_data(env, adversary_name) if ag_utilities.flip_coin(): env = strike_by_player(env, location, fight_data, adversary_name) adversary_defeated = not db.ret_val(env, "content", "name", adversary_name, "active") if adversary_defeated: return env else: env = strike_by_adversary(env, fight_data, adversary_name) # check: game over if ag_utilities.get_player_val(env, "game_end_type") != "": return env return env
def enter_location(env, location_idx): # init location location = db.ret_val_idx(env, "location", location_idx, "name") env = ag_utilities.set_player_val(env, "location", location) env = set_items(env, location) # orientate player ag_utilities.print_pause(f"\nYou have entered the {location}.") look_around(env, location) # fight before gather if set for this location if db.ret_val(env, "location", "name", location, "fight_before_gather"): env = fight_before_gather(env, location) # check: game over if ag_utilities.get_player_val(env, "game_end_type") != "": return env # check: leave location if ag_utilities.get_player_val(env, "location") == "": return env # explore location return explore_location(env, location)
def get_player_val(env, key): return db.ret_val(env, "player", "id", 0, key)