File size: 4,984 Bytes
b231563
 
 
 
 
28136f7
b231563
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1804868
 
b231563
 
 
 
 
 
 
1804868
b231563
1804868
b231563
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import os
from groq import Groq
import gradio as gr

# Set your API key


# Initialize the Groq client
client = Groq(
    api_key=os.environ.get("GROQ_API_KEY"),
)

def generate_game_content(protagonist, antagonist, environment, tone, style, protagonist_background, antagonist_motivation, environment_detail):
    # Create a prompt that includes character details and environment details
    messages = [
        {
            "role": "user",
            "content": f"Create detailed descriptions for the following game elements in a {tone}, {style} style:\n\n\
                        **Protagonist**: {protagonist} (Background: {protagonist_background})\n\
                        **Antagonist**: {antagonist} (Motivation: {antagonist_motivation})\n\
                        **Environment**: {environment} (Details: {environment_detail})\n\n\
                        Also, provide a brief plot for the game."
        }
    ]

    try:
        chat_completion = client.chat.completions.create(
            messages=messages,
            model="llama3-8b-8192",
        )

        response = chat_completion.choices[0].message.content

        protagonist_desc = "Protagonist Description:\n" + response.split("Antagonist Description:")[0].strip() if "Antagonist Description:" in response else response
        antagonist_desc = "Antagonist Description:\n" + response.split("Antagonist Description:")[1].split("Environment Description:")[0].strip() if "Environment Description:" in response else ""
        environment_desc = "Environment Description:\n" + response.split("Environment Description:")[1].split("Story Plot:")[0].strip() if "Story Plot:" in response else ""
        story_plot = "Story Plot:\n" + response.split("Story Plot:")[1].strip() if "Story Plot:" in response else ""

    except Exception as e:
        protagonist_desc = "An error occurred while generating the content."
        antagonist_desc = ""
        environment_desc = ""
        story_plot = ""

    return protagonist_desc, antagonist_desc, environment_desc, story_plot

# Gradio interface
def gradio_interface():
    with gr.Blocks() as demo:
        with gr.Row():
            gr.Markdown("<h2 style='text-align: center;'>🕹️ PixelPlotter</h2>")
        with gr.Row():
             gr.Markdown("<h4 style='text-align: center;'> Plot your next game masterpiece with PixelPlotter, the ultimate tool for generating game narratives, characters, and environments.</h4>")



        with gr.Row():
            with gr.Column(scale=1, min_width=150):
                gr.Markdown("<h3 style='font-size: 18px; font-weight: bold;'>Options</h3>")
                protagonist_background = gr.Dropdown(label="Protagonist Background", choices=["Orphaned hero", "Reluctant leader", "Chosen one with hidden powers", "Hardened warrior","Random"], value="Orphaned hero")
                antagonist_motivation = gr.Dropdown(label="Antagonist Motivation", choices=["Revenge", "Thirst for power", "Ideological conflict", "Desire for chaos","Random"], value="Revenge")
                environment = gr.Textbox(label="Game Story (Theme about Plot")
                environment_detail = gr.Dropdown(label="Environment Details", choices=["Stormy mountains", "Lush forests with hidden dangers", "Desolate desert with ancient ruins", "Frozen tundra with mystical creatures","random environment"], value="Random Environment")


            with gr.Column(scale=4):
                with gr.Row():
                    tone = gr.Dropdown(label="Tone", choices=["dark", "humorous", "epic", "light-hearted","Random"], value="epic")
                    style = gr.Dropdown(label="Style", choices=["formal", "casual", "dramatic", "whimsical","Random"], value="formal")
                with gr.Row():
                    protagonist = gr.Textbox(label="Protagonist (Hero) ")
                with gr.Row():
                    antagonist = gr.Textbox(label="Antagonist (Villain)")

                generate_button = gr.Button("Generate", elem_id="generate-button")

                protagonist_output = gr.Markdown()
                antagonist_output = gr.Markdown()
                environment_output = gr.Markdown()
                story_plot_output = gr.Markdown()

                generate_button.click(
                    fn=generate_game_content,
                    inputs=[protagonist, antagonist, environment, tone, style, protagonist_background, antagonist_motivation, environment_detail],
                    outputs=[protagonist_output, antagonist_output, environment_output, story_plot_output]
                )

        # Add inline CSS to style elements
        gr.Markdown("""
            <style>
                #generate-button {
                    background-color: #ff7f00;
                    color: white;
                    border-radius: 5px;
                    padding: 10px;
                    font-size: 16px;
                }
            </style>
        """)

    demo.launch()

gradio_interface()