from game.dungeon import Dungeon from game.player import Player from game.npc import NPC from game.combat import combat, adjust_difficulty from game.items import Item, use_item from assets.ascii_art import display_dungeon from helper import ( get_game_state, run_action, start_game, is_safe, detect_inventory_changes, update_inventory, ) import pdb import logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) def main_loop(message, history, game_state): """Main game loop that processes commands and returns responses""" try: print(f"\nProcessing command: {message}") # Debug print # Get AI response output = run_action(message, history, game_state) logger.info(f"Generated response: {output}") print(f"\nGenerated output: {output}") # Debug print # Safety check safe = is_safe(output) print(f"\nSafety Check Result: {'SAFE' if safe else 'UNSAFE'}") logger.info(f"Safety check result: {'SAFE' if safe else 'UNSAFE'}") if not safe: logging.warning("Unsafe output detected") logger.warning("Unsafe content detected - blocking response") print("Unsafe content detected - Response blocked") return "This response was blocked for safety reasons.", history # Update history with safe response if not history: history = [] history.append((message, output)) return output, history except Exception as e: logger.error(f"Error in main_loop: {str(e)}") return "Error processing command", history def main(): """Initialize game and start interface""" try: logger.info("Starting main function") print("\nInitializing game...") game_state = get_game_state( inventory={ "cloth pants": 1, "cloth shirt": 1, "goggles": 1, "leather bound journal": 1, "gold": 5, } ) logger.debug(f"Initialized game state: {game_state}") # Create and add game objects dungeon = Dungeon(10, 10) player = Player("Hero") # Update game state with objects game_state["dungeon"] = dungeon game_state["player"] = player # logger.info(f"Game state in main(): {game_state}") # Start game interface print("Starting game interface...") start_game(main_loop, game_state, True) except Exception as e: logger.error(f"Error in main: {str(e)}") raise if __name__ == "__main__": main() # def main_loop(message, history): # logging.info(f"main_loop called with message: {message}") # # Initialize history if None # history = history or [] # # Get AI response # output = run_action(message, history, game_state) # # Safety check # safe = is_safe(output) # if not safe: # logging.error("Unsafe output detected") # return "Invalid Output" # # Format the output nicely # output_lines = [output] # # Handle movement and exploration # if message.lower().startswith(("go", "move", "walk")): # direction = message.split()[1] # game_state["player"].move(direction, game_state["dungeon"]) # room_desc = game_state["dungeon"].get_room_description( # game_state["dungeon"].current_room, game_state # ) # output_lines.append(f"\n{room_desc}") # # Handle NPC interactions # elif message.lower().startswith("talk"): # npc_name = message.split()[2] # for npc in game_state["dungeon"].npcs: # if npc.name.lower() == npc_name.lower(): # dialogue = game_state["player"].interact(npc, game_state) # output_lines += f"\n{dialogue}" # # Handle item interactions and inventory # elif message.lower().startswith(("take", "pick up")): # item_name = " ".join(message.split()[1:]) # for item in game_state["dungeon"].items: # if item.name.lower() == item_name.lower(): # game_state["player"].inventory.append(item) # game_state["dungeon"].items.remove(item) # output += f"\nYou picked up {item.name}" # item_desc = game_state["player"].examine(item, game_state) # output_lines += f"\n{item_desc}" # # Format final output # final_output = "\n".join(output_lines) # history.append((message, final_output)) # logging.info(f"main_loop output: {final_output}") # return final_output, history # def main(): # logging.info("Starting main function") # try: # # Initialize game state with error handling # global game_state # game_state = get_game_state( # inventory={ # "cloth pants": 1, # "cloth shirt": 1, # "goggles": 1, # "leather bound journal": 1, # "gold": 5, # } # ) # # Verify game state initialization # if not game_state: # raise ValueError("Failed to initialize game state") # # Create dungeon and populate with AI-generated content # dungeon = Dungeon(10, 10) # game_state["dungeon"] = dungeon # # Create player and add to game state # player = Player("Hero") # game_state["player"] = player # # Start game interface # start_game(main_loop, True) # except Exception as e: # logging.error(f"Error in main: {str(e)}") # raise