Spaces:
Running
Running
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 | |