Spaces:
Running
Running
from datetime import datetime | |
from src.database import interactions | |
class RPGGame: | |
def __init__(self): | |
self.current_session_id = None | |
self.turn_number = 0 | |
def start_game(self, player_name: str, genre: str, scenario: str) -> str: | |
session_id = f"session_{datetime.now().strftime('%Y%m%d%H%M%S')}_{player_name}" | |
self.current_session_id = session_id | |
self.turn_number = 0 | |
# Create initial interaction with all session data | |
interactions.insert([{ | |
'session_id': session_id, | |
'player_name': player_name, | |
'genre': genre, | |
'initial_scenario': scenario, | |
'turn_number': 0, | |
'player_input': "Game starts", | |
'timestamp': datetime.now() | |
}]) | |
# Get initial story and options | |
initial_response = interactions.select(interactions.story_text).where( | |
(interactions.session_id == session_id) & | |
(interactions.turn_number == 0) | |
).collect()['story_text'][0] | |
return session_id, initial_response | |
def process_action(self, action: str) -> str: | |
if not self.current_session_id: | |
return "No active game session. Please start a new game." | |
self.turn_number += 1 | |
# Get session info from previous turn | |
prev_turn = interactions.select( | |
interactions.player_name, | |
interactions.genre, | |
interactions.initial_scenario | |
).where( | |
(interactions.session_id == self.current_session_id) & | |
(interactions.turn_number == 0) | |
).collect() | |
# Record player action with session data | |
interactions.insert([{ | |
'session_id': self.current_session_id, | |
'player_name': prev_turn['player_name'][0], | |
'genre': prev_turn['genre'][0], | |
'initial_scenario': prev_turn['initial_scenario'][0], | |
'turn_number': self.turn_number, | |
'player_input': action, | |
'timestamp': datetime.now() | |
}]) | |
# Get AI response | |
response = interactions.select(interactions.story_text).where( | |
(interactions.session_id == self.current_session_id) & | |
(interactions.turn_number == self.turn_number) | |
).collect()['story_text'][0] | |
return response |