import os from dotenv import load_dotenv import streamlit as st import anthropic # Load environment variables from .env file load_dotenv() # Set your Anthropic API key API_KEY = os.getenv("ANTHROPIC_API_KEY") # Define functions to generate content using the Anthropic API def generate_game_environment(environment_description): client = anthropic.Anthropic(api_key=API_KEY) message = client.messages.create( model="claude-3-5-sonnet-20240620", max_tokens=150, temperature=0.7, system="You are an expert game designer. Create a detailed description of the game environment.", messages=[ { "role": "user", "content": [ { "type": "text", "text": f"Describe the game environment based on: {environment_description}" } ] } ] ) return message.content[0].text # Return the relevant content def generate_game_story(environment, protagonist, antagonist): client = anthropic.Anthropic(api_key=API_KEY) message = client.messages.create( model="claude-3-5-sonnet-20240620", max_tokens=150, temperature=0.7, system="You are an expert game storyteller. Create an engaging game story.", messages=[ { "role": "user", "content": [ { "type": "text", "text": f"Create a game story based on the following elements:\n" f"Environment: {environment}\n" f"Protagonist: {protagonist}\n" f"Antagonist: {antagonist}" } ] } ] ) return message.content[0].text # Return the relevant content def generate_protagonist(protagonist_description): client = anthropic.Anthropic(api_key=API_KEY) message = client.messages.create( model="claude-3-5-sonnet-20240620", max_tokens=150, temperature=0.7, system="You are an expert character designer. Create a detailed description of the game's protagonist.", messages=[ { "role": "user", "content": [ { "type": "text", "text": f"Describe the protagonist based on: {protagonist_description}" } ] } ] ) return message.content[0].text # Return the relevant content def generate_antagonist(antagonist_description): client = anthropic.Anthropic(api_key=API_KEY) message = client.messages.create( model="claude-3-5-sonnet-20240620", max_tokens=150, temperature=0.7, system="You are an expert character designer. Create a detailed description of the game's antagonist.", messages=[ { "role": "user", "content": [ { "type": "text", "text": f"Describe the antagonist based on: {antagonist_description}" } ] } ] ) return message.content[0].text # Return the relevant content # Sidebar Inputs st.sidebar.title("StoryForge Input") environment = st.sidebar.text_input( "Game Environment", "Enter a detailed description of the game's world, including key locations, atmosphere, and overall tone." ) protagonist = st.sidebar.text_input( "Protagonist", "Describe the main character, including their background, personality traits, goals, and what makes them unique." ) antagonist = st.sidebar.text_input( "Antagonist", "Provide details about the main villain or opposing force, including their motivations, strengths, and weaknesses." ) # Main App st.title("StoryForge") st.write("StoryForge is your tool for crafting comprehensive Game Design Documents. Enter your game's details, and StoryForge will generate a structured document to guide your development process.") # Generate the content when the user has filled in all fields if environment and protagonist and antagonist: # Generate content generated_environment = generate_game_environment(environment) generated_protagonist = generate_protagonist(protagonist) generated_antagonist = generate_antagonist(antagonist) generated_story = generate_game_story(generated_environment, generated_protagonist, generated_antagonist) # Columns for Outputs col1, col2 = st.columns(2) with col1: st.subheader("Game Environment") st.write(generated_environment) st.subheader("Protagonist") st.write(generated_protagonist) with col2: st.subheader("Game Story") st.write(generated_story) st.subheader("Antagonist") st.write(generated_antagonist) else: st.write("Please fill in all the fields in the sidebar to generate your Game Design Document.")