openfree commited on
Commit
8b0b9e4
ยท
verified ยท
1 Parent(s): 6413559

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +56 -42
app.py CHANGED
@@ -17,6 +17,41 @@ if 'OPENAI_API_KEY' not in os.environ:
17
  pxt.drop_dir('ai_rpg', force=True)
18
  pxt.create_dir('ai_rpg')
19
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  @pxt.udf
21
  def generate_messages(genre: str, player_name: str, initial_scenario: str, player_input: str, turn_number: int, stats: str) -> list[dict]:
22
  return [
@@ -100,41 +135,6 @@ def get_options(response: str) -> list[str]:
100
 
101
  return ["๊ณ„์†ํ•˜๊ธฐ...", "๋‹ค๋ฅธ ํ–‰๋™ ์ทจํ•˜๊ธฐ", "๋ญ”๊ฐ€ ์ƒˆ๋กœ์šด ์‹œ๋„ํ•˜๊ธฐ", "์ฃผ๋ณ€ ํƒ์ƒ‰ํ•˜๊ธฐ"]
102
 
103
- @pxt.udf
104
- def initialize_stats(genre: str) -> str:
105
- """Initialize player stats based on the selected genre"""
106
- base_stats = {
107
- "๐Ÿง™โ€โ™‚๏ธ Fantasy": "์ฒด๋ ฅ: 100, ๋งˆ๋‚˜: 80, ํž˜: 7, ์ง€๋Šฅ: 8, ๋ฏผ์ฒฉ: 6, ์†Œ์ง€๊ธˆ: 50๊ณจ๋“œ",
108
- "๐Ÿš€ Sci-Fi": "์ฒด๋ ฅ: 100, ์—๋„ˆ์ง€: 90, ๊ธฐ์ˆ ๋ ฅ: 8, ์ง€๋Šฅ: 9, ๋ฏผ์ฒฉ: 6, ํฌ๋ ˆ๋”ง: 500",
109
- "๐Ÿ‘ป Horror": "์ฒด๋ ฅ: 80, ์ •์‹ ๋ ฅ: 100, ํž˜: 6, ์ง€๋Šฅ: 7, ๋ฏผ์ฒฉ: 8, ์†Œ์ง€ํ’ˆ: ์†์ „๋“ฑ, ๊ธฐ๋ณธ ์•ฝํ’ˆ",
110
- "๐Ÿ” Mystery": "์ฒด๋ ฅ: 90, ์ง‘์ค‘๋ ฅ: 100, ๊ด€์ฐฐ๋ ฅ: 9, ์ง€๋Šฅ: 8, ์นด๋ฆฌ์Šค๋งˆ: 7, ๋‹จ์„œ: 0",
111
- "๐ŸŒ‹ Post-Apocalyptic": "์ฒด๋ ฅ: 95, ๋ฐฉ์‚ฌ๋Šฅ ์ €ํ•ญ: 75, ํž˜: 8, ์ƒ์กด๋ ฅ: 9, ๋ฌผ์ž: ์ œํ•œ๋จ",
112
- "๐Ÿค– Cyberpunk": "์ฒด๋ ฅ: 90, ์‚ฌ์ด๋ฒ„์›จ์–ด: 85%, ํ•ดํ‚น: 8, ๊ฑฐ๋ฆฌ ์‹ ์šฉ๋„: 6, ์—ฃ์ง€: 7, ๋ˆ„์—”: 1000",
113
- "โš™๏ธ Steampunk": "์ฒด๋ ฅ: 95, ์ฆ๊ธฐ๋ ฅ: 85, ๊ธฐ๊ณ„๊ณตํ•™: 8, ์˜ˆ์ˆ ์„ฑ: 7, ์‚ฌ๊ต์„ฑ: 6, ์‹ค๋ง: 200"
114
- }
115
-
116
- if genre in base_stats:
117
- return base_stats[genre]
118
- else:
119
- # Default stats if genre not found
120
- return "์ฒด๋ ฅ: 100, ์—๋„ˆ์ง€: 100, ํž˜: 7, ์ง€๋Šฅ: 7, ๋ฏผ์ฒฉ: 7, ์†Œ์ง€๊ธˆ: 100"
121
-
122
- @pxt.udf
123
- def generate_random_event(turn_number: int) -> str:
124
- """Generate a random event based on turn number"""
125
- if turn_number % 3 == 0 and turn_number > 0: # Every 3rd turn
126
- events = [
127
- "๊ฐ‘์ž๊ธฐ ๋ถ€๊ทผ์—์„œ ์ด์ƒํ•œ ์†Œ๋ฆฌ๊ฐ€ ๋“ค๋ฆฝ๋‹ˆ๋‹ค",
128
- "๋‚ฏ์„  ์—ฌํ–‰์ž๊ฐ€ ๋‹น์‹ ์„ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค",
129
- "์ง€๋ฉด์ด ๋ฏธ์„ธํ•˜๊ฒŒ ์ง„๋™ํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค",
130
- "์ฃผ๋จธ๋‹ˆ์—์„œ ๋ฌด์–ธ๊ฐ€๊ฐ€ ๋น›๋‚ฉ๋‹ˆ๋‹ค",
131
- "๋ฉ€๋ฆฌ์„œ ๋ฌด์–ธ๊ฐ€๊ฐ€ ๋‹น์‹ ์„ ํ–ฅํ•ด ๋‹ค๊ฐ€์˜ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค",
132
- "๊ฐ‘์ž๊ธฐ ๋‚ ์”จ๊ฐ€ ๋ณ€ํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค",
133
- "์ฃผ๋ณ€์— ์ˆจ๊ฒจ์ง„ ํ†ต๋กœ๋ฅผ ๋ฐœ๊ฒฌํ•ฉ๋‹ˆ๋‹ค"
134
- ]
135
- return random.choice(events)
136
- return ""
137
-
138
  # Create a single table for all game data
139
  interactions = pxt.create_table(
140
  'ai_rpg.interactions',
@@ -184,8 +184,9 @@ class RPGGame:
184
  self.current_session_id = session_id
185
  self.turn_number = 0
186
 
187
- # ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ฒฐ๊ณผ๋ฅผ ๋จผ์ € ๋ณ€์ˆ˜์— ์ €์žฅ
188
- self.current_stats = initialize_stats(genre)
 
189
 
190
  interactions.insert([{
191
  'session_id': session_id,
@@ -195,7 +196,7 @@ class RPGGame:
195
  'turn_number': 0,
196
  'player_input': "Game starts",
197
  'timestamp': datetime.now(),
198
- 'player_stats': self.current_stats, # ๋ฌธ์ž์—ด ๊ฐ’์„ ์ €์žฅ
199
  'random_event': ""
200
  }])
201
 
@@ -227,10 +228,23 @@ class RPGGame:
227
  ).collect()
228
 
229
  self.current_stats = prev_turn['player_stats'][0]
230
- random_event = generate_random_event(self.turn_number)
231
 
232
- if random_event:
233
- action = f"{action} ({random_event})"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
234
 
235
  interactions.insert([{
236
  'session_id': self.current_session_id,
@@ -241,7 +255,7 @@ class RPGGame:
241
  'player_input': action,
242
  'timestamp': datetime.now(),
243
  'player_stats': self.current_stats,
244
- 'random_event': random_event
245
  }])
246
 
247
  result = interactions.select(
 
17
  pxt.drop_dir('ai_rpg', force=True)
18
  pxt.create_dir('ai_rpg')
19
 
20
+ # ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ ๋ณ€๊ฒฝ (UDF๊ฐ€ ์•„๋‹˜)
21
+ def initialize_stats(genre: str) -> str:
22
+ """Initialize player stats based on the selected genre"""
23
+ base_stats = {
24
+ "๐Ÿง™โ€โ™‚๏ธ Fantasy": "์ฒด๋ ฅ: 100, ๋งˆ๋‚˜: 80, ํž˜: 7, ์ง€๋Šฅ: 8, ๋ฏผ์ฒฉ: 6, ์†Œ์ง€๊ธˆ: 50๊ณจ๋“œ",
25
+ "๐Ÿš€ Sci-Fi": "์ฒด๋ ฅ: 100, ์—๋„ˆ์ง€: 90, ๊ธฐ์ˆ ๋ ฅ: 8, ์ง€๋Šฅ: 9, ๋ฏผ์ฒฉ: 6, ํฌ๋ ˆ๋”ง: 500",
26
+ "๐Ÿ‘ป Horror": "์ฒด๋ ฅ: 80, ์ •์‹ ๋ ฅ: 100, ํž˜: 6, ์ง€๋Šฅ: 7, ๋ฏผ์ฒฉ: 8, ์†Œ์ง€ํ’ˆ: ์†์ „๋“ฑ, ๊ธฐ๋ณธ ์•ฝํ’ˆ",
27
+ "๐Ÿ” Mystery": "์ฒด๋ ฅ: 90, ์ง‘์ค‘๋ ฅ: 100, ๊ด€์ฐฐ๋ ฅ: 9, ์ง€๋Šฅ: 8, ์นด๋ฆฌ์Šค๋งˆ: 7, ๋‹จ์„œ: 0",
28
+ "๐ŸŒ‹ Post-Apocalyptic": "์ฒด๋ ฅ: 95, ๋ฐฉ์‚ฌ๋Šฅ ์ €ํ•ญ: 75, ํž˜: 8, ์ƒ์กด๋ ฅ: 9, ๋ฌผ์ž: ์ œํ•œ๋จ",
29
+ "๐Ÿค– Cyberpunk": "์ฒด๋ ฅ: 90, ์‚ฌ์ด๋ฒ„์›จ์–ด: 85%, ํ•ดํ‚น: 8, ๊ฑฐ๋ฆฌ ์‹ ์šฉ๋„: 6, ์—ฃ์ง€: 7, ๋ˆ„์—”: 1000",
30
+ "โš™๏ธ Steampunk": "์ฒด๋ ฅ: 95, ์ฆ๊ธฐ๋ ฅ: 85, ๊ธฐ๊ณ„๊ณตํ•™: 8, ์˜ˆ์ˆ ์„ฑ: 7, ์‚ฌ๊ต์„ฑ: 6, ์‹ค๋ง: 200"
31
+ }
32
+
33
+ if genre in base_stats:
34
+ return base_stats[genre]
35
+ else:
36
+ # Default stats if genre not found
37
+ return "์ฒด๋ ฅ: 100, ์—๋„ˆ์ง€: 100, ํž˜: 7, ์ง€๋Šฅ: 7, ๋ฏผ์ฒฉ: 7, ์†Œ์ง€๊ธˆ: 100"
38
+
39
+ @pxt.udf
40
+ def generate_random_event(turn_number: int) -> str:
41
+ """Generate a random event based on turn number"""
42
+ if turn_number % 3 == 0 and turn_number > 0: # Every 3rd turn
43
+ events = [
44
+ "๊ฐ‘์ž๊ธฐ ๋ถ€๊ทผ์—์„œ ์ด์ƒํ•œ ์†Œ๋ฆฌ๊ฐ€ ๋“ค๋ฆฝ๋‹ˆ๋‹ค",
45
+ "๋‚ฏ์„  ์—ฌํ–‰์ž๊ฐ€ ๋‹น์‹ ์„ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค",
46
+ "์ง€๋ฉด์ด ๋ฏธ์„ธํ•˜๊ฒŒ ์ง„๋™ํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค",
47
+ "์ฃผ๋จธ๋‹ˆ์—์„œ ๋ฌด์–ธ๊ฐ€๊ฐ€ ๋น›๋‚ฉ๋‹ˆ๋‹ค",
48
+ "๋ฉ€๋ฆฌ์„œ ๋ฌด์–ธ๊ฐ€๊ฐ€ ๋‹น์‹ ์„ ํ–ฅํ•ด ๋‹ค๊ฐ€์˜ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค",
49
+ "๊ฐ‘์ž๊ธฐ ๋‚ ์”จ๊ฐ€ ๋ณ€ํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค",
50
+ "์ฃผ๋ณ€์— ์ˆจ๊ฒจ์ง„ ํ†ต๋กœ๋ฅผ ๋ฐœ๊ฒฌํ•ฉ๋‹ˆ๋‹ค"
51
+ ]
52
+ return random.choice(events)
53
+ return ""
54
+
55
  @pxt.udf
56
  def generate_messages(genre: str, player_name: str, initial_scenario: str, player_input: str, turn_number: int, stats: str) -> list[dict]:
57
  return [
 
135
 
136
  return ["๊ณ„์†ํ•˜๊ธฐ...", "๋‹ค๋ฅธ ํ–‰๋™ ์ทจํ•˜๊ธฐ", "๋ญ”๊ฐ€ ์ƒˆ๋กœ์šด ์‹œ๋„ํ•˜๊ธฐ", "์ฃผ๋ณ€ ํƒ์ƒ‰ํ•˜๊ธฐ"]
137
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
138
  # Create a single table for all game data
139
  interactions = pxt.create_table(
140
  'ai_rpg.interactions',
 
184
  self.current_session_id = session_id
185
  self.turn_number = 0
186
 
187
+ # ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅ
188
+ initial_stats = initialize_stats(genre)
189
+ self.current_stats = initial_stats
190
 
191
  interactions.insert([{
192
  'session_id': session_id,
 
196
  'turn_number': 0,
197
  'player_input': "Game starts",
198
  'timestamp': datetime.now(),
199
+ 'player_stats': initial_stats, # ๋ฌธ์ž์—ด ๊ฒฐ๊ณผ ์ €์žฅ
200
  'random_event': ""
201
  }])
202
 
 
228
  ).collect()
229
 
230
  self.current_stats = prev_turn['player_stats'][0]
 
231
 
232
+ # ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ ๋ณ€ํ™˜ํ–ˆ์œผ๋ฏ€๋กœ ๊ทธ๋ƒฅ ํ˜ธ์ถœํ•ด์„œ ์‚ฌ์šฉ
233
+ random_event_val = ""
234
+ if self.turn_number % 3 == 0 and self.turn_number > 0:
235
+ events = [
236
+ "๊ฐ‘์ž๊ธฐ ๋ถ€๊ทผ์—์„œ ์ด์ƒํ•œ ์†Œ๋ฆฌ๊ฐ€ ๋“ค๋ฆฝ๋‹ˆ๋‹ค",
237
+ "๋‚ฏ์„  ์—ฌํ–‰์ž๊ฐ€ ๋‹น์‹ ์„ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค",
238
+ "์ง€๋ฉด์ด ๋ฏธ์„ธํ•˜๊ฒŒ ์ง„๋™ํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค",
239
+ "์ฃผ๋จธ๋‹ˆ์—์„œ ๋ฌด์–ธ๊ฐ€๊ฐ€ ๋น›๋‚ฉ๋‹ˆ๋‹ค",
240
+ "๋ฉ€๋ฆฌ์„œ ๋ฌด์–ธ๊ฐ€๊ฐ€ ๋‹น์‹ ์„ ํ–ฅํ•ด ๋‹ค๊ฐ€์˜ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค",
241
+ "๊ฐ‘์ž๊ธฐ ๋‚ ์”จ๊ฐ€ ๋ณ€ํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค",
242
+ "์ฃผ๋ณ€์— ์ˆจ๊ฒจ์ง„ ํ†ต๋กœ๋ฅผ ๋ฐœ๊ฒฌํ•ฉ๋‹ˆ๋‹ค"
243
+ ]
244
+ random_event_val = random.choice(events)
245
+
246
+ if random_event_val:
247
+ action = f"{action} ({random_event_val})"
248
 
249
  interactions.insert([{
250
  'session_id': self.current_session_id,
 
255
  'player_input': action,
256
  'timestamp': datetime.now(),
257
  'player_stats': self.current_stats,
258
+ 'random_event': random_event_val
259
  }])
260
 
261
  result = interactions.select(