EZTIME2025 commited on
Commit
e84109f
·
1 Parent(s): af7246f

update capture of state in json

Browse files
examples/ai_testing/README.md DELETED
@@ -1,249 +0,0 @@
1
- # 🤖 AI Testing Tools
2
-
3
- כלים לבדיקת יכולת ה-AI להבין מצבי משחק באמצעות Web Visualizer.
4
-
5
- ## 🎯 מטרה
6
-
7
- הכלים האלה מאפשרים:
8
- 1. **לתפוס מצב משחק אמיתי** מתוך משחק רץ
9
- 2. **לראות את ה-JSON המדויק והמלא** שעובר לוויזואליזציה (זה מה שנשלח ל-AI)
10
- 3. **להציג מצב משחק ספציפי** ב-Web Visualizer
11
- 4. **לבדוק אם AI מבין את מצב הלוח** לפני שמפתחים אותו
12
-
13
- ## 📁 קבצים
14
-
15
- ```
16
- ai_testing/
17
- ├── capture_with_web.py # תופס JSON + פותח דפדפן 🌟 BEST FOR VIEWING!
18
- ├── show_complete_state.py # מציג מצב מלא וסיכום (ללא דפדפן)
19
- ├── simple_capture.py # תופס JSON בלבד (מהיר)
20
- ├── visualize_game_state.py # מציג JSON קיים בדפדפן
21
- ├── sample_states/ # קבצי JSON לדוגמה
22
- │ ├── captured_game.json # מצב שנתפס ממשחק אמיתי ✅
23
- │ └── ...
24
- ├── captured_states/ # כל המצבים שנתפסו
25
- │ ├── state_001_initial.json
26
- │ └── state_XXX_final.json
27
- └── README.md # התיעוד הזה
28
- ```
29
-
30
- ## 🚀 שימוש מומלץ
31
-
32
- ### אופציה 1: תפיסה + צפייה (מומלץ!)
33
-
34
- **הדרך הטובה ביותר אם אתה רוצה לראות את הלוח:**
35
-
36
- ```bash
37
- py examples/ai_testing/capture_with_web.py examples/data/game_moves_3Players.txt
38
- ```
39
-
40
- **מה זה עושה:**
41
- 1. ✅ מריץ משחק עם האינפוטים
42
- 2. 🌐 פותח דפדפן עם Web Visualizer
43
- 3. 📸 תופס את כל ה-JSON בשקט ברקע
44
- 4. 💾 שומר את המצב המלא (כולל points + adjacency!)
45
- 5. 🎯 השרת נשאר פעיל - תוכל לראות את הלוח
46
-
47
- **בסוף תקבל:**
48
- - הלוח מוצג בדפדפן ✨
49
- - JSON מלא עם כל המידע שמור בקובץ
50
- - אפשר ללחוץ Ctrl+C לסגור
51
-
52
- ### אופציה 2: תפיסה בלי דפדפן (מהיר)
53
-
54
- **אם אתה רק רוצה את ה-JSON בלי להפעיל דפדפן:**
55
-
56
- ```bash
57
- py examples/ai_testing/show_complete_state.py examples/data/game_moves_3Players.txt
58
- ```
59
-
60
- **מה זה עושה:**
61
- - מריץ משחק בלי דפדפן
62
- - מדפיס את כל ה-JSON בסוף
63
- - שומר את המצבים לקבצים
64
-
65
- ### אופציה 3: הצגת JSON קיים בדפדפן
66
-
67
- **אם יש לך כבר JSON ואתה רוצה לראות אותו:**
68
-
69
- ```bash
70
- py examples/ai_testing/visualize_game_state.py --state-file examples/ai_testing/sample_states/captured_game.json
71
- ```
72
-
73
- ---
74
-
75
- ## 📊 מה כולל ה-JSON המלא?
76
-
77
- כדי ליצור מצב משחק משלך:
78
-
79
- 1. **צור קובץ טקסט** עם פקודות משחק:
80
- ```
81
- 3 # מספר שחקנים
82
- Alice
83
- Bob
84
- Charlie
85
- s 10 # settlement בנקודה 10
86
- rd 10 11 # road מ-10 ל-11
87
- ...
88
- ```
89
-
90
- 2. **הרץ את simple_capture**:
91
- ```bash
92
- py examples/ai_testing/simple_capture.py your_inputs.txt
93
- ```
94
-
95
- 3. **תראה את ה-JSON** בקונסול ובקובץ
96
-
97
- ## 📊 מה מודפס?
98
-
99
- ### JSON מלא (לשליחה ל-AI)
100
- ```json
101
- {
102
- "hexes": [
103
- {"id": 1, "type": "wood", "number": 12, ...}
104
- ],
105
- "settlements": [
106
- {"point_id": 10, "owner": 0, "type": "SETTLEMENT"}
107
- ],
108
- "cities": [...],
109
- "roads": [
110
- {"start_point": 10, "end_point": 11, "owner": 0}
111
- ],
112
- "players": [
113
- {
114
- "id": 0,
115
- "name": "Alice",
116
- "cards": ["WOOD", "BRICK"],
117
- "victory_points": 2,
118
- ...
119
- }
120
- ],
121
- "current_player": 0,
122
- "current_phase": "NORMAL_PLAY",
123
- "robber_position": {"q": 0, "r": 0}
124
- }
125
- ```
126
-
127
- ## 🎮 מבנה ה-JSON
128
-
129
- ### Hexes (משושים)
130
- ```json
131
- {
132
- "coords": [0, 0],
133
- "type": "HILLS",
134
- "number": 3,
135
- "has_robber": false
136
- }
137
- ```
138
-
139
- ### Buildings (התנחלויות וערים)
140
- ```json
141
- {
142
- "point_id": 5,
143
- "owner": 0,
144
- "type": "SETTLEMENT" // או "CITY"
145
- }
146
- ```
147
-
148
- ### Roads (דרכים)
149
- ```json
150
- {
151
- "start_point": 5,
152
- "end_point": 8,
153
- "owner": 0
154
- }
155
- ```
156
-
157
- ### Players (שחקנים)
158
- ```json
159
- {
160
- "id": 0,
161
- "name": "Player 0",
162
- "cards": ["WOOD", "BRICK"],
163
- "dev_cards": ["KNIGHT"],
164
- "victory_points": 6,
165
- "has_longest_road": true,
166
- "has_largest_army": false,
167
- "knights_played": 1
168
- }
169
- ```
170
-
171
- ## 📝 יצירת קובץ JSON חדש
172
-
173
- כדי ליצור מצב משחק משלך:
174
-
175
- 1. העתק אחד מהקבצים ב-`sample_states/`
176
- 2. ערוך את הערכים:
177
- - `tiles` - המשושים בלוח
178
- - `buildings` - התנחלויות וערים
179
- - `roads` - דרכים
180
- - `players_state` - מידע על כל שחקן
181
- 3. שמור עם שם תיאורי
182
- 4. הרץ: `python visualize_game_state.py --state-file your_file.json`
183
-
184
- ## 🔍 למה זה חשוב ל-AI?
185
-
186
- 1. **AI צריך להבין את הלוח** - ה-JSON הזה מכיל את **כל המידע** שהוא יקבל
187
- 2. **בדיקת הבנה** - אפשר לבדוק א�� AI מבין מצבים שונים לפני שבונים אותו
188
- 3. **תיעוד מדויק** - רואים בדיוק איזה מידע זמין לקבלת החלטות
189
-
190
- ## 💡 טיפים
191
-
192
- - **הרץ את הסקריפט** בכל שלב של משחק רגיל כדי לראות איך המידע משתנה
193
- - **שמור JSON** ממצבי משחק מעניינים לבדיקה מאוחר יותר
194
- - **השווה בין מצבים** - ראה איך הלוח משתנה במהלך המשחק
195
-
196
- ## 🛠️ שילוב עם AI
197
-
198
- כשתבנה AI agent:
199
-
200
- ```python
201
- from examples.ai_testing.visualize_game_state import game_to_game_state
202
-
203
- # צור מצב משחק
204
- game_state = game_to_game_state(game)
205
-
206
- # המר לפורמט web (זה מה שה-AI יקבל)
207
- web_format = web_viz._convert_game_state(game_state)
208
-
209
- # שלח ל-AI
210
- ai_decision = ai_agent.decide(web_format)
211
- ```
212
-
213
- ---
214
-
215
- **עכשיו יש לך את כל הכלים כדי לבדוק שה-AI מבין את הלוח!** 🎯
216
-
217
- ## 🎯 המידע המלא שה-AI מקבל - עכשיו עם Points!
218
-
219
- ### ⭐ חשוב! מידע חדש שהוספנו:
220
-
221
- #### 📍 Points (54 נקודות)
222
- כל נקודה כוללת:
223
- - `point_id` - מזהה (1-54)
224
- - `adjacent_points` - רשימת נקודות מחוברות (לדרכים!)
225
- - `adjacent_hexes` - רשימת משושים צמודים (למשאבים!)
226
-
227
- **דוגמה:**
228
- ```json
229
- {
230
- "point_id": 10,
231
- "adjacent_points": [9, 11, 20], // יכול לבנות דרך לכיוון אלה
232
- "adjacent_hexes": [5, 4, 1] // יקבל משאבים מאלה
233
- }
234
- ```
235
-
236
- #### 🗺️ Board Graph
237
- ```json
238
- {
239
- "adjacency": {"10": [9, 11, 20]}, // גרף קישוריות מלא
240
- "hex_to_points": {"5": [9,10,11,19,20,21]} // נקודות על כל משושה
241
- }
242
- ```
243
-
244
- **למה זה קריטי:**
245
- - 🛣️ חישוב הדרך הארוכה ביותר
246
- - 🎯 מציאת נקודות חסימה
247
- - 📊 אסטרטגיה - אילו נקודות כדאי לתפוס
248
-
249
- ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
examples/ai_testing/USAGE.md DELETED
@@ -1,147 +0,0 @@
1
- # AI Testing - Usage Examples
2
-
3
- ## דוגמאות שימוש מהירות
4
-
5
- ### 1. תפיסת JSON ממשחק קיים
6
-
7
- ```bash
8
- # שימוש בקובץ אינפוטים קיים
9
- py examples/ai_testing/simple_capture.py examples/data/game_moves_3Players.txt
10
-
11
- # הפלט:
12
- # - JSON מודפס לקונסול בכל עדכון
13
- # - המצב האחרון נשמר ל: examples/ai_testing/sample_states/captured_game.json
14
- ```
15
-
16
- ### 2. הצגת המצב שנתפס
17
-
18
- ```bash
19
- # הצג את המצב בדפדפן
20
- py examples/ai_testing/visualize_game_state.py --state-file examples/ai_testing/sample_states/captured_game.json
21
- ```
22
-
23
- ### 3. שמירת כל הפלט לקובץ
24
-
25
- ```bash
26
- # שמור את כל הפלט (כולל כל ה-JSONs) לקובץ
27
- py examples/ai_testing/simple_capture.py examples/data/game_moves_3Players.txt > output.txt 2>&1
28
- ```
29
-
30
- ## מבנה ה-JSON
31
-
32
- ### Hexes (משושים)
33
- כל משושה מכיל:
34
- - `id` - מזהה ייחודי (1-19)
35
- - `type` - סוג המשאב: "wood", "brick", "sheep", "wheat", "ore", "desert"
36
- - `number` - המספר על המשושה (2-12, או null למדבר)
37
- - `has_robber` - האם השודד נמצא שם
38
- - `position` - [row, col] - מיקום בלוח המקורי
39
- - `axial_coords` / `q`, `r` - קואורדינטות hexagonal
40
-
41
- ### Buildings (מבנים)
42
- ```json
43
- {
44
- "settlements": [
45
- {
46
- "point_id": 10,
47
- "owner": 0,
48
- "type": "SETTLEMENT"
49
- }
50
- ],
51
- "cities": [
52
- {
53
- "point_id": 14,
54
- "owner": 1,
55
- "type": "CITY"
56
- }
57
- ]
58
- }
59
- ```
60
-
61
- ### Roads (דרכים)
62
- ```json
63
- {
64
- "roads": [
65
- {
66
- "start_point": 10,
67
- "end_point": 11,
68
- "owner": 0
69
- }
70
- ]
71
- }
72
- ```
73
-
74
- ### Players (שחקנים)
75
- ```json
76
- {
77
- "players": [
78
- {
79
- "id": 0,
80
- "name": "Alice",
81
- "cards": ["WOOD", "BRICK", "SHEEP"], // משאבים בידיים
82
- "dev_cards": ["KNIGHT"], // קלפי פיתוח
83
- "victory_points": 3,
84
- "has_longest_road": false,
85
- "has_largest_army": false,
86
- "knights_played": 1
87
- }
88
- ]
89
- }
90
- ```
91
-
92
- ### Game State (מצב משחק כללי)
93
- ```json
94
- {
95
- "current_player": 0, // מי התור
96
- "current_phase": "NORMAL_PLAY", // שלב המשחק
97
- "robber_position": { // איפה השודד
98
- "q": 0,
99
- "r": 0
100
- }
101
- }
102
- ```
103
-
104
- ## טיפים לשימוש
105
-
106
- ### יצירת מצבי בדיקה
107
-
108
- 1. **ערוך קובץ אינפוט** - צור משחק עם המצב הרצוי
109
- 2. **הרץ simple_capture** - תפוס את המצב
110
- 3. **שמור את ה-JSON** - יש לך עכשיו מצב לבדיקה
111
-
112
- ### בדיקת הבנת AI
113
-
114
- 1. **תפוס מצב** מעניין ממשחק
115
- 2. **שלח ל-AI** את ה-JSON
116
- 3. **בקש החלטה** - מה הפעולה הטובה ביותר?
117
- 4. **הצג בדפדפן** - ראה את אותו המצב ויזואלית
118
-
119
- ### דיבוג
120
-
121
- אם AI מקבל החלטות מוזרות:
122
- 1. הדפס את ה-JSON שהוא קיבל
123
- 2. הצג אותו ב-visualizer
124
- 3. ראה מה הוא אמור לראות
125
- 4. זהה פערים בהבנה
126
-
127
- ## דוגמה מלאה
128
-
129
- ```bash
130
- # 1. תפוס מצב ממשחק
131
- py examples/ai_testing/simple_capture.py examples/data/game_moves_3Players.txt
132
-
133
- # 2. הקובץ נשמר ב:
134
- # examples/ai_testing/sample_states/captured_game.json
135
-
136
- # 3. הצג אותו בדפדפן
137
- py examples/ai_testing/visualize_game_state.py --state-file examples/ai_testing/sample_states/captured_game.json
138
-
139
- # 4. עכשיו אתה יכול:
140
- # - לראות את הלוח ויזואלית
141
- # - לקרוא את ה-JSON
142
- # - לשלוח ל-AI לבדיקה
143
- ```
144
-
145
- ---
146
-
147
- **עכשיו יש לך את כל הכלים כדי לבדוק שה-AI מבין את הלוח!** 🎯
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
examples/ai_testing/capture_game_state.py DELETED
@@ -1,260 +0,0 @@
1
- """
2
- Capture Game State from Real Game
3
- ----------------------------------
4
- This script runs a real game with predefined inputs and captures the JSON
5
- data that is sent to the Web Visualizer. This is exactly what an AI would see.
6
-
7
- Usage:
8
- python capture_game_state.py [--input-file INPUT_FILE] [--output-file OUTPUT_FILE]
9
- """
10
-
11
- import sys
12
- import json
13
- import time
14
- from pathlib import Path
15
- from io import StringIO
16
-
17
- # Add parent directory to path for imports
18
- sys.path.insert(0, str(Path(__file__).parent.parent.parent))
19
-
20
- from pycatan.visualizations.web_visualization import WebVisualization
21
- from pycatan.management.game_manager import GameManager
22
- from pycatan.players.human_user import HumanUser
23
-
24
-
25
- class StateCapturingWebViz(WebVisualization):
26
- """
27
- Extended WebVisualization that captures all state updates.
28
- """
29
-
30
- def __init__(self, *args, **kwargs):
31
- # Don't start the server automatically
32
- kwargs['auto_open'] = False
33
- super().__init__(*args, **kwargs)
34
-
35
- self.captured_states = []
36
- self.captured_actions = []
37
- self.turn_states = {} # Maps turn number to state
38
-
39
- def update_full_state(self, game_state):
40
- """Override to capture state updates."""
41
- # Call parent to do the conversion
42
- super().update_full_state(game_state)
43
-
44
- # Capture the converted state
45
- if self.current_game_state:
46
- state_copy = json.loads(json.dumps(self.current_game_state))
47
- self.captured_states.append(state_copy)
48
-
49
- # Store by turn number if available
50
- turn_num = state_copy.get('turn_number', len(self.captured_states))
51
- self.turn_states[turn_num] = state_copy
52
-
53
- print(f"\n📸 Captured state for turn {turn_num}")
54
-
55
- def display_action(self, action, result):
56
- """Override to capture actions."""
57
- super().display_action(action, result)
58
-
59
- action_data = {
60
- 'action_type': str(action.action_type) if hasattr(action, 'action_type') else 'unknown',
61
- 'player_id': action.player_id if hasattr(action, 'player_id') else None,
62
- 'success': result.success if hasattr(result, 'success') else None,
63
- 'timestamp': str(action.timestamp) if hasattr(action, 'timestamp') else None
64
- }
65
- self.captured_actions.append(action_data)
66
-
67
- def get_latest_state(self):
68
- """Get the most recent captured state."""
69
- return self.captured_states[-1] if self.captured_states else None
70
-
71
- def get_state_at_turn(self, turn_number):
72
- """Get state at a specific turn."""
73
- return self.turn_states.get(turn_number)
74
-
75
- def print_latest_state(self):
76
- """Print the latest state as formatted JSON."""
77
- latest = self.get_latest_state()
78
- if latest:
79
- print("\n" + "="*80)
80
- print("📊 LATEST GAME STATE JSON")
81
- print("="*80)
82
- print(json.dumps(latest, indent=2, ensure_ascii=False))
83
- print("="*80)
84
-
85
- # Print summary
86
- self._print_summary(latest)
87
-
88
- def _print_summary(self, state_data):
89
- """Print a human-readable summary."""
90
- print("\n" + "="*80)
91
- print("📈 SUMMARY")
92
- print("="*80)
93
- print(f"Current Player: {state_data.get('current_player', 0)}")
94
- print(f"Game Phase: {state_data.get('current_phase', 'UNKNOWN')}")
95
- print(f"Robber Position: {state_data.get('robber_position', 'Unknown')}")
96
-
97
- if state_data.get('dice_result'):
98
- print(f"Last Dice Roll: {state_data['dice_result']}")
99
-
100
- print(f"\nBoard:")
101
- print(f" - Hexes: {len(state_data.get('hexes', []))}")
102
- print(f" - Settlements: {len(state_data.get('settlements', []))}")
103
- print(f" - Cities: {len(state_data.get('cities', []))}")
104
- print(f" - Roads: {len(state_data.get('roads', []))}")
105
-
106
- print(f"\nPlayers: {len(state_data.get('players', []))}")
107
- for player in state_data.get('players', []):
108
- print(f" Player {player.get('id', '?')}: {player.get('name', 'Unknown')}")
109
- print(f" - Victory Points: {player.get('victory_points', 0)}")
110
- print(f" - Resources: {len(player.get('cards', []))}")
111
- print(f" - Dev Cards: {len(player.get('dev_cards', []))}")
112
- if player.get('has_longest_road'):
113
- print(f" - Has Longest Road!")
114
- if player.get('has_largest_army'):
115
- print(f" - Has Largest Army!")
116
- print("="*80)
117
-
118
- def save_state_to_file(self, filepath, turn_number=None):
119
- """Save a specific state to JSON file."""
120
- if turn_number is not None:
121
- state = self.get_state_at_turn(turn_number)
122
- if not state:
123
- print(f"❌ No state captured for turn {turn_number}")
124
- return False
125
- else:
126
- state = self.get_latest_state()
127
-
128
- if not state:
129
- print("❌ No state to save")
130
- return False
131
-
132
- with open(filepath, 'w', encoding='utf-8') as f:
133
- json.dump(state, f, indent=2, ensure_ascii=False)
134
-
135
- print(f"✅ State saved to: {filepath}")
136
- return True
137
-
138
-
139
- def run_game_with_inputs(input_lines):
140
- """
141
- Run a game with predefined inputs and capture states.
142
-
143
- Args:
144
- input_lines: List of input strings to feed to the game
145
-
146
- Returns:
147
- StateCapturingWebViz: The visualizer with captured states
148
- """
149
- # Create input stream from the lines
150
- input_stream = StringIO('\n'.join(input_lines))
151
-
152
- # Temporarily redirect stdin
153
- original_stdin = sys.stdin
154
- sys.stdin = input_stream
155
-
156
- try:
157
- # Create capturing visualizer
158
- viz = StateCapturingWebViz(port=5555, auto_open=False)
159
-
160
- # Create game manager with visualization
161
- # We'll create simple users - the input will come from our stream
162
- users = [] # Will be populated by game manager from input
163
-
164
- print("\n🎮 Starting game with captured inputs...")
165
- print(f" Total input lines: {len(input_lines)}")
166
- print("="*80)
167
-
168
- # Start game - this will consume the inputs
169
- game_manager = GameManager(users=None, visualizations=[viz])
170
-
171
- # The game will read from our input stream
172
- game_manager.start_game()
173
-
174
- print("\n✅ Game completed!")
175
- print(f"📸 Captured {len(viz.captured_states)} states")
176
-
177
- return viz
178
-
179
- except EOFError:
180
- print("\n⚠️ Input ended - game may be incomplete")
181
- return viz
182
- except Exception as e:
183
- print(f"\n❌ Error running game: {e}")
184
- import traceback
185
- traceback.print_exc()
186
- return None
187
- finally:
188
- # Restore stdin
189
- sys.stdin = original_stdin
190
-
191
-
192
- def main():
193
- """Main function to capture game states."""
194
- import argparse
195
-
196
- parser = argparse.ArgumentParser(description='Capture game state from real game')
197
- parser.add_argument('--input-file', type=str,
198
- default='examples/data/game_moves_3Players.txt',
199
- help='Path to file with game inputs')
200
- parser.add_argument('--output-file', type=str,
201
- help='Path to save captured state JSON')
202
- parser.add_argument('--turn', type=int,
203
- help='Capture state at specific turn number')
204
- parser.add_argument('--all-turns', action='store_true',
205
- help='Save all turn states to separate files')
206
-
207
- args = parser.parse_args()
208
-
209
- # Read input file
210
- input_file = Path(args.input_file)
211
- if not input_file.exists():
212
- print(f"❌ Input file not found: {input_file}")
213
- return
214
-
215
- with open(input_file, 'r', encoding='utf-8') as f:
216
- input_lines = [line.strip() for line in f if line.strip()]
217
-
218
- print(f"📂 Loaded inputs from: {input_file}")
219
- print(f" Lines: {len(input_lines)}")
220
-
221
- # Run game and capture states
222
- viz = run_game_with_inputs(input_lines)
223
-
224
- if not viz:
225
- print("❌ Failed to capture game states")
226
- return
227
-
228
- # Print latest state
229
- viz.print_latest_state()
230
-
231
- # Save states
232
- if args.all_turns:
233
- output_dir = Path('examples/ai_testing/captured_states')
234
- output_dir.mkdir(exist_ok=True)
235
-
236
- print(f"\n💾 Saving all turn states to: {output_dir}")
237
- for turn_num, state in viz.turn_states.items():
238
- output_file = output_dir / f"turn_{turn_num:03d}.json"
239
- with open(output_file, 'w', encoding='utf-8') as f:
240
- json.dump(state, f, indent=2, ensure_ascii=False)
241
- print(f" ✅ Saved turn {turn_num}")
242
-
243
- elif args.output_file:
244
- viz.save_state_to_file(args.output_file, args.turn)
245
-
246
- else:
247
- # Default: save latest state
248
- output_file = Path('examples/ai_testing/sample_states/captured_game.json')
249
- viz.save_state_to_file(str(output_file))
250
-
251
- print("\n" + "="*80)
252
- print("✨ CAPTURE COMPLETE")
253
- print("="*80)
254
- print("You now have the exact JSON that would be sent to an AI agent!")
255
- print("Use visualize_game_state.py to view it in the browser.")
256
- print("="*80)
257
-
258
-
259
- if __name__ == '__main__':
260
- main()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
examples/ai_testing/capture_with_web.py DELETED
@@ -1,160 +0,0 @@
1
- """
2
- Capture Game State WITH Web Visualizer
3
- ---------------------------------------
4
- Runs a game with predefined inputs, captures the JSON data,
5
- AND displays it in the web browser so you can see the board visually.
6
- """
7
-
8
- import sys
9
- from pathlib import Path
10
- import os
11
- import json
12
- import time
13
- import threading
14
-
15
- # Add parent directory to path
16
- sys.path.insert(0, str(Path(__file__).parent.parent.parent))
17
-
18
- from pycatan.visualizations.web_visualization import WebVisualization
19
-
20
- # Capture states
21
- captured_states = []
22
- update_counter = 0
23
-
24
- original_update = WebVisualization.update_full_state
25
-
26
- def capturing_update(self, game_state):
27
- """Capture and save all states."""
28
- global update_counter
29
- original_update(self, game_state)
30
-
31
- if hasattr(self, 'current_game_state') and self.current_game_state:
32
- update_counter += 1
33
- state_copy = json.loads(json.dumps(self.current_game_state))
34
- captured_states.append(state_copy)
35
-
36
- # Print just a notification (not the full JSON to keep output clean)
37
- print(f"[State #{update_counter} captured]", end=' ', flush=True)
38
-
39
- # Apply patch
40
- WebVisualization.update_full_state = capturing_update
41
-
42
-
43
- def save_captured_states():
44
- """Save all captured states to files."""
45
- if not captured_states:
46
- print("\n\nNo states were captured!")
47
- return False
48
-
49
- # Create output directory
50
- output_dir = Path('examples/ai_testing/captured_states')
51
- output_dir.mkdir(exist_ok=True)
52
-
53
- # Save first state
54
- first_state = captured_states[0]
55
- first_file = output_dir / 'state_001_initial.json'
56
- with open(first_file, 'w', encoding='utf-8') as f:
57
- json.dump(first_state, f, indent=2, ensure_ascii=False)
58
-
59
- # Save last state
60
- last_state = captured_states[-1]
61
- last_file = output_dir / f'state_{len(captured_states):03d}_final.json'
62
- with open(last_file, 'w', encoding='utf-8') as f:
63
- json.dump(last_state, f, indent=2, ensure_ascii=False)
64
-
65
- # Also save to sample_states for compatibility
66
- sample_file = Path('examples/ai_testing/sample_states/captured_game.json')
67
- sample_file.parent.mkdir(exist_ok=True)
68
- with open(sample_file, 'w', encoding='utf-8') as f:
69
- json.dump(last_state, f, indent=2, ensure_ascii=False)
70
-
71
- print(f"\n\n{'='*80}")
72
- print(f"Captured {len(captured_states)} states total")
73
- print("="*80)
74
- print(f"\nSaved states:")
75
- print(f" - First: {first_file}")
76
- print(f" - Last: {last_file}")
77
- print(f" - Main: {sample_file}")
78
-
79
- # Print summary of last state
80
- print("\n" + "="*80)
81
- print("FINAL GAME STATE SUMMARY")
82
- print("="*80)
83
-
84
- print(f"\nBoard:")
85
- print(f" Hexes: {len(last_state.get('hexes', []))}")
86
- print(f" Points: {len(last_state.get('points', []))} (with adjacency info)")
87
- print(f" Settlements: {len(last_state.get('settlements', []))}")
88
- print(f" Cities: {len(last_state.get('cities', []))}")
89
- print(f" Roads: {len(last_state.get('roads', []))}")
90
-
91
- print(f"\nPlayers:")
92
- for player in last_state.get('players', []):
93
- print(f" Player {player.get('id')}: {player.get('name')}")
94
- print(f" VP: {player.get('victory_points', 0)}, Resources: {len(player.get('cards_list', []))}")
95
-
96
- print(f"\nGame Info:")
97
- print(f" Current Player: {last_state.get('current_player')}")
98
- print(f" Phase: {last_state.get('current_phase')}")
99
-
100
- print("\n" + "="*80)
101
-
102
- return True
103
-
104
-
105
- def main():
106
- if len(sys.argv) > 1:
107
- input_file = sys.argv[1]
108
- else:
109
- input_file = 'examples/data/game_moves_3Players.txt'
110
-
111
- print(f"\nRunning game with: {input_file}")
112
- print("Web Visualizer will open in browser...")
113
- print("States are being captured in the background...")
114
- print("="*80 + "\n")
115
-
116
- # Read inputs
117
- with open(input_file, 'r', encoding='utf-8') as f:
118
- inputs = f.read()
119
-
120
- from io import StringIO
121
- sys.stdin = StringIO(inputs)
122
-
123
- try:
124
- from pycatan import RealGame
125
- game = RealGame()
126
-
127
- # The game will run with web server active
128
- game.run()
129
-
130
- except (EOFError, KeyboardInterrupt):
131
- print("\n\nGame stopped by user")
132
- except Exception as e:
133
- print(f"\n\nError: {e}")
134
- import traceback
135
- traceback.print_exc()
136
-
137
- # Save captured states
138
- if save_captured_states():
139
- print("\n" + "="*80)
140
- print("SUCCESS!")
141
- print("="*80)
142
- print("\nThe web visualizer should still be open in your browser.")
143
- print("You can see the final board state there.")
144
- print("\nThe complete JSON (with points and adjacency info) is saved in:")
145
- print(" examples/ai_testing/sample_states/captured_game.json")
146
- print("\nTo see the full JSON, run:")
147
- print(" Get-Content examples/ai_testing/sample_states/captured_game.json")
148
- print("="*80)
149
-
150
- # Keep the script alive so web server stays up
151
- print("\n\nPress Ctrl+C to stop the web server and exit...")
152
- try:
153
- while True:
154
- time.sleep(1)
155
- except KeyboardInterrupt:
156
- print("\n\nShutting down...")
157
-
158
-
159
- if __name__ == '__main__':
160
- main()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
examples/ai_testing/my_games/game_20251223_203724_final.json DELETED
@@ -1,1850 +0,0 @@
1
- {
2
- "hexes": [
3
- {
4
- "id": 1,
5
- "q": 0,
6
- "r": -2,
7
- "type": "wood",
8
- "number": 12,
9
- "has_robber": false,
10
- "position": [
11
- 0,
12
- 0
13
- ],
14
- "axial_coords": [
15
- 0,
16
- -2
17
- ]
18
- },
19
- {
20
- "id": 2,
21
- "q": 1,
22
- "r": -2,
23
- "type": "sheep",
24
- "number": 5,
25
- "has_robber": false,
26
- "position": [
27
- 0,
28
- 1
29
- ],
30
- "axial_coords": [
31
- 1,
32
- -2
33
- ]
34
- },
35
- {
36
- "id": 3,
37
- "q": 2,
38
- "r": -2,
39
- "type": "wood",
40
- "number": 4,
41
- "has_robber": false,
42
- "position": [
43
- 0,
44
- 2
45
- ],
46
- "axial_coords": [
47
- 2,
48
- -2
49
- ]
50
- },
51
- {
52
- "id": 4,
53
- "q": -1,
54
- "r": -1,
55
- "type": "sheep",
56
- "number": 8,
57
- "has_robber": false,
58
- "position": [
59
- 1,
60
- 0
61
- ],
62
- "axial_coords": [
63
- -1,
64
- -1
65
- ]
66
- },
67
- {
68
- "id": 5,
69
- "q": 0,
70
- "r": -1,
71
- "type": "brick",
72
- "number": 6,
73
- "has_robber": false,
74
- "position": [
75
- 1,
76
- 1
77
- ],
78
- "axial_coords": [
79
- 0,
80
- -1
81
- ]
82
- },
83
- {
84
- "id": 6,
85
- "q": 1,
86
- "r": -1,
87
- "type": "wood",
88
- "number": 3,
89
- "has_robber": false,
90
- "position": [
91
- 1,
92
- 2
93
- ],
94
- "axial_coords": [
95
- 1,
96
- -1
97
- ]
98
- },
99
- {
100
- "id": 7,
101
- "q": 2,
102
- "r": -1,
103
- "type": "wheat",
104
- "number": 8,
105
- "has_robber": false,
106
- "position": [
107
- 1,
108
- 3
109
- ],
110
- "axial_coords": [
111
- 2,
112
- -1
113
- ]
114
- },
115
- {
116
- "id": 8,
117
- "q": -2,
118
- "r": 0,
119
- "type": "brick",
120
- "number": 10,
121
- "has_robber": false,
122
- "position": [
123
- 2,
124
- 0
125
- ],
126
- "axial_coords": [
127
- -2,
128
- 0
129
- ]
130
- },
131
- {
132
- "id": 9,
133
- "q": -1,
134
- "r": 0,
135
- "type": "wood",
136
- "number": 11,
137
- "has_robber": false,
138
- "position": [
139
- 2,
140
- 1
141
- ],
142
- "axial_coords": [
143
- -1,
144
- 0
145
- ]
146
- },
147
- {
148
- "id": 10,
149
- "q": 0,
150
- "r": 0,
151
- "type": "desert",
152
- "number": null,
153
- "has_robber": true,
154
- "position": [
155
- 2,
156
- 2
157
- ],
158
- "axial_coords": [
159
- 0,
160
- 0
161
- ]
162
- },
163
- {
164
- "id": 11,
165
- "q": 1,
166
- "r": 0,
167
- "type": "ore",
168
- "number": 3,
169
- "has_robber": false,
170
- "position": [
171
- 2,
172
- 3
173
- ],
174
- "axial_coords": [
175
- 1,
176
- 0
177
- ]
178
- },
179
- {
180
- "id": 12,
181
- "q": 2,
182
- "r": 0,
183
- "type": "sheep",
184
- "number": 4,
185
- "has_robber": false,
186
- "position": [
187
- 2,
188
- 4
189
- ],
190
- "axial_coords": [
191
- 2,
192
- 0
193
- ]
194
- },
195
- {
196
- "id": 13,
197
- "q": -2,
198
- "r": 1,
199
- "type": "brick",
200
- "number": 10,
201
- "has_robber": false,
202
- "position": [
203
- 3,
204
- 0
205
- ],
206
- "axial_coords": [
207
- -2,
208
- 1
209
- ]
210
- },
211
- {
212
- "id": 14,
213
- "q": -1,
214
- "r": 1,
215
- "type": "wheat",
216
- "number": 9,
217
- "has_robber": false,
218
- "position": [
219
- 3,
220
- 1
221
- ],
222
- "axial_coords": [
223
- -1,
224
- 1
225
- ]
226
- },
227
- {
228
- "id": 15,
229
- "q": 0,
230
- "r": 1,
231
- "type": "wheat",
232
- "number": 6,
233
- "has_robber": false,
234
- "position": [
235
- 3,
236
- 2
237
- ],
238
- "axial_coords": [
239
- 0,
240
- 1
241
- ]
242
- },
243
- {
244
- "id": 16,
245
- "q": 1,
246
- "r": 1,
247
- "type": "sheep",
248
- "number": 11,
249
- "has_robber": false,
250
- "position": [
251
- 3,
252
- 3
253
- ],
254
- "axial_coords": [
255
- 1,
256
- 1
257
- ]
258
- },
259
- {
260
- "id": 17,
261
- "q": -2,
262
- "r": 2,
263
- "type": "ore",
264
- "number": 5,
265
- "has_robber": false,
266
- "position": [
267
- 4,
268
- 0
269
- ],
270
- "axial_coords": [
271
- -2,
272
- 2
273
- ]
274
- },
275
- {
276
- "id": 18,
277
- "q": -1,
278
- "r": 2,
279
- "type": "wheat",
280
- "number": 9,
281
- "has_robber": false,
282
- "position": [
283
- 4,
284
- 1
285
- ],
286
- "axial_coords": [
287
- -1,
288
- 2
289
- ]
290
- },
291
- {
292
- "id": 19,
293
- "q": 0,
294
- "r": 2,
295
- "type": "ore",
296
- "number": 2,
297
- "has_robber": false,
298
- "position": [
299
- 4,
300
- 2
301
- ],
302
- "axial_coords": [
303
- 0,
304
- 2
305
- ]
306
- }
307
- ],
308
- "settlements": [],
309
- "cities": [],
310
- "roads": [],
311
- "players": [
312
- {
313
- "id": 0,
314
- "name": "a",
315
- "victory_points": 0,
316
- "total_cards": 0,
317
- "cards_list": [],
318
- "dev_cards_list": [],
319
- "settlements": 0,
320
- "cities": 0,
321
- "roads": 0,
322
- "longest_road": 0,
323
- "has_longest_road": false,
324
- "knights": 0,
325
- "knights_played": 0,
326
- "has_largest_army": false
327
- },
328
- {
329
- "id": 1,
330
- "name": "b",
331
- "victory_points": 0,
332
- "total_cards": 0,
333
- "cards_list": [],
334
- "dev_cards_list": [],
335
- "settlements": 0,
336
- "cities": 0,
337
- "roads": 0,
338
- "longest_road": 0,
339
- "has_longest_road": false,
340
- "knights": 0,
341
- "knights_played": 0,
342
- "has_largest_army": false
343
- },
344
- {
345
- "id": 2,
346
- "name": "c",
347
- "victory_points": 0,
348
- "total_cards": 0,
349
- "cards_list": [],
350
- "dev_cards_list": [],
351
- "settlements": 0,
352
- "cities": 0,
353
- "roads": 0,
354
- "longest_road": 0,
355
- "has_longest_road": false,
356
- "knights": 0,
357
- "knights_played": 0,
358
- "has_largest_army": false
359
- }
360
- ],
361
- "current_player": 0,
362
- "current_phase": "SETUP_FIRST_ROUND",
363
- "robber_position": [
364
- 2,
365
- 2
366
- ],
367
- "dice_result": null,
368
- "points": [
369
- {
370
- "point_id": 1,
371
- "game_coords": [
372
- 0,
373
- 0
374
- ],
375
- "adjacent_points": [
376
- 2,
377
- 9
378
- ],
379
- "adjacent_hexes": [
380
- 1
381
- ],
382
- "pixel_coords": [
383
- 377.5,
384
- 105.14428414850131
385
- ]
386
- },
387
- {
388
- "point_id": 2,
389
- "game_coords": [
390
- 0,
391
- 1
392
- ],
393
- "adjacent_points": [
394
- 1,
395
- 3
396
- ],
397
- "adjacent_hexes": [
398
- 1
399
- ],
400
- "pixel_coords": [
401
- 422.5,
402
- 105.14428414850128
403
- ]
404
- },
405
- {
406
- "point_id": 3,
407
- "game_coords": [
408
- 0,
409
- 2
410
- ],
411
- "adjacent_points": [
412
- 2,
413
- 4,
414
- 11
415
- ],
416
- "adjacent_hexes": [
417
- 2,
418
- 1
419
- ],
420
- "pixel_coords": [
421
- 445,
422
- 144.11542731880104
423
- ]
424
- },
425
- {
426
- "point_id": 4,
427
- "game_coords": [
428
- 0,
429
- 3
430
- ],
431
- "adjacent_points": [
432
- 3,
433
- 5
434
- ],
435
- "adjacent_hexes": [
436
- 2
437
- ],
438
- "pixel_coords": [
439
- 490,
440
- 144.11542731880104
441
- ]
442
- },
443
- {
444
- "point_id": 5,
445
- "game_coords": [
446
- 0,
447
- 4
448
- ],
449
- "adjacent_points": [
450
- 4,
451
- 6,
452
- 13
453
- ],
454
- "adjacent_hexes": [
455
- 3,
456
- 2
457
- ],
458
- "pixel_coords": [
459
- 512.5,
460
- 183.08657048910078
461
- ]
462
- },
463
- {
464
- "point_id": 6,
465
- "game_coords": [
466
- 0,
467
- 5
468
- ],
469
- "adjacent_points": [
470
- 5,
471
- 7
472
- ],
473
- "adjacent_hexes": [
474
- 3
475
- ],
476
- "pixel_coords": [
477
- 557.5,
478
- 183.08657048910078
479
- ]
480
- },
481
- {
482
- "point_id": 7,
483
- "game_coords": [
484
- 0,
485
- 6
486
- ],
487
- "adjacent_points": [
488
- 6,
489
- 15
490
- ],
491
- "adjacent_hexes": [
492
- 3
493
- ],
494
- "pixel_coords": [
495
- 580,
496
- 222.05771365940052
497
- ]
498
- },
499
- {
500
- "point_id": 8,
501
- "game_coords": [
502
- 1,
503
- 0
504
- ],
505
- "adjacent_points": [
506
- 9,
507
- 18
508
- ],
509
- "adjacent_hexes": [
510
- 4
511
- ],
512
- "pixel_coords": [
513
- 310,
514
- 144.11542731880104
515
- ]
516
- },
517
- {
518
- "point_id": 9,
519
- "game_coords": [
520
- 1,
521
- 1
522
- ],
523
- "adjacent_points": [
524
- 8,
525
- 10,
526
- 1
527
- ],
528
- "adjacent_hexes": [
529
- 4,
530
- 1
531
- ],
532
- "pixel_coords": [
533
- 355,
534
- 144.11542731880104
535
- ]
536
- },
537
- {
538
- "point_id": 10,
539
- "game_coords": [
540
- 1,
541
- 2
542
- ],
543
- "adjacent_points": [
544
- 9,
545
- 11,
546
- 20
547
- ],
548
- "adjacent_hexes": [
549
- 5,
550
- 4,
551
- 1
552
- ],
553
- "pixel_coords": [
554
- 377.5,
555
- 183.08657048910078
556
- ]
557
- },
558
- {
559
- "point_id": 11,
560
- "game_coords": [
561
- 1,
562
- 3
563
- ],
564
- "adjacent_points": [
565
- 10,
566
- 12,
567
- 3
568
- ],
569
- "adjacent_hexes": [
570
- 5,
571
- 2,
572
- 1
573
- ],
574
- "pixel_coords": [
575
- 422.5,
576
- 183.08657048910078
577
- ]
578
- },
579
- {
580
- "point_id": 12,
581
- "game_coords": [
582
- 1,
583
- 4
584
- ],
585
- "adjacent_points": [
586
- 11,
587
- 13,
588
- 22
589
- ],
590
- "adjacent_hexes": [
591
- 6,
592
- 5,
593
- 2
594
- ],
595
- "pixel_coords": [
596
- 445,
597
- 222.05771365940052
598
- ]
599
- },
600
- {
601
- "point_id": 13,
602
- "game_coords": [
603
- 1,
604
- 5
605
- ],
606
- "adjacent_points": [
607
- 12,
608
- 14,
609
- 5
610
- ],
611
- "adjacent_hexes": [
612
- 6,
613
- 3,
614
- 2
615
- ],
616
- "pixel_coords": [
617
- 490,
618
- 222.05771365940052
619
- ]
620
- },
621
- {
622
- "point_id": 14,
623
- "game_coords": [
624
- 1,
625
- 6
626
- ],
627
- "adjacent_points": [
628
- 13,
629
- 15,
630
- 24
631
- ],
632
- "adjacent_hexes": [
633
- 7,
634
- 6,
635
- 3
636
- ],
637
- "pixel_coords": [
638
- 512.5,
639
- 261.02885682970026
640
- ]
641
- },
642
- {
643
- "point_id": 15,
644
- "game_coords": [
645
- 1,
646
- 7
647
- ],
648
- "adjacent_points": [
649
- 14,
650
- 16,
651
- 7
652
- ],
653
- "adjacent_hexes": [
654
- 7,
655
- 3
656
- ],
657
- "pixel_coords": [
658
- 557.5,
659
- 261.02885682970026
660
- ]
661
- },
662
- {
663
- "point_id": 16,
664
- "game_coords": [
665
- 1,
666
- 8
667
- ],
668
- "adjacent_points": [
669
- 15,
670
- 26
671
- ],
672
- "adjacent_hexes": [
673
- 7
674
- ],
675
- "pixel_coords": [
676
- 580,
677
- 300
678
- ]
679
- },
680
- {
681
- "point_id": 17,
682
- "game_coords": [
683
- 2,
684
- 0
685
- ],
686
- "adjacent_points": [
687
- 18,
688
- 28
689
- ],
690
- "adjacent_hexes": [
691
- 8
692
- ],
693
- "pixel_coords": [
694
- 242.49999999999997,
695
- 183.08657048910078
696
- ]
697
- },
698
- {
699
- "point_id": 18,
700
- "game_coords": [
701
- 2,
702
- 1
703
- ],
704
- "adjacent_points": [
705
- 17,
706
- 19,
707
- 8
708
- ],
709
- "adjacent_hexes": [
710
- 8,
711
- 4
712
- ],
713
- "pixel_coords": [
714
- 287.5,
715
- 183.08657048910078
716
- ]
717
- },
718
- {
719
- "point_id": 19,
720
- "game_coords": [
721
- 2,
722
- 2
723
- ],
724
- "adjacent_points": [
725
- 18,
726
- 20,
727
- 30
728
- ],
729
- "adjacent_hexes": [
730
- 9,
731
- 8,
732
- 4
733
- ],
734
- "pixel_coords": [
735
- 310,
736
- 222.05771365940052
737
- ]
738
- },
739
- {
740
- "point_id": 20,
741
- "game_coords": [
742
- 2,
743
- 3
744
- ],
745
- "adjacent_points": [
746
- 19,
747
- 21,
748
- 10
749
- ],
750
- "adjacent_hexes": [
751
- 9,
752
- 5,
753
- 4
754
- ],
755
- "pixel_coords": [
756
- 355,
757
- 222.05771365940052
758
- ]
759
- },
760
- {
761
- "point_id": 21,
762
- "game_coords": [
763
- 2,
764
- 4
765
- ],
766
- "adjacent_points": [
767
- 20,
768
- 22,
769
- 32
770
- ],
771
- "adjacent_hexes": [
772
- 10,
773
- 9,
774
- 5
775
- ],
776
- "pixel_coords": [
777
- 377.5,
778
- 261.02885682970026
779
- ]
780
- },
781
- {
782
- "point_id": 22,
783
- "game_coords": [
784
- 2,
785
- 5
786
- ],
787
- "adjacent_points": [
788
- 21,
789
- 23,
790
- 12
791
- ],
792
- "adjacent_hexes": [
793
- 10,
794
- 6,
795
- 5
796
- ],
797
- "pixel_coords": [
798
- 422.5,
799
- 261.02885682970026
800
- ]
801
- },
802
- {
803
- "point_id": 23,
804
- "game_coords": [
805
- 2,
806
- 6
807
- ],
808
- "adjacent_points": [
809
- 22,
810
- 24,
811
- 34
812
- ],
813
- "adjacent_hexes": [
814
- 11,
815
- 10,
816
- 6
817
- ],
818
- "pixel_coords": [
819
- 445,
820
- 300
821
- ]
822
- },
823
- {
824
- "point_id": 24,
825
- "game_coords": [
826
- 2,
827
- 7
828
- ],
829
- "adjacent_points": [
830
- 23,
831
- 25,
832
- 14
833
- ],
834
- "adjacent_hexes": [
835
- 11,
836
- 7,
837
- 6
838
- ],
839
- "pixel_coords": [
840
- 490,
841
- 300
842
- ]
843
- },
844
- {
845
- "point_id": 25,
846
- "game_coords": [
847
- 2,
848
- 8
849
- ],
850
- "adjacent_points": [
851
- 24,
852
- 26,
853
- 36
854
- ],
855
- "adjacent_hexes": [
856
- 12,
857
- 11,
858
- 7
859
- ],
860
- "pixel_coords": [
861
- 512.5,
862
- 338.97114317029974
863
- ]
864
- },
865
- {
866
- "point_id": 26,
867
- "game_coords": [
868
- 2,
869
- 9
870
- ],
871
- "adjacent_points": [
872
- 25,
873
- 27,
874
- 16
875
- ],
876
- "adjacent_hexes": [
877
- 12,
878
- 7
879
- ],
880
- "pixel_coords": [
881
- 557.5,
882
- 338.97114317029974
883
- ]
884
- },
885
- {
886
- "point_id": 27,
887
- "game_coords": [
888
- 2,
889
- 10
890
- ],
891
- "adjacent_points": [
892
- 26,
893
- 38
894
- ],
895
- "adjacent_hexes": [
896
- 12
897
- ],
898
- "pixel_coords": [
899
- 580,
900
- 377.9422863405995
901
- ]
902
- },
903
- {
904
- "point_id": 28,
905
- "game_coords": [
906
- 3,
907
- 0
908
- ],
909
- "adjacent_points": [
910
- 29,
911
- 17
912
- ],
913
- "adjacent_hexes": [
914
- 8
915
- ],
916
- "pixel_coords": [
917
- 220,
918
- 222.05771365940052
919
- ]
920
- },
921
- {
922
- "point_id": 29,
923
- "game_coords": [
924
- 3,
925
- 1
926
- ],
927
- "adjacent_points": [
928
- 28,
929
- 30,
930
- 39
931
- ],
932
- "adjacent_hexes": [
933
- 13,
934
- 8
935
- ],
936
- "pixel_coords": [
937
- 242.5,
938
- 261.02885682970026
939
- ]
940
- },
941
- {
942
- "point_id": 30,
943
- "game_coords": [
944
- 3,
945
- 2
946
- ],
947
- "adjacent_points": [
948
- 29,
949
- 31,
950
- 19
951
- ],
952
- "adjacent_hexes": [
953
- 13,
954
- 9,
955
- 8
956
- ],
957
- "pixel_coords": [
958
- 287.5,
959
- 261.02885682970026
960
- ]
961
- },
962
- {
963
- "point_id": 31,
964
- "game_coords": [
965
- 3,
966
- 3
967
- ],
968
- "adjacent_points": [
969
- 30,
970
- 32,
971
- 41
972
- ],
973
- "adjacent_hexes": [
974
- 14,
975
- 13,
976
- 9
977
- ],
978
- "pixel_coords": [
979
- 310,
980
- 300
981
- ]
982
- },
983
- {
984
- "point_id": 32,
985
- "game_coords": [
986
- 3,
987
- 4
988
- ],
989
- "adjacent_points": [
990
- 31,
991
- 33,
992
- 21
993
- ],
994
- "adjacent_hexes": [
995
- 14,
996
- 10,
997
- 9
998
- ],
999
- "pixel_coords": [
1000
- 355,
1001
- 300
1002
- ]
1003
- },
1004
- {
1005
- "point_id": 33,
1006
- "game_coords": [
1007
- 3,
1008
- 5
1009
- ],
1010
- "adjacent_points": [
1011
- 32,
1012
- 34,
1013
- 43
1014
- ],
1015
- "adjacent_hexes": [
1016
- 15,
1017
- 14,
1018
- 10
1019
- ],
1020
- "pixel_coords": [
1021
- 377.5,
1022
- 338.97114317029974
1023
- ]
1024
- },
1025
- {
1026
- "point_id": 34,
1027
- "game_coords": [
1028
- 3,
1029
- 6
1030
- ],
1031
- "adjacent_points": [
1032
- 33,
1033
- 35,
1034
- 23
1035
- ],
1036
- "adjacent_hexes": [
1037
- 15,
1038
- 11,
1039
- 10
1040
- ],
1041
- "pixel_coords": [
1042
- 422.5,
1043
- 338.97114317029974
1044
- ]
1045
- },
1046
- {
1047
- "point_id": 35,
1048
- "game_coords": [
1049
- 3,
1050
- 7
1051
- ],
1052
- "adjacent_points": [
1053
- 34,
1054
- 36,
1055
- 45
1056
- ],
1057
- "adjacent_hexes": [
1058
- 16,
1059
- 15,
1060
- 11
1061
- ],
1062
- "pixel_coords": [
1063
- 445,
1064
- 377.9422863405995
1065
- ]
1066
- },
1067
- {
1068
- "point_id": 36,
1069
- "game_coords": [
1070
- 3,
1071
- 8
1072
- ],
1073
- "adjacent_points": [
1074
- 35,
1075
- 37,
1076
- 25
1077
- ],
1078
- "adjacent_hexes": [
1079
- 16,
1080
- 12,
1081
- 11
1082
- ],
1083
- "pixel_coords": [
1084
- 490,
1085
- 377.9422863405995
1086
- ]
1087
- },
1088
- {
1089
- "point_id": 37,
1090
- "game_coords": [
1091
- 3,
1092
- 9
1093
- ],
1094
- "adjacent_points": [
1095
- 36,
1096
- 38,
1097
- 47
1098
- ],
1099
- "adjacent_hexes": [
1100
- 16,
1101
- 12
1102
- ],
1103
- "pixel_coords": [
1104
- 512.5,
1105
- 416.9134295108992
1106
- ]
1107
- },
1108
- {
1109
- "point_id": 38,
1110
- "game_coords": [
1111
- 3,
1112
- 10
1113
- ],
1114
- "adjacent_points": [
1115
- 37,
1116
- 27
1117
- ],
1118
- "adjacent_hexes": [
1119
- 12
1120
- ],
1121
- "pixel_coords": [
1122
- 557.5,
1123
- 416.9134295108992
1124
- ]
1125
- },
1126
- {
1127
- "point_id": 39,
1128
- "game_coords": [
1129
- 4,
1130
- 0
1131
- ],
1132
- "adjacent_points": [
1133
- 40,
1134
- 29
1135
- ],
1136
- "adjacent_hexes": [
1137
- 13
1138
- ],
1139
- "pixel_coords": [
1140
- 220,
1141
- 300
1142
- ]
1143
- },
1144
- {
1145
- "point_id": 40,
1146
- "game_coords": [
1147
- 4,
1148
- 1
1149
- ],
1150
- "adjacent_points": [
1151
- 39,
1152
- 41,
1153
- 48
1154
- ],
1155
- "adjacent_hexes": [
1156
- 17,
1157
- 13
1158
- ],
1159
- "pixel_coords": [
1160
- 242.5,
1161
- 338.97114317029974
1162
- ]
1163
- },
1164
- {
1165
- "point_id": 41,
1166
- "game_coords": [
1167
- 4,
1168
- 2
1169
- ],
1170
- "adjacent_points": [
1171
- 40,
1172
- 42,
1173
- 31
1174
- ],
1175
- "adjacent_hexes": [
1176
- 17,
1177
- 14,
1178
- 13
1179
- ],
1180
- "pixel_coords": [
1181
- 287.5,
1182
- 338.97114317029974
1183
- ]
1184
- },
1185
- {
1186
- "point_id": 42,
1187
- "game_coords": [
1188
- 4,
1189
- 3
1190
- ],
1191
- "adjacent_points": [
1192
- 41,
1193
- 43,
1194
- 50
1195
- ],
1196
- "adjacent_hexes": [
1197
- 18,
1198
- 17,
1199
- 14
1200
- ],
1201
- "pixel_coords": [
1202
- 310,
1203
- 377.9422863405995
1204
- ]
1205
- },
1206
- {
1207
- "point_id": 43,
1208
- "game_coords": [
1209
- 4,
1210
- 4
1211
- ],
1212
- "adjacent_points": [
1213
- 42,
1214
- 44,
1215
- 33
1216
- ],
1217
- "adjacent_hexes": [
1218
- 18,
1219
- 15,
1220
- 14
1221
- ],
1222
- "pixel_coords": [
1223
- 355,
1224
- 377.9422863405995
1225
- ]
1226
- },
1227
- {
1228
- "point_id": 44,
1229
- "game_coords": [
1230
- 4,
1231
- 5
1232
- ],
1233
- "adjacent_points": [
1234
- 43,
1235
- 45,
1236
- 52
1237
- ],
1238
- "adjacent_hexes": [
1239
- 19,
1240
- 18,
1241
- 15
1242
- ],
1243
- "pixel_coords": [
1244
- 377.5,
1245
- 416.9134295108992
1246
- ]
1247
- },
1248
- {
1249
- "point_id": 45,
1250
- "game_coords": [
1251
- 4,
1252
- 6
1253
- ],
1254
- "adjacent_points": [
1255
- 44,
1256
- 46,
1257
- 35
1258
- ],
1259
- "adjacent_hexes": [
1260
- 19,
1261
- 16,
1262
- 15
1263
- ],
1264
- "pixel_coords": [
1265
- 422.5,
1266
- 416.9134295108992
1267
- ]
1268
- },
1269
- {
1270
- "point_id": 46,
1271
- "game_coords": [
1272
- 4,
1273
- 7
1274
- ],
1275
- "adjacent_points": [
1276
- 45,
1277
- 47,
1278
- 54
1279
- ],
1280
- "adjacent_hexes": [
1281
- 19,
1282
- 16
1283
- ],
1284
- "pixel_coords": [
1285
- 445,
1286
- 455.88457268119896
1287
- ]
1288
- },
1289
- {
1290
- "point_id": 47,
1291
- "game_coords": [
1292
- 4,
1293
- 8
1294
- ],
1295
- "adjacent_points": [
1296
- 46,
1297
- 37
1298
- ],
1299
- "adjacent_hexes": [
1300
- 16
1301
- ],
1302
- "pixel_coords": [
1303
- 490,
1304
- 455.88457268119896
1305
- ]
1306
- },
1307
- {
1308
- "point_id": 48,
1309
- "game_coords": [
1310
- 5,
1311
- 0
1312
- ],
1313
- "adjacent_points": [
1314
- 49,
1315
- 40
1316
- ],
1317
- "adjacent_hexes": [
1318
- 17
1319
- ],
1320
- "pixel_coords": [
1321
- 220,
1322
- 377.9422863405995
1323
- ]
1324
- },
1325
- {
1326
- "point_id": 49,
1327
- "game_coords": [
1328
- 5,
1329
- 1
1330
- ],
1331
- "adjacent_points": [
1332
- 48,
1333
- 50
1334
- ],
1335
- "adjacent_hexes": [
1336
- 17
1337
- ],
1338
- "pixel_coords": [
1339
- 242.5,
1340
- 416.9134295108992
1341
- ]
1342
- },
1343
- {
1344
- "point_id": 50,
1345
- "game_coords": [
1346
- 5,
1347
- 2
1348
- ],
1349
- "adjacent_points": [
1350
- 49,
1351
- 51,
1352
- 42
1353
- ],
1354
- "adjacent_hexes": [
1355
- 18,
1356
- 17
1357
- ],
1358
- "pixel_coords": [
1359
- 287.5,
1360
- 416.9134295108992
1361
- ]
1362
- },
1363
- {
1364
- "point_id": 51,
1365
- "game_coords": [
1366
- 5,
1367
- 3
1368
- ],
1369
- "adjacent_points": [
1370
- 50,
1371
- 52
1372
- ],
1373
- "adjacent_hexes": [
1374
- 18
1375
- ],
1376
- "pixel_coords": [
1377
- 310,
1378
- 455.88457268119896
1379
- ]
1380
- },
1381
- {
1382
- "point_id": 52,
1383
- "game_coords": [
1384
- 5,
1385
- 4
1386
- ],
1387
- "adjacent_points": [
1388
- 51,
1389
- 53,
1390
- 44
1391
- ],
1392
- "adjacent_hexes": [
1393
- 19,
1394
- 18
1395
- ],
1396
- "pixel_coords": [
1397
- 355,
1398
- 455.88457268119896
1399
- ]
1400
- },
1401
- {
1402
- "point_id": 53,
1403
- "game_coords": [
1404
- 5,
1405
- 5
1406
- ],
1407
- "adjacent_points": [
1408
- 52,
1409
- 54
1410
- ],
1411
- "adjacent_hexes": [
1412
- 19
1413
- ],
1414
- "pixel_coords": [
1415
- 377.5,
1416
- 494.8557158514987
1417
- ]
1418
- },
1419
- {
1420
- "point_id": 54,
1421
- "game_coords": [
1422
- 5,
1423
- 6
1424
- ],
1425
- "adjacent_points": [
1426
- 53,
1427
- 46
1428
- ],
1429
- "adjacent_hexes": [
1430
- 19
1431
- ],
1432
- "pixel_coords": [
1433
- 422.5,
1434
- 494.8557158514987
1435
- ]
1436
- }
1437
- ],
1438
- "board_graph": {
1439
- "adjacency": {
1440
- "1": [
1441
- 2,
1442
- 9
1443
- ],
1444
- "2": [
1445
- 1,
1446
- 3
1447
- ],
1448
- "3": [
1449
- 2,
1450
- 4,
1451
- 11
1452
- ],
1453
- "4": [
1454
- 3,
1455
- 5
1456
- ],
1457
- "5": [
1458
- 4,
1459
- 6,
1460
- 13
1461
- ],
1462
- "6": [
1463
- 5,
1464
- 7
1465
- ],
1466
- "7": [
1467
- 6,
1468
- 15
1469
- ],
1470
- "8": [
1471
- 9,
1472
- 18
1473
- ],
1474
- "9": [
1475
- 8,
1476
- 10,
1477
- 1
1478
- ],
1479
- "10": [
1480
- 9,
1481
- 11,
1482
- 20
1483
- ],
1484
- "11": [
1485
- 10,
1486
- 12,
1487
- 3
1488
- ],
1489
- "12": [
1490
- 11,
1491
- 13,
1492
- 22
1493
- ],
1494
- "13": [
1495
- 12,
1496
- 14,
1497
- 5
1498
- ],
1499
- "14": [
1500
- 13,
1501
- 15,
1502
- 24
1503
- ],
1504
- "15": [
1505
- 14,
1506
- 16,
1507
- 7
1508
- ],
1509
- "16": [
1510
- 15,
1511
- 26
1512
- ],
1513
- "17": [
1514
- 18,
1515
- 28
1516
- ],
1517
- "18": [
1518
- 17,
1519
- 19,
1520
- 8
1521
- ],
1522
- "19": [
1523
- 18,
1524
- 20,
1525
- 30
1526
- ],
1527
- "20": [
1528
- 19,
1529
- 21,
1530
- 10
1531
- ],
1532
- "21": [
1533
- 20,
1534
- 22,
1535
- 32
1536
- ],
1537
- "22": [
1538
- 21,
1539
- 23,
1540
- 12
1541
- ],
1542
- "23": [
1543
- 22,
1544
- 24,
1545
- 34
1546
- ],
1547
- "24": [
1548
- 23,
1549
- 25,
1550
- 14
1551
- ],
1552
- "25": [
1553
- 24,
1554
- 26,
1555
- 36
1556
- ],
1557
- "26": [
1558
- 25,
1559
- 27,
1560
- 16
1561
- ],
1562
- "27": [
1563
- 26,
1564
- 38
1565
- ],
1566
- "28": [
1567
- 29,
1568
- 17
1569
- ],
1570
- "29": [
1571
- 28,
1572
- 30,
1573
- 39
1574
- ],
1575
- "30": [
1576
- 29,
1577
- 31,
1578
- 19
1579
- ],
1580
- "31": [
1581
- 30,
1582
- 32,
1583
- 41
1584
- ],
1585
- "32": [
1586
- 31,
1587
- 33,
1588
- 21
1589
- ],
1590
- "33": [
1591
- 32,
1592
- 34,
1593
- 43
1594
- ],
1595
- "34": [
1596
- 33,
1597
- 35,
1598
- 23
1599
- ],
1600
- "35": [
1601
- 34,
1602
- 36,
1603
- 45
1604
- ],
1605
- "36": [
1606
- 35,
1607
- 37,
1608
- 25
1609
- ],
1610
- "37": [
1611
- 36,
1612
- 38,
1613
- 47
1614
- ],
1615
- "38": [
1616
- 37,
1617
- 27
1618
- ],
1619
- "39": [
1620
- 40,
1621
- 29
1622
- ],
1623
- "40": [
1624
- 39,
1625
- 41,
1626
- 48
1627
- ],
1628
- "41": [
1629
- 40,
1630
- 42,
1631
- 31
1632
- ],
1633
- "42": [
1634
- 41,
1635
- 43,
1636
- 50
1637
- ],
1638
- "43": [
1639
- 42,
1640
- 44,
1641
- 33
1642
- ],
1643
- "44": [
1644
- 43,
1645
- 45,
1646
- 52
1647
- ],
1648
- "45": [
1649
- 44,
1650
- 46,
1651
- 35
1652
- ],
1653
- "46": [
1654
- 45,
1655
- 47,
1656
- 54
1657
- ],
1658
- "47": [
1659
- 46,
1660
- 37
1661
- ],
1662
- "48": [
1663
- 49,
1664
- 40
1665
- ],
1666
- "49": [
1667
- 48,
1668
- 50
1669
- ],
1670
- "50": [
1671
- 49,
1672
- 51,
1673
- 42
1674
- ],
1675
- "51": [
1676
- 50,
1677
- 52
1678
- ],
1679
- "52": [
1680
- 51,
1681
- 53,
1682
- 44
1683
- ],
1684
- "53": [
1685
- 52,
1686
- 54
1687
- ],
1688
- "54": [
1689
- 53,
1690
- 46
1691
- ]
1692
- },
1693
- "hex_to_points": {
1694
- "1": [
1695
- 1,
1696
- 2,
1697
- 3,
1698
- 9,
1699
- 10,
1700
- 11
1701
- ],
1702
- "2": [
1703
- 3,
1704
- 4,
1705
- 5,
1706
- 11,
1707
- 12,
1708
- 13
1709
- ],
1710
- "3": [
1711
- 5,
1712
- 6,
1713
- 7,
1714
- 13,
1715
- 14,
1716
- 15
1717
- ],
1718
- "4": [
1719
- 8,
1720
- 9,
1721
- 10,
1722
- 18,
1723
- 19,
1724
- 20
1725
- ],
1726
- "5": [
1727
- 10,
1728
- 11,
1729
- 12,
1730
- 20,
1731
- 21,
1732
- 22
1733
- ],
1734
- "6": [
1735
- 12,
1736
- 13,
1737
- 14,
1738
- 22,
1739
- 23,
1740
- 24
1741
- ],
1742
- "7": [
1743
- 14,
1744
- 15,
1745
- 16,
1746
- 24,
1747
- 25,
1748
- 26
1749
- ],
1750
- "8": [
1751
- 17,
1752
- 18,
1753
- 19,
1754
- 28,
1755
- 29,
1756
- 30
1757
- ],
1758
- "9": [
1759
- 19,
1760
- 20,
1761
- 21,
1762
- 30,
1763
- 31,
1764
- 32
1765
- ],
1766
- "10": [
1767
- 21,
1768
- 22,
1769
- 23,
1770
- 32,
1771
- 33,
1772
- 34
1773
- ],
1774
- "11": [
1775
- 23,
1776
- 24,
1777
- 25,
1778
- 34,
1779
- 35,
1780
- 36
1781
- ],
1782
- "12": [
1783
- 25,
1784
- 26,
1785
- 27,
1786
- 36,
1787
- 37,
1788
- 38
1789
- ],
1790
- "13": [
1791
- 29,
1792
- 30,
1793
- 31,
1794
- 39,
1795
- 40,
1796
- 41
1797
- ],
1798
- "14": [
1799
- 31,
1800
- 32,
1801
- 33,
1802
- 41,
1803
- 42,
1804
- 43
1805
- ],
1806
- "15": [
1807
- 33,
1808
- 34,
1809
- 35,
1810
- 43,
1811
- 44,
1812
- 45
1813
- ],
1814
- "16": [
1815
- 35,
1816
- 36,
1817
- 37,
1818
- 45,
1819
- 46,
1820
- 47
1821
- ],
1822
- "17": [
1823
- 40,
1824
- 41,
1825
- 42,
1826
- 48,
1827
- 49,
1828
- 50
1829
- ],
1830
- "18": [
1831
- 42,
1832
- 43,
1833
- 44,
1834
- 50,
1835
- 51,
1836
- 52
1837
- ],
1838
- "19": [
1839
- 44,
1840
- 45,
1841
- 46,
1842
- 52,
1843
- 53,
1844
- 54
1845
- ]
1846
- },
1847
- "total_points": 54,
1848
- "total_hexes": 19
1849
- }
1850
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
examples/ai_testing/my_games/game_20251223_203724_full.json DELETED
@@ -1,1856 +0,0 @@
1
- {
2
- "total_states": 1,
3
- "timestamp": "20251223_203724",
4
- "states": [
5
- {
6
- "hexes": [
7
- {
8
- "id": 1,
9
- "q": 0,
10
- "r": -2,
11
- "type": "wood",
12
- "number": 12,
13
- "has_robber": false,
14
- "position": [
15
- 0,
16
- 0
17
- ],
18
- "axial_coords": [
19
- 0,
20
- -2
21
- ]
22
- },
23
- {
24
- "id": 2,
25
- "q": 1,
26
- "r": -2,
27
- "type": "sheep",
28
- "number": 5,
29
- "has_robber": false,
30
- "position": [
31
- 0,
32
- 1
33
- ],
34
- "axial_coords": [
35
- 1,
36
- -2
37
- ]
38
- },
39
- {
40
- "id": 3,
41
- "q": 2,
42
- "r": -2,
43
- "type": "wood",
44
- "number": 4,
45
- "has_robber": false,
46
- "position": [
47
- 0,
48
- 2
49
- ],
50
- "axial_coords": [
51
- 2,
52
- -2
53
- ]
54
- },
55
- {
56
- "id": 4,
57
- "q": -1,
58
- "r": -1,
59
- "type": "sheep",
60
- "number": 8,
61
- "has_robber": false,
62
- "position": [
63
- 1,
64
- 0
65
- ],
66
- "axial_coords": [
67
- -1,
68
- -1
69
- ]
70
- },
71
- {
72
- "id": 5,
73
- "q": 0,
74
- "r": -1,
75
- "type": "brick",
76
- "number": 6,
77
- "has_robber": false,
78
- "position": [
79
- 1,
80
- 1
81
- ],
82
- "axial_coords": [
83
- 0,
84
- -1
85
- ]
86
- },
87
- {
88
- "id": 6,
89
- "q": 1,
90
- "r": -1,
91
- "type": "wood",
92
- "number": 3,
93
- "has_robber": false,
94
- "position": [
95
- 1,
96
- 2
97
- ],
98
- "axial_coords": [
99
- 1,
100
- -1
101
- ]
102
- },
103
- {
104
- "id": 7,
105
- "q": 2,
106
- "r": -1,
107
- "type": "wheat",
108
- "number": 8,
109
- "has_robber": false,
110
- "position": [
111
- 1,
112
- 3
113
- ],
114
- "axial_coords": [
115
- 2,
116
- -1
117
- ]
118
- },
119
- {
120
- "id": 8,
121
- "q": -2,
122
- "r": 0,
123
- "type": "brick",
124
- "number": 10,
125
- "has_robber": false,
126
- "position": [
127
- 2,
128
- 0
129
- ],
130
- "axial_coords": [
131
- -2,
132
- 0
133
- ]
134
- },
135
- {
136
- "id": 9,
137
- "q": -1,
138
- "r": 0,
139
- "type": "wood",
140
- "number": 11,
141
- "has_robber": false,
142
- "position": [
143
- 2,
144
- 1
145
- ],
146
- "axial_coords": [
147
- -1,
148
- 0
149
- ]
150
- },
151
- {
152
- "id": 10,
153
- "q": 0,
154
- "r": 0,
155
- "type": "desert",
156
- "number": null,
157
- "has_robber": true,
158
- "position": [
159
- 2,
160
- 2
161
- ],
162
- "axial_coords": [
163
- 0,
164
- 0
165
- ]
166
- },
167
- {
168
- "id": 11,
169
- "q": 1,
170
- "r": 0,
171
- "type": "ore",
172
- "number": 3,
173
- "has_robber": false,
174
- "position": [
175
- 2,
176
- 3
177
- ],
178
- "axial_coords": [
179
- 1,
180
- 0
181
- ]
182
- },
183
- {
184
- "id": 12,
185
- "q": 2,
186
- "r": 0,
187
- "type": "sheep",
188
- "number": 4,
189
- "has_robber": false,
190
- "position": [
191
- 2,
192
- 4
193
- ],
194
- "axial_coords": [
195
- 2,
196
- 0
197
- ]
198
- },
199
- {
200
- "id": 13,
201
- "q": -2,
202
- "r": 1,
203
- "type": "brick",
204
- "number": 10,
205
- "has_robber": false,
206
- "position": [
207
- 3,
208
- 0
209
- ],
210
- "axial_coords": [
211
- -2,
212
- 1
213
- ]
214
- },
215
- {
216
- "id": 14,
217
- "q": -1,
218
- "r": 1,
219
- "type": "wheat",
220
- "number": 9,
221
- "has_robber": false,
222
- "position": [
223
- 3,
224
- 1
225
- ],
226
- "axial_coords": [
227
- -1,
228
- 1
229
- ]
230
- },
231
- {
232
- "id": 15,
233
- "q": 0,
234
- "r": 1,
235
- "type": "wheat",
236
- "number": 6,
237
- "has_robber": false,
238
- "position": [
239
- 3,
240
- 2
241
- ],
242
- "axial_coords": [
243
- 0,
244
- 1
245
- ]
246
- },
247
- {
248
- "id": 16,
249
- "q": 1,
250
- "r": 1,
251
- "type": "sheep",
252
- "number": 11,
253
- "has_robber": false,
254
- "position": [
255
- 3,
256
- 3
257
- ],
258
- "axial_coords": [
259
- 1,
260
- 1
261
- ]
262
- },
263
- {
264
- "id": 17,
265
- "q": -2,
266
- "r": 2,
267
- "type": "ore",
268
- "number": 5,
269
- "has_robber": false,
270
- "position": [
271
- 4,
272
- 0
273
- ],
274
- "axial_coords": [
275
- -2,
276
- 2
277
- ]
278
- },
279
- {
280
- "id": 18,
281
- "q": -1,
282
- "r": 2,
283
- "type": "wheat",
284
- "number": 9,
285
- "has_robber": false,
286
- "position": [
287
- 4,
288
- 1
289
- ],
290
- "axial_coords": [
291
- -1,
292
- 2
293
- ]
294
- },
295
- {
296
- "id": 19,
297
- "q": 0,
298
- "r": 2,
299
- "type": "ore",
300
- "number": 2,
301
- "has_robber": false,
302
- "position": [
303
- 4,
304
- 2
305
- ],
306
- "axial_coords": [
307
- 0,
308
- 2
309
- ]
310
- }
311
- ],
312
- "settlements": [],
313
- "cities": [],
314
- "roads": [],
315
- "players": [
316
- {
317
- "id": 0,
318
- "name": "a",
319
- "victory_points": 0,
320
- "total_cards": 0,
321
- "cards_list": [],
322
- "dev_cards_list": [],
323
- "settlements": 0,
324
- "cities": 0,
325
- "roads": 0,
326
- "longest_road": 0,
327
- "has_longest_road": false,
328
- "knights": 0,
329
- "knights_played": 0,
330
- "has_largest_army": false
331
- },
332
- {
333
- "id": 1,
334
- "name": "b",
335
- "victory_points": 0,
336
- "total_cards": 0,
337
- "cards_list": [],
338
- "dev_cards_list": [],
339
- "settlements": 0,
340
- "cities": 0,
341
- "roads": 0,
342
- "longest_road": 0,
343
- "has_longest_road": false,
344
- "knights": 0,
345
- "knights_played": 0,
346
- "has_largest_army": false
347
- },
348
- {
349
- "id": 2,
350
- "name": "c",
351
- "victory_points": 0,
352
- "total_cards": 0,
353
- "cards_list": [],
354
- "dev_cards_list": [],
355
- "settlements": 0,
356
- "cities": 0,
357
- "roads": 0,
358
- "longest_road": 0,
359
- "has_longest_road": false,
360
- "knights": 0,
361
- "knights_played": 0,
362
- "has_largest_army": false
363
- }
364
- ],
365
- "current_player": 0,
366
- "current_phase": "SETUP_FIRST_ROUND",
367
- "robber_position": [
368
- 2,
369
- 2
370
- ],
371
- "dice_result": null,
372
- "points": [
373
- {
374
- "point_id": 1,
375
- "game_coords": [
376
- 0,
377
- 0
378
- ],
379
- "adjacent_points": [
380
- 2,
381
- 9
382
- ],
383
- "adjacent_hexes": [
384
- 1
385
- ],
386
- "pixel_coords": [
387
- 377.5,
388
- 105.14428414850131
389
- ]
390
- },
391
- {
392
- "point_id": 2,
393
- "game_coords": [
394
- 0,
395
- 1
396
- ],
397
- "adjacent_points": [
398
- 1,
399
- 3
400
- ],
401
- "adjacent_hexes": [
402
- 1
403
- ],
404
- "pixel_coords": [
405
- 422.5,
406
- 105.14428414850128
407
- ]
408
- },
409
- {
410
- "point_id": 3,
411
- "game_coords": [
412
- 0,
413
- 2
414
- ],
415
- "adjacent_points": [
416
- 2,
417
- 4,
418
- 11
419
- ],
420
- "adjacent_hexes": [
421
- 2,
422
- 1
423
- ],
424
- "pixel_coords": [
425
- 445,
426
- 144.11542731880104
427
- ]
428
- },
429
- {
430
- "point_id": 4,
431
- "game_coords": [
432
- 0,
433
- 3
434
- ],
435
- "adjacent_points": [
436
- 3,
437
- 5
438
- ],
439
- "adjacent_hexes": [
440
- 2
441
- ],
442
- "pixel_coords": [
443
- 490,
444
- 144.11542731880104
445
- ]
446
- },
447
- {
448
- "point_id": 5,
449
- "game_coords": [
450
- 0,
451
- 4
452
- ],
453
- "adjacent_points": [
454
- 4,
455
- 6,
456
- 13
457
- ],
458
- "adjacent_hexes": [
459
- 3,
460
- 2
461
- ],
462
- "pixel_coords": [
463
- 512.5,
464
- 183.08657048910078
465
- ]
466
- },
467
- {
468
- "point_id": 6,
469
- "game_coords": [
470
- 0,
471
- 5
472
- ],
473
- "adjacent_points": [
474
- 5,
475
- 7
476
- ],
477
- "adjacent_hexes": [
478
- 3
479
- ],
480
- "pixel_coords": [
481
- 557.5,
482
- 183.08657048910078
483
- ]
484
- },
485
- {
486
- "point_id": 7,
487
- "game_coords": [
488
- 0,
489
- 6
490
- ],
491
- "adjacent_points": [
492
- 6,
493
- 15
494
- ],
495
- "adjacent_hexes": [
496
- 3
497
- ],
498
- "pixel_coords": [
499
- 580,
500
- 222.05771365940052
501
- ]
502
- },
503
- {
504
- "point_id": 8,
505
- "game_coords": [
506
- 1,
507
- 0
508
- ],
509
- "adjacent_points": [
510
- 9,
511
- 18
512
- ],
513
- "adjacent_hexes": [
514
- 4
515
- ],
516
- "pixel_coords": [
517
- 310,
518
- 144.11542731880104
519
- ]
520
- },
521
- {
522
- "point_id": 9,
523
- "game_coords": [
524
- 1,
525
- 1
526
- ],
527
- "adjacent_points": [
528
- 8,
529
- 10,
530
- 1
531
- ],
532
- "adjacent_hexes": [
533
- 4,
534
- 1
535
- ],
536
- "pixel_coords": [
537
- 355,
538
- 144.11542731880104
539
- ]
540
- },
541
- {
542
- "point_id": 10,
543
- "game_coords": [
544
- 1,
545
- 2
546
- ],
547
- "adjacent_points": [
548
- 9,
549
- 11,
550
- 20
551
- ],
552
- "adjacent_hexes": [
553
- 5,
554
- 4,
555
- 1
556
- ],
557
- "pixel_coords": [
558
- 377.5,
559
- 183.08657048910078
560
- ]
561
- },
562
- {
563
- "point_id": 11,
564
- "game_coords": [
565
- 1,
566
- 3
567
- ],
568
- "adjacent_points": [
569
- 10,
570
- 12,
571
- 3
572
- ],
573
- "adjacent_hexes": [
574
- 5,
575
- 2,
576
- 1
577
- ],
578
- "pixel_coords": [
579
- 422.5,
580
- 183.08657048910078
581
- ]
582
- },
583
- {
584
- "point_id": 12,
585
- "game_coords": [
586
- 1,
587
- 4
588
- ],
589
- "adjacent_points": [
590
- 11,
591
- 13,
592
- 22
593
- ],
594
- "adjacent_hexes": [
595
- 6,
596
- 5,
597
- 2
598
- ],
599
- "pixel_coords": [
600
- 445,
601
- 222.05771365940052
602
- ]
603
- },
604
- {
605
- "point_id": 13,
606
- "game_coords": [
607
- 1,
608
- 5
609
- ],
610
- "adjacent_points": [
611
- 12,
612
- 14,
613
- 5
614
- ],
615
- "adjacent_hexes": [
616
- 6,
617
- 3,
618
- 2
619
- ],
620
- "pixel_coords": [
621
- 490,
622
- 222.05771365940052
623
- ]
624
- },
625
- {
626
- "point_id": 14,
627
- "game_coords": [
628
- 1,
629
- 6
630
- ],
631
- "adjacent_points": [
632
- 13,
633
- 15,
634
- 24
635
- ],
636
- "adjacent_hexes": [
637
- 7,
638
- 6,
639
- 3
640
- ],
641
- "pixel_coords": [
642
- 512.5,
643
- 261.02885682970026
644
- ]
645
- },
646
- {
647
- "point_id": 15,
648
- "game_coords": [
649
- 1,
650
- 7
651
- ],
652
- "adjacent_points": [
653
- 14,
654
- 16,
655
- 7
656
- ],
657
- "adjacent_hexes": [
658
- 7,
659
- 3
660
- ],
661
- "pixel_coords": [
662
- 557.5,
663
- 261.02885682970026
664
- ]
665
- },
666
- {
667
- "point_id": 16,
668
- "game_coords": [
669
- 1,
670
- 8
671
- ],
672
- "adjacent_points": [
673
- 15,
674
- 26
675
- ],
676
- "adjacent_hexes": [
677
- 7
678
- ],
679
- "pixel_coords": [
680
- 580,
681
- 300
682
- ]
683
- },
684
- {
685
- "point_id": 17,
686
- "game_coords": [
687
- 2,
688
- 0
689
- ],
690
- "adjacent_points": [
691
- 18,
692
- 28
693
- ],
694
- "adjacent_hexes": [
695
- 8
696
- ],
697
- "pixel_coords": [
698
- 242.49999999999997,
699
- 183.08657048910078
700
- ]
701
- },
702
- {
703
- "point_id": 18,
704
- "game_coords": [
705
- 2,
706
- 1
707
- ],
708
- "adjacent_points": [
709
- 17,
710
- 19,
711
- 8
712
- ],
713
- "adjacent_hexes": [
714
- 8,
715
- 4
716
- ],
717
- "pixel_coords": [
718
- 287.5,
719
- 183.08657048910078
720
- ]
721
- },
722
- {
723
- "point_id": 19,
724
- "game_coords": [
725
- 2,
726
- 2
727
- ],
728
- "adjacent_points": [
729
- 18,
730
- 20,
731
- 30
732
- ],
733
- "adjacent_hexes": [
734
- 9,
735
- 8,
736
- 4
737
- ],
738
- "pixel_coords": [
739
- 310,
740
- 222.05771365940052
741
- ]
742
- },
743
- {
744
- "point_id": 20,
745
- "game_coords": [
746
- 2,
747
- 3
748
- ],
749
- "adjacent_points": [
750
- 19,
751
- 21,
752
- 10
753
- ],
754
- "adjacent_hexes": [
755
- 9,
756
- 5,
757
- 4
758
- ],
759
- "pixel_coords": [
760
- 355,
761
- 222.05771365940052
762
- ]
763
- },
764
- {
765
- "point_id": 21,
766
- "game_coords": [
767
- 2,
768
- 4
769
- ],
770
- "adjacent_points": [
771
- 20,
772
- 22,
773
- 32
774
- ],
775
- "adjacent_hexes": [
776
- 10,
777
- 9,
778
- 5
779
- ],
780
- "pixel_coords": [
781
- 377.5,
782
- 261.02885682970026
783
- ]
784
- },
785
- {
786
- "point_id": 22,
787
- "game_coords": [
788
- 2,
789
- 5
790
- ],
791
- "adjacent_points": [
792
- 21,
793
- 23,
794
- 12
795
- ],
796
- "adjacent_hexes": [
797
- 10,
798
- 6,
799
- 5
800
- ],
801
- "pixel_coords": [
802
- 422.5,
803
- 261.02885682970026
804
- ]
805
- },
806
- {
807
- "point_id": 23,
808
- "game_coords": [
809
- 2,
810
- 6
811
- ],
812
- "adjacent_points": [
813
- 22,
814
- 24,
815
- 34
816
- ],
817
- "adjacent_hexes": [
818
- 11,
819
- 10,
820
- 6
821
- ],
822
- "pixel_coords": [
823
- 445,
824
- 300
825
- ]
826
- },
827
- {
828
- "point_id": 24,
829
- "game_coords": [
830
- 2,
831
- 7
832
- ],
833
- "adjacent_points": [
834
- 23,
835
- 25,
836
- 14
837
- ],
838
- "adjacent_hexes": [
839
- 11,
840
- 7,
841
- 6
842
- ],
843
- "pixel_coords": [
844
- 490,
845
- 300
846
- ]
847
- },
848
- {
849
- "point_id": 25,
850
- "game_coords": [
851
- 2,
852
- 8
853
- ],
854
- "adjacent_points": [
855
- 24,
856
- 26,
857
- 36
858
- ],
859
- "adjacent_hexes": [
860
- 12,
861
- 11,
862
- 7
863
- ],
864
- "pixel_coords": [
865
- 512.5,
866
- 338.97114317029974
867
- ]
868
- },
869
- {
870
- "point_id": 26,
871
- "game_coords": [
872
- 2,
873
- 9
874
- ],
875
- "adjacent_points": [
876
- 25,
877
- 27,
878
- 16
879
- ],
880
- "adjacent_hexes": [
881
- 12,
882
- 7
883
- ],
884
- "pixel_coords": [
885
- 557.5,
886
- 338.97114317029974
887
- ]
888
- },
889
- {
890
- "point_id": 27,
891
- "game_coords": [
892
- 2,
893
- 10
894
- ],
895
- "adjacent_points": [
896
- 26,
897
- 38
898
- ],
899
- "adjacent_hexes": [
900
- 12
901
- ],
902
- "pixel_coords": [
903
- 580,
904
- 377.9422863405995
905
- ]
906
- },
907
- {
908
- "point_id": 28,
909
- "game_coords": [
910
- 3,
911
- 0
912
- ],
913
- "adjacent_points": [
914
- 29,
915
- 17
916
- ],
917
- "adjacent_hexes": [
918
- 8
919
- ],
920
- "pixel_coords": [
921
- 220,
922
- 222.05771365940052
923
- ]
924
- },
925
- {
926
- "point_id": 29,
927
- "game_coords": [
928
- 3,
929
- 1
930
- ],
931
- "adjacent_points": [
932
- 28,
933
- 30,
934
- 39
935
- ],
936
- "adjacent_hexes": [
937
- 13,
938
- 8
939
- ],
940
- "pixel_coords": [
941
- 242.5,
942
- 261.02885682970026
943
- ]
944
- },
945
- {
946
- "point_id": 30,
947
- "game_coords": [
948
- 3,
949
- 2
950
- ],
951
- "adjacent_points": [
952
- 29,
953
- 31,
954
- 19
955
- ],
956
- "adjacent_hexes": [
957
- 13,
958
- 9,
959
- 8
960
- ],
961
- "pixel_coords": [
962
- 287.5,
963
- 261.02885682970026
964
- ]
965
- },
966
- {
967
- "point_id": 31,
968
- "game_coords": [
969
- 3,
970
- 3
971
- ],
972
- "adjacent_points": [
973
- 30,
974
- 32,
975
- 41
976
- ],
977
- "adjacent_hexes": [
978
- 14,
979
- 13,
980
- 9
981
- ],
982
- "pixel_coords": [
983
- 310,
984
- 300
985
- ]
986
- },
987
- {
988
- "point_id": 32,
989
- "game_coords": [
990
- 3,
991
- 4
992
- ],
993
- "adjacent_points": [
994
- 31,
995
- 33,
996
- 21
997
- ],
998
- "adjacent_hexes": [
999
- 14,
1000
- 10,
1001
- 9
1002
- ],
1003
- "pixel_coords": [
1004
- 355,
1005
- 300
1006
- ]
1007
- },
1008
- {
1009
- "point_id": 33,
1010
- "game_coords": [
1011
- 3,
1012
- 5
1013
- ],
1014
- "adjacent_points": [
1015
- 32,
1016
- 34,
1017
- 43
1018
- ],
1019
- "adjacent_hexes": [
1020
- 15,
1021
- 14,
1022
- 10
1023
- ],
1024
- "pixel_coords": [
1025
- 377.5,
1026
- 338.97114317029974
1027
- ]
1028
- },
1029
- {
1030
- "point_id": 34,
1031
- "game_coords": [
1032
- 3,
1033
- 6
1034
- ],
1035
- "adjacent_points": [
1036
- 33,
1037
- 35,
1038
- 23
1039
- ],
1040
- "adjacent_hexes": [
1041
- 15,
1042
- 11,
1043
- 10
1044
- ],
1045
- "pixel_coords": [
1046
- 422.5,
1047
- 338.97114317029974
1048
- ]
1049
- },
1050
- {
1051
- "point_id": 35,
1052
- "game_coords": [
1053
- 3,
1054
- 7
1055
- ],
1056
- "adjacent_points": [
1057
- 34,
1058
- 36,
1059
- 45
1060
- ],
1061
- "adjacent_hexes": [
1062
- 16,
1063
- 15,
1064
- 11
1065
- ],
1066
- "pixel_coords": [
1067
- 445,
1068
- 377.9422863405995
1069
- ]
1070
- },
1071
- {
1072
- "point_id": 36,
1073
- "game_coords": [
1074
- 3,
1075
- 8
1076
- ],
1077
- "adjacent_points": [
1078
- 35,
1079
- 37,
1080
- 25
1081
- ],
1082
- "adjacent_hexes": [
1083
- 16,
1084
- 12,
1085
- 11
1086
- ],
1087
- "pixel_coords": [
1088
- 490,
1089
- 377.9422863405995
1090
- ]
1091
- },
1092
- {
1093
- "point_id": 37,
1094
- "game_coords": [
1095
- 3,
1096
- 9
1097
- ],
1098
- "adjacent_points": [
1099
- 36,
1100
- 38,
1101
- 47
1102
- ],
1103
- "adjacent_hexes": [
1104
- 16,
1105
- 12
1106
- ],
1107
- "pixel_coords": [
1108
- 512.5,
1109
- 416.9134295108992
1110
- ]
1111
- },
1112
- {
1113
- "point_id": 38,
1114
- "game_coords": [
1115
- 3,
1116
- 10
1117
- ],
1118
- "adjacent_points": [
1119
- 37,
1120
- 27
1121
- ],
1122
- "adjacent_hexes": [
1123
- 12
1124
- ],
1125
- "pixel_coords": [
1126
- 557.5,
1127
- 416.9134295108992
1128
- ]
1129
- },
1130
- {
1131
- "point_id": 39,
1132
- "game_coords": [
1133
- 4,
1134
- 0
1135
- ],
1136
- "adjacent_points": [
1137
- 40,
1138
- 29
1139
- ],
1140
- "adjacent_hexes": [
1141
- 13
1142
- ],
1143
- "pixel_coords": [
1144
- 220,
1145
- 300
1146
- ]
1147
- },
1148
- {
1149
- "point_id": 40,
1150
- "game_coords": [
1151
- 4,
1152
- 1
1153
- ],
1154
- "adjacent_points": [
1155
- 39,
1156
- 41,
1157
- 48
1158
- ],
1159
- "adjacent_hexes": [
1160
- 17,
1161
- 13
1162
- ],
1163
- "pixel_coords": [
1164
- 242.5,
1165
- 338.97114317029974
1166
- ]
1167
- },
1168
- {
1169
- "point_id": 41,
1170
- "game_coords": [
1171
- 4,
1172
- 2
1173
- ],
1174
- "adjacent_points": [
1175
- 40,
1176
- 42,
1177
- 31
1178
- ],
1179
- "adjacent_hexes": [
1180
- 17,
1181
- 14,
1182
- 13
1183
- ],
1184
- "pixel_coords": [
1185
- 287.5,
1186
- 338.97114317029974
1187
- ]
1188
- },
1189
- {
1190
- "point_id": 42,
1191
- "game_coords": [
1192
- 4,
1193
- 3
1194
- ],
1195
- "adjacent_points": [
1196
- 41,
1197
- 43,
1198
- 50
1199
- ],
1200
- "adjacent_hexes": [
1201
- 18,
1202
- 17,
1203
- 14
1204
- ],
1205
- "pixel_coords": [
1206
- 310,
1207
- 377.9422863405995
1208
- ]
1209
- },
1210
- {
1211
- "point_id": 43,
1212
- "game_coords": [
1213
- 4,
1214
- 4
1215
- ],
1216
- "adjacent_points": [
1217
- 42,
1218
- 44,
1219
- 33
1220
- ],
1221
- "adjacent_hexes": [
1222
- 18,
1223
- 15,
1224
- 14
1225
- ],
1226
- "pixel_coords": [
1227
- 355,
1228
- 377.9422863405995
1229
- ]
1230
- },
1231
- {
1232
- "point_id": 44,
1233
- "game_coords": [
1234
- 4,
1235
- 5
1236
- ],
1237
- "adjacent_points": [
1238
- 43,
1239
- 45,
1240
- 52
1241
- ],
1242
- "adjacent_hexes": [
1243
- 19,
1244
- 18,
1245
- 15
1246
- ],
1247
- "pixel_coords": [
1248
- 377.5,
1249
- 416.9134295108992
1250
- ]
1251
- },
1252
- {
1253
- "point_id": 45,
1254
- "game_coords": [
1255
- 4,
1256
- 6
1257
- ],
1258
- "adjacent_points": [
1259
- 44,
1260
- 46,
1261
- 35
1262
- ],
1263
- "adjacent_hexes": [
1264
- 19,
1265
- 16,
1266
- 15
1267
- ],
1268
- "pixel_coords": [
1269
- 422.5,
1270
- 416.9134295108992
1271
- ]
1272
- },
1273
- {
1274
- "point_id": 46,
1275
- "game_coords": [
1276
- 4,
1277
- 7
1278
- ],
1279
- "adjacent_points": [
1280
- 45,
1281
- 47,
1282
- 54
1283
- ],
1284
- "adjacent_hexes": [
1285
- 19,
1286
- 16
1287
- ],
1288
- "pixel_coords": [
1289
- 445,
1290
- 455.88457268119896
1291
- ]
1292
- },
1293
- {
1294
- "point_id": 47,
1295
- "game_coords": [
1296
- 4,
1297
- 8
1298
- ],
1299
- "adjacent_points": [
1300
- 46,
1301
- 37
1302
- ],
1303
- "adjacent_hexes": [
1304
- 16
1305
- ],
1306
- "pixel_coords": [
1307
- 490,
1308
- 455.88457268119896
1309
- ]
1310
- },
1311
- {
1312
- "point_id": 48,
1313
- "game_coords": [
1314
- 5,
1315
- 0
1316
- ],
1317
- "adjacent_points": [
1318
- 49,
1319
- 40
1320
- ],
1321
- "adjacent_hexes": [
1322
- 17
1323
- ],
1324
- "pixel_coords": [
1325
- 220,
1326
- 377.9422863405995
1327
- ]
1328
- },
1329
- {
1330
- "point_id": 49,
1331
- "game_coords": [
1332
- 5,
1333
- 1
1334
- ],
1335
- "adjacent_points": [
1336
- 48,
1337
- 50
1338
- ],
1339
- "adjacent_hexes": [
1340
- 17
1341
- ],
1342
- "pixel_coords": [
1343
- 242.5,
1344
- 416.9134295108992
1345
- ]
1346
- },
1347
- {
1348
- "point_id": 50,
1349
- "game_coords": [
1350
- 5,
1351
- 2
1352
- ],
1353
- "adjacent_points": [
1354
- 49,
1355
- 51,
1356
- 42
1357
- ],
1358
- "adjacent_hexes": [
1359
- 18,
1360
- 17
1361
- ],
1362
- "pixel_coords": [
1363
- 287.5,
1364
- 416.9134295108992
1365
- ]
1366
- },
1367
- {
1368
- "point_id": 51,
1369
- "game_coords": [
1370
- 5,
1371
- 3
1372
- ],
1373
- "adjacent_points": [
1374
- 50,
1375
- 52
1376
- ],
1377
- "adjacent_hexes": [
1378
- 18
1379
- ],
1380
- "pixel_coords": [
1381
- 310,
1382
- 455.88457268119896
1383
- ]
1384
- },
1385
- {
1386
- "point_id": 52,
1387
- "game_coords": [
1388
- 5,
1389
- 4
1390
- ],
1391
- "adjacent_points": [
1392
- 51,
1393
- 53,
1394
- 44
1395
- ],
1396
- "adjacent_hexes": [
1397
- 19,
1398
- 18
1399
- ],
1400
- "pixel_coords": [
1401
- 355,
1402
- 455.88457268119896
1403
- ]
1404
- },
1405
- {
1406
- "point_id": 53,
1407
- "game_coords": [
1408
- 5,
1409
- 5
1410
- ],
1411
- "adjacent_points": [
1412
- 52,
1413
- 54
1414
- ],
1415
- "adjacent_hexes": [
1416
- 19
1417
- ],
1418
- "pixel_coords": [
1419
- 377.5,
1420
- 494.8557158514987
1421
- ]
1422
- },
1423
- {
1424
- "point_id": 54,
1425
- "game_coords": [
1426
- 5,
1427
- 6
1428
- ],
1429
- "adjacent_points": [
1430
- 53,
1431
- 46
1432
- ],
1433
- "adjacent_hexes": [
1434
- 19
1435
- ],
1436
- "pixel_coords": [
1437
- 422.5,
1438
- 494.8557158514987
1439
- ]
1440
- }
1441
- ],
1442
- "board_graph": {
1443
- "adjacency": {
1444
- "1": [
1445
- 2,
1446
- 9
1447
- ],
1448
- "2": [
1449
- 1,
1450
- 3
1451
- ],
1452
- "3": [
1453
- 2,
1454
- 4,
1455
- 11
1456
- ],
1457
- "4": [
1458
- 3,
1459
- 5
1460
- ],
1461
- "5": [
1462
- 4,
1463
- 6,
1464
- 13
1465
- ],
1466
- "6": [
1467
- 5,
1468
- 7
1469
- ],
1470
- "7": [
1471
- 6,
1472
- 15
1473
- ],
1474
- "8": [
1475
- 9,
1476
- 18
1477
- ],
1478
- "9": [
1479
- 8,
1480
- 10,
1481
- 1
1482
- ],
1483
- "10": [
1484
- 9,
1485
- 11,
1486
- 20
1487
- ],
1488
- "11": [
1489
- 10,
1490
- 12,
1491
- 3
1492
- ],
1493
- "12": [
1494
- 11,
1495
- 13,
1496
- 22
1497
- ],
1498
- "13": [
1499
- 12,
1500
- 14,
1501
- 5
1502
- ],
1503
- "14": [
1504
- 13,
1505
- 15,
1506
- 24
1507
- ],
1508
- "15": [
1509
- 14,
1510
- 16,
1511
- 7
1512
- ],
1513
- "16": [
1514
- 15,
1515
- 26
1516
- ],
1517
- "17": [
1518
- 18,
1519
- 28
1520
- ],
1521
- "18": [
1522
- 17,
1523
- 19,
1524
- 8
1525
- ],
1526
- "19": [
1527
- 18,
1528
- 20,
1529
- 30
1530
- ],
1531
- "20": [
1532
- 19,
1533
- 21,
1534
- 10
1535
- ],
1536
- "21": [
1537
- 20,
1538
- 22,
1539
- 32
1540
- ],
1541
- "22": [
1542
- 21,
1543
- 23,
1544
- 12
1545
- ],
1546
- "23": [
1547
- 22,
1548
- 24,
1549
- 34
1550
- ],
1551
- "24": [
1552
- 23,
1553
- 25,
1554
- 14
1555
- ],
1556
- "25": [
1557
- 24,
1558
- 26,
1559
- 36
1560
- ],
1561
- "26": [
1562
- 25,
1563
- 27,
1564
- 16
1565
- ],
1566
- "27": [
1567
- 26,
1568
- 38
1569
- ],
1570
- "28": [
1571
- 29,
1572
- 17
1573
- ],
1574
- "29": [
1575
- 28,
1576
- 30,
1577
- 39
1578
- ],
1579
- "30": [
1580
- 29,
1581
- 31,
1582
- 19
1583
- ],
1584
- "31": [
1585
- 30,
1586
- 32,
1587
- 41
1588
- ],
1589
- "32": [
1590
- 31,
1591
- 33,
1592
- 21
1593
- ],
1594
- "33": [
1595
- 32,
1596
- 34,
1597
- 43
1598
- ],
1599
- "34": [
1600
- 33,
1601
- 35,
1602
- 23
1603
- ],
1604
- "35": [
1605
- 34,
1606
- 36,
1607
- 45
1608
- ],
1609
- "36": [
1610
- 35,
1611
- 37,
1612
- 25
1613
- ],
1614
- "37": [
1615
- 36,
1616
- 38,
1617
- 47
1618
- ],
1619
- "38": [
1620
- 37,
1621
- 27
1622
- ],
1623
- "39": [
1624
- 40,
1625
- 29
1626
- ],
1627
- "40": [
1628
- 39,
1629
- 41,
1630
- 48
1631
- ],
1632
- "41": [
1633
- 40,
1634
- 42,
1635
- 31
1636
- ],
1637
- "42": [
1638
- 41,
1639
- 43,
1640
- 50
1641
- ],
1642
- "43": [
1643
- 42,
1644
- 44,
1645
- 33
1646
- ],
1647
- "44": [
1648
- 43,
1649
- 45,
1650
- 52
1651
- ],
1652
- "45": [
1653
- 44,
1654
- 46,
1655
- 35
1656
- ],
1657
- "46": [
1658
- 45,
1659
- 47,
1660
- 54
1661
- ],
1662
- "47": [
1663
- 46,
1664
- 37
1665
- ],
1666
- "48": [
1667
- 49,
1668
- 40
1669
- ],
1670
- "49": [
1671
- 48,
1672
- 50
1673
- ],
1674
- "50": [
1675
- 49,
1676
- 51,
1677
- 42
1678
- ],
1679
- "51": [
1680
- 50,
1681
- 52
1682
- ],
1683
- "52": [
1684
- 51,
1685
- 53,
1686
- 44
1687
- ],
1688
- "53": [
1689
- 52,
1690
- 54
1691
- ],
1692
- "54": [
1693
- 53,
1694
- 46
1695
- ]
1696
- },
1697
- "hex_to_points": {
1698
- "1": [
1699
- 1,
1700
- 2,
1701
- 3,
1702
- 9,
1703
- 10,
1704
- 11
1705
- ],
1706
- "2": [
1707
- 3,
1708
- 4,
1709
- 5,
1710
- 11,
1711
- 12,
1712
- 13
1713
- ],
1714
- "3": [
1715
- 5,
1716
- 6,
1717
- 7,
1718
- 13,
1719
- 14,
1720
- 15
1721
- ],
1722
- "4": [
1723
- 8,
1724
- 9,
1725
- 10,
1726
- 18,
1727
- 19,
1728
- 20
1729
- ],
1730
- "5": [
1731
- 10,
1732
- 11,
1733
- 12,
1734
- 20,
1735
- 21,
1736
- 22
1737
- ],
1738
- "6": [
1739
- 12,
1740
- 13,
1741
- 14,
1742
- 22,
1743
- 23,
1744
- 24
1745
- ],
1746
- "7": [
1747
- 14,
1748
- 15,
1749
- 16,
1750
- 24,
1751
- 25,
1752
- 26
1753
- ],
1754
- "8": [
1755
- 17,
1756
- 18,
1757
- 19,
1758
- 28,
1759
- 29,
1760
- 30
1761
- ],
1762
- "9": [
1763
- 19,
1764
- 20,
1765
- 21,
1766
- 30,
1767
- 31,
1768
- 32
1769
- ],
1770
- "10": [
1771
- 21,
1772
- 22,
1773
- 23,
1774
- 32,
1775
- 33,
1776
- 34
1777
- ],
1778
- "11": [
1779
- 23,
1780
- 24,
1781
- 25,
1782
- 34,
1783
- 35,
1784
- 36
1785
- ],
1786
- "12": [
1787
- 25,
1788
- 26,
1789
- 27,
1790
- 36,
1791
- 37,
1792
- 38
1793
- ],
1794
- "13": [
1795
- 29,
1796
- 30,
1797
- 31,
1798
- 39,
1799
- 40,
1800
- 41
1801
- ],
1802
- "14": [
1803
- 31,
1804
- 32,
1805
- 33,
1806
- 41,
1807
- 42,
1808
- 43
1809
- ],
1810
- "15": [
1811
- 33,
1812
- 34,
1813
- 35,
1814
- 43,
1815
- 44,
1816
- 45
1817
- ],
1818
- "16": [
1819
- 35,
1820
- 36,
1821
- 37,
1822
- 45,
1823
- 46,
1824
- 47
1825
- ],
1826
- "17": [
1827
- 40,
1828
- 41,
1829
- 42,
1830
- 48,
1831
- 49,
1832
- 50
1833
- ],
1834
- "18": [
1835
- 42,
1836
- 43,
1837
- 44,
1838
- 50,
1839
- 51,
1840
- 52
1841
- ],
1842
- "19": [
1843
- 44,
1844
- 45,
1845
- 46,
1846
- 52,
1847
- 53,
1848
- 54
1849
- ]
1850
- },
1851
- "total_points": 54,
1852
- "total_hexes": 19
1853
- }
1854
- }
1855
- ]
1856
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
examples/ai_testing/my_games/game_20251223_204416_final.json DELETED
@@ -1,1850 +0,0 @@
1
- {
2
- "hexes": [
3
- {
4
- "id": 1,
5
- "q": 0,
6
- "r": -2,
7
- "type": "wood",
8
- "number": 12,
9
- "has_robber": false,
10
- "position": [
11
- 0,
12
- 0
13
- ],
14
- "axial_coords": [
15
- 0,
16
- -2
17
- ]
18
- },
19
- {
20
- "id": 2,
21
- "q": 1,
22
- "r": -2,
23
- "type": "sheep",
24
- "number": 5,
25
- "has_robber": false,
26
- "position": [
27
- 0,
28
- 1
29
- ],
30
- "axial_coords": [
31
- 1,
32
- -2
33
- ]
34
- },
35
- {
36
- "id": 3,
37
- "q": 2,
38
- "r": -2,
39
- "type": "wood",
40
- "number": 4,
41
- "has_robber": false,
42
- "position": [
43
- 0,
44
- 2
45
- ],
46
- "axial_coords": [
47
- 2,
48
- -2
49
- ]
50
- },
51
- {
52
- "id": 4,
53
- "q": -1,
54
- "r": -1,
55
- "type": "sheep",
56
- "number": 8,
57
- "has_robber": false,
58
- "position": [
59
- 1,
60
- 0
61
- ],
62
- "axial_coords": [
63
- -1,
64
- -1
65
- ]
66
- },
67
- {
68
- "id": 5,
69
- "q": 0,
70
- "r": -1,
71
- "type": "brick",
72
- "number": 6,
73
- "has_robber": false,
74
- "position": [
75
- 1,
76
- 1
77
- ],
78
- "axial_coords": [
79
- 0,
80
- -1
81
- ]
82
- },
83
- {
84
- "id": 6,
85
- "q": 1,
86
- "r": -1,
87
- "type": "wood",
88
- "number": 3,
89
- "has_robber": false,
90
- "position": [
91
- 1,
92
- 2
93
- ],
94
- "axial_coords": [
95
- 1,
96
- -1
97
- ]
98
- },
99
- {
100
- "id": 7,
101
- "q": 2,
102
- "r": -1,
103
- "type": "wheat",
104
- "number": 8,
105
- "has_robber": false,
106
- "position": [
107
- 1,
108
- 3
109
- ],
110
- "axial_coords": [
111
- 2,
112
- -1
113
- ]
114
- },
115
- {
116
- "id": 8,
117
- "q": -2,
118
- "r": 0,
119
- "type": "brick",
120
- "number": 10,
121
- "has_robber": false,
122
- "position": [
123
- 2,
124
- 0
125
- ],
126
- "axial_coords": [
127
- -2,
128
- 0
129
- ]
130
- },
131
- {
132
- "id": 9,
133
- "q": -1,
134
- "r": 0,
135
- "type": "wood",
136
- "number": 11,
137
- "has_robber": false,
138
- "position": [
139
- 2,
140
- 1
141
- ],
142
- "axial_coords": [
143
- -1,
144
- 0
145
- ]
146
- },
147
- {
148
- "id": 10,
149
- "q": 0,
150
- "r": 0,
151
- "type": "desert",
152
- "number": null,
153
- "has_robber": true,
154
- "position": [
155
- 2,
156
- 2
157
- ],
158
- "axial_coords": [
159
- 0,
160
- 0
161
- ]
162
- },
163
- {
164
- "id": 11,
165
- "q": 1,
166
- "r": 0,
167
- "type": "ore",
168
- "number": 3,
169
- "has_robber": false,
170
- "position": [
171
- 2,
172
- 3
173
- ],
174
- "axial_coords": [
175
- 1,
176
- 0
177
- ]
178
- },
179
- {
180
- "id": 12,
181
- "q": 2,
182
- "r": 0,
183
- "type": "sheep",
184
- "number": 4,
185
- "has_robber": false,
186
- "position": [
187
- 2,
188
- 4
189
- ],
190
- "axial_coords": [
191
- 2,
192
- 0
193
- ]
194
- },
195
- {
196
- "id": 13,
197
- "q": -2,
198
- "r": 1,
199
- "type": "brick",
200
- "number": 10,
201
- "has_robber": false,
202
- "position": [
203
- 3,
204
- 0
205
- ],
206
- "axial_coords": [
207
- -2,
208
- 1
209
- ]
210
- },
211
- {
212
- "id": 14,
213
- "q": -1,
214
- "r": 1,
215
- "type": "wheat",
216
- "number": 9,
217
- "has_robber": false,
218
- "position": [
219
- 3,
220
- 1
221
- ],
222
- "axial_coords": [
223
- -1,
224
- 1
225
- ]
226
- },
227
- {
228
- "id": 15,
229
- "q": 0,
230
- "r": 1,
231
- "type": "wheat",
232
- "number": 6,
233
- "has_robber": false,
234
- "position": [
235
- 3,
236
- 2
237
- ],
238
- "axial_coords": [
239
- 0,
240
- 1
241
- ]
242
- },
243
- {
244
- "id": 16,
245
- "q": 1,
246
- "r": 1,
247
- "type": "sheep",
248
- "number": 11,
249
- "has_robber": false,
250
- "position": [
251
- 3,
252
- 3
253
- ],
254
- "axial_coords": [
255
- 1,
256
- 1
257
- ]
258
- },
259
- {
260
- "id": 17,
261
- "q": -2,
262
- "r": 2,
263
- "type": "ore",
264
- "number": 5,
265
- "has_robber": false,
266
- "position": [
267
- 4,
268
- 0
269
- ],
270
- "axial_coords": [
271
- -2,
272
- 2
273
- ]
274
- },
275
- {
276
- "id": 18,
277
- "q": -1,
278
- "r": 2,
279
- "type": "wheat",
280
- "number": 9,
281
- "has_robber": false,
282
- "position": [
283
- 4,
284
- 1
285
- ],
286
- "axial_coords": [
287
- -1,
288
- 2
289
- ]
290
- },
291
- {
292
- "id": 19,
293
- "q": 0,
294
- "r": 2,
295
- "type": "ore",
296
- "number": 2,
297
- "has_robber": false,
298
- "position": [
299
- 4,
300
- 2
301
- ],
302
- "axial_coords": [
303
- 0,
304
- 2
305
- ]
306
- }
307
- ],
308
- "settlements": [],
309
- "cities": [],
310
- "roads": [],
311
- "players": [
312
- {
313
- "id": 0,
314
- "name": "a",
315
- "victory_points": 0,
316
- "total_cards": 0,
317
- "cards_list": [],
318
- "dev_cards_list": [],
319
- "settlements": 0,
320
- "cities": 0,
321
- "roads": 0,
322
- "longest_road": 0,
323
- "has_longest_road": false,
324
- "knights": 0,
325
- "knights_played": 0,
326
- "has_largest_army": false
327
- },
328
- {
329
- "id": 1,
330
- "name": "b",
331
- "victory_points": 0,
332
- "total_cards": 0,
333
- "cards_list": [],
334
- "dev_cards_list": [],
335
- "settlements": 0,
336
- "cities": 0,
337
- "roads": 0,
338
- "longest_road": 0,
339
- "has_longest_road": false,
340
- "knights": 0,
341
- "knights_played": 0,
342
- "has_largest_army": false
343
- },
344
- {
345
- "id": 2,
346
- "name": "c",
347
- "victory_points": 0,
348
- "total_cards": 0,
349
- "cards_list": [],
350
- "dev_cards_list": [],
351
- "settlements": 0,
352
- "cities": 0,
353
- "roads": 0,
354
- "longest_road": 0,
355
- "has_longest_road": false,
356
- "knights": 0,
357
- "knights_played": 0,
358
- "has_largest_army": false
359
- }
360
- ],
361
- "current_player": 0,
362
- "current_phase": "SETUP_FIRST_ROUND",
363
- "robber_position": [
364
- 2,
365
- 2
366
- ],
367
- "dice_result": null,
368
- "points": [
369
- {
370
- "point_id": 1,
371
- "game_coords": [
372
- 0,
373
- 0
374
- ],
375
- "adjacent_points": [
376
- 2,
377
- 9
378
- ],
379
- "adjacent_hexes": [
380
- 1
381
- ],
382
- "pixel_coords": [
383
- 377.5,
384
- 105.14428414850131
385
- ]
386
- },
387
- {
388
- "point_id": 2,
389
- "game_coords": [
390
- 0,
391
- 1
392
- ],
393
- "adjacent_points": [
394
- 1,
395
- 3
396
- ],
397
- "adjacent_hexes": [
398
- 1
399
- ],
400
- "pixel_coords": [
401
- 422.5,
402
- 105.14428414850128
403
- ]
404
- },
405
- {
406
- "point_id": 3,
407
- "game_coords": [
408
- 0,
409
- 2
410
- ],
411
- "adjacent_points": [
412
- 2,
413
- 4,
414
- 11
415
- ],
416
- "adjacent_hexes": [
417
- 2,
418
- 1
419
- ],
420
- "pixel_coords": [
421
- 445,
422
- 144.11542731880104
423
- ]
424
- },
425
- {
426
- "point_id": 4,
427
- "game_coords": [
428
- 0,
429
- 3
430
- ],
431
- "adjacent_points": [
432
- 3,
433
- 5
434
- ],
435
- "adjacent_hexes": [
436
- 2
437
- ],
438
- "pixel_coords": [
439
- 490,
440
- 144.11542731880104
441
- ]
442
- },
443
- {
444
- "point_id": 5,
445
- "game_coords": [
446
- 0,
447
- 4
448
- ],
449
- "adjacent_points": [
450
- 4,
451
- 6,
452
- 13
453
- ],
454
- "adjacent_hexes": [
455
- 3,
456
- 2
457
- ],
458
- "pixel_coords": [
459
- 512.5,
460
- 183.08657048910078
461
- ]
462
- },
463
- {
464
- "point_id": 6,
465
- "game_coords": [
466
- 0,
467
- 5
468
- ],
469
- "adjacent_points": [
470
- 5,
471
- 7
472
- ],
473
- "adjacent_hexes": [
474
- 3
475
- ],
476
- "pixel_coords": [
477
- 557.5,
478
- 183.08657048910078
479
- ]
480
- },
481
- {
482
- "point_id": 7,
483
- "game_coords": [
484
- 0,
485
- 6
486
- ],
487
- "adjacent_points": [
488
- 6,
489
- 15
490
- ],
491
- "adjacent_hexes": [
492
- 3
493
- ],
494
- "pixel_coords": [
495
- 580,
496
- 222.05771365940052
497
- ]
498
- },
499
- {
500
- "point_id": 8,
501
- "game_coords": [
502
- 1,
503
- 0
504
- ],
505
- "adjacent_points": [
506
- 9,
507
- 18
508
- ],
509
- "adjacent_hexes": [
510
- 4
511
- ],
512
- "pixel_coords": [
513
- 310,
514
- 144.11542731880104
515
- ]
516
- },
517
- {
518
- "point_id": 9,
519
- "game_coords": [
520
- 1,
521
- 1
522
- ],
523
- "adjacent_points": [
524
- 8,
525
- 10,
526
- 1
527
- ],
528
- "adjacent_hexes": [
529
- 4,
530
- 1
531
- ],
532
- "pixel_coords": [
533
- 355,
534
- 144.11542731880104
535
- ]
536
- },
537
- {
538
- "point_id": 10,
539
- "game_coords": [
540
- 1,
541
- 2
542
- ],
543
- "adjacent_points": [
544
- 9,
545
- 11,
546
- 20
547
- ],
548
- "adjacent_hexes": [
549
- 5,
550
- 4,
551
- 1
552
- ],
553
- "pixel_coords": [
554
- 377.5,
555
- 183.08657048910078
556
- ]
557
- },
558
- {
559
- "point_id": 11,
560
- "game_coords": [
561
- 1,
562
- 3
563
- ],
564
- "adjacent_points": [
565
- 10,
566
- 12,
567
- 3
568
- ],
569
- "adjacent_hexes": [
570
- 5,
571
- 2,
572
- 1
573
- ],
574
- "pixel_coords": [
575
- 422.5,
576
- 183.08657048910078
577
- ]
578
- },
579
- {
580
- "point_id": 12,
581
- "game_coords": [
582
- 1,
583
- 4
584
- ],
585
- "adjacent_points": [
586
- 11,
587
- 13,
588
- 22
589
- ],
590
- "adjacent_hexes": [
591
- 6,
592
- 5,
593
- 2
594
- ],
595
- "pixel_coords": [
596
- 445,
597
- 222.05771365940052
598
- ]
599
- },
600
- {
601
- "point_id": 13,
602
- "game_coords": [
603
- 1,
604
- 5
605
- ],
606
- "adjacent_points": [
607
- 12,
608
- 14,
609
- 5
610
- ],
611
- "adjacent_hexes": [
612
- 6,
613
- 3,
614
- 2
615
- ],
616
- "pixel_coords": [
617
- 490,
618
- 222.05771365940052
619
- ]
620
- },
621
- {
622
- "point_id": 14,
623
- "game_coords": [
624
- 1,
625
- 6
626
- ],
627
- "adjacent_points": [
628
- 13,
629
- 15,
630
- 24
631
- ],
632
- "adjacent_hexes": [
633
- 7,
634
- 6,
635
- 3
636
- ],
637
- "pixel_coords": [
638
- 512.5,
639
- 261.02885682970026
640
- ]
641
- },
642
- {
643
- "point_id": 15,
644
- "game_coords": [
645
- 1,
646
- 7
647
- ],
648
- "adjacent_points": [
649
- 14,
650
- 16,
651
- 7
652
- ],
653
- "adjacent_hexes": [
654
- 7,
655
- 3
656
- ],
657
- "pixel_coords": [
658
- 557.5,
659
- 261.02885682970026
660
- ]
661
- },
662
- {
663
- "point_id": 16,
664
- "game_coords": [
665
- 1,
666
- 8
667
- ],
668
- "adjacent_points": [
669
- 15,
670
- 26
671
- ],
672
- "adjacent_hexes": [
673
- 7
674
- ],
675
- "pixel_coords": [
676
- 580,
677
- 300
678
- ]
679
- },
680
- {
681
- "point_id": 17,
682
- "game_coords": [
683
- 2,
684
- 0
685
- ],
686
- "adjacent_points": [
687
- 18,
688
- 28
689
- ],
690
- "adjacent_hexes": [
691
- 8
692
- ],
693
- "pixel_coords": [
694
- 242.49999999999997,
695
- 183.08657048910078
696
- ]
697
- },
698
- {
699
- "point_id": 18,
700
- "game_coords": [
701
- 2,
702
- 1
703
- ],
704
- "adjacent_points": [
705
- 17,
706
- 19,
707
- 8
708
- ],
709
- "adjacent_hexes": [
710
- 8,
711
- 4
712
- ],
713
- "pixel_coords": [
714
- 287.5,
715
- 183.08657048910078
716
- ]
717
- },
718
- {
719
- "point_id": 19,
720
- "game_coords": [
721
- 2,
722
- 2
723
- ],
724
- "adjacent_points": [
725
- 18,
726
- 20,
727
- 30
728
- ],
729
- "adjacent_hexes": [
730
- 9,
731
- 8,
732
- 4
733
- ],
734
- "pixel_coords": [
735
- 310,
736
- 222.05771365940052
737
- ]
738
- },
739
- {
740
- "point_id": 20,
741
- "game_coords": [
742
- 2,
743
- 3
744
- ],
745
- "adjacent_points": [
746
- 19,
747
- 21,
748
- 10
749
- ],
750
- "adjacent_hexes": [
751
- 9,
752
- 5,
753
- 4
754
- ],
755
- "pixel_coords": [
756
- 355,
757
- 222.05771365940052
758
- ]
759
- },
760
- {
761
- "point_id": 21,
762
- "game_coords": [
763
- 2,
764
- 4
765
- ],
766
- "adjacent_points": [
767
- 20,
768
- 22,
769
- 32
770
- ],
771
- "adjacent_hexes": [
772
- 10,
773
- 9,
774
- 5
775
- ],
776
- "pixel_coords": [
777
- 377.5,
778
- 261.02885682970026
779
- ]
780
- },
781
- {
782
- "point_id": 22,
783
- "game_coords": [
784
- 2,
785
- 5
786
- ],
787
- "adjacent_points": [
788
- 21,
789
- 23,
790
- 12
791
- ],
792
- "adjacent_hexes": [
793
- 10,
794
- 6,
795
- 5
796
- ],
797
- "pixel_coords": [
798
- 422.5,
799
- 261.02885682970026
800
- ]
801
- },
802
- {
803
- "point_id": 23,
804
- "game_coords": [
805
- 2,
806
- 6
807
- ],
808
- "adjacent_points": [
809
- 22,
810
- 24,
811
- 34
812
- ],
813
- "adjacent_hexes": [
814
- 11,
815
- 10,
816
- 6
817
- ],
818
- "pixel_coords": [
819
- 445,
820
- 300
821
- ]
822
- },
823
- {
824
- "point_id": 24,
825
- "game_coords": [
826
- 2,
827
- 7
828
- ],
829
- "adjacent_points": [
830
- 23,
831
- 25,
832
- 14
833
- ],
834
- "adjacent_hexes": [
835
- 11,
836
- 7,
837
- 6
838
- ],
839
- "pixel_coords": [
840
- 490,
841
- 300
842
- ]
843
- },
844
- {
845
- "point_id": 25,
846
- "game_coords": [
847
- 2,
848
- 8
849
- ],
850
- "adjacent_points": [
851
- 24,
852
- 26,
853
- 36
854
- ],
855
- "adjacent_hexes": [
856
- 12,
857
- 11,
858
- 7
859
- ],
860
- "pixel_coords": [
861
- 512.5,
862
- 338.97114317029974
863
- ]
864
- },
865
- {
866
- "point_id": 26,
867
- "game_coords": [
868
- 2,
869
- 9
870
- ],
871
- "adjacent_points": [
872
- 25,
873
- 27,
874
- 16
875
- ],
876
- "adjacent_hexes": [
877
- 12,
878
- 7
879
- ],
880
- "pixel_coords": [
881
- 557.5,
882
- 338.97114317029974
883
- ]
884
- },
885
- {
886
- "point_id": 27,
887
- "game_coords": [
888
- 2,
889
- 10
890
- ],
891
- "adjacent_points": [
892
- 26,
893
- 38
894
- ],
895
- "adjacent_hexes": [
896
- 12
897
- ],
898
- "pixel_coords": [
899
- 580,
900
- 377.9422863405995
901
- ]
902
- },
903
- {
904
- "point_id": 28,
905
- "game_coords": [
906
- 3,
907
- 0
908
- ],
909
- "adjacent_points": [
910
- 29,
911
- 17
912
- ],
913
- "adjacent_hexes": [
914
- 8
915
- ],
916
- "pixel_coords": [
917
- 220,
918
- 222.05771365940052
919
- ]
920
- },
921
- {
922
- "point_id": 29,
923
- "game_coords": [
924
- 3,
925
- 1
926
- ],
927
- "adjacent_points": [
928
- 28,
929
- 30,
930
- 39
931
- ],
932
- "adjacent_hexes": [
933
- 13,
934
- 8
935
- ],
936
- "pixel_coords": [
937
- 242.5,
938
- 261.02885682970026
939
- ]
940
- },
941
- {
942
- "point_id": 30,
943
- "game_coords": [
944
- 3,
945
- 2
946
- ],
947
- "adjacent_points": [
948
- 29,
949
- 31,
950
- 19
951
- ],
952
- "adjacent_hexes": [
953
- 13,
954
- 9,
955
- 8
956
- ],
957
- "pixel_coords": [
958
- 287.5,
959
- 261.02885682970026
960
- ]
961
- },
962
- {
963
- "point_id": 31,
964
- "game_coords": [
965
- 3,
966
- 3
967
- ],
968
- "adjacent_points": [
969
- 30,
970
- 32,
971
- 41
972
- ],
973
- "adjacent_hexes": [
974
- 14,
975
- 13,
976
- 9
977
- ],
978
- "pixel_coords": [
979
- 310,
980
- 300
981
- ]
982
- },
983
- {
984
- "point_id": 32,
985
- "game_coords": [
986
- 3,
987
- 4
988
- ],
989
- "adjacent_points": [
990
- 31,
991
- 33,
992
- 21
993
- ],
994
- "adjacent_hexes": [
995
- 14,
996
- 10,
997
- 9
998
- ],
999
- "pixel_coords": [
1000
- 355,
1001
- 300
1002
- ]
1003
- },
1004
- {
1005
- "point_id": 33,
1006
- "game_coords": [
1007
- 3,
1008
- 5
1009
- ],
1010
- "adjacent_points": [
1011
- 32,
1012
- 34,
1013
- 43
1014
- ],
1015
- "adjacent_hexes": [
1016
- 15,
1017
- 14,
1018
- 10
1019
- ],
1020
- "pixel_coords": [
1021
- 377.5,
1022
- 338.97114317029974
1023
- ]
1024
- },
1025
- {
1026
- "point_id": 34,
1027
- "game_coords": [
1028
- 3,
1029
- 6
1030
- ],
1031
- "adjacent_points": [
1032
- 33,
1033
- 35,
1034
- 23
1035
- ],
1036
- "adjacent_hexes": [
1037
- 15,
1038
- 11,
1039
- 10
1040
- ],
1041
- "pixel_coords": [
1042
- 422.5,
1043
- 338.97114317029974
1044
- ]
1045
- },
1046
- {
1047
- "point_id": 35,
1048
- "game_coords": [
1049
- 3,
1050
- 7
1051
- ],
1052
- "adjacent_points": [
1053
- 34,
1054
- 36,
1055
- 45
1056
- ],
1057
- "adjacent_hexes": [
1058
- 16,
1059
- 15,
1060
- 11
1061
- ],
1062
- "pixel_coords": [
1063
- 445,
1064
- 377.9422863405995
1065
- ]
1066
- },
1067
- {
1068
- "point_id": 36,
1069
- "game_coords": [
1070
- 3,
1071
- 8
1072
- ],
1073
- "adjacent_points": [
1074
- 35,
1075
- 37,
1076
- 25
1077
- ],
1078
- "adjacent_hexes": [
1079
- 16,
1080
- 12,
1081
- 11
1082
- ],
1083
- "pixel_coords": [
1084
- 490,
1085
- 377.9422863405995
1086
- ]
1087
- },
1088
- {
1089
- "point_id": 37,
1090
- "game_coords": [
1091
- 3,
1092
- 9
1093
- ],
1094
- "adjacent_points": [
1095
- 36,
1096
- 38,
1097
- 47
1098
- ],
1099
- "adjacent_hexes": [
1100
- 16,
1101
- 12
1102
- ],
1103
- "pixel_coords": [
1104
- 512.5,
1105
- 416.9134295108992
1106
- ]
1107
- },
1108
- {
1109
- "point_id": 38,
1110
- "game_coords": [
1111
- 3,
1112
- 10
1113
- ],
1114
- "adjacent_points": [
1115
- 37,
1116
- 27
1117
- ],
1118
- "adjacent_hexes": [
1119
- 12
1120
- ],
1121
- "pixel_coords": [
1122
- 557.5,
1123
- 416.9134295108992
1124
- ]
1125
- },
1126
- {
1127
- "point_id": 39,
1128
- "game_coords": [
1129
- 4,
1130
- 0
1131
- ],
1132
- "adjacent_points": [
1133
- 40,
1134
- 29
1135
- ],
1136
- "adjacent_hexes": [
1137
- 13
1138
- ],
1139
- "pixel_coords": [
1140
- 220,
1141
- 300
1142
- ]
1143
- },
1144
- {
1145
- "point_id": 40,
1146
- "game_coords": [
1147
- 4,
1148
- 1
1149
- ],
1150
- "adjacent_points": [
1151
- 39,
1152
- 41,
1153
- 48
1154
- ],
1155
- "adjacent_hexes": [
1156
- 17,
1157
- 13
1158
- ],
1159
- "pixel_coords": [
1160
- 242.5,
1161
- 338.97114317029974
1162
- ]
1163
- },
1164
- {
1165
- "point_id": 41,
1166
- "game_coords": [
1167
- 4,
1168
- 2
1169
- ],
1170
- "adjacent_points": [
1171
- 40,
1172
- 42,
1173
- 31
1174
- ],
1175
- "adjacent_hexes": [
1176
- 17,
1177
- 14,
1178
- 13
1179
- ],
1180
- "pixel_coords": [
1181
- 287.5,
1182
- 338.97114317029974
1183
- ]
1184
- },
1185
- {
1186
- "point_id": 42,
1187
- "game_coords": [
1188
- 4,
1189
- 3
1190
- ],
1191
- "adjacent_points": [
1192
- 41,
1193
- 43,
1194
- 50
1195
- ],
1196
- "adjacent_hexes": [
1197
- 18,
1198
- 17,
1199
- 14
1200
- ],
1201
- "pixel_coords": [
1202
- 310,
1203
- 377.9422863405995
1204
- ]
1205
- },
1206
- {
1207
- "point_id": 43,
1208
- "game_coords": [
1209
- 4,
1210
- 4
1211
- ],
1212
- "adjacent_points": [
1213
- 42,
1214
- 44,
1215
- 33
1216
- ],
1217
- "adjacent_hexes": [
1218
- 18,
1219
- 15,
1220
- 14
1221
- ],
1222
- "pixel_coords": [
1223
- 355,
1224
- 377.9422863405995
1225
- ]
1226
- },
1227
- {
1228
- "point_id": 44,
1229
- "game_coords": [
1230
- 4,
1231
- 5
1232
- ],
1233
- "adjacent_points": [
1234
- 43,
1235
- 45,
1236
- 52
1237
- ],
1238
- "adjacent_hexes": [
1239
- 19,
1240
- 18,
1241
- 15
1242
- ],
1243
- "pixel_coords": [
1244
- 377.5,
1245
- 416.9134295108992
1246
- ]
1247
- },
1248
- {
1249
- "point_id": 45,
1250
- "game_coords": [
1251
- 4,
1252
- 6
1253
- ],
1254
- "adjacent_points": [
1255
- 44,
1256
- 46,
1257
- 35
1258
- ],
1259
- "adjacent_hexes": [
1260
- 19,
1261
- 16,
1262
- 15
1263
- ],
1264
- "pixel_coords": [
1265
- 422.5,
1266
- 416.9134295108992
1267
- ]
1268
- },
1269
- {
1270
- "point_id": 46,
1271
- "game_coords": [
1272
- 4,
1273
- 7
1274
- ],
1275
- "adjacent_points": [
1276
- 45,
1277
- 47,
1278
- 54
1279
- ],
1280
- "adjacent_hexes": [
1281
- 19,
1282
- 16
1283
- ],
1284
- "pixel_coords": [
1285
- 445,
1286
- 455.88457268119896
1287
- ]
1288
- },
1289
- {
1290
- "point_id": 47,
1291
- "game_coords": [
1292
- 4,
1293
- 8
1294
- ],
1295
- "adjacent_points": [
1296
- 46,
1297
- 37
1298
- ],
1299
- "adjacent_hexes": [
1300
- 16
1301
- ],
1302
- "pixel_coords": [
1303
- 490,
1304
- 455.88457268119896
1305
- ]
1306
- },
1307
- {
1308
- "point_id": 48,
1309
- "game_coords": [
1310
- 5,
1311
- 0
1312
- ],
1313
- "adjacent_points": [
1314
- 49,
1315
- 40
1316
- ],
1317
- "adjacent_hexes": [
1318
- 17
1319
- ],
1320
- "pixel_coords": [
1321
- 220,
1322
- 377.9422863405995
1323
- ]
1324
- },
1325
- {
1326
- "point_id": 49,
1327
- "game_coords": [
1328
- 5,
1329
- 1
1330
- ],
1331
- "adjacent_points": [
1332
- 48,
1333
- 50
1334
- ],
1335
- "adjacent_hexes": [
1336
- 17
1337
- ],
1338
- "pixel_coords": [
1339
- 242.5,
1340
- 416.9134295108992
1341
- ]
1342
- },
1343
- {
1344
- "point_id": 50,
1345
- "game_coords": [
1346
- 5,
1347
- 2
1348
- ],
1349
- "adjacent_points": [
1350
- 49,
1351
- 51,
1352
- 42
1353
- ],
1354
- "adjacent_hexes": [
1355
- 18,
1356
- 17
1357
- ],
1358
- "pixel_coords": [
1359
- 287.5,
1360
- 416.9134295108992
1361
- ]
1362
- },
1363
- {
1364
- "point_id": 51,
1365
- "game_coords": [
1366
- 5,
1367
- 3
1368
- ],
1369
- "adjacent_points": [
1370
- 50,
1371
- 52
1372
- ],
1373
- "adjacent_hexes": [
1374
- 18
1375
- ],
1376
- "pixel_coords": [
1377
- 310,
1378
- 455.88457268119896
1379
- ]
1380
- },
1381
- {
1382
- "point_id": 52,
1383
- "game_coords": [
1384
- 5,
1385
- 4
1386
- ],
1387
- "adjacent_points": [
1388
- 51,
1389
- 53,
1390
- 44
1391
- ],
1392
- "adjacent_hexes": [
1393
- 19,
1394
- 18
1395
- ],
1396
- "pixel_coords": [
1397
- 355,
1398
- 455.88457268119896
1399
- ]
1400
- },
1401
- {
1402
- "point_id": 53,
1403
- "game_coords": [
1404
- 5,
1405
- 5
1406
- ],
1407
- "adjacent_points": [
1408
- 52,
1409
- 54
1410
- ],
1411
- "adjacent_hexes": [
1412
- 19
1413
- ],
1414
- "pixel_coords": [
1415
- 377.5,
1416
- 494.8557158514987
1417
- ]
1418
- },
1419
- {
1420
- "point_id": 54,
1421
- "game_coords": [
1422
- 5,
1423
- 6
1424
- ],
1425
- "adjacent_points": [
1426
- 53,
1427
- 46
1428
- ],
1429
- "adjacent_hexes": [
1430
- 19
1431
- ],
1432
- "pixel_coords": [
1433
- 422.5,
1434
- 494.8557158514987
1435
- ]
1436
- }
1437
- ],
1438
- "board_graph": {
1439
- "adjacency": {
1440
- "1": [
1441
- 2,
1442
- 9
1443
- ],
1444
- "2": [
1445
- 1,
1446
- 3
1447
- ],
1448
- "3": [
1449
- 2,
1450
- 4,
1451
- 11
1452
- ],
1453
- "4": [
1454
- 3,
1455
- 5
1456
- ],
1457
- "5": [
1458
- 4,
1459
- 6,
1460
- 13
1461
- ],
1462
- "6": [
1463
- 5,
1464
- 7
1465
- ],
1466
- "7": [
1467
- 6,
1468
- 15
1469
- ],
1470
- "8": [
1471
- 9,
1472
- 18
1473
- ],
1474
- "9": [
1475
- 8,
1476
- 10,
1477
- 1
1478
- ],
1479
- "10": [
1480
- 9,
1481
- 11,
1482
- 20
1483
- ],
1484
- "11": [
1485
- 10,
1486
- 12,
1487
- 3
1488
- ],
1489
- "12": [
1490
- 11,
1491
- 13,
1492
- 22
1493
- ],
1494
- "13": [
1495
- 12,
1496
- 14,
1497
- 5
1498
- ],
1499
- "14": [
1500
- 13,
1501
- 15,
1502
- 24
1503
- ],
1504
- "15": [
1505
- 14,
1506
- 16,
1507
- 7
1508
- ],
1509
- "16": [
1510
- 15,
1511
- 26
1512
- ],
1513
- "17": [
1514
- 18,
1515
- 28
1516
- ],
1517
- "18": [
1518
- 17,
1519
- 19,
1520
- 8
1521
- ],
1522
- "19": [
1523
- 18,
1524
- 20,
1525
- 30
1526
- ],
1527
- "20": [
1528
- 19,
1529
- 21,
1530
- 10
1531
- ],
1532
- "21": [
1533
- 20,
1534
- 22,
1535
- 32
1536
- ],
1537
- "22": [
1538
- 21,
1539
- 23,
1540
- 12
1541
- ],
1542
- "23": [
1543
- 22,
1544
- 24,
1545
- 34
1546
- ],
1547
- "24": [
1548
- 23,
1549
- 25,
1550
- 14
1551
- ],
1552
- "25": [
1553
- 24,
1554
- 26,
1555
- 36
1556
- ],
1557
- "26": [
1558
- 25,
1559
- 27,
1560
- 16
1561
- ],
1562
- "27": [
1563
- 26,
1564
- 38
1565
- ],
1566
- "28": [
1567
- 29,
1568
- 17
1569
- ],
1570
- "29": [
1571
- 28,
1572
- 30,
1573
- 39
1574
- ],
1575
- "30": [
1576
- 29,
1577
- 31,
1578
- 19
1579
- ],
1580
- "31": [
1581
- 30,
1582
- 32,
1583
- 41
1584
- ],
1585
- "32": [
1586
- 31,
1587
- 33,
1588
- 21
1589
- ],
1590
- "33": [
1591
- 32,
1592
- 34,
1593
- 43
1594
- ],
1595
- "34": [
1596
- 33,
1597
- 35,
1598
- 23
1599
- ],
1600
- "35": [
1601
- 34,
1602
- 36,
1603
- 45
1604
- ],
1605
- "36": [
1606
- 35,
1607
- 37,
1608
- 25
1609
- ],
1610
- "37": [
1611
- 36,
1612
- 38,
1613
- 47
1614
- ],
1615
- "38": [
1616
- 37,
1617
- 27
1618
- ],
1619
- "39": [
1620
- 40,
1621
- 29
1622
- ],
1623
- "40": [
1624
- 39,
1625
- 41,
1626
- 48
1627
- ],
1628
- "41": [
1629
- 40,
1630
- 42,
1631
- 31
1632
- ],
1633
- "42": [
1634
- 41,
1635
- 43,
1636
- 50
1637
- ],
1638
- "43": [
1639
- 42,
1640
- 44,
1641
- 33
1642
- ],
1643
- "44": [
1644
- 43,
1645
- 45,
1646
- 52
1647
- ],
1648
- "45": [
1649
- 44,
1650
- 46,
1651
- 35
1652
- ],
1653
- "46": [
1654
- 45,
1655
- 47,
1656
- 54
1657
- ],
1658
- "47": [
1659
- 46,
1660
- 37
1661
- ],
1662
- "48": [
1663
- 49,
1664
- 40
1665
- ],
1666
- "49": [
1667
- 48,
1668
- 50
1669
- ],
1670
- "50": [
1671
- 49,
1672
- 51,
1673
- 42
1674
- ],
1675
- "51": [
1676
- 50,
1677
- 52
1678
- ],
1679
- "52": [
1680
- 51,
1681
- 53,
1682
- 44
1683
- ],
1684
- "53": [
1685
- 52,
1686
- 54
1687
- ],
1688
- "54": [
1689
- 53,
1690
- 46
1691
- ]
1692
- },
1693
- "hex_to_points": {
1694
- "1": [
1695
- 1,
1696
- 2,
1697
- 3,
1698
- 9,
1699
- 10,
1700
- 11
1701
- ],
1702
- "2": [
1703
- 3,
1704
- 4,
1705
- 5,
1706
- 11,
1707
- 12,
1708
- 13
1709
- ],
1710
- "3": [
1711
- 5,
1712
- 6,
1713
- 7,
1714
- 13,
1715
- 14,
1716
- 15
1717
- ],
1718
- "4": [
1719
- 8,
1720
- 9,
1721
- 10,
1722
- 18,
1723
- 19,
1724
- 20
1725
- ],
1726
- "5": [
1727
- 10,
1728
- 11,
1729
- 12,
1730
- 20,
1731
- 21,
1732
- 22
1733
- ],
1734
- "6": [
1735
- 12,
1736
- 13,
1737
- 14,
1738
- 22,
1739
- 23,
1740
- 24
1741
- ],
1742
- "7": [
1743
- 14,
1744
- 15,
1745
- 16,
1746
- 24,
1747
- 25,
1748
- 26
1749
- ],
1750
- "8": [
1751
- 17,
1752
- 18,
1753
- 19,
1754
- 28,
1755
- 29,
1756
- 30
1757
- ],
1758
- "9": [
1759
- 19,
1760
- 20,
1761
- 21,
1762
- 30,
1763
- 31,
1764
- 32
1765
- ],
1766
- "10": [
1767
- 21,
1768
- 22,
1769
- 23,
1770
- 32,
1771
- 33,
1772
- 34
1773
- ],
1774
- "11": [
1775
- 23,
1776
- 24,
1777
- 25,
1778
- 34,
1779
- 35,
1780
- 36
1781
- ],
1782
- "12": [
1783
- 25,
1784
- 26,
1785
- 27,
1786
- 36,
1787
- 37,
1788
- 38
1789
- ],
1790
- "13": [
1791
- 29,
1792
- 30,
1793
- 31,
1794
- 39,
1795
- 40,
1796
- 41
1797
- ],
1798
- "14": [
1799
- 31,
1800
- 32,
1801
- 33,
1802
- 41,
1803
- 42,
1804
- 43
1805
- ],
1806
- "15": [
1807
- 33,
1808
- 34,
1809
- 35,
1810
- 43,
1811
- 44,
1812
- 45
1813
- ],
1814
- "16": [
1815
- 35,
1816
- 36,
1817
- 37,
1818
- 45,
1819
- 46,
1820
- 47
1821
- ],
1822
- "17": [
1823
- 40,
1824
- 41,
1825
- 42,
1826
- 48,
1827
- 49,
1828
- 50
1829
- ],
1830
- "18": [
1831
- 42,
1832
- 43,
1833
- 44,
1834
- 50,
1835
- 51,
1836
- 52
1837
- ],
1838
- "19": [
1839
- 44,
1840
- 45,
1841
- 46,
1842
- 52,
1843
- 53,
1844
- 54
1845
- ]
1846
- },
1847
- "total_points": 54,
1848
- "total_hexes": 19
1849
- }
1850
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
examples/ai_testing/my_games/game_20251223_204440_full.json DELETED
@@ -1,1856 +0,0 @@
1
- {
2
- "total_states": 1,
3
- "timestamp": "20251223_204440",
4
- "states": [
5
- {
6
- "hexes": [
7
- {
8
- "id": 1,
9
- "q": 0,
10
- "r": -2,
11
- "type": "wood",
12
- "number": 12,
13
- "has_robber": false,
14
- "position": [
15
- 0,
16
- 0
17
- ],
18
- "axial_coords": [
19
- 0,
20
- -2
21
- ]
22
- },
23
- {
24
- "id": 2,
25
- "q": 1,
26
- "r": -2,
27
- "type": "sheep",
28
- "number": 5,
29
- "has_robber": false,
30
- "position": [
31
- 0,
32
- 1
33
- ],
34
- "axial_coords": [
35
- 1,
36
- -2
37
- ]
38
- },
39
- {
40
- "id": 3,
41
- "q": 2,
42
- "r": -2,
43
- "type": "wood",
44
- "number": 4,
45
- "has_robber": false,
46
- "position": [
47
- 0,
48
- 2
49
- ],
50
- "axial_coords": [
51
- 2,
52
- -2
53
- ]
54
- },
55
- {
56
- "id": 4,
57
- "q": -1,
58
- "r": -1,
59
- "type": "sheep",
60
- "number": 8,
61
- "has_robber": false,
62
- "position": [
63
- 1,
64
- 0
65
- ],
66
- "axial_coords": [
67
- -1,
68
- -1
69
- ]
70
- },
71
- {
72
- "id": 5,
73
- "q": 0,
74
- "r": -1,
75
- "type": "brick",
76
- "number": 6,
77
- "has_robber": false,
78
- "position": [
79
- 1,
80
- 1
81
- ],
82
- "axial_coords": [
83
- 0,
84
- -1
85
- ]
86
- },
87
- {
88
- "id": 6,
89
- "q": 1,
90
- "r": -1,
91
- "type": "wood",
92
- "number": 3,
93
- "has_robber": false,
94
- "position": [
95
- 1,
96
- 2
97
- ],
98
- "axial_coords": [
99
- 1,
100
- -1
101
- ]
102
- },
103
- {
104
- "id": 7,
105
- "q": 2,
106
- "r": -1,
107
- "type": "wheat",
108
- "number": 8,
109
- "has_robber": false,
110
- "position": [
111
- 1,
112
- 3
113
- ],
114
- "axial_coords": [
115
- 2,
116
- -1
117
- ]
118
- },
119
- {
120
- "id": 8,
121
- "q": -2,
122
- "r": 0,
123
- "type": "brick",
124
- "number": 10,
125
- "has_robber": false,
126
- "position": [
127
- 2,
128
- 0
129
- ],
130
- "axial_coords": [
131
- -2,
132
- 0
133
- ]
134
- },
135
- {
136
- "id": 9,
137
- "q": -1,
138
- "r": 0,
139
- "type": "wood",
140
- "number": 11,
141
- "has_robber": false,
142
- "position": [
143
- 2,
144
- 1
145
- ],
146
- "axial_coords": [
147
- -1,
148
- 0
149
- ]
150
- },
151
- {
152
- "id": 10,
153
- "q": 0,
154
- "r": 0,
155
- "type": "desert",
156
- "number": null,
157
- "has_robber": true,
158
- "position": [
159
- 2,
160
- 2
161
- ],
162
- "axial_coords": [
163
- 0,
164
- 0
165
- ]
166
- },
167
- {
168
- "id": 11,
169
- "q": 1,
170
- "r": 0,
171
- "type": "ore",
172
- "number": 3,
173
- "has_robber": false,
174
- "position": [
175
- 2,
176
- 3
177
- ],
178
- "axial_coords": [
179
- 1,
180
- 0
181
- ]
182
- },
183
- {
184
- "id": 12,
185
- "q": 2,
186
- "r": 0,
187
- "type": "sheep",
188
- "number": 4,
189
- "has_robber": false,
190
- "position": [
191
- 2,
192
- 4
193
- ],
194
- "axial_coords": [
195
- 2,
196
- 0
197
- ]
198
- },
199
- {
200
- "id": 13,
201
- "q": -2,
202
- "r": 1,
203
- "type": "brick",
204
- "number": 10,
205
- "has_robber": false,
206
- "position": [
207
- 3,
208
- 0
209
- ],
210
- "axial_coords": [
211
- -2,
212
- 1
213
- ]
214
- },
215
- {
216
- "id": 14,
217
- "q": -1,
218
- "r": 1,
219
- "type": "wheat",
220
- "number": 9,
221
- "has_robber": false,
222
- "position": [
223
- 3,
224
- 1
225
- ],
226
- "axial_coords": [
227
- -1,
228
- 1
229
- ]
230
- },
231
- {
232
- "id": 15,
233
- "q": 0,
234
- "r": 1,
235
- "type": "wheat",
236
- "number": 6,
237
- "has_robber": false,
238
- "position": [
239
- 3,
240
- 2
241
- ],
242
- "axial_coords": [
243
- 0,
244
- 1
245
- ]
246
- },
247
- {
248
- "id": 16,
249
- "q": 1,
250
- "r": 1,
251
- "type": "sheep",
252
- "number": 11,
253
- "has_robber": false,
254
- "position": [
255
- 3,
256
- 3
257
- ],
258
- "axial_coords": [
259
- 1,
260
- 1
261
- ]
262
- },
263
- {
264
- "id": 17,
265
- "q": -2,
266
- "r": 2,
267
- "type": "ore",
268
- "number": 5,
269
- "has_robber": false,
270
- "position": [
271
- 4,
272
- 0
273
- ],
274
- "axial_coords": [
275
- -2,
276
- 2
277
- ]
278
- },
279
- {
280
- "id": 18,
281
- "q": -1,
282
- "r": 2,
283
- "type": "wheat",
284
- "number": 9,
285
- "has_robber": false,
286
- "position": [
287
- 4,
288
- 1
289
- ],
290
- "axial_coords": [
291
- -1,
292
- 2
293
- ]
294
- },
295
- {
296
- "id": 19,
297
- "q": 0,
298
- "r": 2,
299
- "type": "ore",
300
- "number": 2,
301
- "has_robber": false,
302
- "position": [
303
- 4,
304
- 2
305
- ],
306
- "axial_coords": [
307
- 0,
308
- 2
309
- ]
310
- }
311
- ],
312
- "settlements": [],
313
- "cities": [],
314
- "roads": [],
315
- "players": [
316
- {
317
- "id": 0,
318
- "name": "a",
319
- "victory_points": 0,
320
- "total_cards": 0,
321
- "cards_list": [],
322
- "dev_cards_list": [],
323
- "settlements": 0,
324
- "cities": 0,
325
- "roads": 0,
326
- "longest_road": 0,
327
- "has_longest_road": false,
328
- "knights": 0,
329
- "knights_played": 0,
330
- "has_largest_army": false
331
- },
332
- {
333
- "id": 1,
334
- "name": "b",
335
- "victory_points": 0,
336
- "total_cards": 0,
337
- "cards_list": [],
338
- "dev_cards_list": [],
339
- "settlements": 0,
340
- "cities": 0,
341
- "roads": 0,
342
- "longest_road": 0,
343
- "has_longest_road": false,
344
- "knights": 0,
345
- "knights_played": 0,
346
- "has_largest_army": false
347
- },
348
- {
349
- "id": 2,
350
- "name": "c",
351
- "victory_points": 0,
352
- "total_cards": 0,
353
- "cards_list": [],
354
- "dev_cards_list": [],
355
- "settlements": 0,
356
- "cities": 0,
357
- "roads": 0,
358
- "longest_road": 0,
359
- "has_longest_road": false,
360
- "knights": 0,
361
- "knights_played": 0,
362
- "has_largest_army": false
363
- }
364
- ],
365
- "current_player": 0,
366
- "current_phase": "SETUP_FIRST_ROUND",
367
- "robber_position": [
368
- 2,
369
- 2
370
- ],
371
- "dice_result": null,
372
- "points": [
373
- {
374
- "point_id": 1,
375
- "game_coords": [
376
- 0,
377
- 0
378
- ],
379
- "adjacent_points": [
380
- 2,
381
- 9
382
- ],
383
- "adjacent_hexes": [
384
- 1
385
- ],
386
- "pixel_coords": [
387
- 377.5,
388
- 105.14428414850131
389
- ]
390
- },
391
- {
392
- "point_id": 2,
393
- "game_coords": [
394
- 0,
395
- 1
396
- ],
397
- "adjacent_points": [
398
- 1,
399
- 3
400
- ],
401
- "adjacent_hexes": [
402
- 1
403
- ],
404
- "pixel_coords": [
405
- 422.5,
406
- 105.14428414850128
407
- ]
408
- },
409
- {
410
- "point_id": 3,
411
- "game_coords": [
412
- 0,
413
- 2
414
- ],
415
- "adjacent_points": [
416
- 2,
417
- 4,
418
- 11
419
- ],
420
- "adjacent_hexes": [
421
- 2,
422
- 1
423
- ],
424
- "pixel_coords": [
425
- 445,
426
- 144.11542731880104
427
- ]
428
- },
429
- {
430
- "point_id": 4,
431
- "game_coords": [
432
- 0,
433
- 3
434
- ],
435
- "adjacent_points": [
436
- 3,
437
- 5
438
- ],
439
- "adjacent_hexes": [
440
- 2
441
- ],
442
- "pixel_coords": [
443
- 490,
444
- 144.11542731880104
445
- ]
446
- },
447
- {
448
- "point_id": 5,
449
- "game_coords": [
450
- 0,
451
- 4
452
- ],
453
- "adjacent_points": [
454
- 4,
455
- 6,
456
- 13
457
- ],
458
- "adjacent_hexes": [
459
- 3,
460
- 2
461
- ],
462
- "pixel_coords": [
463
- 512.5,
464
- 183.08657048910078
465
- ]
466
- },
467
- {
468
- "point_id": 6,
469
- "game_coords": [
470
- 0,
471
- 5
472
- ],
473
- "adjacent_points": [
474
- 5,
475
- 7
476
- ],
477
- "adjacent_hexes": [
478
- 3
479
- ],
480
- "pixel_coords": [
481
- 557.5,
482
- 183.08657048910078
483
- ]
484
- },
485
- {
486
- "point_id": 7,
487
- "game_coords": [
488
- 0,
489
- 6
490
- ],
491
- "adjacent_points": [
492
- 6,
493
- 15
494
- ],
495
- "adjacent_hexes": [
496
- 3
497
- ],
498
- "pixel_coords": [
499
- 580,
500
- 222.05771365940052
501
- ]
502
- },
503
- {
504
- "point_id": 8,
505
- "game_coords": [
506
- 1,
507
- 0
508
- ],
509
- "adjacent_points": [
510
- 9,
511
- 18
512
- ],
513
- "adjacent_hexes": [
514
- 4
515
- ],
516
- "pixel_coords": [
517
- 310,
518
- 144.11542731880104
519
- ]
520
- },
521
- {
522
- "point_id": 9,
523
- "game_coords": [
524
- 1,
525
- 1
526
- ],
527
- "adjacent_points": [
528
- 8,
529
- 10,
530
- 1
531
- ],
532
- "adjacent_hexes": [
533
- 4,
534
- 1
535
- ],
536
- "pixel_coords": [
537
- 355,
538
- 144.11542731880104
539
- ]
540
- },
541
- {
542
- "point_id": 10,
543
- "game_coords": [
544
- 1,
545
- 2
546
- ],
547
- "adjacent_points": [
548
- 9,
549
- 11,
550
- 20
551
- ],
552
- "adjacent_hexes": [
553
- 5,
554
- 4,
555
- 1
556
- ],
557
- "pixel_coords": [
558
- 377.5,
559
- 183.08657048910078
560
- ]
561
- },
562
- {
563
- "point_id": 11,
564
- "game_coords": [
565
- 1,
566
- 3
567
- ],
568
- "adjacent_points": [
569
- 10,
570
- 12,
571
- 3
572
- ],
573
- "adjacent_hexes": [
574
- 5,
575
- 2,
576
- 1
577
- ],
578
- "pixel_coords": [
579
- 422.5,
580
- 183.08657048910078
581
- ]
582
- },
583
- {
584
- "point_id": 12,
585
- "game_coords": [
586
- 1,
587
- 4
588
- ],
589
- "adjacent_points": [
590
- 11,
591
- 13,
592
- 22
593
- ],
594
- "adjacent_hexes": [
595
- 6,
596
- 5,
597
- 2
598
- ],
599
- "pixel_coords": [
600
- 445,
601
- 222.05771365940052
602
- ]
603
- },
604
- {
605
- "point_id": 13,
606
- "game_coords": [
607
- 1,
608
- 5
609
- ],
610
- "adjacent_points": [
611
- 12,
612
- 14,
613
- 5
614
- ],
615
- "adjacent_hexes": [
616
- 6,
617
- 3,
618
- 2
619
- ],
620
- "pixel_coords": [
621
- 490,
622
- 222.05771365940052
623
- ]
624
- },
625
- {
626
- "point_id": 14,
627
- "game_coords": [
628
- 1,
629
- 6
630
- ],
631
- "adjacent_points": [
632
- 13,
633
- 15,
634
- 24
635
- ],
636
- "adjacent_hexes": [
637
- 7,
638
- 6,
639
- 3
640
- ],
641
- "pixel_coords": [
642
- 512.5,
643
- 261.02885682970026
644
- ]
645
- },
646
- {
647
- "point_id": 15,
648
- "game_coords": [
649
- 1,
650
- 7
651
- ],
652
- "adjacent_points": [
653
- 14,
654
- 16,
655
- 7
656
- ],
657
- "adjacent_hexes": [
658
- 7,
659
- 3
660
- ],
661
- "pixel_coords": [
662
- 557.5,
663
- 261.02885682970026
664
- ]
665
- },
666
- {
667
- "point_id": 16,
668
- "game_coords": [
669
- 1,
670
- 8
671
- ],
672
- "adjacent_points": [
673
- 15,
674
- 26
675
- ],
676
- "adjacent_hexes": [
677
- 7
678
- ],
679
- "pixel_coords": [
680
- 580,
681
- 300
682
- ]
683
- },
684
- {
685
- "point_id": 17,
686
- "game_coords": [
687
- 2,
688
- 0
689
- ],
690
- "adjacent_points": [
691
- 18,
692
- 28
693
- ],
694
- "adjacent_hexes": [
695
- 8
696
- ],
697
- "pixel_coords": [
698
- 242.49999999999997,
699
- 183.08657048910078
700
- ]
701
- },
702
- {
703
- "point_id": 18,
704
- "game_coords": [
705
- 2,
706
- 1
707
- ],
708
- "adjacent_points": [
709
- 17,
710
- 19,
711
- 8
712
- ],
713
- "adjacent_hexes": [
714
- 8,
715
- 4
716
- ],
717
- "pixel_coords": [
718
- 287.5,
719
- 183.08657048910078
720
- ]
721
- },
722
- {
723
- "point_id": 19,
724
- "game_coords": [
725
- 2,
726
- 2
727
- ],
728
- "adjacent_points": [
729
- 18,
730
- 20,
731
- 30
732
- ],
733
- "adjacent_hexes": [
734
- 9,
735
- 8,
736
- 4
737
- ],
738
- "pixel_coords": [
739
- 310,
740
- 222.05771365940052
741
- ]
742
- },
743
- {
744
- "point_id": 20,
745
- "game_coords": [
746
- 2,
747
- 3
748
- ],
749
- "adjacent_points": [
750
- 19,
751
- 21,
752
- 10
753
- ],
754
- "adjacent_hexes": [
755
- 9,
756
- 5,
757
- 4
758
- ],
759
- "pixel_coords": [
760
- 355,
761
- 222.05771365940052
762
- ]
763
- },
764
- {
765
- "point_id": 21,
766
- "game_coords": [
767
- 2,
768
- 4
769
- ],
770
- "adjacent_points": [
771
- 20,
772
- 22,
773
- 32
774
- ],
775
- "adjacent_hexes": [
776
- 10,
777
- 9,
778
- 5
779
- ],
780
- "pixel_coords": [
781
- 377.5,
782
- 261.02885682970026
783
- ]
784
- },
785
- {
786
- "point_id": 22,
787
- "game_coords": [
788
- 2,
789
- 5
790
- ],
791
- "adjacent_points": [
792
- 21,
793
- 23,
794
- 12
795
- ],
796
- "adjacent_hexes": [
797
- 10,
798
- 6,
799
- 5
800
- ],
801
- "pixel_coords": [
802
- 422.5,
803
- 261.02885682970026
804
- ]
805
- },
806
- {
807
- "point_id": 23,
808
- "game_coords": [
809
- 2,
810
- 6
811
- ],
812
- "adjacent_points": [
813
- 22,
814
- 24,
815
- 34
816
- ],
817
- "adjacent_hexes": [
818
- 11,
819
- 10,
820
- 6
821
- ],
822
- "pixel_coords": [
823
- 445,
824
- 300
825
- ]
826
- },
827
- {
828
- "point_id": 24,
829
- "game_coords": [
830
- 2,
831
- 7
832
- ],
833
- "adjacent_points": [
834
- 23,
835
- 25,
836
- 14
837
- ],
838
- "adjacent_hexes": [
839
- 11,
840
- 7,
841
- 6
842
- ],
843
- "pixel_coords": [
844
- 490,
845
- 300
846
- ]
847
- },
848
- {
849
- "point_id": 25,
850
- "game_coords": [
851
- 2,
852
- 8
853
- ],
854
- "adjacent_points": [
855
- 24,
856
- 26,
857
- 36
858
- ],
859
- "adjacent_hexes": [
860
- 12,
861
- 11,
862
- 7
863
- ],
864
- "pixel_coords": [
865
- 512.5,
866
- 338.97114317029974
867
- ]
868
- },
869
- {
870
- "point_id": 26,
871
- "game_coords": [
872
- 2,
873
- 9
874
- ],
875
- "adjacent_points": [
876
- 25,
877
- 27,
878
- 16
879
- ],
880
- "adjacent_hexes": [
881
- 12,
882
- 7
883
- ],
884
- "pixel_coords": [
885
- 557.5,
886
- 338.97114317029974
887
- ]
888
- },
889
- {
890
- "point_id": 27,
891
- "game_coords": [
892
- 2,
893
- 10
894
- ],
895
- "adjacent_points": [
896
- 26,
897
- 38
898
- ],
899
- "adjacent_hexes": [
900
- 12
901
- ],
902
- "pixel_coords": [
903
- 580,
904
- 377.9422863405995
905
- ]
906
- },
907
- {
908
- "point_id": 28,
909
- "game_coords": [
910
- 3,
911
- 0
912
- ],
913
- "adjacent_points": [
914
- 29,
915
- 17
916
- ],
917
- "adjacent_hexes": [
918
- 8
919
- ],
920
- "pixel_coords": [
921
- 220,
922
- 222.05771365940052
923
- ]
924
- },
925
- {
926
- "point_id": 29,
927
- "game_coords": [
928
- 3,
929
- 1
930
- ],
931
- "adjacent_points": [
932
- 28,
933
- 30,
934
- 39
935
- ],
936
- "adjacent_hexes": [
937
- 13,
938
- 8
939
- ],
940
- "pixel_coords": [
941
- 242.5,
942
- 261.02885682970026
943
- ]
944
- },
945
- {
946
- "point_id": 30,
947
- "game_coords": [
948
- 3,
949
- 2
950
- ],
951
- "adjacent_points": [
952
- 29,
953
- 31,
954
- 19
955
- ],
956
- "adjacent_hexes": [
957
- 13,
958
- 9,
959
- 8
960
- ],
961
- "pixel_coords": [
962
- 287.5,
963
- 261.02885682970026
964
- ]
965
- },
966
- {
967
- "point_id": 31,
968
- "game_coords": [
969
- 3,
970
- 3
971
- ],
972
- "adjacent_points": [
973
- 30,
974
- 32,
975
- 41
976
- ],
977
- "adjacent_hexes": [
978
- 14,
979
- 13,
980
- 9
981
- ],
982
- "pixel_coords": [
983
- 310,
984
- 300
985
- ]
986
- },
987
- {
988
- "point_id": 32,
989
- "game_coords": [
990
- 3,
991
- 4
992
- ],
993
- "adjacent_points": [
994
- 31,
995
- 33,
996
- 21
997
- ],
998
- "adjacent_hexes": [
999
- 14,
1000
- 10,
1001
- 9
1002
- ],
1003
- "pixel_coords": [
1004
- 355,
1005
- 300
1006
- ]
1007
- },
1008
- {
1009
- "point_id": 33,
1010
- "game_coords": [
1011
- 3,
1012
- 5
1013
- ],
1014
- "adjacent_points": [
1015
- 32,
1016
- 34,
1017
- 43
1018
- ],
1019
- "adjacent_hexes": [
1020
- 15,
1021
- 14,
1022
- 10
1023
- ],
1024
- "pixel_coords": [
1025
- 377.5,
1026
- 338.97114317029974
1027
- ]
1028
- },
1029
- {
1030
- "point_id": 34,
1031
- "game_coords": [
1032
- 3,
1033
- 6
1034
- ],
1035
- "adjacent_points": [
1036
- 33,
1037
- 35,
1038
- 23
1039
- ],
1040
- "adjacent_hexes": [
1041
- 15,
1042
- 11,
1043
- 10
1044
- ],
1045
- "pixel_coords": [
1046
- 422.5,
1047
- 338.97114317029974
1048
- ]
1049
- },
1050
- {
1051
- "point_id": 35,
1052
- "game_coords": [
1053
- 3,
1054
- 7
1055
- ],
1056
- "adjacent_points": [
1057
- 34,
1058
- 36,
1059
- 45
1060
- ],
1061
- "adjacent_hexes": [
1062
- 16,
1063
- 15,
1064
- 11
1065
- ],
1066
- "pixel_coords": [
1067
- 445,
1068
- 377.9422863405995
1069
- ]
1070
- },
1071
- {
1072
- "point_id": 36,
1073
- "game_coords": [
1074
- 3,
1075
- 8
1076
- ],
1077
- "adjacent_points": [
1078
- 35,
1079
- 37,
1080
- 25
1081
- ],
1082
- "adjacent_hexes": [
1083
- 16,
1084
- 12,
1085
- 11
1086
- ],
1087
- "pixel_coords": [
1088
- 490,
1089
- 377.9422863405995
1090
- ]
1091
- },
1092
- {
1093
- "point_id": 37,
1094
- "game_coords": [
1095
- 3,
1096
- 9
1097
- ],
1098
- "adjacent_points": [
1099
- 36,
1100
- 38,
1101
- 47
1102
- ],
1103
- "adjacent_hexes": [
1104
- 16,
1105
- 12
1106
- ],
1107
- "pixel_coords": [
1108
- 512.5,
1109
- 416.9134295108992
1110
- ]
1111
- },
1112
- {
1113
- "point_id": 38,
1114
- "game_coords": [
1115
- 3,
1116
- 10
1117
- ],
1118
- "adjacent_points": [
1119
- 37,
1120
- 27
1121
- ],
1122
- "adjacent_hexes": [
1123
- 12
1124
- ],
1125
- "pixel_coords": [
1126
- 557.5,
1127
- 416.9134295108992
1128
- ]
1129
- },
1130
- {
1131
- "point_id": 39,
1132
- "game_coords": [
1133
- 4,
1134
- 0
1135
- ],
1136
- "adjacent_points": [
1137
- 40,
1138
- 29
1139
- ],
1140
- "adjacent_hexes": [
1141
- 13
1142
- ],
1143
- "pixel_coords": [
1144
- 220,
1145
- 300
1146
- ]
1147
- },
1148
- {
1149
- "point_id": 40,
1150
- "game_coords": [
1151
- 4,
1152
- 1
1153
- ],
1154
- "adjacent_points": [
1155
- 39,
1156
- 41,
1157
- 48
1158
- ],
1159
- "adjacent_hexes": [
1160
- 17,
1161
- 13
1162
- ],
1163
- "pixel_coords": [
1164
- 242.5,
1165
- 338.97114317029974
1166
- ]
1167
- },
1168
- {
1169
- "point_id": 41,
1170
- "game_coords": [
1171
- 4,
1172
- 2
1173
- ],
1174
- "adjacent_points": [
1175
- 40,
1176
- 42,
1177
- 31
1178
- ],
1179
- "adjacent_hexes": [
1180
- 17,
1181
- 14,
1182
- 13
1183
- ],
1184
- "pixel_coords": [
1185
- 287.5,
1186
- 338.97114317029974
1187
- ]
1188
- },
1189
- {
1190
- "point_id": 42,
1191
- "game_coords": [
1192
- 4,
1193
- 3
1194
- ],
1195
- "adjacent_points": [
1196
- 41,
1197
- 43,
1198
- 50
1199
- ],
1200
- "adjacent_hexes": [
1201
- 18,
1202
- 17,
1203
- 14
1204
- ],
1205
- "pixel_coords": [
1206
- 310,
1207
- 377.9422863405995
1208
- ]
1209
- },
1210
- {
1211
- "point_id": 43,
1212
- "game_coords": [
1213
- 4,
1214
- 4
1215
- ],
1216
- "adjacent_points": [
1217
- 42,
1218
- 44,
1219
- 33
1220
- ],
1221
- "adjacent_hexes": [
1222
- 18,
1223
- 15,
1224
- 14
1225
- ],
1226
- "pixel_coords": [
1227
- 355,
1228
- 377.9422863405995
1229
- ]
1230
- },
1231
- {
1232
- "point_id": 44,
1233
- "game_coords": [
1234
- 4,
1235
- 5
1236
- ],
1237
- "adjacent_points": [
1238
- 43,
1239
- 45,
1240
- 52
1241
- ],
1242
- "adjacent_hexes": [
1243
- 19,
1244
- 18,
1245
- 15
1246
- ],
1247
- "pixel_coords": [
1248
- 377.5,
1249
- 416.9134295108992
1250
- ]
1251
- },
1252
- {
1253
- "point_id": 45,
1254
- "game_coords": [
1255
- 4,
1256
- 6
1257
- ],
1258
- "adjacent_points": [
1259
- 44,
1260
- 46,
1261
- 35
1262
- ],
1263
- "adjacent_hexes": [
1264
- 19,
1265
- 16,
1266
- 15
1267
- ],
1268
- "pixel_coords": [
1269
- 422.5,
1270
- 416.9134295108992
1271
- ]
1272
- },
1273
- {
1274
- "point_id": 46,
1275
- "game_coords": [
1276
- 4,
1277
- 7
1278
- ],
1279
- "adjacent_points": [
1280
- 45,
1281
- 47,
1282
- 54
1283
- ],
1284
- "adjacent_hexes": [
1285
- 19,
1286
- 16
1287
- ],
1288
- "pixel_coords": [
1289
- 445,
1290
- 455.88457268119896
1291
- ]
1292
- },
1293
- {
1294
- "point_id": 47,
1295
- "game_coords": [
1296
- 4,
1297
- 8
1298
- ],
1299
- "adjacent_points": [
1300
- 46,
1301
- 37
1302
- ],
1303
- "adjacent_hexes": [
1304
- 16
1305
- ],
1306
- "pixel_coords": [
1307
- 490,
1308
- 455.88457268119896
1309
- ]
1310
- },
1311
- {
1312
- "point_id": 48,
1313
- "game_coords": [
1314
- 5,
1315
- 0
1316
- ],
1317
- "adjacent_points": [
1318
- 49,
1319
- 40
1320
- ],
1321
- "adjacent_hexes": [
1322
- 17
1323
- ],
1324
- "pixel_coords": [
1325
- 220,
1326
- 377.9422863405995
1327
- ]
1328
- },
1329
- {
1330
- "point_id": 49,
1331
- "game_coords": [
1332
- 5,
1333
- 1
1334
- ],
1335
- "adjacent_points": [
1336
- 48,
1337
- 50
1338
- ],
1339
- "adjacent_hexes": [
1340
- 17
1341
- ],
1342
- "pixel_coords": [
1343
- 242.5,
1344
- 416.9134295108992
1345
- ]
1346
- },
1347
- {
1348
- "point_id": 50,
1349
- "game_coords": [
1350
- 5,
1351
- 2
1352
- ],
1353
- "adjacent_points": [
1354
- 49,
1355
- 51,
1356
- 42
1357
- ],
1358
- "adjacent_hexes": [
1359
- 18,
1360
- 17
1361
- ],
1362
- "pixel_coords": [
1363
- 287.5,
1364
- 416.9134295108992
1365
- ]
1366
- },
1367
- {
1368
- "point_id": 51,
1369
- "game_coords": [
1370
- 5,
1371
- 3
1372
- ],
1373
- "adjacent_points": [
1374
- 50,
1375
- 52
1376
- ],
1377
- "adjacent_hexes": [
1378
- 18
1379
- ],
1380
- "pixel_coords": [
1381
- 310,
1382
- 455.88457268119896
1383
- ]
1384
- },
1385
- {
1386
- "point_id": 52,
1387
- "game_coords": [
1388
- 5,
1389
- 4
1390
- ],
1391
- "adjacent_points": [
1392
- 51,
1393
- 53,
1394
- 44
1395
- ],
1396
- "adjacent_hexes": [
1397
- 19,
1398
- 18
1399
- ],
1400
- "pixel_coords": [
1401
- 355,
1402
- 455.88457268119896
1403
- ]
1404
- },
1405
- {
1406
- "point_id": 53,
1407
- "game_coords": [
1408
- 5,
1409
- 5
1410
- ],
1411
- "adjacent_points": [
1412
- 52,
1413
- 54
1414
- ],
1415
- "adjacent_hexes": [
1416
- 19
1417
- ],
1418
- "pixel_coords": [
1419
- 377.5,
1420
- 494.8557158514987
1421
- ]
1422
- },
1423
- {
1424
- "point_id": 54,
1425
- "game_coords": [
1426
- 5,
1427
- 6
1428
- ],
1429
- "adjacent_points": [
1430
- 53,
1431
- 46
1432
- ],
1433
- "adjacent_hexes": [
1434
- 19
1435
- ],
1436
- "pixel_coords": [
1437
- 422.5,
1438
- 494.8557158514987
1439
- ]
1440
- }
1441
- ],
1442
- "board_graph": {
1443
- "adjacency": {
1444
- "1": [
1445
- 2,
1446
- 9
1447
- ],
1448
- "2": [
1449
- 1,
1450
- 3
1451
- ],
1452
- "3": [
1453
- 2,
1454
- 4,
1455
- 11
1456
- ],
1457
- "4": [
1458
- 3,
1459
- 5
1460
- ],
1461
- "5": [
1462
- 4,
1463
- 6,
1464
- 13
1465
- ],
1466
- "6": [
1467
- 5,
1468
- 7
1469
- ],
1470
- "7": [
1471
- 6,
1472
- 15
1473
- ],
1474
- "8": [
1475
- 9,
1476
- 18
1477
- ],
1478
- "9": [
1479
- 8,
1480
- 10,
1481
- 1
1482
- ],
1483
- "10": [
1484
- 9,
1485
- 11,
1486
- 20
1487
- ],
1488
- "11": [
1489
- 10,
1490
- 12,
1491
- 3
1492
- ],
1493
- "12": [
1494
- 11,
1495
- 13,
1496
- 22
1497
- ],
1498
- "13": [
1499
- 12,
1500
- 14,
1501
- 5
1502
- ],
1503
- "14": [
1504
- 13,
1505
- 15,
1506
- 24
1507
- ],
1508
- "15": [
1509
- 14,
1510
- 16,
1511
- 7
1512
- ],
1513
- "16": [
1514
- 15,
1515
- 26
1516
- ],
1517
- "17": [
1518
- 18,
1519
- 28
1520
- ],
1521
- "18": [
1522
- 17,
1523
- 19,
1524
- 8
1525
- ],
1526
- "19": [
1527
- 18,
1528
- 20,
1529
- 30
1530
- ],
1531
- "20": [
1532
- 19,
1533
- 21,
1534
- 10
1535
- ],
1536
- "21": [
1537
- 20,
1538
- 22,
1539
- 32
1540
- ],
1541
- "22": [
1542
- 21,
1543
- 23,
1544
- 12
1545
- ],
1546
- "23": [
1547
- 22,
1548
- 24,
1549
- 34
1550
- ],
1551
- "24": [
1552
- 23,
1553
- 25,
1554
- 14
1555
- ],
1556
- "25": [
1557
- 24,
1558
- 26,
1559
- 36
1560
- ],
1561
- "26": [
1562
- 25,
1563
- 27,
1564
- 16
1565
- ],
1566
- "27": [
1567
- 26,
1568
- 38
1569
- ],
1570
- "28": [
1571
- 29,
1572
- 17
1573
- ],
1574
- "29": [
1575
- 28,
1576
- 30,
1577
- 39
1578
- ],
1579
- "30": [
1580
- 29,
1581
- 31,
1582
- 19
1583
- ],
1584
- "31": [
1585
- 30,
1586
- 32,
1587
- 41
1588
- ],
1589
- "32": [
1590
- 31,
1591
- 33,
1592
- 21
1593
- ],
1594
- "33": [
1595
- 32,
1596
- 34,
1597
- 43
1598
- ],
1599
- "34": [
1600
- 33,
1601
- 35,
1602
- 23
1603
- ],
1604
- "35": [
1605
- 34,
1606
- 36,
1607
- 45
1608
- ],
1609
- "36": [
1610
- 35,
1611
- 37,
1612
- 25
1613
- ],
1614
- "37": [
1615
- 36,
1616
- 38,
1617
- 47
1618
- ],
1619
- "38": [
1620
- 37,
1621
- 27
1622
- ],
1623
- "39": [
1624
- 40,
1625
- 29
1626
- ],
1627
- "40": [
1628
- 39,
1629
- 41,
1630
- 48
1631
- ],
1632
- "41": [
1633
- 40,
1634
- 42,
1635
- 31
1636
- ],
1637
- "42": [
1638
- 41,
1639
- 43,
1640
- 50
1641
- ],
1642
- "43": [
1643
- 42,
1644
- 44,
1645
- 33
1646
- ],
1647
- "44": [
1648
- 43,
1649
- 45,
1650
- 52
1651
- ],
1652
- "45": [
1653
- 44,
1654
- 46,
1655
- 35
1656
- ],
1657
- "46": [
1658
- 45,
1659
- 47,
1660
- 54
1661
- ],
1662
- "47": [
1663
- 46,
1664
- 37
1665
- ],
1666
- "48": [
1667
- 49,
1668
- 40
1669
- ],
1670
- "49": [
1671
- 48,
1672
- 50
1673
- ],
1674
- "50": [
1675
- 49,
1676
- 51,
1677
- 42
1678
- ],
1679
- "51": [
1680
- 50,
1681
- 52
1682
- ],
1683
- "52": [
1684
- 51,
1685
- 53,
1686
- 44
1687
- ],
1688
- "53": [
1689
- 52,
1690
- 54
1691
- ],
1692
- "54": [
1693
- 53,
1694
- 46
1695
- ]
1696
- },
1697
- "hex_to_points": {
1698
- "1": [
1699
- 1,
1700
- 2,
1701
- 3,
1702
- 9,
1703
- 10,
1704
- 11
1705
- ],
1706
- "2": [
1707
- 3,
1708
- 4,
1709
- 5,
1710
- 11,
1711
- 12,
1712
- 13
1713
- ],
1714
- "3": [
1715
- 5,
1716
- 6,
1717
- 7,
1718
- 13,
1719
- 14,
1720
- 15
1721
- ],
1722
- "4": [
1723
- 8,
1724
- 9,
1725
- 10,
1726
- 18,
1727
- 19,
1728
- 20
1729
- ],
1730
- "5": [
1731
- 10,
1732
- 11,
1733
- 12,
1734
- 20,
1735
- 21,
1736
- 22
1737
- ],
1738
- "6": [
1739
- 12,
1740
- 13,
1741
- 14,
1742
- 22,
1743
- 23,
1744
- 24
1745
- ],
1746
- "7": [
1747
- 14,
1748
- 15,
1749
- 16,
1750
- 24,
1751
- 25,
1752
- 26
1753
- ],
1754
- "8": [
1755
- 17,
1756
- 18,
1757
- 19,
1758
- 28,
1759
- 29,
1760
- 30
1761
- ],
1762
- "9": [
1763
- 19,
1764
- 20,
1765
- 21,
1766
- 30,
1767
- 31,
1768
- 32
1769
- ],
1770
- "10": [
1771
- 21,
1772
- 22,
1773
- 23,
1774
- 32,
1775
- 33,
1776
- 34
1777
- ],
1778
- "11": [
1779
- 23,
1780
- 24,
1781
- 25,
1782
- 34,
1783
- 35,
1784
- 36
1785
- ],
1786
- "12": [
1787
- 25,
1788
- 26,
1789
- 27,
1790
- 36,
1791
- 37,
1792
- 38
1793
- ],
1794
- "13": [
1795
- 29,
1796
- 30,
1797
- 31,
1798
- 39,
1799
- 40,
1800
- 41
1801
- ],
1802
- "14": [
1803
- 31,
1804
- 32,
1805
- 33,
1806
- 41,
1807
- 42,
1808
- 43
1809
- ],
1810
- "15": [
1811
- 33,
1812
- 34,
1813
- 35,
1814
- 43,
1815
- 44,
1816
- 45
1817
- ],
1818
- "16": [
1819
- 35,
1820
- 36,
1821
- 37,
1822
- 45,
1823
- 46,
1824
- 47
1825
- ],
1826
- "17": [
1827
- 40,
1828
- 41,
1829
- 42,
1830
- 48,
1831
- 49,
1832
- 50
1833
- ],
1834
- "18": [
1835
- 42,
1836
- 43,
1837
- 44,
1838
- 50,
1839
- 51,
1840
- 52
1841
- ],
1842
- "19": [
1843
- 44,
1844
- 45,
1845
- 46,
1846
- 52,
1847
- 53,
1848
- 54
1849
- ]
1850
- },
1851
- "total_points": 54,
1852
- "total_hexes": 19
1853
- }
1854
- }
1855
- ]
1856
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
examples/ai_testing/my_games/{game_20251223_205200_final.json → game_20251226_143530_final.json} RENAMED
@@ -2,307 +2,117 @@
2
  "hexes": [
3
  {
4
  "id": 1,
5
- "q": 0,
6
- "r": -2,
7
  "type": "wood",
8
  "number": 12,
9
- "has_robber": false,
10
- "position": [
11
- 0,
12
- 0
13
- ],
14
- "axial_coords": [
15
- 0,
16
- -2
17
- ]
18
  },
19
  {
20
  "id": 2,
21
- "q": 1,
22
- "r": -2,
23
  "type": "sheep",
24
  "number": 5,
25
- "has_robber": false,
26
- "position": [
27
- 0,
28
- 1
29
- ],
30
- "axial_coords": [
31
- 1,
32
- -2
33
- ]
34
  },
35
  {
36
  "id": 3,
37
- "q": 2,
38
- "r": -2,
39
  "type": "wood",
40
  "number": 4,
41
- "has_robber": false,
42
- "position": [
43
- 0,
44
- 2
45
- ],
46
- "axial_coords": [
47
- 2,
48
- -2
49
- ]
50
  },
51
  {
52
  "id": 4,
53
- "q": -1,
54
- "r": -1,
55
  "type": "sheep",
56
  "number": 8,
57
- "has_robber": false,
58
- "position": [
59
- 1,
60
- 0
61
- ],
62
- "axial_coords": [
63
- -1,
64
- -1
65
- ]
66
  },
67
  {
68
  "id": 5,
69
- "q": 0,
70
- "r": -1,
71
  "type": "brick",
72
  "number": 6,
73
- "has_robber": false,
74
- "position": [
75
- 1,
76
- 1
77
- ],
78
- "axial_coords": [
79
- 0,
80
- -1
81
- ]
82
  },
83
  {
84
  "id": 6,
85
- "q": 1,
86
- "r": -1,
87
  "type": "wood",
88
  "number": 3,
89
- "has_robber": false,
90
- "position": [
91
- 1,
92
- 2
93
- ],
94
- "axial_coords": [
95
- 1,
96
- -1
97
- ]
98
  },
99
  {
100
  "id": 7,
101
- "q": 2,
102
- "r": -1,
103
  "type": "wheat",
104
  "number": 8,
105
- "has_robber": false,
106
- "position": [
107
- 1,
108
- 3
109
- ],
110
- "axial_coords": [
111
- 2,
112
- -1
113
- ]
114
  },
115
  {
116
  "id": 8,
117
- "q": -2,
118
- "r": 0,
119
  "type": "brick",
120
  "number": 10,
121
- "has_robber": false,
122
- "position": [
123
- 2,
124
- 0
125
- ],
126
- "axial_coords": [
127
- -2,
128
- 0
129
- ]
130
  },
131
  {
132
  "id": 9,
133
- "q": -1,
134
- "r": 0,
135
  "type": "wood",
136
  "number": 11,
137
- "has_robber": false,
138
- "position": [
139
- 2,
140
- 1
141
- ],
142
- "axial_coords": [
143
- -1,
144
- 0
145
- ]
146
  },
147
  {
148
  "id": 10,
149
- "q": 0,
150
- "r": 0,
151
  "type": "desert",
152
  "number": null,
153
- "has_robber": true,
154
- "position": [
155
- 2,
156
- 2
157
- ],
158
- "axial_coords": [
159
- 0,
160
- 0
161
- ]
162
  },
163
  {
164
  "id": 11,
165
- "q": 1,
166
- "r": 0,
167
  "type": "ore",
168
  "number": 3,
169
- "has_robber": false,
170
- "position": [
171
- 2,
172
- 3
173
- ],
174
- "axial_coords": [
175
- 1,
176
- 0
177
- ]
178
  },
179
  {
180
  "id": 12,
181
- "q": 2,
182
- "r": 0,
183
  "type": "sheep",
184
  "number": 4,
185
- "has_robber": false,
186
- "position": [
187
- 2,
188
- 4
189
- ],
190
- "axial_coords": [
191
- 2,
192
- 0
193
- ]
194
  },
195
  {
196
  "id": 13,
197
- "q": -2,
198
- "r": 1,
199
  "type": "brick",
200
  "number": 10,
201
- "has_robber": false,
202
- "position": [
203
- 3,
204
- 0
205
- ],
206
- "axial_coords": [
207
- -2,
208
- 1
209
- ]
210
  },
211
  {
212
  "id": 14,
213
- "q": -1,
214
- "r": 1,
215
  "type": "wheat",
216
  "number": 9,
217
- "has_robber": false,
218
- "position": [
219
- 3,
220
- 1
221
- ],
222
- "axial_coords": [
223
- -1,
224
- 1
225
- ]
226
  },
227
  {
228
  "id": 15,
229
- "q": 0,
230
- "r": 1,
231
  "type": "wheat",
232
  "number": 6,
233
- "has_robber": false,
234
- "position": [
235
- 3,
236
- 2
237
- ],
238
- "axial_coords": [
239
- 0,
240
- 1
241
- ]
242
  },
243
  {
244
  "id": 16,
245
- "q": 1,
246
- "r": 1,
247
  "type": "sheep",
248
  "number": 11,
249
- "has_robber": false,
250
- "position": [
251
- 3,
252
- 3
253
- ],
254
- "axial_coords": [
255
- 1,
256
- 1
257
- ]
258
  },
259
  {
260
  "id": 17,
261
- "q": -2,
262
- "r": 2,
263
  "type": "ore",
264
  "number": 5,
265
- "has_robber": false,
266
- "position": [
267
- 4,
268
- 0
269
- ],
270
- "axial_coords": [
271
- -2,
272
- 2
273
- ]
274
  },
275
  {
276
  "id": 18,
277
- "q": -1,
278
- "r": 2,
279
  "type": "wheat",
280
  "number": 9,
281
- "has_robber": false,
282
- "position": [
283
- 4,
284
- 1
285
- ],
286
- "axial_coords": [
287
- -1,
288
- 2
289
- ]
290
  },
291
  {
292
  "id": 19,
293
- "q": 0,
294
- "r": 2,
295
  "type": "ore",
296
  "number": 2,
297
- "has_robber": false,
298
- "position": [
299
- 4,
300
- 2
301
- ],
302
- "axial_coords": [
303
- 0,
304
- 2
305
- ]
306
  }
307
  ],
308
  "settlements": [],
@@ -311,7 +121,7 @@
311
  "players": [
312
  {
313
  "id": 0,
314
- "name": "A",
315
  "victory_points": 0,
316
  "total_cards": 0,
317
  "cards_list": [],
@@ -327,7 +137,7 @@
327
  },
328
  {
329
  "id": 1,
330
- "name": "B",
331
  "victory_points": 0,
332
  "total_cards": 0,
333
  "cards_list": [],
@@ -343,7 +153,7 @@
343
  },
344
  {
345
  "id": 2,
346
- "name": "C",
347
  "victory_points": 0,
348
  "total_cards": 0,
349
  "cards_list": [],
@@ -368,46 +178,26 @@
368
  "points": [
369
  {
370
  "point_id": 1,
371
- "game_coords": [
372
- 0,
373
- 0
374
- ],
375
  "adjacent_points": [
376
  2,
377
  9
378
  ],
379
  "adjacent_hexes": [
380
  1
381
- ],
382
- "pixel_coords": [
383
- 377.5,
384
- 105.14428414850131
385
  ]
386
  },
387
  {
388
  "point_id": 2,
389
- "game_coords": [
390
- 0,
391
- 1
392
- ],
393
  "adjacent_points": [
394
  1,
395
  3
396
  ],
397
  "adjacent_hexes": [
398
  1
399
- ],
400
- "pixel_coords": [
401
- 422.5,
402
- 105.14428414850128
403
  ]
404
  },
405
  {
406
  "point_id": 3,
407
- "game_coords": [
408
- 0,
409
- 2
410
- ],
411
  "adjacent_points": [
412
  2,
413
  4,
@@ -416,36 +206,20 @@
416
  "adjacent_hexes": [
417
  2,
418
  1
419
- ],
420
- "pixel_coords": [
421
- 445,
422
- 144.11542731880104
423
  ]
424
  },
425
  {
426
  "point_id": 4,
427
- "game_coords": [
428
- 0,
429
- 3
430
- ],
431
  "adjacent_points": [
432
  3,
433
  5
434
  ],
435
  "adjacent_hexes": [
436
  2
437
- ],
438
- "pixel_coords": [
439
- 490,
440
- 144.11542731880104
441
  ]
442
  },
443
  {
444
  "point_id": 5,
445
- "game_coords": [
446
- 0,
447
- 4
448
- ],
449
  "adjacent_points": [
450
  4,
451
  6,
@@ -454,72 +228,40 @@
454
  "adjacent_hexes": [
455
  3,
456
  2
457
- ],
458
- "pixel_coords": [
459
- 512.5,
460
- 183.08657048910078
461
  ]
462
  },
463
  {
464
  "point_id": 6,
465
- "game_coords": [
466
- 0,
467
- 5
468
- ],
469
  "adjacent_points": [
470
  5,
471
  7
472
  ],
473
  "adjacent_hexes": [
474
  3
475
- ],
476
- "pixel_coords": [
477
- 557.5,
478
- 183.08657048910078
479
  ]
480
  },
481
  {
482
  "point_id": 7,
483
- "game_coords": [
484
- 0,
485
- 6
486
- ],
487
  "adjacent_points": [
488
  6,
489
  15
490
  ],
491
  "adjacent_hexes": [
492
  3
493
- ],
494
- "pixel_coords": [
495
- 580,
496
- 222.05771365940052
497
  ]
498
  },
499
  {
500
  "point_id": 8,
501
- "game_coords": [
502
- 1,
503
- 0
504
- ],
505
  "adjacent_points": [
506
  9,
507
  18
508
  ],
509
  "adjacent_hexes": [
510
  4
511
- ],
512
- "pixel_coords": [
513
- 310,
514
- 144.11542731880104
515
  ]
516
  },
517
  {
518
  "point_id": 9,
519
- "game_coords": [
520
- 1,
521
- 1
522
- ],
523
  "adjacent_points": [
524
  8,
525
  10,
@@ -528,18 +270,10 @@
528
  "adjacent_hexes": [
529
  4,
530
  1
531
- ],
532
- "pixel_coords": [
533
- 355,
534
- 144.11542731880104
535
  ]
536
  },
537
  {
538
  "point_id": 10,
539
- "game_coords": [
540
- 1,
541
- 2
542
- ],
543
  "adjacent_points": [
544
  9,
545
  11,
@@ -549,18 +283,10 @@
549
  5,
550
  4,
551
  1
552
- ],
553
- "pixel_coords": [
554
- 377.5,
555
- 183.08657048910078
556
  ]
557
  },
558
  {
559
  "point_id": 11,
560
- "game_coords": [
561
- 1,
562
- 3
563
- ],
564
  "adjacent_points": [
565
  10,
566
  12,
@@ -570,18 +296,10 @@
570
  5,
571
  2,
572
  1
573
- ],
574
- "pixel_coords": [
575
- 422.5,
576
- 183.08657048910078
577
  ]
578
  },
579
  {
580
  "point_id": 12,
581
- "game_coords": [
582
- 1,
583
- 4
584
- ],
585
  "adjacent_points": [
586
  11,
587
  13,
@@ -591,18 +309,10 @@
591
  6,
592
  5,
593
  2
594
- ],
595
- "pixel_coords": [
596
- 445,
597
- 222.05771365940052
598
  ]
599
  },
600
  {
601
  "point_id": 13,
602
- "game_coords": [
603
- 1,
604
- 5
605
- ],
606
  "adjacent_points": [
607
  12,
608
  14,
@@ -612,18 +322,10 @@
612
  6,
613
  3,
614
  2
615
- ],
616
- "pixel_coords": [
617
- 490,
618
- 222.05771365940052
619
  ]
620
  },
621
  {
622
  "point_id": 14,
623
- "game_coords": [
624
- 1,
625
- 6
626
- ],
627
  "adjacent_points": [
628
  13,
629
  15,
@@ -633,18 +335,10 @@
633
  7,
634
  6,
635
  3
636
- ],
637
- "pixel_coords": [
638
- 512.5,
639
- 261.02885682970026
640
  ]
641
  },
642
  {
643
  "point_id": 15,
644
- "game_coords": [
645
- 1,
646
- 7
647
- ],
648
  "adjacent_points": [
649
  14,
650
  16,
@@ -653,54 +347,30 @@
653
  "adjacent_hexes": [
654
  7,
655
  3
656
- ],
657
- "pixel_coords": [
658
- 557.5,
659
- 261.02885682970026
660
  ]
661
  },
662
  {
663
  "point_id": 16,
664
- "game_coords": [
665
- 1,
666
- 8
667
- ],
668
  "adjacent_points": [
669
  15,
670
  26
671
  ],
672
  "adjacent_hexes": [
673
  7
674
- ],
675
- "pixel_coords": [
676
- 580,
677
- 300
678
  ]
679
  },
680
  {
681
  "point_id": 17,
682
- "game_coords": [
683
- 2,
684
- 0
685
- ],
686
  "adjacent_points": [
687
  18,
688
  28
689
  ],
690
  "adjacent_hexes": [
691
  8
692
- ],
693
- "pixel_coords": [
694
- 242.49999999999997,
695
- 183.08657048910078
696
  ]
697
  },
698
  {
699
  "point_id": 18,
700
- "game_coords": [
701
- 2,
702
- 1
703
- ],
704
  "adjacent_points": [
705
  17,
706
  19,
@@ -709,18 +379,10 @@
709
  "adjacent_hexes": [
710
  8,
711
  4
712
- ],
713
- "pixel_coords": [
714
- 287.5,
715
- 183.08657048910078
716
  ]
717
  },
718
  {
719
  "point_id": 19,
720
- "game_coords": [
721
- 2,
722
- 2
723
- ],
724
  "adjacent_points": [
725
  18,
726
  20,
@@ -730,18 +392,10 @@
730
  9,
731
  8,
732
  4
733
- ],
734
- "pixel_coords": [
735
- 310,
736
- 222.05771365940052
737
  ]
738
  },
739
  {
740
  "point_id": 20,
741
- "game_coords": [
742
- 2,
743
- 3
744
- ],
745
  "adjacent_points": [
746
  19,
747
  21,
@@ -751,18 +405,10 @@
751
  9,
752
  5,
753
  4
754
- ],
755
- "pixel_coords": [
756
- 355,
757
- 222.05771365940052
758
  ]
759
  },
760
  {
761
  "point_id": 21,
762
- "game_coords": [
763
- 2,
764
- 4
765
- ],
766
  "adjacent_points": [
767
  20,
768
  22,
@@ -772,18 +418,10 @@
772
  10,
773
  9,
774
  5
775
- ],
776
- "pixel_coords": [
777
- 377.5,
778
- 261.02885682970026
779
  ]
780
  },
781
  {
782
  "point_id": 22,
783
- "game_coords": [
784
- 2,
785
- 5
786
- ],
787
  "adjacent_points": [
788
  21,
789
  23,
@@ -793,18 +431,10 @@
793
  10,
794
  6,
795
  5
796
- ],
797
- "pixel_coords": [
798
- 422.5,
799
- 261.02885682970026
800
  ]
801
  },
802
  {
803
  "point_id": 23,
804
- "game_coords": [
805
- 2,
806
- 6
807
- ],
808
  "adjacent_points": [
809
  22,
810
  24,
@@ -814,18 +444,10 @@
814
  11,
815
  10,
816
  6
817
- ],
818
- "pixel_coords": [
819
- 445,
820
- 300
821
  ]
822
  },
823
  {
824
  "point_id": 24,
825
- "game_coords": [
826
- 2,
827
- 7
828
- ],
829
  "adjacent_points": [
830
  23,
831
  25,
@@ -835,18 +457,10 @@
835
  11,
836
  7,
837
  6
838
- ],
839
- "pixel_coords": [
840
- 490,
841
- 300
842
  ]
843
  },
844
  {
845
  "point_id": 25,
846
- "game_coords": [
847
- 2,
848
- 8
849
- ],
850
  "adjacent_points": [
851
  24,
852
  26,
@@ -856,18 +470,10 @@
856
  12,
857
  11,
858
  7
859
- ],
860
- "pixel_coords": [
861
- 512.5,
862
- 338.97114317029974
863
  ]
864
  },
865
  {
866
  "point_id": 26,
867
- "game_coords": [
868
- 2,
869
- 9
870
- ],
871
  "adjacent_points": [
872
  25,
873
  27,
@@ -876,54 +482,30 @@
876
  "adjacent_hexes": [
877
  12,
878
  7
879
- ],
880
- "pixel_coords": [
881
- 557.5,
882
- 338.97114317029974
883
  ]
884
  },
885
  {
886
  "point_id": 27,
887
- "game_coords": [
888
- 2,
889
- 10
890
- ],
891
  "adjacent_points": [
892
  26,
893
  38
894
  ],
895
  "adjacent_hexes": [
896
  12
897
- ],
898
- "pixel_coords": [
899
- 580,
900
- 377.9422863405995
901
  ]
902
  },
903
  {
904
  "point_id": 28,
905
- "game_coords": [
906
- 3,
907
- 0
908
- ],
909
  "adjacent_points": [
910
  29,
911
  17
912
  ],
913
  "adjacent_hexes": [
914
  8
915
- ],
916
- "pixel_coords": [
917
- 220,
918
- 222.05771365940052
919
  ]
920
  },
921
  {
922
  "point_id": 29,
923
- "game_coords": [
924
- 3,
925
- 1
926
- ],
927
  "adjacent_points": [
928
  28,
929
  30,
@@ -932,18 +514,10 @@
932
  "adjacent_hexes": [
933
  13,
934
  8
935
- ],
936
- "pixel_coords": [
937
- 242.5,
938
- 261.02885682970026
939
  ]
940
  },
941
  {
942
  "point_id": 30,
943
- "game_coords": [
944
- 3,
945
- 2
946
- ],
947
  "adjacent_points": [
948
  29,
949
  31,
@@ -953,18 +527,10 @@
953
  13,
954
  9,
955
  8
956
- ],
957
- "pixel_coords": [
958
- 287.5,
959
- 261.02885682970026
960
  ]
961
  },
962
  {
963
  "point_id": 31,
964
- "game_coords": [
965
- 3,
966
- 3
967
- ],
968
  "adjacent_points": [
969
  30,
970
  32,
@@ -974,18 +540,10 @@
974
  14,
975
  13,
976
  9
977
- ],
978
- "pixel_coords": [
979
- 310,
980
- 300
981
  ]
982
  },
983
  {
984
  "point_id": 32,
985
- "game_coords": [
986
- 3,
987
- 4
988
- ],
989
  "adjacent_points": [
990
  31,
991
  33,
@@ -995,18 +553,10 @@
995
  14,
996
  10,
997
  9
998
- ],
999
- "pixel_coords": [
1000
- 355,
1001
- 300
1002
  ]
1003
  },
1004
  {
1005
  "point_id": 33,
1006
- "game_coords": [
1007
- 3,
1008
- 5
1009
- ],
1010
  "adjacent_points": [
1011
  32,
1012
  34,
@@ -1016,18 +566,10 @@
1016
  15,
1017
  14,
1018
  10
1019
- ],
1020
- "pixel_coords": [
1021
- 377.5,
1022
- 338.97114317029974
1023
  ]
1024
  },
1025
  {
1026
  "point_id": 34,
1027
- "game_coords": [
1028
- 3,
1029
- 6
1030
- ],
1031
  "adjacent_points": [
1032
  33,
1033
  35,
@@ -1037,18 +579,10 @@
1037
  15,
1038
  11,
1039
  10
1040
- ],
1041
- "pixel_coords": [
1042
- 422.5,
1043
- 338.97114317029974
1044
  ]
1045
  },
1046
  {
1047
  "point_id": 35,
1048
- "game_coords": [
1049
- 3,
1050
- 7
1051
- ],
1052
  "adjacent_points": [
1053
  34,
1054
  36,
@@ -1058,18 +592,10 @@
1058
  16,
1059
  15,
1060
  11
1061
- ],
1062
- "pixel_coords": [
1063
- 445,
1064
- 377.9422863405995
1065
  ]
1066
  },
1067
  {
1068
  "point_id": 36,
1069
- "game_coords": [
1070
- 3,
1071
- 8
1072
- ],
1073
  "adjacent_points": [
1074
  35,
1075
  37,
@@ -1079,18 +605,10 @@
1079
  16,
1080
  12,
1081
  11
1082
- ],
1083
- "pixel_coords": [
1084
- 490,
1085
- 377.9422863405995
1086
  ]
1087
  },
1088
  {
1089
  "point_id": 37,
1090
- "game_coords": [
1091
- 3,
1092
- 9
1093
- ],
1094
  "adjacent_points": [
1095
  36,
1096
  38,
@@ -1099,54 +617,30 @@
1099
  "adjacent_hexes": [
1100
  16,
1101
  12
1102
- ],
1103
- "pixel_coords": [
1104
- 512.5,
1105
- 416.9134295108992
1106
  ]
1107
  },
1108
  {
1109
  "point_id": 38,
1110
- "game_coords": [
1111
- 3,
1112
- 10
1113
- ],
1114
  "adjacent_points": [
1115
  37,
1116
  27
1117
  ],
1118
  "adjacent_hexes": [
1119
  12
1120
- ],
1121
- "pixel_coords": [
1122
- 557.5,
1123
- 416.9134295108992
1124
  ]
1125
  },
1126
  {
1127
  "point_id": 39,
1128
- "game_coords": [
1129
- 4,
1130
- 0
1131
- ],
1132
  "adjacent_points": [
1133
  40,
1134
  29
1135
  ],
1136
  "adjacent_hexes": [
1137
  13
1138
- ],
1139
- "pixel_coords": [
1140
- 220,
1141
- 300
1142
  ]
1143
  },
1144
  {
1145
  "point_id": 40,
1146
- "game_coords": [
1147
- 4,
1148
- 1
1149
- ],
1150
  "adjacent_points": [
1151
  39,
1152
  41,
@@ -1155,18 +649,10 @@
1155
  "adjacent_hexes": [
1156
  17,
1157
  13
1158
- ],
1159
- "pixel_coords": [
1160
- 242.5,
1161
- 338.97114317029974
1162
  ]
1163
  },
1164
  {
1165
  "point_id": 41,
1166
- "game_coords": [
1167
- 4,
1168
- 2
1169
- ],
1170
  "adjacent_points": [
1171
  40,
1172
  42,
@@ -1176,18 +662,10 @@
1176
  17,
1177
  14,
1178
  13
1179
- ],
1180
- "pixel_coords": [
1181
- 287.5,
1182
- 338.97114317029974
1183
  ]
1184
  },
1185
  {
1186
  "point_id": 42,
1187
- "game_coords": [
1188
- 4,
1189
- 3
1190
- ],
1191
  "adjacent_points": [
1192
  41,
1193
  43,
@@ -1197,18 +675,10 @@
1197
  18,
1198
  17,
1199
  14
1200
- ],
1201
- "pixel_coords": [
1202
- 310,
1203
- 377.9422863405995
1204
  ]
1205
  },
1206
  {
1207
  "point_id": 43,
1208
- "game_coords": [
1209
- 4,
1210
- 4
1211
- ],
1212
  "adjacent_points": [
1213
  42,
1214
  44,
@@ -1218,18 +688,10 @@
1218
  18,
1219
  15,
1220
  14
1221
- ],
1222
- "pixel_coords": [
1223
- 355,
1224
- 377.9422863405995
1225
  ]
1226
  },
1227
  {
1228
  "point_id": 44,
1229
- "game_coords": [
1230
- 4,
1231
- 5
1232
- ],
1233
  "adjacent_points": [
1234
  43,
1235
  45,
@@ -1239,18 +701,10 @@
1239
  19,
1240
  18,
1241
  15
1242
- ],
1243
- "pixel_coords": [
1244
- 377.5,
1245
- 416.9134295108992
1246
  ]
1247
  },
1248
  {
1249
  "point_id": 45,
1250
- "game_coords": [
1251
- 4,
1252
- 6
1253
- ],
1254
  "adjacent_points": [
1255
  44,
1256
  46,
@@ -1260,18 +714,10 @@
1260
  19,
1261
  16,
1262
  15
1263
- ],
1264
- "pixel_coords": [
1265
- 422.5,
1266
- 416.9134295108992
1267
  ]
1268
  },
1269
  {
1270
  "point_id": 46,
1271
- "game_coords": [
1272
- 4,
1273
- 7
1274
- ],
1275
  "adjacent_points": [
1276
  45,
1277
  47,
@@ -1280,72 +726,40 @@
1280
  "adjacent_hexes": [
1281
  19,
1282
  16
1283
- ],
1284
- "pixel_coords": [
1285
- 445,
1286
- 455.88457268119896
1287
  ]
1288
  },
1289
  {
1290
  "point_id": 47,
1291
- "game_coords": [
1292
- 4,
1293
- 8
1294
- ],
1295
  "adjacent_points": [
1296
  46,
1297
  37
1298
  ],
1299
  "adjacent_hexes": [
1300
  16
1301
- ],
1302
- "pixel_coords": [
1303
- 490,
1304
- 455.88457268119896
1305
  ]
1306
  },
1307
  {
1308
  "point_id": 48,
1309
- "game_coords": [
1310
- 5,
1311
- 0
1312
- ],
1313
  "adjacent_points": [
1314
  49,
1315
  40
1316
  ],
1317
  "adjacent_hexes": [
1318
  17
1319
- ],
1320
- "pixel_coords": [
1321
- 220,
1322
- 377.9422863405995
1323
  ]
1324
  },
1325
  {
1326
  "point_id": 49,
1327
- "game_coords": [
1328
- 5,
1329
- 1
1330
- ],
1331
  "adjacent_points": [
1332
  48,
1333
  50
1334
  ],
1335
  "adjacent_hexes": [
1336
  17
1337
- ],
1338
- "pixel_coords": [
1339
- 242.5,
1340
- 416.9134295108992
1341
  ]
1342
  },
1343
  {
1344
  "point_id": 50,
1345
- "game_coords": [
1346
- 5,
1347
- 2
1348
- ],
1349
  "adjacent_points": [
1350
  49,
1351
  51,
@@ -1354,36 +768,20 @@
1354
  "adjacent_hexes": [
1355
  18,
1356
  17
1357
- ],
1358
- "pixel_coords": [
1359
- 287.5,
1360
- 416.9134295108992
1361
  ]
1362
  },
1363
  {
1364
  "point_id": 51,
1365
- "game_coords": [
1366
- 5,
1367
- 3
1368
- ],
1369
  "adjacent_points": [
1370
  50,
1371
  52
1372
  ],
1373
  "adjacent_hexes": [
1374
  18
1375
- ],
1376
- "pixel_coords": [
1377
- 310,
1378
- 455.88457268119896
1379
  ]
1380
  },
1381
  {
1382
  "point_id": 52,
1383
- "game_coords": [
1384
- 5,
1385
- 4
1386
- ],
1387
  "adjacent_points": [
1388
  51,
1389
  53,
@@ -1392,459 +790,27 @@
1392
  "adjacent_hexes": [
1393
  19,
1394
  18
1395
- ],
1396
- "pixel_coords": [
1397
- 355,
1398
- 455.88457268119896
1399
  ]
1400
  },
1401
  {
1402
  "point_id": 53,
1403
- "game_coords": [
1404
- 5,
1405
- 5
1406
- ],
1407
  "adjacent_points": [
1408
  52,
1409
  54
1410
  ],
1411
  "adjacent_hexes": [
1412
  19
1413
- ],
1414
- "pixel_coords": [
1415
- 377.5,
1416
- 494.8557158514987
1417
  ]
1418
  },
1419
  {
1420
  "point_id": 54,
1421
- "game_coords": [
1422
- 5,
1423
- 6
1424
- ],
1425
  "adjacent_points": [
1426
  53,
1427
  46
1428
  ],
1429
  "adjacent_hexes": [
1430
  19
1431
- ],
1432
- "pixel_coords": [
1433
- 422.5,
1434
- 494.8557158514987
1435
  ]
1436
  }
1437
- ],
1438
- "board_graph": {
1439
- "adjacency": {
1440
- "1": [
1441
- 2,
1442
- 9
1443
- ],
1444
- "2": [
1445
- 1,
1446
- 3
1447
- ],
1448
- "3": [
1449
- 2,
1450
- 4,
1451
- 11
1452
- ],
1453
- "4": [
1454
- 3,
1455
- 5
1456
- ],
1457
- "5": [
1458
- 4,
1459
- 6,
1460
- 13
1461
- ],
1462
- "6": [
1463
- 5,
1464
- 7
1465
- ],
1466
- "7": [
1467
- 6,
1468
- 15
1469
- ],
1470
- "8": [
1471
- 9,
1472
- 18
1473
- ],
1474
- "9": [
1475
- 8,
1476
- 10,
1477
- 1
1478
- ],
1479
- "10": [
1480
- 9,
1481
- 11,
1482
- 20
1483
- ],
1484
- "11": [
1485
- 10,
1486
- 12,
1487
- 3
1488
- ],
1489
- "12": [
1490
- 11,
1491
- 13,
1492
- 22
1493
- ],
1494
- "13": [
1495
- 12,
1496
- 14,
1497
- 5
1498
- ],
1499
- "14": [
1500
- 13,
1501
- 15,
1502
- 24
1503
- ],
1504
- "15": [
1505
- 14,
1506
- 16,
1507
- 7
1508
- ],
1509
- "16": [
1510
- 15,
1511
- 26
1512
- ],
1513
- "17": [
1514
- 18,
1515
- 28
1516
- ],
1517
- "18": [
1518
- 17,
1519
- 19,
1520
- 8
1521
- ],
1522
- "19": [
1523
- 18,
1524
- 20,
1525
- 30
1526
- ],
1527
- "20": [
1528
- 19,
1529
- 21,
1530
- 10
1531
- ],
1532
- "21": [
1533
- 20,
1534
- 22,
1535
- 32
1536
- ],
1537
- "22": [
1538
- 21,
1539
- 23,
1540
- 12
1541
- ],
1542
- "23": [
1543
- 22,
1544
- 24,
1545
- 34
1546
- ],
1547
- "24": [
1548
- 23,
1549
- 25,
1550
- 14
1551
- ],
1552
- "25": [
1553
- 24,
1554
- 26,
1555
- 36
1556
- ],
1557
- "26": [
1558
- 25,
1559
- 27,
1560
- 16
1561
- ],
1562
- "27": [
1563
- 26,
1564
- 38
1565
- ],
1566
- "28": [
1567
- 29,
1568
- 17
1569
- ],
1570
- "29": [
1571
- 28,
1572
- 30,
1573
- 39
1574
- ],
1575
- "30": [
1576
- 29,
1577
- 31,
1578
- 19
1579
- ],
1580
- "31": [
1581
- 30,
1582
- 32,
1583
- 41
1584
- ],
1585
- "32": [
1586
- 31,
1587
- 33,
1588
- 21
1589
- ],
1590
- "33": [
1591
- 32,
1592
- 34,
1593
- 43
1594
- ],
1595
- "34": [
1596
- 33,
1597
- 35,
1598
- 23
1599
- ],
1600
- "35": [
1601
- 34,
1602
- 36,
1603
- 45
1604
- ],
1605
- "36": [
1606
- 35,
1607
- 37,
1608
- 25
1609
- ],
1610
- "37": [
1611
- 36,
1612
- 38,
1613
- 47
1614
- ],
1615
- "38": [
1616
- 37,
1617
- 27
1618
- ],
1619
- "39": [
1620
- 40,
1621
- 29
1622
- ],
1623
- "40": [
1624
- 39,
1625
- 41,
1626
- 48
1627
- ],
1628
- "41": [
1629
- 40,
1630
- 42,
1631
- 31
1632
- ],
1633
- "42": [
1634
- 41,
1635
- 43,
1636
- 50
1637
- ],
1638
- "43": [
1639
- 42,
1640
- 44,
1641
- 33
1642
- ],
1643
- "44": [
1644
- 43,
1645
- 45,
1646
- 52
1647
- ],
1648
- "45": [
1649
- 44,
1650
- 46,
1651
- 35
1652
- ],
1653
- "46": [
1654
- 45,
1655
- 47,
1656
- 54
1657
- ],
1658
- "47": [
1659
- 46,
1660
- 37
1661
- ],
1662
- "48": [
1663
- 49,
1664
- 40
1665
- ],
1666
- "49": [
1667
- 48,
1668
- 50
1669
- ],
1670
- "50": [
1671
- 49,
1672
- 51,
1673
- 42
1674
- ],
1675
- "51": [
1676
- 50,
1677
- 52
1678
- ],
1679
- "52": [
1680
- 51,
1681
- 53,
1682
- 44
1683
- ],
1684
- "53": [
1685
- 52,
1686
- 54
1687
- ],
1688
- "54": [
1689
- 53,
1690
- 46
1691
- ]
1692
- },
1693
- "hex_to_points": {
1694
- "1": [
1695
- 1,
1696
- 2,
1697
- 3,
1698
- 9,
1699
- 10,
1700
- 11
1701
- ],
1702
- "2": [
1703
- 3,
1704
- 4,
1705
- 5,
1706
- 11,
1707
- 12,
1708
- 13
1709
- ],
1710
- "3": [
1711
- 5,
1712
- 6,
1713
- 7,
1714
- 13,
1715
- 14,
1716
- 15
1717
- ],
1718
- "4": [
1719
- 8,
1720
- 9,
1721
- 10,
1722
- 18,
1723
- 19,
1724
- 20
1725
- ],
1726
- "5": [
1727
- 10,
1728
- 11,
1729
- 12,
1730
- 20,
1731
- 21,
1732
- 22
1733
- ],
1734
- "6": [
1735
- 12,
1736
- 13,
1737
- 14,
1738
- 22,
1739
- 23,
1740
- 24
1741
- ],
1742
- "7": [
1743
- 14,
1744
- 15,
1745
- 16,
1746
- 24,
1747
- 25,
1748
- 26
1749
- ],
1750
- "8": [
1751
- 17,
1752
- 18,
1753
- 19,
1754
- 28,
1755
- 29,
1756
- 30
1757
- ],
1758
- "9": [
1759
- 19,
1760
- 20,
1761
- 21,
1762
- 30,
1763
- 31,
1764
- 32
1765
- ],
1766
- "10": [
1767
- 21,
1768
- 22,
1769
- 23,
1770
- 32,
1771
- 33,
1772
- 34
1773
- ],
1774
- "11": [
1775
- 23,
1776
- 24,
1777
- 25,
1778
- 34,
1779
- 35,
1780
- 36
1781
- ],
1782
- "12": [
1783
- 25,
1784
- 26,
1785
- 27,
1786
- 36,
1787
- 37,
1788
- 38
1789
- ],
1790
- "13": [
1791
- 29,
1792
- 30,
1793
- 31,
1794
- 39,
1795
- 40,
1796
- 41
1797
- ],
1798
- "14": [
1799
- 31,
1800
- 32,
1801
- 33,
1802
- 41,
1803
- 42,
1804
- 43
1805
- ],
1806
- "15": [
1807
- 33,
1808
- 34,
1809
- 35,
1810
- 43,
1811
- 44,
1812
- 45
1813
- ],
1814
- "16": [
1815
- 35,
1816
- 36,
1817
- 37,
1818
- 45,
1819
- 46,
1820
- 47
1821
- ],
1822
- "17": [
1823
- 40,
1824
- 41,
1825
- 42,
1826
- 48,
1827
- 49,
1828
- 50
1829
- ],
1830
- "18": [
1831
- 42,
1832
- 43,
1833
- 44,
1834
- 50,
1835
- 51,
1836
- 52
1837
- ],
1838
- "19": [
1839
- 44,
1840
- 45,
1841
- 46,
1842
- 52,
1843
- 53,
1844
- 54
1845
- ]
1846
- },
1847
- "total_points": 54,
1848
- "total_hexes": 19
1849
- }
1850
  }
 
2
  "hexes": [
3
  {
4
  "id": 1,
 
 
5
  "type": "wood",
6
  "number": 12,
7
+ "has_robber": false
 
 
 
 
 
 
 
 
8
  },
9
  {
10
  "id": 2,
 
 
11
  "type": "sheep",
12
  "number": 5,
13
+ "has_robber": false
 
 
 
 
 
 
 
 
14
  },
15
  {
16
  "id": 3,
 
 
17
  "type": "wood",
18
  "number": 4,
19
+ "has_robber": false
 
 
 
 
 
 
 
 
20
  },
21
  {
22
  "id": 4,
 
 
23
  "type": "sheep",
24
  "number": 8,
25
+ "has_robber": false
 
 
 
 
 
 
 
 
26
  },
27
  {
28
  "id": 5,
 
 
29
  "type": "brick",
30
  "number": 6,
31
+ "has_robber": false
 
 
 
 
 
 
 
 
32
  },
33
  {
34
  "id": 6,
 
 
35
  "type": "wood",
36
  "number": 3,
37
+ "has_robber": false
 
 
 
 
 
 
 
 
38
  },
39
  {
40
  "id": 7,
 
 
41
  "type": "wheat",
42
  "number": 8,
43
+ "has_robber": false
 
 
 
 
 
 
 
 
44
  },
45
  {
46
  "id": 8,
 
 
47
  "type": "brick",
48
  "number": 10,
49
+ "has_robber": false
 
 
 
 
 
 
 
 
50
  },
51
  {
52
  "id": 9,
 
 
53
  "type": "wood",
54
  "number": 11,
55
+ "has_robber": false
 
 
 
 
 
 
 
 
56
  },
57
  {
58
  "id": 10,
 
 
59
  "type": "desert",
60
  "number": null,
61
+ "has_robber": true
 
 
 
 
 
 
 
 
62
  },
63
  {
64
  "id": 11,
 
 
65
  "type": "ore",
66
  "number": 3,
67
+ "has_robber": false
 
 
 
 
 
 
 
 
68
  },
69
  {
70
  "id": 12,
 
 
71
  "type": "sheep",
72
  "number": 4,
73
+ "has_robber": false
 
 
 
 
 
 
 
 
74
  },
75
  {
76
  "id": 13,
 
 
77
  "type": "brick",
78
  "number": 10,
79
+ "has_robber": false
 
 
 
 
 
 
 
 
80
  },
81
  {
82
  "id": 14,
 
 
83
  "type": "wheat",
84
  "number": 9,
85
+ "has_robber": false
 
 
 
 
 
 
 
 
86
  },
87
  {
88
  "id": 15,
 
 
89
  "type": "wheat",
90
  "number": 6,
91
+ "has_robber": false
 
 
 
 
 
 
 
 
92
  },
93
  {
94
  "id": 16,
 
 
95
  "type": "sheep",
96
  "number": 11,
97
+ "has_robber": false
 
 
 
 
 
 
 
 
98
  },
99
  {
100
  "id": 17,
 
 
101
  "type": "ore",
102
  "number": 5,
103
+ "has_robber": false
 
 
 
 
 
 
 
 
104
  },
105
  {
106
  "id": 18,
 
 
107
  "type": "wheat",
108
  "number": 9,
109
+ "has_robber": false
 
 
 
 
 
 
 
 
110
  },
111
  {
112
  "id": 19,
 
 
113
  "type": "ore",
114
  "number": 2,
115
+ "has_robber": false
 
 
 
 
 
 
 
 
116
  }
117
  ],
118
  "settlements": [],
 
121
  "players": [
122
  {
123
  "id": 0,
124
+ "name": "ש",
125
  "victory_points": 0,
126
  "total_cards": 0,
127
  "cards_list": [],
 
137
  },
138
  {
139
  "id": 1,
140
+ "name": "ה",
141
  "victory_points": 0,
142
  "total_cards": 0,
143
  "cards_list": [],
 
153
  },
154
  {
155
  "id": 2,
156
+ "name": "ב",
157
  "victory_points": 0,
158
  "total_cards": 0,
159
  "cards_list": [],
 
178
  "points": [
179
  {
180
  "point_id": 1,
 
 
 
 
181
  "adjacent_points": [
182
  2,
183
  9
184
  ],
185
  "adjacent_hexes": [
186
  1
 
 
 
 
187
  ]
188
  },
189
  {
190
  "point_id": 2,
 
 
 
 
191
  "adjacent_points": [
192
  1,
193
  3
194
  ],
195
  "adjacent_hexes": [
196
  1
 
 
 
 
197
  ]
198
  },
199
  {
200
  "point_id": 3,
 
 
 
 
201
  "adjacent_points": [
202
  2,
203
  4,
 
206
  "adjacent_hexes": [
207
  2,
208
  1
 
 
 
 
209
  ]
210
  },
211
  {
212
  "point_id": 4,
 
 
 
 
213
  "adjacent_points": [
214
  3,
215
  5
216
  ],
217
  "adjacent_hexes": [
218
  2
 
 
 
 
219
  ]
220
  },
221
  {
222
  "point_id": 5,
 
 
 
 
223
  "adjacent_points": [
224
  4,
225
  6,
 
228
  "adjacent_hexes": [
229
  3,
230
  2
 
 
 
 
231
  ]
232
  },
233
  {
234
  "point_id": 6,
 
 
 
 
235
  "adjacent_points": [
236
  5,
237
  7
238
  ],
239
  "adjacent_hexes": [
240
  3
 
 
 
 
241
  ]
242
  },
243
  {
244
  "point_id": 7,
 
 
 
 
245
  "adjacent_points": [
246
  6,
247
  15
248
  ],
249
  "adjacent_hexes": [
250
  3
 
 
 
 
251
  ]
252
  },
253
  {
254
  "point_id": 8,
 
 
 
 
255
  "adjacent_points": [
256
  9,
257
  18
258
  ],
259
  "adjacent_hexes": [
260
  4
 
 
 
 
261
  ]
262
  },
263
  {
264
  "point_id": 9,
 
 
 
 
265
  "adjacent_points": [
266
  8,
267
  10,
 
270
  "adjacent_hexes": [
271
  4,
272
  1
 
 
 
 
273
  ]
274
  },
275
  {
276
  "point_id": 10,
 
 
 
 
277
  "adjacent_points": [
278
  9,
279
  11,
 
283
  5,
284
  4,
285
  1
 
 
 
 
286
  ]
287
  },
288
  {
289
  "point_id": 11,
 
 
 
 
290
  "adjacent_points": [
291
  10,
292
  12,
 
296
  5,
297
  2,
298
  1
 
 
 
 
299
  ]
300
  },
301
  {
302
  "point_id": 12,
 
 
 
 
303
  "adjacent_points": [
304
  11,
305
  13,
 
309
  6,
310
  5,
311
  2
 
 
 
 
312
  ]
313
  },
314
  {
315
  "point_id": 13,
 
 
 
 
316
  "adjacent_points": [
317
  12,
318
  14,
 
322
  6,
323
  3,
324
  2
 
 
 
 
325
  ]
326
  },
327
  {
328
  "point_id": 14,
 
 
 
 
329
  "adjacent_points": [
330
  13,
331
  15,
 
335
  7,
336
  6,
337
  3
 
 
 
 
338
  ]
339
  },
340
  {
341
  "point_id": 15,
 
 
 
 
342
  "adjacent_points": [
343
  14,
344
  16,
 
347
  "adjacent_hexes": [
348
  7,
349
  3
 
 
 
 
350
  ]
351
  },
352
  {
353
  "point_id": 16,
 
 
 
 
354
  "adjacent_points": [
355
  15,
356
  26
357
  ],
358
  "adjacent_hexes": [
359
  7
 
 
 
 
360
  ]
361
  },
362
  {
363
  "point_id": 17,
 
 
 
 
364
  "adjacent_points": [
365
  18,
366
  28
367
  ],
368
  "adjacent_hexes": [
369
  8
 
 
 
 
370
  ]
371
  },
372
  {
373
  "point_id": 18,
 
 
 
 
374
  "adjacent_points": [
375
  17,
376
  19,
 
379
  "adjacent_hexes": [
380
  8,
381
  4
 
 
 
 
382
  ]
383
  },
384
  {
385
  "point_id": 19,
 
 
 
 
386
  "adjacent_points": [
387
  18,
388
  20,
 
392
  9,
393
  8,
394
  4
 
 
 
 
395
  ]
396
  },
397
  {
398
  "point_id": 20,
 
 
 
 
399
  "adjacent_points": [
400
  19,
401
  21,
 
405
  9,
406
  5,
407
  4
 
 
 
 
408
  ]
409
  },
410
  {
411
  "point_id": 21,
 
 
 
 
412
  "adjacent_points": [
413
  20,
414
  22,
 
418
  10,
419
  9,
420
  5
 
 
 
 
421
  ]
422
  },
423
  {
424
  "point_id": 22,
 
 
 
 
425
  "adjacent_points": [
426
  21,
427
  23,
 
431
  10,
432
  6,
433
  5
 
 
 
 
434
  ]
435
  },
436
  {
437
  "point_id": 23,
 
 
 
 
438
  "adjacent_points": [
439
  22,
440
  24,
 
444
  11,
445
  10,
446
  6
 
 
 
 
447
  ]
448
  },
449
  {
450
  "point_id": 24,
 
 
 
 
451
  "adjacent_points": [
452
  23,
453
  25,
 
457
  11,
458
  7,
459
  6
 
 
 
 
460
  ]
461
  },
462
  {
463
  "point_id": 25,
 
 
 
 
464
  "adjacent_points": [
465
  24,
466
  26,
 
470
  12,
471
  11,
472
  7
 
 
 
 
473
  ]
474
  },
475
  {
476
  "point_id": 26,
 
 
 
 
477
  "adjacent_points": [
478
  25,
479
  27,
 
482
  "adjacent_hexes": [
483
  12,
484
  7
 
 
 
 
485
  ]
486
  },
487
  {
488
  "point_id": 27,
 
 
 
 
489
  "adjacent_points": [
490
  26,
491
  38
492
  ],
493
  "adjacent_hexes": [
494
  12
 
 
 
 
495
  ]
496
  },
497
  {
498
  "point_id": 28,
 
 
 
 
499
  "adjacent_points": [
500
  29,
501
  17
502
  ],
503
  "adjacent_hexes": [
504
  8
 
 
 
 
505
  ]
506
  },
507
  {
508
  "point_id": 29,
 
 
 
 
509
  "adjacent_points": [
510
  28,
511
  30,
 
514
  "adjacent_hexes": [
515
  13,
516
  8
 
 
 
 
517
  ]
518
  },
519
  {
520
  "point_id": 30,
 
 
 
 
521
  "adjacent_points": [
522
  29,
523
  31,
 
527
  13,
528
  9,
529
  8
 
 
 
 
530
  ]
531
  },
532
  {
533
  "point_id": 31,
 
 
 
 
534
  "adjacent_points": [
535
  30,
536
  32,
 
540
  14,
541
  13,
542
  9
 
 
 
 
543
  ]
544
  },
545
  {
546
  "point_id": 32,
 
 
 
 
547
  "adjacent_points": [
548
  31,
549
  33,
 
553
  14,
554
  10,
555
  9
 
 
 
 
556
  ]
557
  },
558
  {
559
  "point_id": 33,
 
 
 
 
560
  "adjacent_points": [
561
  32,
562
  34,
 
566
  15,
567
  14,
568
  10
 
 
 
 
569
  ]
570
  },
571
  {
572
  "point_id": 34,
 
 
 
 
573
  "adjacent_points": [
574
  33,
575
  35,
 
579
  15,
580
  11,
581
  10
 
 
 
 
582
  ]
583
  },
584
  {
585
  "point_id": 35,
 
 
 
 
586
  "adjacent_points": [
587
  34,
588
  36,
 
592
  16,
593
  15,
594
  11
 
 
 
 
595
  ]
596
  },
597
  {
598
  "point_id": 36,
 
 
 
 
599
  "adjacent_points": [
600
  35,
601
  37,
 
605
  16,
606
  12,
607
  11
 
 
 
 
608
  ]
609
  },
610
  {
611
  "point_id": 37,
 
 
 
 
612
  "adjacent_points": [
613
  36,
614
  38,
 
617
  "adjacent_hexes": [
618
  16,
619
  12
 
 
 
 
620
  ]
621
  },
622
  {
623
  "point_id": 38,
 
 
 
 
624
  "adjacent_points": [
625
  37,
626
  27
627
  ],
628
  "adjacent_hexes": [
629
  12
 
 
 
 
630
  ]
631
  },
632
  {
633
  "point_id": 39,
 
 
 
 
634
  "adjacent_points": [
635
  40,
636
  29
637
  ],
638
  "adjacent_hexes": [
639
  13
 
 
 
 
640
  ]
641
  },
642
  {
643
  "point_id": 40,
 
 
 
 
644
  "adjacent_points": [
645
  39,
646
  41,
 
649
  "adjacent_hexes": [
650
  17,
651
  13
 
 
 
 
652
  ]
653
  },
654
  {
655
  "point_id": 41,
 
 
 
 
656
  "adjacent_points": [
657
  40,
658
  42,
 
662
  17,
663
  14,
664
  13
 
 
 
 
665
  ]
666
  },
667
  {
668
  "point_id": 42,
 
 
 
 
669
  "adjacent_points": [
670
  41,
671
  43,
 
675
  18,
676
  17,
677
  14
 
 
 
 
678
  ]
679
  },
680
  {
681
  "point_id": 43,
 
 
 
 
682
  "adjacent_points": [
683
  42,
684
  44,
 
688
  18,
689
  15,
690
  14
 
 
 
 
691
  ]
692
  },
693
  {
694
  "point_id": 44,
 
 
 
 
695
  "adjacent_points": [
696
  43,
697
  45,
 
701
  19,
702
  18,
703
  15
 
 
 
 
704
  ]
705
  },
706
  {
707
  "point_id": 45,
 
 
 
 
708
  "adjacent_points": [
709
  44,
710
  46,
 
714
  19,
715
  16,
716
  15
 
 
 
 
717
  ]
718
  },
719
  {
720
  "point_id": 46,
 
 
 
 
721
  "adjacent_points": [
722
  45,
723
  47,
 
726
  "adjacent_hexes": [
727
  19,
728
  16
 
 
 
 
729
  ]
730
  },
731
  {
732
  "point_id": 47,
 
 
 
 
733
  "adjacent_points": [
734
  46,
735
  37
736
  ],
737
  "adjacent_hexes": [
738
  16
 
 
 
 
739
  ]
740
  },
741
  {
742
  "point_id": 48,
 
 
 
 
743
  "adjacent_points": [
744
  49,
745
  40
746
  ],
747
  "adjacent_hexes": [
748
  17
 
 
 
 
749
  ]
750
  },
751
  {
752
  "point_id": 49,
 
 
 
 
753
  "adjacent_points": [
754
  48,
755
  50
756
  ],
757
  "adjacent_hexes": [
758
  17
 
 
 
 
759
  ]
760
  },
761
  {
762
  "point_id": 50,
 
 
 
 
763
  "adjacent_points": [
764
  49,
765
  51,
 
768
  "adjacent_hexes": [
769
  18,
770
  17
 
 
 
 
771
  ]
772
  },
773
  {
774
  "point_id": 51,
 
 
 
 
775
  "adjacent_points": [
776
  50,
777
  52
778
  ],
779
  "adjacent_hexes": [
780
  18
 
 
 
 
781
  ]
782
  },
783
  {
784
  "point_id": 52,
 
 
 
 
785
  "adjacent_points": [
786
  51,
787
  53,
 
790
  "adjacent_hexes": [
791
  19,
792
  18
 
 
 
 
793
  ]
794
  },
795
  {
796
  "point_id": 53,
 
 
 
 
797
  "adjacent_points": [
798
  52,
799
  54
800
  ],
801
  "adjacent_hexes": [
802
  19
 
 
 
 
803
  ]
804
  },
805
  {
806
  "point_id": 54,
 
 
 
 
807
  "adjacent_points": [
808
  53,
809
  46
810
  ],
811
  "adjacent_hexes": [
812
  19
 
 
 
 
813
  ]
814
  }
815
+ ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
816
  }
examples/ai_testing/my_games/{game_20251223_205200_full.json → game_20251226_143530_full.json} RENAMED
@@ -1,312 +1,122 @@
1
  {
2
  "total_states": 1,
3
- "timestamp": "20251223_205200",
4
  "states": [
5
  {
6
  "hexes": [
7
  {
8
  "id": 1,
9
- "q": 0,
10
- "r": -2,
11
  "type": "wood",
12
  "number": 12,
13
- "has_robber": false,
14
- "position": [
15
- 0,
16
- 0
17
- ],
18
- "axial_coords": [
19
- 0,
20
- -2
21
- ]
22
  },
23
  {
24
  "id": 2,
25
- "q": 1,
26
- "r": -2,
27
  "type": "sheep",
28
  "number": 5,
29
- "has_robber": false,
30
- "position": [
31
- 0,
32
- 1
33
- ],
34
- "axial_coords": [
35
- 1,
36
- -2
37
- ]
38
  },
39
  {
40
  "id": 3,
41
- "q": 2,
42
- "r": -2,
43
  "type": "wood",
44
  "number": 4,
45
- "has_robber": false,
46
- "position": [
47
- 0,
48
- 2
49
- ],
50
- "axial_coords": [
51
- 2,
52
- -2
53
- ]
54
  },
55
  {
56
  "id": 4,
57
- "q": -1,
58
- "r": -1,
59
  "type": "sheep",
60
  "number": 8,
61
- "has_robber": false,
62
- "position": [
63
- 1,
64
- 0
65
- ],
66
- "axial_coords": [
67
- -1,
68
- -1
69
- ]
70
  },
71
  {
72
  "id": 5,
73
- "q": 0,
74
- "r": -1,
75
  "type": "brick",
76
  "number": 6,
77
- "has_robber": false,
78
- "position": [
79
- 1,
80
- 1
81
- ],
82
- "axial_coords": [
83
- 0,
84
- -1
85
- ]
86
  },
87
  {
88
  "id": 6,
89
- "q": 1,
90
- "r": -1,
91
  "type": "wood",
92
  "number": 3,
93
- "has_robber": false,
94
- "position": [
95
- 1,
96
- 2
97
- ],
98
- "axial_coords": [
99
- 1,
100
- -1
101
- ]
102
  },
103
  {
104
  "id": 7,
105
- "q": 2,
106
- "r": -1,
107
  "type": "wheat",
108
  "number": 8,
109
- "has_robber": false,
110
- "position": [
111
- 1,
112
- 3
113
- ],
114
- "axial_coords": [
115
- 2,
116
- -1
117
- ]
118
  },
119
  {
120
  "id": 8,
121
- "q": -2,
122
- "r": 0,
123
  "type": "brick",
124
  "number": 10,
125
- "has_robber": false,
126
- "position": [
127
- 2,
128
- 0
129
- ],
130
- "axial_coords": [
131
- -2,
132
- 0
133
- ]
134
  },
135
  {
136
  "id": 9,
137
- "q": -1,
138
- "r": 0,
139
  "type": "wood",
140
  "number": 11,
141
- "has_robber": false,
142
- "position": [
143
- 2,
144
- 1
145
- ],
146
- "axial_coords": [
147
- -1,
148
- 0
149
- ]
150
  },
151
  {
152
  "id": 10,
153
- "q": 0,
154
- "r": 0,
155
  "type": "desert",
156
  "number": null,
157
- "has_robber": true,
158
- "position": [
159
- 2,
160
- 2
161
- ],
162
- "axial_coords": [
163
- 0,
164
- 0
165
- ]
166
  },
167
  {
168
  "id": 11,
169
- "q": 1,
170
- "r": 0,
171
  "type": "ore",
172
  "number": 3,
173
- "has_robber": false,
174
- "position": [
175
- 2,
176
- 3
177
- ],
178
- "axial_coords": [
179
- 1,
180
- 0
181
- ]
182
  },
183
  {
184
  "id": 12,
185
- "q": 2,
186
- "r": 0,
187
  "type": "sheep",
188
  "number": 4,
189
- "has_robber": false,
190
- "position": [
191
- 2,
192
- 4
193
- ],
194
- "axial_coords": [
195
- 2,
196
- 0
197
- ]
198
  },
199
  {
200
  "id": 13,
201
- "q": -2,
202
- "r": 1,
203
  "type": "brick",
204
  "number": 10,
205
- "has_robber": false,
206
- "position": [
207
- 3,
208
- 0
209
- ],
210
- "axial_coords": [
211
- -2,
212
- 1
213
- ]
214
  },
215
  {
216
  "id": 14,
217
- "q": -1,
218
- "r": 1,
219
  "type": "wheat",
220
  "number": 9,
221
- "has_robber": false,
222
- "position": [
223
- 3,
224
- 1
225
- ],
226
- "axial_coords": [
227
- -1,
228
- 1
229
- ]
230
  },
231
  {
232
  "id": 15,
233
- "q": 0,
234
- "r": 1,
235
  "type": "wheat",
236
  "number": 6,
237
- "has_robber": false,
238
- "position": [
239
- 3,
240
- 2
241
- ],
242
- "axial_coords": [
243
- 0,
244
- 1
245
- ]
246
  },
247
  {
248
  "id": 16,
249
- "q": 1,
250
- "r": 1,
251
  "type": "sheep",
252
  "number": 11,
253
- "has_robber": false,
254
- "position": [
255
- 3,
256
- 3
257
- ],
258
- "axial_coords": [
259
- 1,
260
- 1
261
- ]
262
  },
263
  {
264
  "id": 17,
265
- "q": -2,
266
- "r": 2,
267
  "type": "ore",
268
  "number": 5,
269
- "has_robber": false,
270
- "position": [
271
- 4,
272
- 0
273
- ],
274
- "axial_coords": [
275
- -2,
276
- 2
277
- ]
278
  },
279
  {
280
  "id": 18,
281
- "q": -1,
282
- "r": 2,
283
  "type": "wheat",
284
  "number": 9,
285
- "has_robber": false,
286
- "position": [
287
- 4,
288
- 1
289
- ],
290
- "axial_coords": [
291
- -1,
292
- 2
293
- ]
294
  },
295
  {
296
  "id": 19,
297
- "q": 0,
298
- "r": 2,
299
  "type": "ore",
300
  "number": 2,
301
- "has_robber": false,
302
- "position": [
303
- 4,
304
- 2
305
- ],
306
- "axial_coords": [
307
- 0,
308
- 2
309
- ]
310
  }
311
  ],
312
  "settlements": [],
@@ -315,7 +125,7 @@
315
  "players": [
316
  {
317
  "id": 0,
318
- "name": "A",
319
  "victory_points": 0,
320
  "total_cards": 0,
321
  "cards_list": [],
@@ -331,7 +141,7 @@
331
  },
332
  {
333
  "id": 1,
334
- "name": "B",
335
  "victory_points": 0,
336
  "total_cards": 0,
337
  "cards_list": [],
@@ -347,7 +157,7 @@
347
  },
348
  {
349
  "id": 2,
350
- "name": "C",
351
  "victory_points": 0,
352
  "total_cards": 0,
353
  "cards_list": [],
@@ -372,46 +182,26 @@
372
  "points": [
373
  {
374
  "point_id": 1,
375
- "game_coords": [
376
- 0,
377
- 0
378
- ],
379
  "adjacent_points": [
380
  2,
381
  9
382
  ],
383
  "adjacent_hexes": [
384
  1
385
- ],
386
- "pixel_coords": [
387
- 377.5,
388
- 105.14428414850131
389
  ]
390
  },
391
  {
392
  "point_id": 2,
393
- "game_coords": [
394
- 0,
395
- 1
396
- ],
397
  "adjacent_points": [
398
  1,
399
  3
400
  ],
401
  "adjacent_hexes": [
402
  1
403
- ],
404
- "pixel_coords": [
405
- 422.5,
406
- 105.14428414850128
407
  ]
408
  },
409
  {
410
  "point_id": 3,
411
- "game_coords": [
412
- 0,
413
- 2
414
- ],
415
  "adjacent_points": [
416
  2,
417
  4,
@@ -420,36 +210,20 @@
420
  "adjacent_hexes": [
421
  2,
422
  1
423
- ],
424
- "pixel_coords": [
425
- 445,
426
- 144.11542731880104
427
  ]
428
  },
429
  {
430
  "point_id": 4,
431
- "game_coords": [
432
- 0,
433
- 3
434
- ],
435
  "adjacent_points": [
436
  3,
437
  5
438
  ],
439
  "adjacent_hexes": [
440
  2
441
- ],
442
- "pixel_coords": [
443
- 490,
444
- 144.11542731880104
445
  ]
446
  },
447
  {
448
  "point_id": 5,
449
- "game_coords": [
450
- 0,
451
- 4
452
- ],
453
  "adjacent_points": [
454
  4,
455
  6,
@@ -458,72 +232,40 @@
458
  "adjacent_hexes": [
459
  3,
460
  2
461
- ],
462
- "pixel_coords": [
463
- 512.5,
464
- 183.08657048910078
465
  ]
466
  },
467
  {
468
  "point_id": 6,
469
- "game_coords": [
470
- 0,
471
- 5
472
- ],
473
  "adjacent_points": [
474
  5,
475
  7
476
  ],
477
  "adjacent_hexes": [
478
  3
479
- ],
480
- "pixel_coords": [
481
- 557.5,
482
- 183.08657048910078
483
  ]
484
  },
485
  {
486
  "point_id": 7,
487
- "game_coords": [
488
- 0,
489
- 6
490
- ],
491
  "adjacent_points": [
492
  6,
493
  15
494
  ],
495
  "adjacent_hexes": [
496
  3
497
- ],
498
- "pixel_coords": [
499
- 580,
500
- 222.05771365940052
501
  ]
502
  },
503
  {
504
  "point_id": 8,
505
- "game_coords": [
506
- 1,
507
- 0
508
- ],
509
  "adjacent_points": [
510
  9,
511
  18
512
  ],
513
  "adjacent_hexes": [
514
  4
515
- ],
516
- "pixel_coords": [
517
- 310,
518
- 144.11542731880104
519
  ]
520
  },
521
  {
522
  "point_id": 9,
523
- "game_coords": [
524
- 1,
525
- 1
526
- ],
527
  "adjacent_points": [
528
  8,
529
  10,
@@ -532,18 +274,10 @@
532
  "adjacent_hexes": [
533
  4,
534
  1
535
- ],
536
- "pixel_coords": [
537
- 355,
538
- 144.11542731880104
539
  ]
540
  },
541
  {
542
  "point_id": 10,
543
- "game_coords": [
544
- 1,
545
- 2
546
- ],
547
  "adjacent_points": [
548
  9,
549
  11,
@@ -553,18 +287,10 @@
553
  5,
554
  4,
555
  1
556
- ],
557
- "pixel_coords": [
558
- 377.5,
559
- 183.08657048910078
560
  ]
561
  },
562
  {
563
  "point_id": 11,
564
- "game_coords": [
565
- 1,
566
- 3
567
- ],
568
  "adjacent_points": [
569
  10,
570
  12,
@@ -574,18 +300,10 @@
574
  5,
575
  2,
576
  1
577
- ],
578
- "pixel_coords": [
579
- 422.5,
580
- 183.08657048910078
581
  ]
582
  },
583
  {
584
  "point_id": 12,
585
- "game_coords": [
586
- 1,
587
- 4
588
- ],
589
  "adjacent_points": [
590
  11,
591
  13,
@@ -595,18 +313,10 @@
595
  6,
596
  5,
597
  2
598
- ],
599
- "pixel_coords": [
600
- 445,
601
- 222.05771365940052
602
  ]
603
  },
604
  {
605
  "point_id": 13,
606
- "game_coords": [
607
- 1,
608
- 5
609
- ],
610
  "adjacent_points": [
611
  12,
612
  14,
@@ -616,18 +326,10 @@
616
  6,
617
  3,
618
  2
619
- ],
620
- "pixel_coords": [
621
- 490,
622
- 222.05771365940052
623
  ]
624
  },
625
  {
626
  "point_id": 14,
627
- "game_coords": [
628
- 1,
629
- 6
630
- ],
631
  "adjacent_points": [
632
  13,
633
  15,
@@ -637,18 +339,10 @@
637
  7,
638
  6,
639
  3
640
- ],
641
- "pixel_coords": [
642
- 512.5,
643
- 261.02885682970026
644
  ]
645
  },
646
  {
647
  "point_id": 15,
648
- "game_coords": [
649
- 1,
650
- 7
651
- ],
652
  "adjacent_points": [
653
  14,
654
  16,
@@ -657,54 +351,30 @@
657
  "adjacent_hexes": [
658
  7,
659
  3
660
- ],
661
- "pixel_coords": [
662
- 557.5,
663
- 261.02885682970026
664
  ]
665
  },
666
  {
667
  "point_id": 16,
668
- "game_coords": [
669
- 1,
670
- 8
671
- ],
672
  "adjacent_points": [
673
  15,
674
  26
675
  ],
676
  "adjacent_hexes": [
677
  7
678
- ],
679
- "pixel_coords": [
680
- 580,
681
- 300
682
  ]
683
  },
684
  {
685
  "point_id": 17,
686
- "game_coords": [
687
- 2,
688
- 0
689
- ],
690
  "adjacent_points": [
691
  18,
692
  28
693
  ],
694
  "adjacent_hexes": [
695
  8
696
- ],
697
- "pixel_coords": [
698
- 242.49999999999997,
699
- 183.08657048910078
700
  ]
701
  },
702
  {
703
  "point_id": 18,
704
- "game_coords": [
705
- 2,
706
- 1
707
- ],
708
  "adjacent_points": [
709
  17,
710
  19,
@@ -713,18 +383,10 @@
713
  "adjacent_hexes": [
714
  8,
715
  4
716
- ],
717
- "pixel_coords": [
718
- 287.5,
719
- 183.08657048910078
720
  ]
721
  },
722
  {
723
  "point_id": 19,
724
- "game_coords": [
725
- 2,
726
- 2
727
- ],
728
  "adjacent_points": [
729
  18,
730
  20,
@@ -734,18 +396,10 @@
734
  9,
735
  8,
736
  4
737
- ],
738
- "pixel_coords": [
739
- 310,
740
- 222.05771365940052
741
  ]
742
  },
743
  {
744
  "point_id": 20,
745
- "game_coords": [
746
- 2,
747
- 3
748
- ],
749
  "adjacent_points": [
750
  19,
751
  21,
@@ -755,18 +409,10 @@
755
  9,
756
  5,
757
  4
758
- ],
759
- "pixel_coords": [
760
- 355,
761
- 222.05771365940052
762
  ]
763
  },
764
  {
765
  "point_id": 21,
766
- "game_coords": [
767
- 2,
768
- 4
769
- ],
770
  "adjacent_points": [
771
  20,
772
  22,
@@ -776,18 +422,10 @@
776
  10,
777
  9,
778
  5
779
- ],
780
- "pixel_coords": [
781
- 377.5,
782
- 261.02885682970026
783
  ]
784
  },
785
  {
786
  "point_id": 22,
787
- "game_coords": [
788
- 2,
789
- 5
790
- ],
791
  "adjacent_points": [
792
  21,
793
  23,
@@ -797,18 +435,10 @@
797
  10,
798
  6,
799
  5
800
- ],
801
- "pixel_coords": [
802
- 422.5,
803
- 261.02885682970026
804
  ]
805
  },
806
  {
807
  "point_id": 23,
808
- "game_coords": [
809
- 2,
810
- 6
811
- ],
812
  "adjacent_points": [
813
  22,
814
  24,
@@ -818,18 +448,10 @@
818
  11,
819
  10,
820
  6
821
- ],
822
- "pixel_coords": [
823
- 445,
824
- 300
825
  ]
826
  },
827
  {
828
  "point_id": 24,
829
- "game_coords": [
830
- 2,
831
- 7
832
- ],
833
  "adjacent_points": [
834
  23,
835
  25,
@@ -839,18 +461,10 @@
839
  11,
840
  7,
841
  6
842
- ],
843
- "pixel_coords": [
844
- 490,
845
- 300
846
  ]
847
  },
848
  {
849
  "point_id": 25,
850
- "game_coords": [
851
- 2,
852
- 8
853
- ],
854
  "adjacent_points": [
855
  24,
856
  26,
@@ -860,18 +474,10 @@
860
  12,
861
  11,
862
  7
863
- ],
864
- "pixel_coords": [
865
- 512.5,
866
- 338.97114317029974
867
  ]
868
  },
869
  {
870
  "point_id": 26,
871
- "game_coords": [
872
- 2,
873
- 9
874
- ],
875
  "adjacent_points": [
876
  25,
877
  27,
@@ -880,54 +486,30 @@
880
  "adjacent_hexes": [
881
  12,
882
  7
883
- ],
884
- "pixel_coords": [
885
- 557.5,
886
- 338.97114317029974
887
  ]
888
  },
889
  {
890
  "point_id": 27,
891
- "game_coords": [
892
- 2,
893
- 10
894
- ],
895
  "adjacent_points": [
896
  26,
897
  38
898
  ],
899
  "adjacent_hexes": [
900
  12
901
- ],
902
- "pixel_coords": [
903
- 580,
904
- 377.9422863405995
905
  ]
906
  },
907
  {
908
  "point_id": 28,
909
- "game_coords": [
910
- 3,
911
- 0
912
- ],
913
  "adjacent_points": [
914
  29,
915
  17
916
  ],
917
  "adjacent_hexes": [
918
  8
919
- ],
920
- "pixel_coords": [
921
- 220,
922
- 222.05771365940052
923
  ]
924
  },
925
  {
926
  "point_id": 29,
927
- "game_coords": [
928
- 3,
929
- 1
930
- ],
931
  "adjacent_points": [
932
  28,
933
  30,
@@ -936,18 +518,10 @@
936
  "adjacent_hexes": [
937
  13,
938
  8
939
- ],
940
- "pixel_coords": [
941
- 242.5,
942
- 261.02885682970026
943
  ]
944
  },
945
  {
946
  "point_id": 30,
947
- "game_coords": [
948
- 3,
949
- 2
950
- ],
951
  "adjacent_points": [
952
  29,
953
  31,
@@ -957,18 +531,10 @@
957
  13,
958
  9,
959
  8
960
- ],
961
- "pixel_coords": [
962
- 287.5,
963
- 261.02885682970026
964
  ]
965
  },
966
  {
967
  "point_id": 31,
968
- "game_coords": [
969
- 3,
970
- 3
971
- ],
972
  "adjacent_points": [
973
  30,
974
  32,
@@ -978,18 +544,10 @@
978
  14,
979
  13,
980
  9
981
- ],
982
- "pixel_coords": [
983
- 310,
984
- 300
985
  ]
986
  },
987
  {
988
  "point_id": 32,
989
- "game_coords": [
990
- 3,
991
- 4
992
- ],
993
  "adjacent_points": [
994
  31,
995
  33,
@@ -999,18 +557,10 @@
999
  14,
1000
  10,
1001
  9
1002
- ],
1003
- "pixel_coords": [
1004
- 355,
1005
- 300
1006
  ]
1007
  },
1008
  {
1009
  "point_id": 33,
1010
- "game_coords": [
1011
- 3,
1012
- 5
1013
- ],
1014
  "adjacent_points": [
1015
  32,
1016
  34,
@@ -1020,18 +570,10 @@
1020
  15,
1021
  14,
1022
  10
1023
- ],
1024
- "pixel_coords": [
1025
- 377.5,
1026
- 338.97114317029974
1027
  ]
1028
  },
1029
  {
1030
  "point_id": 34,
1031
- "game_coords": [
1032
- 3,
1033
- 6
1034
- ],
1035
  "adjacent_points": [
1036
  33,
1037
  35,
@@ -1041,18 +583,10 @@
1041
  15,
1042
  11,
1043
  10
1044
- ],
1045
- "pixel_coords": [
1046
- 422.5,
1047
- 338.97114317029974
1048
  ]
1049
  },
1050
  {
1051
  "point_id": 35,
1052
- "game_coords": [
1053
- 3,
1054
- 7
1055
- ],
1056
  "adjacent_points": [
1057
  34,
1058
  36,
@@ -1062,18 +596,10 @@
1062
  16,
1063
  15,
1064
  11
1065
- ],
1066
- "pixel_coords": [
1067
- 445,
1068
- 377.9422863405995
1069
  ]
1070
  },
1071
  {
1072
  "point_id": 36,
1073
- "game_coords": [
1074
- 3,
1075
- 8
1076
- ],
1077
  "adjacent_points": [
1078
  35,
1079
  37,
@@ -1083,18 +609,10 @@
1083
  16,
1084
  12,
1085
  11
1086
- ],
1087
- "pixel_coords": [
1088
- 490,
1089
- 377.9422863405995
1090
  ]
1091
  },
1092
  {
1093
  "point_id": 37,
1094
- "game_coords": [
1095
- 3,
1096
- 9
1097
- ],
1098
  "adjacent_points": [
1099
  36,
1100
  38,
@@ -1103,54 +621,30 @@
1103
  "adjacent_hexes": [
1104
  16,
1105
  12
1106
- ],
1107
- "pixel_coords": [
1108
- 512.5,
1109
- 416.9134295108992
1110
  ]
1111
  },
1112
  {
1113
  "point_id": 38,
1114
- "game_coords": [
1115
- 3,
1116
- 10
1117
- ],
1118
  "adjacent_points": [
1119
  37,
1120
  27
1121
  ],
1122
  "adjacent_hexes": [
1123
  12
1124
- ],
1125
- "pixel_coords": [
1126
- 557.5,
1127
- 416.9134295108992
1128
  ]
1129
  },
1130
  {
1131
  "point_id": 39,
1132
- "game_coords": [
1133
- 4,
1134
- 0
1135
- ],
1136
  "adjacent_points": [
1137
  40,
1138
  29
1139
  ],
1140
  "adjacent_hexes": [
1141
  13
1142
- ],
1143
- "pixel_coords": [
1144
- 220,
1145
- 300
1146
  ]
1147
  },
1148
  {
1149
  "point_id": 40,
1150
- "game_coords": [
1151
- 4,
1152
- 1
1153
- ],
1154
  "adjacent_points": [
1155
  39,
1156
  41,
@@ -1159,18 +653,10 @@
1159
  "adjacent_hexes": [
1160
  17,
1161
  13
1162
- ],
1163
- "pixel_coords": [
1164
- 242.5,
1165
- 338.97114317029974
1166
  ]
1167
  },
1168
  {
1169
  "point_id": 41,
1170
- "game_coords": [
1171
- 4,
1172
- 2
1173
- ],
1174
  "adjacent_points": [
1175
  40,
1176
  42,
@@ -1180,18 +666,10 @@
1180
  17,
1181
  14,
1182
  13
1183
- ],
1184
- "pixel_coords": [
1185
- 287.5,
1186
- 338.97114317029974
1187
  ]
1188
  },
1189
  {
1190
  "point_id": 42,
1191
- "game_coords": [
1192
- 4,
1193
- 3
1194
- ],
1195
  "adjacent_points": [
1196
  41,
1197
  43,
@@ -1201,18 +679,10 @@
1201
  18,
1202
  17,
1203
  14
1204
- ],
1205
- "pixel_coords": [
1206
- 310,
1207
- 377.9422863405995
1208
  ]
1209
  },
1210
  {
1211
  "point_id": 43,
1212
- "game_coords": [
1213
- 4,
1214
- 4
1215
- ],
1216
  "adjacent_points": [
1217
  42,
1218
  44,
@@ -1222,18 +692,10 @@
1222
  18,
1223
  15,
1224
  14
1225
- ],
1226
- "pixel_coords": [
1227
- 355,
1228
- 377.9422863405995
1229
  ]
1230
  },
1231
  {
1232
  "point_id": 44,
1233
- "game_coords": [
1234
- 4,
1235
- 5
1236
- ],
1237
  "adjacent_points": [
1238
  43,
1239
  45,
@@ -1243,18 +705,10 @@
1243
  19,
1244
  18,
1245
  15
1246
- ],
1247
- "pixel_coords": [
1248
- 377.5,
1249
- 416.9134295108992
1250
  ]
1251
  },
1252
  {
1253
  "point_id": 45,
1254
- "game_coords": [
1255
- 4,
1256
- 6
1257
- ],
1258
  "adjacent_points": [
1259
  44,
1260
  46,
@@ -1264,18 +718,10 @@
1264
  19,
1265
  16,
1266
  15
1267
- ],
1268
- "pixel_coords": [
1269
- 422.5,
1270
- 416.9134295108992
1271
  ]
1272
  },
1273
  {
1274
  "point_id": 46,
1275
- "game_coords": [
1276
- 4,
1277
- 7
1278
- ],
1279
  "adjacent_points": [
1280
  45,
1281
  47,
@@ -1284,72 +730,40 @@
1284
  "adjacent_hexes": [
1285
  19,
1286
  16
1287
- ],
1288
- "pixel_coords": [
1289
- 445,
1290
- 455.88457268119896
1291
  ]
1292
  },
1293
  {
1294
  "point_id": 47,
1295
- "game_coords": [
1296
- 4,
1297
- 8
1298
- ],
1299
  "adjacent_points": [
1300
  46,
1301
  37
1302
  ],
1303
  "adjacent_hexes": [
1304
  16
1305
- ],
1306
- "pixel_coords": [
1307
- 490,
1308
- 455.88457268119896
1309
  ]
1310
  },
1311
  {
1312
  "point_id": 48,
1313
- "game_coords": [
1314
- 5,
1315
- 0
1316
- ],
1317
  "adjacent_points": [
1318
  49,
1319
  40
1320
  ],
1321
  "adjacent_hexes": [
1322
  17
1323
- ],
1324
- "pixel_coords": [
1325
- 220,
1326
- 377.9422863405995
1327
  ]
1328
  },
1329
  {
1330
  "point_id": 49,
1331
- "game_coords": [
1332
- 5,
1333
- 1
1334
- ],
1335
  "adjacent_points": [
1336
  48,
1337
  50
1338
  ],
1339
  "adjacent_hexes": [
1340
  17
1341
- ],
1342
- "pixel_coords": [
1343
- 242.5,
1344
- 416.9134295108992
1345
  ]
1346
  },
1347
  {
1348
  "point_id": 50,
1349
- "game_coords": [
1350
- 5,
1351
- 2
1352
- ],
1353
  "adjacent_points": [
1354
  49,
1355
  51,
@@ -1358,36 +772,20 @@
1358
  "adjacent_hexes": [
1359
  18,
1360
  17
1361
- ],
1362
- "pixel_coords": [
1363
- 287.5,
1364
- 416.9134295108992
1365
  ]
1366
  },
1367
  {
1368
  "point_id": 51,
1369
- "game_coords": [
1370
- 5,
1371
- 3
1372
- ],
1373
  "adjacent_points": [
1374
  50,
1375
  52
1376
  ],
1377
  "adjacent_hexes": [
1378
  18
1379
- ],
1380
- "pixel_coords": [
1381
- 310,
1382
- 455.88457268119896
1383
  ]
1384
  },
1385
  {
1386
  "point_id": 52,
1387
- "game_coords": [
1388
- 5,
1389
- 4
1390
- ],
1391
  "adjacent_points": [
1392
  51,
1393
  53,
@@ -1396,461 +794,29 @@
1396
  "adjacent_hexes": [
1397
  19,
1398
  18
1399
- ],
1400
- "pixel_coords": [
1401
- 355,
1402
- 455.88457268119896
1403
  ]
1404
  },
1405
  {
1406
  "point_id": 53,
1407
- "game_coords": [
1408
- 5,
1409
- 5
1410
- ],
1411
  "adjacent_points": [
1412
  52,
1413
  54
1414
  ],
1415
  "adjacent_hexes": [
1416
  19
1417
- ],
1418
- "pixel_coords": [
1419
- 377.5,
1420
- 494.8557158514987
1421
  ]
1422
  },
1423
  {
1424
  "point_id": 54,
1425
- "game_coords": [
1426
- 5,
1427
- 6
1428
- ],
1429
  "adjacent_points": [
1430
  53,
1431
  46
1432
  ],
1433
  "adjacent_hexes": [
1434
  19
1435
- ],
1436
- "pixel_coords": [
1437
- 422.5,
1438
- 494.8557158514987
1439
  ]
1440
  }
1441
- ],
1442
- "board_graph": {
1443
- "adjacency": {
1444
- "1": [
1445
- 2,
1446
- 9
1447
- ],
1448
- "2": [
1449
- 1,
1450
- 3
1451
- ],
1452
- "3": [
1453
- 2,
1454
- 4,
1455
- 11
1456
- ],
1457
- "4": [
1458
- 3,
1459
- 5
1460
- ],
1461
- "5": [
1462
- 4,
1463
- 6,
1464
- 13
1465
- ],
1466
- "6": [
1467
- 5,
1468
- 7
1469
- ],
1470
- "7": [
1471
- 6,
1472
- 15
1473
- ],
1474
- "8": [
1475
- 9,
1476
- 18
1477
- ],
1478
- "9": [
1479
- 8,
1480
- 10,
1481
- 1
1482
- ],
1483
- "10": [
1484
- 9,
1485
- 11,
1486
- 20
1487
- ],
1488
- "11": [
1489
- 10,
1490
- 12,
1491
- 3
1492
- ],
1493
- "12": [
1494
- 11,
1495
- 13,
1496
- 22
1497
- ],
1498
- "13": [
1499
- 12,
1500
- 14,
1501
- 5
1502
- ],
1503
- "14": [
1504
- 13,
1505
- 15,
1506
- 24
1507
- ],
1508
- "15": [
1509
- 14,
1510
- 16,
1511
- 7
1512
- ],
1513
- "16": [
1514
- 15,
1515
- 26
1516
- ],
1517
- "17": [
1518
- 18,
1519
- 28
1520
- ],
1521
- "18": [
1522
- 17,
1523
- 19,
1524
- 8
1525
- ],
1526
- "19": [
1527
- 18,
1528
- 20,
1529
- 30
1530
- ],
1531
- "20": [
1532
- 19,
1533
- 21,
1534
- 10
1535
- ],
1536
- "21": [
1537
- 20,
1538
- 22,
1539
- 32
1540
- ],
1541
- "22": [
1542
- 21,
1543
- 23,
1544
- 12
1545
- ],
1546
- "23": [
1547
- 22,
1548
- 24,
1549
- 34
1550
- ],
1551
- "24": [
1552
- 23,
1553
- 25,
1554
- 14
1555
- ],
1556
- "25": [
1557
- 24,
1558
- 26,
1559
- 36
1560
- ],
1561
- "26": [
1562
- 25,
1563
- 27,
1564
- 16
1565
- ],
1566
- "27": [
1567
- 26,
1568
- 38
1569
- ],
1570
- "28": [
1571
- 29,
1572
- 17
1573
- ],
1574
- "29": [
1575
- 28,
1576
- 30,
1577
- 39
1578
- ],
1579
- "30": [
1580
- 29,
1581
- 31,
1582
- 19
1583
- ],
1584
- "31": [
1585
- 30,
1586
- 32,
1587
- 41
1588
- ],
1589
- "32": [
1590
- 31,
1591
- 33,
1592
- 21
1593
- ],
1594
- "33": [
1595
- 32,
1596
- 34,
1597
- 43
1598
- ],
1599
- "34": [
1600
- 33,
1601
- 35,
1602
- 23
1603
- ],
1604
- "35": [
1605
- 34,
1606
- 36,
1607
- 45
1608
- ],
1609
- "36": [
1610
- 35,
1611
- 37,
1612
- 25
1613
- ],
1614
- "37": [
1615
- 36,
1616
- 38,
1617
- 47
1618
- ],
1619
- "38": [
1620
- 37,
1621
- 27
1622
- ],
1623
- "39": [
1624
- 40,
1625
- 29
1626
- ],
1627
- "40": [
1628
- 39,
1629
- 41,
1630
- 48
1631
- ],
1632
- "41": [
1633
- 40,
1634
- 42,
1635
- 31
1636
- ],
1637
- "42": [
1638
- 41,
1639
- 43,
1640
- 50
1641
- ],
1642
- "43": [
1643
- 42,
1644
- 44,
1645
- 33
1646
- ],
1647
- "44": [
1648
- 43,
1649
- 45,
1650
- 52
1651
- ],
1652
- "45": [
1653
- 44,
1654
- 46,
1655
- 35
1656
- ],
1657
- "46": [
1658
- 45,
1659
- 47,
1660
- 54
1661
- ],
1662
- "47": [
1663
- 46,
1664
- 37
1665
- ],
1666
- "48": [
1667
- 49,
1668
- 40
1669
- ],
1670
- "49": [
1671
- 48,
1672
- 50
1673
- ],
1674
- "50": [
1675
- 49,
1676
- 51,
1677
- 42
1678
- ],
1679
- "51": [
1680
- 50,
1681
- 52
1682
- ],
1683
- "52": [
1684
- 51,
1685
- 53,
1686
- 44
1687
- ],
1688
- "53": [
1689
- 52,
1690
- 54
1691
- ],
1692
- "54": [
1693
- 53,
1694
- 46
1695
- ]
1696
- },
1697
- "hex_to_points": {
1698
- "1": [
1699
- 1,
1700
- 2,
1701
- 3,
1702
- 9,
1703
- 10,
1704
- 11
1705
- ],
1706
- "2": [
1707
- 3,
1708
- 4,
1709
- 5,
1710
- 11,
1711
- 12,
1712
- 13
1713
- ],
1714
- "3": [
1715
- 5,
1716
- 6,
1717
- 7,
1718
- 13,
1719
- 14,
1720
- 15
1721
- ],
1722
- "4": [
1723
- 8,
1724
- 9,
1725
- 10,
1726
- 18,
1727
- 19,
1728
- 20
1729
- ],
1730
- "5": [
1731
- 10,
1732
- 11,
1733
- 12,
1734
- 20,
1735
- 21,
1736
- 22
1737
- ],
1738
- "6": [
1739
- 12,
1740
- 13,
1741
- 14,
1742
- 22,
1743
- 23,
1744
- 24
1745
- ],
1746
- "7": [
1747
- 14,
1748
- 15,
1749
- 16,
1750
- 24,
1751
- 25,
1752
- 26
1753
- ],
1754
- "8": [
1755
- 17,
1756
- 18,
1757
- 19,
1758
- 28,
1759
- 29,
1760
- 30
1761
- ],
1762
- "9": [
1763
- 19,
1764
- 20,
1765
- 21,
1766
- 30,
1767
- 31,
1768
- 32
1769
- ],
1770
- "10": [
1771
- 21,
1772
- 22,
1773
- 23,
1774
- 32,
1775
- 33,
1776
- 34
1777
- ],
1778
- "11": [
1779
- 23,
1780
- 24,
1781
- 25,
1782
- 34,
1783
- 35,
1784
- 36
1785
- ],
1786
- "12": [
1787
- 25,
1788
- 26,
1789
- 27,
1790
- 36,
1791
- 37,
1792
- 38
1793
- ],
1794
- "13": [
1795
- 29,
1796
- 30,
1797
- 31,
1798
- 39,
1799
- 40,
1800
- 41
1801
- ],
1802
- "14": [
1803
- 31,
1804
- 32,
1805
- 33,
1806
- 41,
1807
- 42,
1808
- 43
1809
- ],
1810
- "15": [
1811
- 33,
1812
- 34,
1813
- 35,
1814
- 43,
1815
- 44,
1816
- 45
1817
- ],
1818
- "16": [
1819
- 35,
1820
- 36,
1821
- 37,
1822
- 45,
1823
- 46,
1824
- 47
1825
- ],
1826
- "17": [
1827
- 40,
1828
- 41,
1829
- 42,
1830
- 48,
1831
- 49,
1832
- 50
1833
- ],
1834
- "18": [
1835
- 42,
1836
- 43,
1837
- 44,
1838
- 50,
1839
- 51,
1840
- 52
1841
- ],
1842
- "19": [
1843
- 44,
1844
- 45,
1845
- 46,
1846
- 52,
1847
- 53,
1848
- 54
1849
- ]
1850
- },
1851
- "total_points": 54,
1852
- "total_hexes": 19
1853
- }
1854
  }
1855
  ]
1856
  }
 
1
  {
2
  "total_states": 1,
3
+ "timestamp": "20251226_143530",
4
  "states": [
5
  {
6
  "hexes": [
7
  {
8
  "id": 1,
 
 
9
  "type": "wood",
10
  "number": 12,
11
+ "has_robber": false
 
 
 
 
 
 
 
 
12
  },
13
  {
14
  "id": 2,
 
 
15
  "type": "sheep",
16
  "number": 5,
17
+ "has_robber": false
 
 
 
 
 
 
 
 
18
  },
19
  {
20
  "id": 3,
 
 
21
  "type": "wood",
22
  "number": 4,
23
+ "has_robber": false
 
 
 
 
 
 
 
 
24
  },
25
  {
26
  "id": 4,
 
 
27
  "type": "sheep",
28
  "number": 8,
29
+ "has_robber": false
 
 
 
 
 
 
 
 
30
  },
31
  {
32
  "id": 5,
 
 
33
  "type": "brick",
34
  "number": 6,
35
+ "has_robber": false
 
 
 
 
 
 
 
 
36
  },
37
  {
38
  "id": 6,
 
 
39
  "type": "wood",
40
  "number": 3,
41
+ "has_robber": false
 
 
 
 
 
 
 
 
42
  },
43
  {
44
  "id": 7,
 
 
45
  "type": "wheat",
46
  "number": 8,
47
+ "has_robber": false
 
 
 
 
 
 
 
 
48
  },
49
  {
50
  "id": 8,
 
 
51
  "type": "brick",
52
  "number": 10,
53
+ "has_robber": false
 
 
 
 
 
 
 
 
54
  },
55
  {
56
  "id": 9,
 
 
57
  "type": "wood",
58
  "number": 11,
59
+ "has_robber": false
 
 
 
 
 
 
 
 
60
  },
61
  {
62
  "id": 10,
 
 
63
  "type": "desert",
64
  "number": null,
65
+ "has_robber": true
 
 
 
 
 
 
 
 
66
  },
67
  {
68
  "id": 11,
 
 
69
  "type": "ore",
70
  "number": 3,
71
+ "has_robber": false
 
 
 
 
 
 
 
 
72
  },
73
  {
74
  "id": 12,
 
 
75
  "type": "sheep",
76
  "number": 4,
77
+ "has_robber": false
 
 
 
 
 
 
 
 
78
  },
79
  {
80
  "id": 13,
 
 
81
  "type": "brick",
82
  "number": 10,
83
+ "has_robber": false
 
 
 
 
 
 
 
 
84
  },
85
  {
86
  "id": 14,
 
 
87
  "type": "wheat",
88
  "number": 9,
89
+ "has_robber": false
 
 
 
 
 
 
 
 
90
  },
91
  {
92
  "id": 15,
 
 
93
  "type": "wheat",
94
  "number": 6,
95
+ "has_robber": false
 
 
 
 
 
 
 
 
96
  },
97
  {
98
  "id": 16,
 
 
99
  "type": "sheep",
100
  "number": 11,
101
+ "has_robber": false
 
 
 
 
 
 
 
 
102
  },
103
  {
104
  "id": 17,
 
 
105
  "type": "ore",
106
  "number": 5,
107
+ "has_robber": false
 
 
 
 
 
 
 
 
108
  },
109
  {
110
  "id": 18,
 
 
111
  "type": "wheat",
112
  "number": 9,
113
+ "has_robber": false
 
 
 
 
 
 
 
 
114
  },
115
  {
116
  "id": 19,
 
 
117
  "type": "ore",
118
  "number": 2,
119
+ "has_robber": false
 
 
 
 
 
 
 
 
120
  }
121
  ],
122
  "settlements": [],
 
125
  "players": [
126
  {
127
  "id": 0,
128
+ "name": "ש",
129
  "victory_points": 0,
130
  "total_cards": 0,
131
  "cards_list": [],
 
141
  },
142
  {
143
  "id": 1,
144
+ "name": "ה",
145
  "victory_points": 0,
146
  "total_cards": 0,
147
  "cards_list": [],
 
157
  },
158
  {
159
  "id": 2,
160
+ "name": "ב",
161
  "victory_points": 0,
162
  "total_cards": 0,
163
  "cards_list": [],
 
182
  "points": [
183
  {
184
  "point_id": 1,
 
 
 
 
185
  "adjacent_points": [
186
  2,
187
  9
188
  ],
189
  "adjacent_hexes": [
190
  1
 
 
 
 
191
  ]
192
  },
193
  {
194
  "point_id": 2,
 
 
 
 
195
  "adjacent_points": [
196
  1,
197
  3
198
  ],
199
  "adjacent_hexes": [
200
  1
 
 
 
 
201
  ]
202
  },
203
  {
204
  "point_id": 3,
 
 
 
 
205
  "adjacent_points": [
206
  2,
207
  4,
 
210
  "adjacent_hexes": [
211
  2,
212
  1
 
 
 
 
213
  ]
214
  },
215
  {
216
  "point_id": 4,
 
 
 
 
217
  "adjacent_points": [
218
  3,
219
  5
220
  ],
221
  "adjacent_hexes": [
222
  2
 
 
 
 
223
  ]
224
  },
225
  {
226
  "point_id": 5,
 
 
 
 
227
  "adjacent_points": [
228
  4,
229
  6,
 
232
  "adjacent_hexes": [
233
  3,
234
  2
 
 
 
 
235
  ]
236
  },
237
  {
238
  "point_id": 6,
 
 
 
 
239
  "adjacent_points": [
240
  5,
241
  7
242
  ],
243
  "adjacent_hexes": [
244
  3
 
 
 
 
245
  ]
246
  },
247
  {
248
  "point_id": 7,
 
 
 
 
249
  "adjacent_points": [
250
  6,
251
  15
252
  ],
253
  "adjacent_hexes": [
254
  3
 
 
 
 
255
  ]
256
  },
257
  {
258
  "point_id": 8,
 
 
 
 
259
  "adjacent_points": [
260
  9,
261
  18
262
  ],
263
  "adjacent_hexes": [
264
  4
 
 
 
 
265
  ]
266
  },
267
  {
268
  "point_id": 9,
 
 
 
 
269
  "adjacent_points": [
270
  8,
271
  10,
 
274
  "adjacent_hexes": [
275
  4,
276
  1
 
 
 
 
277
  ]
278
  },
279
  {
280
  "point_id": 10,
 
 
 
 
281
  "adjacent_points": [
282
  9,
283
  11,
 
287
  5,
288
  4,
289
  1
 
 
 
 
290
  ]
291
  },
292
  {
293
  "point_id": 11,
 
 
 
 
294
  "adjacent_points": [
295
  10,
296
  12,
 
300
  5,
301
  2,
302
  1
 
 
 
 
303
  ]
304
  },
305
  {
306
  "point_id": 12,
 
 
 
 
307
  "adjacent_points": [
308
  11,
309
  13,
 
313
  6,
314
  5,
315
  2
 
 
 
 
316
  ]
317
  },
318
  {
319
  "point_id": 13,
 
 
 
 
320
  "adjacent_points": [
321
  12,
322
  14,
 
326
  6,
327
  3,
328
  2
 
 
 
 
329
  ]
330
  },
331
  {
332
  "point_id": 14,
 
 
 
 
333
  "adjacent_points": [
334
  13,
335
  15,
 
339
  7,
340
  6,
341
  3
 
 
 
 
342
  ]
343
  },
344
  {
345
  "point_id": 15,
 
 
 
 
346
  "adjacent_points": [
347
  14,
348
  16,
 
351
  "adjacent_hexes": [
352
  7,
353
  3
 
 
 
 
354
  ]
355
  },
356
  {
357
  "point_id": 16,
 
 
 
 
358
  "adjacent_points": [
359
  15,
360
  26
361
  ],
362
  "adjacent_hexes": [
363
  7
 
 
 
 
364
  ]
365
  },
366
  {
367
  "point_id": 17,
 
 
 
 
368
  "adjacent_points": [
369
  18,
370
  28
371
  ],
372
  "adjacent_hexes": [
373
  8
 
 
 
 
374
  ]
375
  },
376
  {
377
  "point_id": 18,
 
 
 
 
378
  "adjacent_points": [
379
  17,
380
  19,
 
383
  "adjacent_hexes": [
384
  8,
385
  4
 
 
 
 
386
  ]
387
  },
388
  {
389
  "point_id": 19,
 
 
 
 
390
  "adjacent_points": [
391
  18,
392
  20,
 
396
  9,
397
  8,
398
  4
 
 
 
 
399
  ]
400
  },
401
  {
402
  "point_id": 20,
 
 
 
 
403
  "adjacent_points": [
404
  19,
405
  21,
 
409
  9,
410
  5,
411
  4
 
 
 
 
412
  ]
413
  },
414
  {
415
  "point_id": 21,
 
 
 
 
416
  "adjacent_points": [
417
  20,
418
  22,
 
422
  10,
423
  9,
424
  5
 
 
 
 
425
  ]
426
  },
427
  {
428
  "point_id": 22,
 
 
 
 
429
  "adjacent_points": [
430
  21,
431
  23,
 
435
  10,
436
  6,
437
  5
 
 
 
 
438
  ]
439
  },
440
  {
441
  "point_id": 23,
 
 
 
 
442
  "adjacent_points": [
443
  22,
444
  24,
 
448
  11,
449
  10,
450
  6
 
 
 
 
451
  ]
452
  },
453
  {
454
  "point_id": 24,
 
 
 
 
455
  "adjacent_points": [
456
  23,
457
  25,
 
461
  11,
462
  7,
463
  6
 
 
 
 
464
  ]
465
  },
466
  {
467
  "point_id": 25,
 
 
 
 
468
  "adjacent_points": [
469
  24,
470
  26,
 
474
  12,
475
  11,
476
  7
 
 
 
 
477
  ]
478
  },
479
  {
480
  "point_id": 26,
 
 
 
 
481
  "adjacent_points": [
482
  25,
483
  27,
 
486
  "adjacent_hexes": [
487
  12,
488
  7
 
 
 
 
489
  ]
490
  },
491
  {
492
  "point_id": 27,
 
 
 
 
493
  "adjacent_points": [
494
  26,
495
  38
496
  ],
497
  "adjacent_hexes": [
498
  12
 
 
 
 
499
  ]
500
  },
501
  {
502
  "point_id": 28,
 
 
 
 
503
  "adjacent_points": [
504
  29,
505
  17
506
  ],
507
  "adjacent_hexes": [
508
  8
 
 
 
 
509
  ]
510
  },
511
  {
512
  "point_id": 29,
 
 
 
 
513
  "adjacent_points": [
514
  28,
515
  30,
 
518
  "adjacent_hexes": [
519
  13,
520
  8
 
 
 
 
521
  ]
522
  },
523
  {
524
  "point_id": 30,
 
 
 
 
525
  "adjacent_points": [
526
  29,
527
  31,
 
531
  13,
532
  9,
533
  8
 
 
 
 
534
  ]
535
  },
536
  {
537
  "point_id": 31,
 
 
 
 
538
  "adjacent_points": [
539
  30,
540
  32,
 
544
  14,
545
  13,
546
  9
 
 
 
 
547
  ]
548
  },
549
  {
550
  "point_id": 32,
 
 
 
 
551
  "adjacent_points": [
552
  31,
553
  33,
 
557
  14,
558
  10,
559
  9
 
 
 
 
560
  ]
561
  },
562
  {
563
  "point_id": 33,
 
 
 
 
564
  "adjacent_points": [
565
  32,
566
  34,
 
570
  15,
571
  14,
572
  10
 
 
 
 
573
  ]
574
  },
575
  {
576
  "point_id": 34,
 
 
 
 
577
  "adjacent_points": [
578
  33,
579
  35,
 
583
  15,
584
  11,
585
  10
 
 
 
 
586
  ]
587
  },
588
  {
589
  "point_id": 35,
 
 
 
 
590
  "adjacent_points": [
591
  34,
592
  36,
 
596
  16,
597
  15,
598
  11
 
 
 
 
599
  ]
600
  },
601
  {
602
  "point_id": 36,
 
 
 
 
603
  "adjacent_points": [
604
  35,
605
  37,
 
609
  16,
610
  12,
611
  11
 
 
 
 
612
  ]
613
  },
614
  {
615
  "point_id": 37,
 
 
 
 
616
  "adjacent_points": [
617
  36,
618
  38,
 
621
  "adjacent_hexes": [
622
  16,
623
  12
 
 
 
 
624
  ]
625
  },
626
  {
627
  "point_id": 38,
 
 
 
 
628
  "adjacent_points": [
629
  37,
630
  27
631
  ],
632
  "adjacent_hexes": [
633
  12
 
 
 
 
634
  ]
635
  },
636
  {
637
  "point_id": 39,
 
 
 
 
638
  "adjacent_points": [
639
  40,
640
  29
641
  ],
642
  "adjacent_hexes": [
643
  13
 
 
 
 
644
  ]
645
  },
646
  {
647
  "point_id": 40,
 
 
 
 
648
  "adjacent_points": [
649
  39,
650
  41,
 
653
  "adjacent_hexes": [
654
  17,
655
  13
 
 
 
 
656
  ]
657
  },
658
  {
659
  "point_id": 41,
 
 
 
 
660
  "adjacent_points": [
661
  40,
662
  42,
 
666
  17,
667
  14,
668
  13
 
 
 
 
669
  ]
670
  },
671
  {
672
  "point_id": 42,
 
 
 
 
673
  "adjacent_points": [
674
  41,
675
  43,
 
679
  18,
680
  17,
681
  14
 
 
 
 
682
  ]
683
  },
684
  {
685
  "point_id": 43,
 
 
 
 
686
  "adjacent_points": [
687
  42,
688
  44,
 
692
  18,
693
  15,
694
  14
 
 
 
 
695
  ]
696
  },
697
  {
698
  "point_id": 44,
 
 
 
 
699
  "adjacent_points": [
700
  43,
701
  45,
 
705
  19,
706
  18,
707
  15
 
 
 
 
708
  ]
709
  },
710
  {
711
  "point_id": 45,
 
 
 
 
712
  "adjacent_points": [
713
  44,
714
  46,
 
718
  19,
719
  16,
720
  15
 
 
 
 
721
  ]
722
  },
723
  {
724
  "point_id": 46,
 
 
 
 
725
  "adjacent_points": [
726
  45,
727
  47,
 
730
  "adjacent_hexes": [
731
  19,
732
  16
 
 
 
 
733
  ]
734
  },
735
  {
736
  "point_id": 47,
 
 
 
 
737
  "adjacent_points": [
738
  46,
739
  37
740
  ],
741
  "adjacent_hexes": [
742
  16
 
 
 
 
743
  ]
744
  },
745
  {
746
  "point_id": 48,
 
 
 
 
747
  "adjacent_points": [
748
  49,
749
  40
750
  ],
751
  "adjacent_hexes": [
752
  17
 
 
 
 
753
  ]
754
  },
755
  {
756
  "point_id": 49,
 
 
 
 
757
  "adjacent_points": [
758
  48,
759
  50
760
  ],
761
  "adjacent_hexes": [
762
  17
 
 
 
 
763
  ]
764
  },
765
  {
766
  "point_id": 50,
 
 
 
 
767
  "adjacent_points": [
768
  49,
769
  51,
 
772
  "adjacent_hexes": [
773
  18,
774
  17
 
 
 
 
775
  ]
776
  },
777
  {
778
  "point_id": 51,
 
 
 
 
779
  "adjacent_points": [
780
  50,
781
  52
782
  ],
783
  "adjacent_hexes": [
784
  18
 
 
 
 
785
  ]
786
  },
787
  {
788
  "point_id": 52,
 
 
 
 
789
  "adjacent_points": [
790
  51,
791
  53,
 
794
  "adjacent_hexes": [
795
  19,
796
  18
 
 
 
 
797
  ]
798
  },
799
  {
800
  "point_id": 53,
 
 
 
 
801
  "adjacent_points": [
802
  52,
803
  54
804
  ],
805
  "adjacent_hexes": [
806
  19
 
 
 
 
807
  ]
808
  },
809
  {
810
  "point_id": 54,
 
 
 
 
811
  "adjacent_points": [
812
  53,
813
  46
814
  ],
815
  "adjacent_hexes": [
816
  19
 
 
 
 
817
  ]
818
  }
819
+ ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
820
  }
821
  ]
822
  }
examples/ai_testing/my_games/{game_20251223_204440_final.json → game_20251226_143710_final.json} RENAMED
@@ -2,307 +2,117 @@
2
  "hexes": [
3
  {
4
  "id": 1,
5
- "q": 0,
6
- "r": -2,
7
  "type": "wood",
8
  "number": 12,
9
- "has_robber": false,
10
- "position": [
11
- 0,
12
- 0
13
- ],
14
- "axial_coords": [
15
- 0,
16
- -2
17
- ]
18
  },
19
  {
20
  "id": 2,
21
- "q": 1,
22
- "r": -2,
23
  "type": "sheep",
24
  "number": 5,
25
- "has_robber": false,
26
- "position": [
27
- 0,
28
- 1
29
- ],
30
- "axial_coords": [
31
- 1,
32
- -2
33
- ]
34
  },
35
  {
36
  "id": 3,
37
- "q": 2,
38
- "r": -2,
39
  "type": "wood",
40
  "number": 4,
41
- "has_robber": false,
42
- "position": [
43
- 0,
44
- 2
45
- ],
46
- "axial_coords": [
47
- 2,
48
- -2
49
- ]
50
  },
51
  {
52
  "id": 4,
53
- "q": -1,
54
- "r": -1,
55
  "type": "sheep",
56
  "number": 8,
57
- "has_robber": false,
58
- "position": [
59
- 1,
60
- 0
61
- ],
62
- "axial_coords": [
63
- -1,
64
- -1
65
- ]
66
  },
67
  {
68
  "id": 5,
69
- "q": 0,
70
- "r": -1,
71
  "type": "brick",
72
  "number": 6,
73
- "has_robber": false,
74
- "position": [
75
- 1,
76
- 1
77
- ],
78
- "axial_coords": [
79
- 0,
80
- -1
81
- ]
82
  },
83
  {
84
  "id": 6,
85
- "q": 1,
86
- "r": -1,
87
  "type": "wood",
88
  "number": 3,
89
- "has_robber": false,
90
- "position": [
91
- 1,
92
- 2
93
- ],
94
- "axial_coords": [
95
- 1,
96
- -1
97
- ]
98
  },
99
  {
100
  "id": 7,
101
- "q": 2,
102
- "r": -1,
103
  "type": "wheat",
104
  "number": 8,
105
- "has_robber": false,
106
- "position": [
107
- 1,
108
- 3
109
- ],
110
- "axial_coords": [
111
- 2,
112
- -1
113
- ]
114
  },
115
  {
116
  "id": 8,
117
- "q": -2,
118
- "r": 0,
119
  "type": "brick",
120
  "number": 10,
121
- "has_robber": false,
122
- "position": [
123
- 2,
124
- 0
125
- ],
126
- "axial_coords": [
127
- -2,
128
- 0
129
- ]
130
  },
131
  {
132
  "id": 9,
133
- "q": -1,
134
- "r": 0,
135
  "type": "wood",
136
  "number": 11,
137
- "has_robber": false,
138
- "position": [
139
- 2,
140
- 1
141
- ],
142
- "axial_coords": [
143
- -1,
144
- 0
145
- ]
146
  },
147
  {
148
  "id": 10,
149
- "q": 0,
150
- "r": 0,
151
  "type": "desert",
152
  "number": null,
153
- "has_robber": true,
154
- "position": [
155
- 2,
156
- 2
157
- ],
158
- "axial_coords": [
159
- 0,
160
- 0
161
- ]
162
  },
163
  {
164
  "id": 11,
165
- "q": 1,
166
- "r": 0,
167
  "type": "ore",
168
  "number": 3,
169
- "has_robber": false,
170
- "position": [
171
- 2,
172
- 3
173
- ],
174
- "axial_coords": [
175
- 1,
176
- 0
177
- ]
178
  },
179
  {
180
  "id": 12,
181
- "q": 2,
182
- "r": 0,
183
  "type": "sheep",
184
  "number": 4,
185
- "has_robber": false,
186
- "position": [
187
- 2,
188
- 4
189
- ],
190
- "axial_coords": [
191
- 2,
192
- 0
193
- ]
194
  },
195
  {
196
  "id": 13,
197
- "q": -2,
198
- "r": 1,
199
  "type": "brick",
200
  "number": 10,
201
- "has_robber": false,
202
- "position": [
203
- 3,
204
- 0
205
- ],
206
- "axial_coords": [
207
- -2,
208
- 1
209
- ]
210
  },
211
  {
212
  "id": 14,
213
- "q": -1,
214
- "r": 1,
215
  "type": "wheat",
216
  "number": 9,
217
- "has_robber": false,
218
- "position": [
219
- 3,
220
- 1
221
- ],
222
- "axial_coords": [
223
- -1,
224
- 1
225
- ]
226
  },
227
  {
228
  "id": 15,
229
- "q": 0,
230
- "r": 1,
231
  "type": "wheat",
232
  "number": 6,
233
- "has_robber": false,
234
- "position": [
235
- 3,
236
- 2
237
- ],
238
- "axial_coords": [
239
- 0,
240
- 1
241
- ]
242
  },
243
  {
244
  "id": 16,
245
- "q": 1,
246
- "r": 1,
247
  "type": "sheep",
248
  "number": 11,
249
- "has_robber": false,
250
- "position": [
251
- 3,
252
- 3
253
- ],
254
- "axial_coords": [
255
- 1,
256
- 1
257
- ]
258
  },
259
  {
260
  "id": 17,
261
- "q": -2,
262
- "r": 2,
263
  "type": "ore",
264
  "number": 5,
265
- "has_robber": false,
266
- "position": [
267
- 4,
268
- 0
269
- ],
270
- "axial_coords": [
271
- -2,
272
- 2
273
- ]
274
  },
275
  {
276
  "id": 18,
277
- "q": -1,
278
- "r": 2,
279
  "type": "wheat",
280
  "number": 9,
281
- "has_robber": false,
282
- "position": [
283
- 4,
284
- 1
285
- ],
286
- "axial_coords": [
287
- -1,
288
- 2
289
- ]
290
  },
291
  {
292
  "id": 19,
293
- "q": 0,
294
- "r": 2,
295
  "type": "ore",
296
  "number": 2,
297
- "has_robber": false,
298
- "position": [
299
- 4,
300
- 2
301
- ],
302
- "axial_coords": [
303
- 0,
304
- 2
305
- ]
306
  }
307
  ],
308
  "settlements": [],
@@ -368,46 +178,26 @@
368
  "points": [
369
  {
370
  "point_id": 1,
371
- "game_coords": [
372
- 0,
373
- 0
374
- ],
375
  "adjacent_points": [
376
  2,
377
  9
378
  ],
379
  "adjacent_hexes": [
380
  1
381
- ],
382
- "pixel_coords": [
383
- 377.5,
384
- 105.14428414850131
385
  ]
386
  },
387
  {
388
  "point_id": 2,
389
- "game_coords": [
390
- 0,
391
- 1
392
- ],
393
  "adjacent_points": [
394
  1,
395
  3
396
  ],
397
  "adjacent_hexes": [
398
  1
399
- ],
400
- "pixel_coords": [
401
- 422.5,
402
- 105.14428414850128
403
  ]
404
  },
405
  {
406
  "point_id": 3,
407
- "game_coords": [
408
- 0,
409
- 2
410
- ],
411
  "adjacent_points": [
412
  2,
413
  4,
@@ -416,36 +206,20 @@
416
  "adjacent_hexes": [
417
  2,
418
  1
419
- ],
420
- "pixel_coords": [
421
- 445,
422
- 144.11542731880104
423
  ]
424
  },
425
  {
426
  "point_id": 4,
427
- "game_coords": [
428
- 0,
429
- 3
430
- ],
431
  "adjacent_points": [
432
  3,
433
  5
434
  ],
435
  "adjacent_hexes": [
436
  2
437
- ],
438
- "pixel_coords": [
439
- 490,
440
- 144.11542731880104
441
  ]
442
  },
443
  {
444
  "point_id": 5,
445
- "game_coords": [
446
- 0,
447
- 4
448
- ],
449
  "adjacent_points": [
450
  4,
451
  6,
@@ -454,72 +228,40 @@
454
  "adjacent_hexes": [
455
  3,
456
  2
457
- ],
458
- "pixel_coords": [
459
- 512.5,
460
- 183.08657048910078
461
  ]
462
  },
463
  {
464
  "point_id": 6,
465
- "game_coords": [
466
- 0,
467
- 5
468
- ],
469
  "adjacent_points": [
470
  5,
471
  7
472
  ],
473
  "adjacent_hexes": [
474
  3
475
- ],
476
- "pixel_coords": [
477
- 557.5,
478
- 183.08657048910078
479
  ]
480
  },
481
  {
482
  "point_id": 7,
483
- "game_coords": [
484
- 0,
485
- 6
486
- ],
487
  "adjacent_points": [
488
  6,
489
  15
490
  ],
491
  "adjacent_hexes": [
492
  3
493
- ],
494
- "pixel_coords": [
495
- 580,
496
- 222.05771365940052
497
  ]
498
  },
499
  {
500
  "point_id": 8,
501
- "game_coords": [
502
- 1,
503
- 0
504
- ],
505
  "adjacent_points": [
506
  9,
507
  18
508
  ],
509
  "adjacent_hexes": [
510
  4
511
- ],
512
- "pixel_coords": [
513
- 310,
514
- 144.11542731880104
515
  ]
516
  },
517
  {
518
  "point_id": 9,
519
- "game_coords": [
520
- 1,
521
- 1
522
- ],
523
  "adjacent_points": [
524
  8,
525
  10,
@@ -528,18 +270,10 @@
528
  "adjacent_hexes": [
529
  4,
530
  1
531
- ],
532
- "pixel_coords": [
533
- 355,
534
- 144.11542731880104
535
  ]
536
  },
537
  {
538
  "point_id": 10,
539
- "game_coords": [
540
- 1,
541
- 2
542
- ],
543
  "adjacent_points": [
544
  9,
545
  11,
@@ -549,18 +283,10 @@
549
  5,
550
  4,
551
  1
552
- ],
553
- "pixel_coords": [
554
- 377.5,
555
- 183.08657048910078
556
  ]
557
  },
558
  {
559
  "point_id": 11,
560
- "game_coords": [
561
- 1,
562
- 3
563
- ],
564
  "adjacent_points": [
565
  10,
566
  12,
@@ -570,18 +296,10 @@
570
  5,
571
  2,
572
  1
573
- ],
574
- "pixel_coords": [
575
- 422.5,
576
- 183.08657048910078
577
  ]
578
  },
579
  {
580
  "point_id": 12,
581
- "game_coords": [
582
- 1,
583
- 4
584
- ],
585
  "adjacent_points": [
586
  11,
587
  13,
@@ -591,18 +309,10 @@
591
  6,
592
  5,
593
  2
594
- ],
595
- "pixel_coords": [
596
- 445,
597
- 222.05771365940052
598
  ]
599
  },
600
  {
601
  "point_id": 13,
602
- "game_coords": [
603
- 1,
604
- 5
605
- ],
606
  "adjacent_points": [
607
  12,
608
  14,
@@ -612,18 +322,10 @@
612
  6,
613
  3,
614
  2
615
- ],
616
- "pixel_coords": [
617
- 490,
618
- 222.05771365940052
619
  ]
620
  },
621
  {
622
  "point_id": 14,
623
- "game_coords": [
624
- 1,
625
- 6
626
- ],
627
  "adjacent_points": [
628
  13,
629
  15,
@@ -633,18 +335,10 @@
633
  7,
634
  6,
635
  3
636
- ],
637
- "pixel_coords": [
638
- 512.5,
639
- 261.02885682970026
640
  ]
641
  },
642
  {
643
  "point_id": 15,
644
- "game_coords": [
645
- 1,
646
- 7
647
- ],
648
  "adjacent_points": [
649
  14,
650
  16,
@@ -653,54 +347,30 @@
653
  "adjacent_hexes": [
654
  7,
655
  3
656
- ],
657
- "pixel_coords": [
658
- 557.5,
659
- 261.02885682970026
660
  ]
661
  },
662
  {
663
  "point_id": 16,
664
- "game_coords": [
665
- 1,
666
- 8
667
- ],
668
  "adjacent_points": [
669
  15,
670
  26
671
  ],
672
  "adjacent_hexes": [
673
  7
674
- ],
675
- "pixel_coords": [
676
- 580,
677
- 300
678
  ]
679
  },
680
  {
681
  "point_id": 17,
682
- "game_coords": [
683
- 2,
684
- 0
685
- ],
686
  "adjacent_points": [
687
  18,
688
  28
689
  ],
690
  "adjacent_hexes": [
691
  8
692
- ],
693
- "pixel_coords": [
694
- 242.49999999999997,
695
- 183.08657048910078
696
  ]
697
  },
698
  {
699
  "point_id": 18,
700
- "game_coords": [
701
- 2,
702
- 1
703
- ],
704
  "adjacent_points": [
705
  17,
706
  19,
@@ -709,18 +379,10 @@
709
  "adjacent_hexes": [
710
  8,
711
  4
712
- ],
713
- "pixel_coords": [
714
- 287.5,
715
- 183.08657048910078
716
  ]
717
  },
718
  {
719
  "point_id": 19,
720
- "game_coords": [
721
- 2,
722
- 2
723
- ],
724
  "adjacent_points": [
725
  18,
726
  20,
@@ -730,18 +392,10 @@
730
  9,
731
  8,
732
  4
733
- ],
734
- "pixel_coords": [
735
- 310,
736
- 222.05771365940052
737
  ]
738
  },
739
  {
740
  "point_id": 20,
741
- "game_coords": [
742
- 2,
743
- 3
744
- ],
745
  "adjacent_points": [
746
  19,
747
  21,
@@ -751,18 +405,10 @@
751
  9,
752
  5,
753
  4
754
- ],
755
- "pixel_coords": [
756
- 355,
757
- 222.05771365940052
758
  ]
759
  },
760
  {
761
  "point_id": 21,
762
- "game_coords": [
763
- 2,
764
- 4
765
- ],
766
  "adjacent_points": [
767
  20,
768
  22,
@@ -772,18 +418,10 @@
772
  10,
773
  9,
774
  5
775
- ],
776
- "pixel_coords": [
777
- 377.5,
778
- 261.02885682970026
779
  ]
780
  },
781
  {
782
  "point_id": 22,
783
- "game_coords": [
784
- 2,
785
- 5
786
- ],
787
  "adjacent_points": [
788
  21,
789
  23,
@@ -793,18 +431,10 @@
793
  10,
794
  6,
795
  5
796
- ],
797
- "pixel_coords": [
798
- 422.5,
799
- 261.02885682970026
800
  ]
801
  },
802
  {
803
  "point_id": 23,
804
- "game_coords": [
805
- 2,
806
- 6
807
- ],
808
  "adjacent_points": [
809
  22,
810
  24,
@@ -814,18 +444,10 @@
814
  11,
815
  10,
816
  6
817
- ],
818
- "pixel_coords": [
819
- 445,
820
- 300
821
  ]
822
  },
823
  {
824
  "point_id": 24,
825
- "game_coords": [
826
- 2,
827
- 7
828
- ],
829
  "adjacent_points": [
830
  23,
831
  25,
@@ -835,18 +457,10 @@
835
  11,
836
  7,
837
  6
838
- ],
839
- "pixel_coords": [
840
- 490,
841
- 300
842
  ]
843
  },
844
  {
845
  "point_id": 25,
846
- "game_coords": [
847
- 2,
848
- 8
849
- ],
850
  "adjacent_points": [
851
  24,
852
  26,
@@ -856,18 +470,10 @@
856
  12,
857
  11,
858
  7
859
- ],
860
- "pixel_coords": [
861
- 512.5,
862
- 338.97114317029974
863
  ]
864
  },
865
  {
866
  "point_id": 26,
867
- "game_coords": [
868
- 2,
869
- 9
870
- ],
871
  "adjacent_points": [
872
  25,
873
  27,
@@ -876,54 +482,30 @@
876
  "adjacent_hexes": [
877
  12,
878
  7
879
- ],
880
- "pixel_coords": [
881
- 557.5,
882
- 338.97114317029974
883
  ]
884
  },
885
  {
886
  "point_id": 27,
887
- "game_coords": [
888
- 2,
889
- 10
890
- ],
891
  "adjacent_points": [
892
  26,
893
  38
894
  ],
895
  "adjacent_hexes": [
896
  12
897
- ],
898
- "pixel_coords": [
899
- 580,
900
- 377.9422863405995
901
  ]
902
  },
903
  {
904
  "point_id": 28,
905
- "game_coords": [
906
- 3,
907
- 0
908
- ],
909
  "adjacent_points": [
910
  29,
911
  17
912
  ],
913
  "adjacent_hexes": [
914
  8
915
- ],
916
- "pixel_coords": [
917
- 220,
918
- 222.05771365940052
919
  ]
920
  },
921
  {
922
  "point_id": 29,
923
- "game_coords": [
924
- 3,
925
- 1
926
- ],
927
  "adjacent_points": [
928
  28,
929
  30,
@@ -932,18 +514,10 @@
932
  "adjacent_hexes": [
933
  13,
934
  8
935
- ],
936
- "pixel_coords": [
937
- 242.5,
938
- 261.02885682970026
939
  ]
940
  },
941
  {
942
  "point_id": 30,
943
- "game_coords": [
944
- 3,
945
- 2
946
- ],
947
  "adjacent_points": [
948
  29,
949
  31,
@@ -953,18 +527,10 @@
953
  13,
954
  9,
955
  8
956
- ],
957
- "pixel_coords": [
958
- 287.5,
959
- 261.02885682970026
960
  ]
961
  },
962
  {
963
  "point_id": 31,
964
- "game_coords": [
965
- 3,
966
- 3
967
- ],
968
  "adjacent_points": [
969
  30,
970
  32,
@@ -974,18 +540,10 @@
974
  14,
975
  13,
976
  9
977
- ],
978
- "pixel_coords": [
979
- 310,
980
- 300
981
  ]
982
  },
983
  {
984
  "point_id": 32,
985
- "game_coords": [
986
- 3,
987
- 4
988
- ],
989
  "adjacent_points": [
990
  31,
991
  33,
@@ -995,18 +553,10 @@
995
  14,
996
  10,
997
  9
998
- ],
999
- "pixel_coords": [
1000
- 355,
1001
- 300
1002
  ]
1003
  },
1004
  {
1005
  "point_id": 33,
1006
- "game_coords": [
1007
- 3,
1008
- 5
1009
- ],
1010
  "adjacent_points": [
1011
  32,
1012
  34,
@@ -1016,18 +566,10 @@
1016
  15,
1017
  14,
1018
  10
1019
- ],
1020
- "pixel_coords": [
1021
- 377.5,
1022
- 338.97114317029974
1023
  ]
1024
  },
1025
  {
1026
  "point_id": 34,
1027
- "game_coords": [
1028
- 3,
1029
- 6
1030
- ],
1031
  "adjacent_points": [
1032
  33,
1033
  35,
@@ -1037,18 +579,10 @@
1037
  15,
1038
  11,
1039
  10
1040
- ],
1041
- "pixel_coords": [
1042
- 422.5,
1043
- 338.97114317029974
1044
  ]
1045
  },
1046
  {
1047
  "point_id": 35,
1048
- "game_coords": [
1049
- 3,
1050
- 7
1051
- ],
1052
  "adjacent_points": [
1053
  34,
1054
  36,
@@ -1058,18 +592,10 @@
1058
  16,
1059
  15,
1060
  11
1061
- ],
1062
- "pixel_coords": [
1063
- 445,
1064
- 377.9422863405995
1065
  ]
1066
  },
1067
  {
1068
  "point_id": 36,
1069
- "game_coords": [
1070
- 3,
1071
- 8
1072
- ],
1073
  "adjacent_points": [
1074
  35,
1075
  37,
@@ -1079,18 +605,10 @@
1079
  16,
1080
  12,
1081
  11
1082
- ],
1083
- "pixel_coords": [
1084
- 490,
1085
- 377.9422863405995
1086
  ]
1087
  },
1088
  {
1089
  "point_id": 37,
1090
- "game_coords": [
1091
- 3,
1092
- 9
1093
- ],
1094
  "adjacent_points": [
1095
  36,
1096
  38,
@@ -1099,54 +617,30 @@
1099
  "adjacent_hexes": [
1100
  16,
1101
  12
1102
- ],
1103
- "pixel_coords": [
1104
- 512.5,
1105
- 416.9134295108992
1106
  ]
1107
  },
1108
  {
1109
  "point_id": 38,
1110
- "game_coords": [
1111
- 3,
1112
- 10
1113
- ],
1114
  "adjacent_points": [
1115
  37,
1116
  27
1117
  ],
1118
  "adjacent_hexes": [
1119
  12
1120
- ],
1121
- "pixel_coords": [
1122
- 557.5,
1123
- 416.9134295108992
1124
  ]
1125
  },
1126
  {
1127
  "point_id": 39,
1128
- "game_coords": [
1129
- 4,
1130
- 0
1131
- ],
1132
  "adjacent_points": [
1133
  40,
1134
  29
1135
  ],
1136
  "adjacent_hexes": [
1137
  13
1138
- ],
1139
- "pixel_coords": [
1140
- 220,
1141
- 300
1142
  ]
1143
  },
1144
  {
1145
  "point_id": 40,
1146
- "game_coords": [
1147
- 4,
1148
- 1
1149
- ],
1150
  "adjacent_points": [
1151
  39,
1152
  41,
@@ -1155,18 +649,10 @@
1155
  "adjacent_hexes": [
1156
  17,
1157
  13
1158
- ],
1159
- "pixel_coords": [
1160
- 242.5,
1161
- 338.97114317029974
1162
  ]
1163
  },
1164
  {
1165
  "point_id": 41,
1166
- "game_coords": [
1167
- 4,
1168
- 2
1169
- ],
1170
  "adjacent_points": [
1171
  40,
1172
  42,
@@ -1176,18 +662,10 @@
1176
  17,
1177
  14,
1178
  13
1179
- ],
1180
- "pixel_coords": [
1181
- 287.5,
1182
- 338.97114317029974
1183
  ]
1184
  },
1185
  {
1186
  "point_id": 42,
1187
- "game_coords": [
1188
- 4,
1189
- 3
1190
- ],
1191
  "adjacent_points": [
1192
  41,
1193
  43,
@@ -1197,18 +675,10 @@
1197
  18,
1198
  17,
1199
  14
1200
- ],
1201
- "pixel_coords": [
1202
- 310,
1203
- 377.9422863405995
1204
  ]
1205
  },
1206
  {
1207
  "point_id": 43,
1208
- "game_coords": [
1209
- 4,
1210
- 4
1211
- ],
1212
  "adjacent_points": [
1213
  42,
1214
  44,
@@ -1218,18 +688,10 @@
1218
  18,
1219
  15,
1220
  14
1221
- ],
1222
- "pixel_coords": [
1223
- 355,
1224
- 377.9422863405995
1225
  ]
1226
  },
1227
  {
1228
  "point_id": 44,
1229
- "game_coords": [
1230
- 4,
1231
- 5
1232
- ],
1233
  "adjacent_points": [
1234
  43,
1235
  45,
@@ -1239,18 +701,10 @@
1239
  19,
1240
  18,
1241
  15
1242
- ],
1243
- "pixel_coords": [
1244
- 377.5,
1245
- 416.9134295108992
1246
  ]
1247
  },
1248
  {
1249
  "point_id": 45,
1250
- "game_coords": [
1251
- 4,
1252
- 6
1253
- ],
1254
  "adjacent_points": [
1255
  44,
1256
  46,
@@ -1260,18 +714,10 @@
1260
  19,
1261
  16,
1262
  15
1263
- ],
1264
- "pixel_coords": [
1265
- 422.5,
1266
- 416.9134295108992
1267
  ]
1268
  },
1269
  {
1270
  "point_id": 46,
1271
- "game_coords": [
1272
- 4,
1273
- 7
1274
- ],
1275
  "adjacent_points": [
1276
  45,
1277
  47,
@@ -1280,72 +726,40 @@
1280
  "adjacent_hexes": [
1281
  19,
1282
  16
1283
- ],
1284
- "pixel_coords": [
1285
- 445,
1286
- 455.88457268119896
1287
  ]
1288
  },
1289
  {
1290
  "point_id": 47,
1291
- "game_coords": [
1292
- 4,
1293
- 8
1294
- ],
1295
  "adjacent_points": [
1296
  46,
1297
  37
1298
  ],
1299
  "adjacent_hexes": [
1300
  16
1301
- ],
1302
- "pixel_coords": [
1303
- 490,
1304
- 455.88457268119896
1305
  ]
1306
  },
1307
  {
1308
  "point_id": 48,
1309
- "game_coords": [
1310
- 5,
1311
- 0
1312
- ],
1313
  "adjacent_points": [
1314
  49,
1315
  40
1316
  ],
1317
  "adjacent_hexes": [
1318
  17
1319
- ],
1320
- "pixel_coords": [
1321
- 220,
1322
- 377.9422863405995
1323
  ]
1324
  },
1325
  {
1326
  "point_id": 49,
1327
- "game_coords": [
1328
- 5,
1329
- 1
1330
- ],
1331
  "adjacent_points": [
1332
  48,
1333
  50
1334
  ],
1335
  "adjacent_hexes": [
1336
  17
1337
- ],
1338
- "pixel_coords": [
1339
- 242.5,
1340
- 416.9134295108992
1341
  ]
1342
  },
1343
  {
1344
  "point_id": 50,
1345
- "game_coords": [
1346
- 5,
1347
- 2
1348
- ],
1349
  "adjacent_points": [
1350
  49,
1351
  51,
@@ -1354,36 +768,20 @@
1354
  "adjacent_hexes": [
1355
  18,
1356
  17
1357
- ],
1358
- "pixel_coords": [
1359
- 287.5,
1360
- 416.9134295108992
1361
  ]
1362
  },
1363
  {
1364
  "point_id": 51,
1365
- "game_coords": [
1366
- 5,
1367
- 3
1368
- ],
1369
  "adjacent_points": [
1370
  50,
1371
  52
1372
  ],
1373
  "adjacent_hexes": [
1374
  18
1375
- ],
1376
- "pixel_coords": [
1377
- 310,
1378
- 455.88457268119896
1379
  ]
1380
  },
1381
  {
1382
  "point_id": 52,
1383
- "game_coords": [
1384
- 5,
1385
- 4
1386
- ],
1387
  "adjacent_points": [
1388
  51,
1389
  53,
@@ -1392,459 +790,27 @@
1392
  "adjacent_hexes": [
1393
  19,
1394
  18
1395
- ],
1396
- "pixel_coords": [
1397
- 355,
1398
- 455.88457268119896
1399
  ]
1400
  },
1401
  {
1402
  "point_id": 53,
1403
- "game_coords": [
1404
- 5,
1405
- 5
1406
- ],
1407
  "adjacent_points": [
1408
  52,
1409
  54
1410
  ],
1411
  "adjacent_hexes": [
1412
  19
1413
- ],
1414
- "pixel_coords": [
1415
- 377.5,
1416
- 494.8557158514987
1417
  ]
1418
  },
1419
  {
1420
  "point_id": 54,
1421
- "game_coords": [
1422
- 5,
1423
- 6
1424
- ],
1425
  "adjacent_points": [
1426
  53,
1427
  46
1428
  ],
1429
  "adjacent_hexes": [
1430
  19
1431
- ],
1432
- "pixel_coords": [
1433
- 422.5,
1434
- 494.8557158514987
1435
  ]
1436
  }
1437
- ],
1438
- "board_graph": {
1439
- "adjacency": {
1440
- "1": [
1441
- 2,
1442
- 9
1443
- ],
1444
- "2": [
1445
- 1,
1446
- 3
1447
- ],
1448
- "3": [
1449
- 2,
1450
- 4,
1451
- 11
1452
- ],
1453
- "4": [
1454
- 3,
1455
- 5
1456
- ],
1457
- "5": [
1458
- 4,
1459
- 6,
1460
- 13
1461
- ],
1462
- "6": [
1463
- 5,
1464
- 7
1465
- ],
1466
- "7": [
1467
- 6,
1468
- 15
1469
- ],
1470
- "8": [
1471
- 9,
1472
- 18
1473
- ],
1474
- "9": [
1475
- 8,
1476
- 10,
1477
- 1
1478
- ],
1479
- "10": [
1480
- 9,
1481
- 11,
1482
- 20
1483
- ],
1484
- "11": [
1485
- 10,
1486
- 12,
1487
- 3
1488
- ],
1489
- "12": [
1490
- 11,
1491
- 13,
1492
- 22
1493
- ],
1494
- "13": [
1495
- 12,
1496
- 14,
1497
- 5
1498
- ],
1499
- "14": [
1500
- 13,
1501
- 15,
1502
- 24
1503
- ],
1504
- "15": [
1505
- 14,
1506
- 16,
1507
- 7
1508
- ],
1509
- "16": [
1510
- 15,
1511
- 26
1512
- ],
1513
- "17": [
1514
- 18,
1515
- 28
1516
- ],
1517
- "18": [
1518
- 17,
1519
- 19,
1520
- 8
1521
- ],
1522
- "19": [
1523
- 18,
1524
- 20,
1525
- 30
1526
- ],
1527
- "20": [
1528
- 19,
1529
- 21,
1530
- 10
1531
- ],
1532
- "21": [
1533
- 20,
1534
- 22,
1535
- 32
1536
- ],
1537
- "22": [
1538
- 21,
1539
- 23,
1540
- 12
1541
- ],
1542
- "23": [
1543
- 22,
1544
- 24,
1545
- 34
1546
- ],
1547
- "24": [
1548
- 23,
1549
- 25,
1550
- 14
1551
- ],
1552
- "25": [
1553
- 24,
1554
- 26,
1555
- 36
1556
- ],
1557
- "26": [
1558
- 25,
1559
- 27,
1560
- 16
1561
- ],
1562
- "27": [
1563
- 26,
1564
- 38
1565
- ],
1566
- "28": [
1567
- 29,
1568
- 17
1569
- ],
1570
- "29": [
1571
- 28,
1572
- 30,
1573
- 39
1574
- ],
1575
- "30": [
1576
- 29,
1577
- 31,
1578
- 19
1579
- ],
1580
- "31": [
1581
- 30,
1582
- 32,
1583
- 41
1584
- ],
1585
- "32": [
1586
- 31,
1587
- 33,
1588
- 21
1589
- ],
1590
- "33": [
1591
- 32,
1592
- 34,
1593
- 43
1594
- ],
1595
- "34": [
1596
- 33,
1597
- 35,
1598
- 23
1599
- ],
1600
- "35": [
1601
- 34,
1602
- 36,
1603
- 45
1604
- ],
1605
- "36": [
1606
- 35,
1607
- 37,
1608
- 25
1609
- ],
1610
- "37": [
1611
- 36,
1612
- 38,
1613
- 47
1614
- ],
1615
- "38": [
1616
- 37,
1617
- 27
1618
- ],
1619
- "39": [
1620
- 40,
1621
- 29
1622
- ],
1623
- "40": [
1624
- 39,
1625
- 41,
1626
- 48
1627
- ],
1628
- "41": [
1629
- 40,
1630
- 42,
1631
- 31
1632
- ],
1633
- "42": [
1634
- 41,
1635
- 43,
1636
- 50
1637
- ],
1638
- "43": [
1639
- 42,
1640
- 44,
1641
- 33
1642
- ],
1643
- "44": [
1644
- 43,
1645
- 45,
1646
- 52
1647
- ],
1648
- "45": [
1649
- 44,
1650
- 46,
1651
- 35
1652
- ],
1653
- "46": [
1654
- 45,
1655
- 47,
1656
- 54
1657
- ],
1658
- "47": [
1659
- 46,
1660
- 37
1661
- ],
1662
- "48": [
1663
- 49,
1664
- 40
1665
- ],
1666
- "49": [
1667
- 48,
1668
- 50
1669
- ],
1670
- "50": [
1671
- 49,
1672
- 51,
1673
- 42
1674
- ],
1675
- "51": [
1676
- 50,
1677
- 52
1678
- ],
1679
- "52": [
1680
- 51,
1681
- 53,
1682
- 44
1683
- ],
1684
- "53": [
1685
- 52,
1686
- 54
1687
- ],
1688
- "54": [
1689
- 53,
1690
- 46
1691
- ]
1692
- },
1693
- "hex_to_points": {
1694
- "1": [
1695
- 1,
1696
- 2,
1697
- 3,
1698
- 9,
1699
- 10,
1700
- 11
1701
- ],
1702
- "2": [
1703
- 3,
1704
- 4,
1705
- 5,
1706
- 11,
1707
- 12,
1708
- 13
1709
- ],
1710
- "3": [
1711
- 5,
1712
- 6,
1713
- 7,
1714
- 13,
1715
- 14,
1716
- 15
1717
- ],
1718
- "4": [
1719
- 8,
1720
- 9,
1721
- 10,
1722
- 18,
1723
- 19,
1724
- 20
1725
- ],
1726
- "5": [
1727
- 10,
1728
- 11,
1729
- 12,
1730
- 20,
1731
- 21,
1732
- 22
1733
- ],
1734
- "6": [
1735
- 12,
1736
- 13,
1737
- 14,
1738
- 22,
1739
- 23,
1740
- 24
1741
- ],
1742
- "7": [
1743
- 14,
1744
- 15,
1745
- 16,
1746
- 24,
1747
- 25,
1748
- 26
1749
- ],
1750
- "8": [
1751
- 17,
1752
- 18,
1753
- 19,
1754
- 28,
1755
- 29,
1756
- 30
1757
- ],
1758
- "9": [
1759
- 19,
1760
- 20,
1761
- 21,
1762
- 30,
1763
- 31,
1764
- 32
1765
- ],
1766
- "10": [
1767
- 21,
1768
- 22,
1769
- 23,
1770
- 32,
1771
- 33,
1772
- 34
1773
- ],
1774
- "11": [
1775
- 23,
1776
- 24,
1777
- 25,
1778
- 34,
1779
- 35,
1780
- 36
1781
- ],
1782
- "12": [
1783
- 25,
1784
- 26,
1785
- 27,
1786
- 36,
1787
- 37,
1788
- 38
1789
- ],
1790
- "13": [
1791
- 29,
1792
- 30,
1793
- 31,
1794
- 39,
1795
- 40,
1796
- 41
1797
- ],
1798
- "14": [
1799
- 31,
1800
- 32,
1801
- 33,
1802
- 41,
1803
- 42,
1804
- 43
1805
- ],
1806
- "15": [
1807
- 33,
1808
- 34,
1809
- 35,
1810
- 43,
1811
- 44,
1812
- 45
1813
- ],
1814
- "16": [
1815
- 35,
1816
- 36,
1817
- 37,
1818
- 45,
1819
- 46,
1820
- 47
1821
- ],
1822
- "17": [
1823
- 40,
1824
- 41,
1825
- 42,
1826
- 48,
1827
- 49,
1828
- 50
1829
- ],
1830
- "18": [
1831
- 42,
1832
- 43,
1833
- 44,
1834
- 50,
1835
- 51,
1836
- 52
1837
- ],
1838
- "19": [
1839
- 44,
1840
- 45,
1841
- 46,
1842
- 52,
1843
- 53,
1844
- 54
1845
- ]
1846
- },
1847
- "total_points": 54,
1848
- "total_hexes": 19
1849
- }
1850
  }
 
2
  "hexes": [
3
  {
4
  "id": 1,
 
 
5
  "type": "wood",
6
  "number": 12,
7
+ "has_robber": false
 
 
 
 
 
 
 
 
8
  },
9
  {
10
  "id": 2,
 
 
11
  "type": "sheep",
12
  "number": 5,
13
+ "has_robber": false
 
 
 
 
 
 
 
 
14
  },
15
  {
16
  "id": 3,
 
 
17
  "type": "wood",
18
  "number": 4,
19
+ "has_robber": false
 
 
 
 
 
 
 
 
20
  },
21
  {
22
  "id": 4,
 
 
23
  "type": "sheep",
24
  "number": 8,
25
+ "has_robber": false
 
 
 
 
 
 
 
 
26
  },
27
  {
28
  "id": 5,
 
 
29
  "type": "brick",
30
  "number": 6,
31
+ "has_robber": false
 
 
 
 
 
 
 
 
32
  },
33
  {
34
  "id": 6,
 
 
35
  "type": "wood",
36
  "number": 3,
37
+ "has_robber": false
 
 
 
 
 
 
 
 
38
  },
39
  {
40
  "id": 7,
 
 
41
  "type": "wheat",
42
  "number": 8,
43
+ "has_robber": false
 
 
 
 
 
 
 
 
44
  },
45
  {
46
  "id": 8,
 
 
47
  "type": "brick",
48
  "number": 10,
49
+ "has_robber": false
 
 
 
 
 
 
 
 
50
  },
51
  {
52
  "id": 9,
 
 
53
  "type": "wood",
54
  "number": 11,
55
+ "has_robber": false
 
 
 
 
 
 
 
 
56
  },
57
  {
58
  "id": 10,
 
 
59
  "type": "desert",
60
  "number": null,
61
+ "has_robber": true
 
 
 
 
 
 
 
 
62
  },
63
  {
64
  "id": 11,
 
 
65
  "type": "ore",
66
  "number": 3,
67
+ "has_robber": false
 
 
 
 
 
 
 
 
68
  },
69
  {
70
  "id": 12,
 
 
71
  "type": "sheep",
72
  "number": 4,
73
+ "has_robber": false
 
 
 
 
 
 
 
 
74
  },
75
  {
76
  "id": 13,
 
 
77
  "type": "brick",
78
  "number": 10,
79
+ "has_robber": false
 
 
 
 
 
 
 
 
80
  },
81
  {
82
  "id": 14,
 
 
83
  "type": "wheat",
84
  "number": 9,
85
+ "has_robber": false
 
 
 
 
 
 
 
 
86
  },
87
  {
88
  "id": 15,
 
 
89
  "type": "wheat",
90
  "number": 6,
91
+ "has_robber": false
 
 
 
 
 
 
 
 
92
  },
93
  {
94
  "id": 16,
 
 
95
  "type": "sheep",
96
  "number": 11,
97
+ "has_robber": false
 
 
 
 
 
 
 
 
98
  },
99
  {
100
  "id": 17,
 
 
101
  "type": "ore",
102
  "number": 5,
103
+ "has_robber": false
 
 
 
 
 
 
 
 
104
  },
105
  {
106
  "id": 18,
 
 
107
  "type": "wheat",
108
  "number": 9,
109
+ "has_robber": false
 
 
 
 
 
 
 
 
110
  },
111
  {
112
  "id": 19,
 
 
113
  "type": "ore",
114
  "number": 2,
115
+ "has_robber": false
 
 
 
 
 
 
 
 
116
  }
117
  ],
118
  "settlements": [],
 
178
  "points": [
179
  {
180
  "point_id": 1,
 
 
 
 
181
  "adjacent_points": [
182
  2,
183
  9
184
  ],
185
  "adjacent_hexes": [
186
  1
 
 
 
 
187
  ]
188
  },
189
  {
190
  "point_id": 2,
 
 
 
 
191
  "adjacent_points": [
192
  1,
193
  3
194
  ],
195
  "adjacent_hexes": [
196
  1
 
 
 
 
197
  ]
198
  },
199
  {
200
  "point_id": 3,
 
 
 
 
201
  "adjacent_points": [
202
  2,
203
  4,
 
206
  "adjacent_hexes": [
207
  2,
208
  1
 
 
 
 
209
  ]
210
  },
211
  {
212
  "point_id": 4,
 
 
 
 
213
  "adjacent_points": [
214
  3,
215
  5
216
  ],
217
  "adjacent_hexes": [
218
  2
 
 
 
 
219
  ]
220
  },
221
  {
222
  "point_id": 5,
 
 
 
 
223
  "adjacent_points": [
224
  4,
225
  6,
 
228
  "adjacent_hexes": [
229
  3,
230
  2
 
 
 
 
231
  ]
232
  },
233
  {
234
  "point_id": 6,
 
 
 
 
235
  "adjacent_points": [
236
  5,
237
  7
238
  ],
239
  "adjacent_hexes": [
240
  3
 
 
 
 
241
  ]
242
  },
243
  {
244
  "point_id": 7,
 
 
 
 
245
  "adjacent_points": [
246
  6,
247
  15
248
  ],
249
  "adjacent_hexes": [
250
  3
 
 
 
 
251
  ]
252
  },
253
  {
254
  "point_id": 8,
 
 
 
 
255
  "adjacent_points": [
256
  9,
257
  18
258
  ],
259
  "adjacent_hexes": [
260
  4
 
 
 
 
261
  ]
262
  },
263
  {
264
  "point_id": 9,
 
 
 
 
265
  "adjacent_points": [
266
  8,
267
  10,
 
270
  "adjacent_hexes": [
271
  4,
272
  1
 
 
 
 
273
  ]
274
  },
275
  {
276
  "point_id": 10,
 
 
 
 
277
  "adjacent_points": [
278
  9,
279
  11,
 
283
  5,
284
  4,
285
  1
 
 
 
 
286
  ]
287
  },
288
  {
289
  "point_id": 11,
 
 
 
 
290
  "adjacent_points": [
291
  10,
292
  12,
 
296
  5,
297
  2,
298
  1
 
 
 
 
299
  ]
300
  },
301
  {
302
  "point_id": 12,
 
 
 
 
303
  "adjacent_points": [
304
  11,
305
  13,
 
309
  6,
310
  5,
311
  2
 
 
 
 
312
  ]
313
  },
314
  {
315
  "point_id": 13,
 
 
 
 
316
  "adjacent_points": [
317
  12,
318
  14,
 
322
  6,
323
  3,
324
  2
 
 
 
 
325
  ]
326
  },
327
  {
328
  "point_id": 14,
 
 
 
 
329
  "adjacent_points": [
330
  13,
331
  15,
 
335
  7,
336
  6,
337
  3
 
 
 
 
338
  ]
339
  },
340
  {
341
  "point_id": 15,
 
 
 
 
342
  "adjacent_points": [
343
  14,
344
  16,
 
347
  "adjacent_hexes": [
348
  7,
349
  3
 
 
 
 
350
  ]
351
  },
352
  {
353
  "point_id": 16,
 
 
 
 
354
  "adjacent_points": [
355
  15,
356
  26
357
  ],
358
  "adjacent_hexes": [
359
  7
 
 
 
 
360
  ]
361
  },
362
  {
363
  "point_id": 17,
 
 
 
 
364
  "adjacent_points": [
365
  18,
366
  28
367
  ],
368
  "adjacent_hexes": [
369
  8
 
 
 
 
370
  ]
371
  },
372
  {
373
  "point_id": 18,
 
 
 
 
374
  "adjacent_points": [
375
  17,
376
  19,
 
379
  "adjacent_hexes": [
380
  8,
381
  4
 
 
 
 
382
  ]
383
  },
384
  {
385
  "point_id": 19,
 
 
 
 
386
  "adjacent_points": [
387
  18,
388
  20,
 
392
  9,
393
  8,
394
  4
 
 
 
 
395
  ]
396
  },
397
  {
398
  "point_id": 20,
 
 
 
 
399
  "adjacent_points": [
400
  19,
401
  21,
 
405
  9,
406
  5,
407
  4
 
 
 
 
408
  ]
409
  },
410
  {
411
  "point_id": 21,
 
 
 
 
412
  "adjacent_points": [
413
  20,
414
  22,
 
418
  10,
419
  9,
420
  5
 
 
 
 
421
  ]
422
  },
423
  {
424
  "point_id": 22,
 
 
 
 
425
  "adjacent_points": [
426
  21,
427
  23,
 
431
  10,
432
  6,
433
  5
 
 
 
 
434
  ]
435
  },
436
  {
437
  "point_id": 23,
 
 
 
 
438
  "adjacent_points": [
439
  22,
440
  24,
 
444
  11,
445
  10,
446
  6
 
 
 
 
447
  ]
448
  },
449
  {
450
  "point_id": 24,
 
 
 
 
451
  "adjacent_points": [
452
  23,
453
  25,
 
457
  11,
458
  7,
459
  6
 
 
 
 
460
  ]
461
  },
462
  {
463
  "point_id": 25,
 
 
 
 
464
  "adjacent_points": [
465
  24,
466
  26,
 
470
  12,
471
  11,
472
  7
 
 
 
 
473
  ]
474
  },
475
  {
476
  "point_id": 26,
 
 
 
 
477
  "adjacent_points": [
478
  25,
479
  27,
 
482
  "adjacent_hexes": [
483
  12,
484
  7
 
 
 
 
485
  ]
486
  },
487
  {
488
  "point_id": 27,
 
 
 
 
489
  "adjacent_points": [
490
  26,
491
  38
492
  ],
493
  "adjacent_hexes": [
494
  12
 
 
 
 
495
  ]
496
  },
497
  {
498
  "point_id": 28,
 
 
 
 
499
  "adjacent_points": [
500
  29,
501
  17
502
  ],
503
  "adjacent_hexes": [
504
  8
 
 
 
 
505
  ]
506
  },
507
  {
508
  "point_id": 29,
 
 
 
 
509
  "adjacent_points": [
510
  28,
511
  30,
 
514
  "adjacent_hexes": [
515
  13,
516
  8
 
 
 
 
517
  ]
518
  },
519
  {
520
  "point_id": 30,
 
 
 
 
521
  "adjacent_points": [
522
  29,
523
  31,
 
527
  13,
528
  9,
529
  8
 
 
 
 
530
  ]
531
  },
532
  {
533
  "point_id": 31,
 
 
 
 
534
  "adjacent_points": [
535
  30,
536
  32,
 
540
  14,
541
  13,
542
  9
 
 
 
 
543
  ]
544
  },
545
  {
546
  "point_id": 32,
 
 
 
 
547
  "adjacent_points": [
548
  31,
549
  33,
 
553
  14,
554
  10,
555
  9
 
 
 
 
556
  ]
557
  },
558
  {
559
  "point_id": 33,
 
 
 
 
560
  "adjacent_points": [
561
  32,
562
  34,
 
566
  15,
567
  14,
568
  10
 
 
 
 
569
  ]
570
  },
571
  {
572
  "point_id": 34,
 
 
 
 
573
  "adjacent_points": [
574
  33,
575
  35,
 
579
  15,
580
  11,
581
  10
 
 
 
 
582
  ]
583
  },
584
  {
585
  "point_id": 35,
 
 
 
 
586
  "adjacent_points": [
587
  34,
588
  36,
 
592
  16,
593
  15,
594
  11
 
 
 
 
595
  ]
596
  },
597
  {
598
  "point_id": 36,
 
 
 
 
599
  "adjacent_points": [
600
  35,
601
  37,
 
605
  16,
606
  12,
607
  11
 
 
 
 
608
  ]
609
  },
610
  {
611
  "point_id": 37,
 
 
 
 
612
  "adjacent_points": [
613
  36,
614
  38,
 
617
  "adjacent_hexes": [
618
  16,
619
  12
 
 
 
 
620
  ]
621
  },
622
  {
623
  "point_id": 38,
 
 
 
 
624
  "adjacent_points": [
625
  37,
626
  27
627
  ],
628
  "adjacent_hexes": [
629
  12
 
 
 
 
630
  ]
631
  },
632
  {
633
  "point_id": 39,
 
 
 
 
634
  "adjacent_points": [
635
  40,
636
  29
637
  ],
638
  "adjacent_hexes": [
639
  13
 
 
 
 
640
  ]
641
  },
642
  {
643
  "point_id": 40,
 
 
 
 
644
  "adjacent_points": [
645
  39,
646
  41,
 
649
  "adjacent_hexes": [
650
  17,
651
  13
 
 
 
 
652
  ]
653
  },
654
  {
655
  "point_id": 41,
 
 
 
 
656
  "adjacent_points": [
657
  40,
658
  42,
 
662
  17,
663
  14,
664
  13
 
 
 
 
665
  ]
666
  },
667
  {
668
  "point_id": 42,
 
 
 
 
669
  "adjacent_points": [
670
  41,
671
  43,
 
675
  18,
676
  17,
677
  14
 
 
 
 
678
  ]
679
  },
680
  {
681
  "point_id": 43,
 
 
 
 
682
  "adjacent_points": [
683
  42,
684
  44,
 
688
  18,
689
  15,
690
  14
 
 
 
 
691
  ]
692
  },
693
  {
694
  "point_id": 44,
 
 
 
 
695
  "adjacent_points": [
696
  43,
697
  45,
 
701
  19,
702
  18,
703
  15
 
 
 
 
704
  ]
705
  },
706
  {
707
  "point_id": 45,
 
 
 
 
708
  "adjacent_points": [
709
  44,
710
  46,
 
714
  19,
715
  16,
716
  15
 
 
 
 
717
  ]
718
  },
719
  {
720
  "point_id": 46,
 
 
 
 
721
  "adjacent_points": [
722
  45,
723
  47,
 
726
  "adjacent_hexes": [
727
  19,
728
  16
 
 
 
 
729
  ]
730
  },
731
  {
732
  "point_id": 47,
 
 
 
 
733
  "adjacent_points": [
734
  46,
735
  37
736
  ],
737
  "adjacent_hexes": [
738
  16
 
 
 
 
739
  ]
740
  },
741
  {
742
  "point_id": 48,
 
 
 
 
743
  "adjacent_points": [
744
  49,
745
  40
746
  ],
747
  "adjacent_hexes": [
748
  17
 
 
 
 
749
  ]
750
  },
751
  {
752
  "point_id": 49,
 
 
 
 
753
  "adjacent_points": [
754
  48,
755
  50
756
  ],
757
  "adjacent_hexes": [
758
  17
 
 
 
 
759
  ]
760
  },
761
  {
762
  "point_id": 50,
 
 
 
 
763
  "adjacent_points": [
764
  49,
765
  51,
 
768
  "adjacent_hexes": [
769
  18,
770
  17
 
 
 
 
771
  ]
772
  },
773
  {
774
  "point_id": 51,
 
 
 
 
775
  "adjacent_points": [
776
  50,
777
  52
778
  ],
779
  "adjacent_hexes": [
780
  18
 
 
 
 
781
  ]
782
  },
783
  {
784
  "point_id": 52,
 
 
 
 
785
  "adjacent_points": [
786
  51,
787
  53,
 
790
  "adjacent_hexes": [
791
  19,
792
  18
 
 
 
 
793
  ]
794
  },
795
  {
796
  "point_id": 53,
 
 
 
 
797
  "adjacent_points": [
798
  52,
799
  54
800
  ],
801
  "adjacent_hexes": [
802
  19
 
 
 
 
803
  ]
804
  },
805
  {
806
  "point_id": 54,
 
 
 
 
807
  "adjacent_points": [
808
  53,
809
  46
810
  ],
811
  "adjacent_hexes": [
812
  19
 
 
 
 
813
  ]
814
  }
815
+ ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
816
  }
examples/ai_testing/my_games/{game_20251223_204416_full.json → game_20251226_143710_full.json} RENAMED
@@ -1,312 +1,122 @@
1
  {
2
  "total_states": 1,
3
- "timestamp": "20251223_204416",
4
  "states": [
5
  {
6
  "hexes": [
7
  {
8
  "id": 1,
9
- "q": 0,
10
- "r": -2,
11
  "type": "wood",
12
  "number": 12,
13
- "has_robber": false,
14
- "position": [
15
- 0,
16
- 0
17
- ],
18
- "axial_coords": [
19
- 0,
20
- -2
21
- ]
22
  },
23
  {
24
  "id": 2,
25
- "q": 1,
26
- "r": -2,
27
  "type": "sheep",
28
  "number": 5,
29
- "has_robber": false,
30
- "position": [
31
- 0,
32
- 1
33
- ],
34
- "axial_coords": [
35
- 1,
36
- -2
37
- ]
38
  },
39
  {
40
  "id": 3,
41
- "q": 2,
42
- "r": -2,
43
  "type": "wood",
44
  "number": 4,
45
- "has_robber": false,
46
- "position": [
47
- 0,
48
- 2
49
- ],
50
- "axial_coords": [
51
- 2,
52
- -2
53
- ]
54
  },
55
  {
56
  "id": 4,
57
- "q": -1,
58
- "r": -1,
59
  "type": "sheep",
60
  "number": 8,
61
- "has_robber": false,
62
- "position": [
63
- 1,
64
- 0
65
- ],
66
- "axial_coords": [
67
- -1,
68
- -1
69
- ]
70
  },
71
  {
72
  "id": 5,
73
- "q": 0,
74
- "r": -1,
75
  "type": "brick",
76
  "number": 6,
77
- "has_robber": false,
78
- "position": [
79
- 1,
80
- 1
81
- ],
82
- "axial_coords": [
83
- 0,
84
- -1
85
- ]
86
  },
87
  {
88
  "id": 6,
89
- "q": 1,
90
- "r": -1,
91
  "type": "wood",
92
  "number": 3,
93
- "has_robber": false,
94
- "position": [
95
- 1,
96
- 2
97
- ],
98
- "axial_coords": [
99
- 1,
100
- -1
101
- ]
102
  },
103
  {
104
  "id": 7,
105
- "q": 2,
106
- "r": -1,
107
  "type": "wheat",
108
  "number": 8,
109
- "has_robber": false,
110
- "position": [
111
- 1,
112
- 3
113
- ],
114
- "axial_coords": [
115
- 2,
116
- -1
117
- ]
118
  },
119
  {
120
  "id": 8,
121
- "q": -2,
122
- "r": 0,
123
  "type": "brick",
124
  "number": 10,
125
- "has_robber": false,
126
- "position": [
127
- 2,
128
- 0
129
- ],
130
- "axial_coords": [
131
- -2,
132
- 0
133
- ]
134
  },
135
  {
136
  "id": 9,
137
- "q": -1,
138
- "r": 0,
139
  "type": "wood",
140
  "number": 11,
141
- "has_robber": false,
142
- "position": [
143
- 2,
144
- 1
145
- ],
146
- "axial_coords": [
147
- -1,
148
- 0
149
- ]
150
  },
151
  {
152
  "id": 10,
153
- "q": 0,
154
- "r": 0,
155
  "type": "desert",
156
  "number": null,
157
- "has_robber": true,
158
- "position": [
159
- 2,
160
- 2
161
- ],
162
- "axial_coords": [
163
- 0,
164
- 0
165
- ]
166
  },
167
  {
168
  "id": 11,
169
- "q": 1,
170
- "r": 0,
171
  "type": "ore",
172
  "number": 3,
173
- "has_robber": false,
174
- "position": [
175
- 2,
176
- 3
177
- ],
178
- "axial_coords": [
179
- 1,
180
- 0
181
- ]
182
  },
183
  {
184
  "id": 12,
185
- "q": 2,
186
- "r": 0,
187
  "type": "sheep",
188
  "number": 4,
189
- "has_robber": false,
190
- "position": [
191
- 2,
192
- 4
193
- ],
194
- "axial_coords": [
195
- 2,
196
- 0
197
- ]
198
  },
199
  {
200
  "id": 13,
201
- "q": -2,
202
- "r": 1,
203
  "type": "brick",
204
  "number": 10,
205
- "has_robber": false,
206
- "position": [
207
- 3,
208
- 0
209
- ],
210
- "axial_coords": [
211
- -2,
212
- 1
213
- ]
214
  },
215
  {
216
  "id": 14,
217
- "q": -1,
218
- "r": 1,
219
  "type": "wheat",
220
  "number": 9,
221
- "has_robber": false,
222
- "position": [
223
- 3,
224
- 1
225
- ],
226
- "axial_coords": [
227
- -1,
228
- 1
229
- ]
230
  },
231
  {
232
  "id": 15,
233
- "q": 0,
234
- "r": 1,
235
  "type": "wheat",
236
  "number": 6,
237
- "has_robber": false,
238
- "position": [
239
- 3,
240
- 2
241
- ],
242
- "axial_coords": [
243
- 0,
244
- 1
245
- ]
246
  },
247
  {
248
  "id": 16,
249
- "q": 1,
250
- "r": 1,
251
  "type": "sheep",
252
  "number": 11,
253
- "has_robber": false,
254
- "position": [
255
- 3,
256
- 3
257
- ],
258
- "axial_coords": [
259
- 1,
260
- 1
261
- ]
262
  },
263
  {
264
  "id": 17,
265
- "q": -2,
266
- "r": 2,
267
  "type": "ore",
268
  "number": 5,
269
- "has_robber": false,
270
- "position": [
271
- 4,
272
- 0
273
- ],
274
- "axial_coords": [
275
- -2,
276
- 2
277
- ]
278
  },
279
  {
280
  "id": 18,
281
- "q": -1,
282
- "r": 2,
283
  "type": "wheat",
284
  "number": 9,
285
- "has_robber": false,
286
- "position": [
287
- 4,
288
- 1
289
- ],
290
- "axial_coords": [
291
- -1,
292
- 2
293
- ]
294
  },
295
  {
296
  "id": 19,
297
- "q": 0,
298
- "r": 2,
299
  "type": "ore",
300
  "number": 2,
301
- "has_robber": false,
302
- "position": [
303
- 4,
304
- 2
305
- ],
306
- "axial_coords": [
307
- 0,
308
- 2
309
- ]
310
  }
311
  ],
312
  "settlements": [],
@@ -372,46 +182,26 @@
372
  "points": [
373
  {
374
  "point_id": 1,
375
- "game_coords": [
376
- 0,
377
- 0
378
- ],
379
  "adjacent_points": [
380
  2,
381
  9
382
  ],
383
  "adjacent_hexes": [
384
  1
385
- ],
386
- "pixel_coords": [
387
- 377.5,
388
- 105.14428414850131
389
  ]
390
  },
391
  {
392
  "point_id": 2,
393
- "game_coords": [
394
- 0,
395
- 1
396
- ],
397
  "adjacent_points": [
398
  1,
399
  3
400
  ],
401
  "adjacent_hexes": [
402
  1
403
- ],
404
- "pixel_coords": [
405
- 422.5,
406
- 105.14428414850128
407
  ]
408
  },
409
  {
410
  "point_id": 3,
411
- "game_coords": [
412
- 0,
413
- 2
414
- ],
415
  "adjacent_points": [
416
  2,
417
  4,
@@ -420,36 +210,20 @@
420
  "adjacent_hexes": [
421
  2,
422
  1
423
- ],
424
- "pixel_coords": [
425
- 445,
426
- 144.11542731880104
427
  ]
428
  },
429
  {
430
  "point_id": 4,
431
- "game_coords": [
432
- 0,
433
- 3
434
- ],
435
  "adjacent_points": [
436
  3,
437
  5
438
  ],
439
  "adjacent_hexes": [
440
  2
441
- ],
442
- "pixel_coords": [
443
- 490,
444
- 144.11542731880104
445
  ]
446
  },
447
  {
448
  "point_id": 5,
449
- "game_coords": [
450
- 0,
451
- 4
452
- ],
453
  "adjacent_points": [
454
  4,
455
  6,
@@ -458,72 +232,40 @@
458
  "adjacent_hexes": [
459
  3,
460
  2
461
- ],
462
- "pixel_coords": [
463
- 512.5,
464
- 183.08657048910078
465
  ]
466
  },
467
  {
468
  "point_id": 6,
469
- "game_coords": [
470
- 0,
471
- 5
472
- ],
473
  "adjacent_points": [
474
  5,
475
  7
476
  ],
477
  "adjacent_hexes": [
478
  3
479
- ],
480
- "pixel_coords": [
481
- 557.5,
482
- 183.08657048910078
483
  ]
484
  },
485
  {
486
  "point_id": 7,
487
- "game_coords": [
488
- 0,
489
- 6
490
- ],
491
  "adjacent_points": [
492
  6,
493
  15
494
  ],
495
  "adjacent_hexes": [
496
  3
497
- ],
498
- "pixel_coords": [
499
- 580,
500
- 222.05771365940052
501
  ]
502
  },
503
  {
504
  "point_id": 8,
505
- "game_coords": [
506
- 1,
507
- 0
508
- ],
509
  "adjacent_points": [
510
  9,
511
  18
512
  ],
513
  "adjacent_hexes": [
514
  4
515
- ],
516
- "pixel_coords": [
517
- 310,
518
- 144.11542731880104
519
  ]
520
  },
521
  {
522
  "point_id": 9,
523
- "game_coords": [
524
- 1,
525
- 1
526
- ],
527
  "adjacent_points": [
528
  8,
529
  10,
@@ -532,18 +274,10 @@
532
  "adjacent_hexes": [
533
  4,
534
  1
535
- ],
536
- "pixel_coords": [
537
- 355,
538
- 144.11542731880104
539
  ]
540
  },
541
  {
542
  "point_id": 10,
543
- "game_coords": [
544
- 1,
545
- 2
546
- ],
547
  "adjacent_points": [
548
  9,
549
  11,
@@ -553,18 +287,10 @@
553
  5,
554
  4,
555
  1
556
- ],
557
- "pixel_coords": [
558
- 377.5,
559
- 183.08657048910078
560
  ]
561
  },
562
  {
563
  "point_id": 11,
564
- "game_coords": [
565
- 1,
566
- 3
567
- ],
568
  "adjacent_points": [
569
  10,
570
  12,
@@ -574,18 +300,10 @@
574
  5,
575
  2,
576
  1
577
- ],
578
- "pixel_coords": [
579
- 422.5,
580
- 183.08657048910078
581
  ]
582
  },
583
  {
584
  "point_id": 12,
585
- "game_coords": [
586
- 1,
587
- 4
588
- ],
589
  "adjacent_points": [
590
  11,
591
  13,
@@ -595,18 +313,10 @@
595
  6,
596
  5,
597
  2
598
- ],
599
- "pixel_coords": [
600
- 445,
601
- 222.05771365940052
602
  ]
603
  },
604
  {
605
  "point_id": 13,
606
- "game_coords": [
607
- 1,
608
- 5
609
- ],
610
  "adjacent_points": [
611
  12,
612
  14,
@@ -616,18 +326,10 @@
616
  6,
617
  3,
618
  2
619
- ],
620
- "pixel_coords": [
621
- 490,
622
- 222.05771365940052
623
  ]
624
  },
625
  {
626
  "point_id": 14,
627
- "game_coords": [
628
- 1,
629
- 6
630
- ],
631
  "adjacent_points": [
632
  13,
633
  15,
@@ -637,18 +339,10 @@
637
  7,
638
  6,
639
  3
640
- ],
641
- "pixel_coords": [
642
- 512.5,
643
- 261.02885682970026
644
  ]
645
  },
646
  {
647
  "point_id": 15,
648
- "game_coords": [
649
- 1,
650
- 7
651
- ],
652
  "adjacent_points": [
653
  14,
654
  16,
@@ -657,54 +351,30 @@
657
  "adjacent_hexes": [
658
  7,
659
  3
660
- ],
661
- "pixel_coords": [
662
- 557.5,
663
- 261.02885682970026
664
  ]
665
  },
666
  {
667
  "point_id": 16,
668
- "game_coords": [
669
- 1,
670
- 8
671
- ],
672
  "adjacent_points": [
673
  15,
674
  26
675
  ],
676
  "adjacent_hexes": [
677
  7
678
- ],
679
- "pixel_coords": [
680
- 580,
681
- 300
682
  ]
683
  },
684
  {
685
  "point_id": 17,
686
- "game_coords": [
687
- 2,
688
- 0
689
- ],
690
  "adjacent_points": [
691
  18,
692
  28
693
  ],
694
  "adjacent_hexes": [
695
  8
696
- ],
697
- "pixel_coords": [
698
- 242.49999999999997,
699
- 183.08657048910078
700
  ]
701
  },
702
  {
703
  "point_id": 18,
704
- "game_coords": [
705
- 2,
706
- 1
707
- ],
708
  "adjacent_points": [
709
  17,
710
  19,
@@ -713,18 +383,10 @@
713
  "adjacent_hexes": [
714
  8,
715
  4
716
- ],
717
- "pixel_coords": [
718
- 287.5,
719
- 183.08657048910078
720
  ]
721
  },
722
  {
723
  "point_id": 19,
724
- "game_coords": [
725
- 2,
726
- 2
727
- ],
728
  "adjacent_points": [
729
  18,
730
  20,
@@ -734,18 +396,10 @@
734
  9,
735
  8,
736
  4
737
- ],
738
- "pixel_coords": [
739
- 310,
740
- 222.05771365940052
741
  ]
742
  },
743
  {
744
  "point_id": 20,
745
- "game_coords": [
746
- 2,
747
- 3
748
- ],
749
  "adjacent_points": [
750
  19,
751
  21,
@@ -755,18 +409,10 @@
755
  9,
756
  5,
757
  4
758
- ],
759
- "pixel_coords": [
760
- 355,
761
- 222.05771365940052
762
  ]
763
  },
764
  {
765
  "point_id": 21,
766
- "game_coords": [
767
- 2,
768
- 4
769
- ],
770
  "adjacent_points": [
771
  20,
772
  22,
@@ -776,18 +422,10 @@
776
  10,
777
  9,
778
  5
779
- ],
780
- "pixel_coords": [
781
- 377.5,
782
- 261.02885682970026
783
  ]
784
  },
785
  {
786
  "point_id": 22,
787
- "game_coords": [
788
- 2,
789
- 5
790
- ],
791
  "adjacent_points": [
792
  21,
793
  23,
@@ -797,18 +435,10 @@
797
  10,
798
  6,
799
  5
800
- ],
801
- "pixel_coords": [
802
- 422.5,
803
- 261.02885682970026
804
  ]
805
  },
806
  {
807
  "point_id": 23,
808
- "game_coords": [
809
- 2,
810
- 6
811
- ],
812
  "adjacent_points": [
813
  22,
814
  24,
@@ -818,18 +448,10 @@
818
  11,
819
  10,
820
  6
821
- ],
822
- "pixel_coords": [
823
- 445,
824
- 300
825
  ]
826
  },
827
  {
828
  "point_id": 24,
829
- "game_coords": [
830
- 2,
831
- 7
832
- ],
833
  "adjacent_points": [
834
  23,
835
  25,
@@ -839,18 +461,10 @@
839
  11,
840
  7,
841
  6
842
- ],
843
- "pixel_coords": [
844
- 490,
845
- 300
846
  ]
847
  },
848
  {
849
  "point_id": 25,
850
- "game_coords": [
851
- 2,
852
- 8
853
- ],
854
  "adjacent_points": [
855
  24,
856
  26,
@@ -860,18 +474,10 @@
860
  12,
861
  11,
862
  7
863
- ],
864
- "pixel_coords": [
865
- 512.5,
866
- 338.97114317029974
867
  ]
868
  },
869
  {
870
  "point_id": 26,
871
- "game_coords": [
872
- 2,
873
- 9
874
- ],
875
  "adjacent_points": [
876
  25,
877
  27,
@@ -880,54 +486,30 @@
880
  "adjacent_hexes": [
881
  12,
882
  7
883
- ],
884
- "pixel_coords": [
885
- 557.5,
886
- 338.97114317029974
887
  ]
888
  },
889
  {
890
  "point_id": 27,
891
- "game_coords": [
892
- 2,
893
- 10
894
- ],
895
  "adjacent_points": [
896
  26,
897
  38
898
  ],
899
  "adjacent_hexes": [
900
  12
901
- ],
902
- "pixel_coords": [
903
- 580,
904
- 377.9422863405995
905
  ]
906
  },
907
  {
908
  "point_id": 28,
909
- "game_coords": [
910
- 3,
911
- 0
912
- ],
913
  "adjacent_points": [
914
  29,
915
  17
916
  ],
917
  "adjacent_hexes": [
918
  8
919
- ],
920
- "pixel_coords": [
921
- 220,
922
- 222.05771365940052
923
  ]
924
  },
925
  {
926
  "point_id": 29,
927
- "game_coords": [
928
- 3,
929
- 1
930
- ],
931
  "adjacent_points": [
932
  28,
933
  30,
@@ -936,18 +518,10 @@
936
  "adjacent_hexes": [
937
  13,
938
  8
939
- ],
940
- "pixel_coords": [
941
- 242.5,
942
- 261.02885682970026
943
  ]
944
  },
945
  {
946
  "point_id": 30,
947
- "game_coords": [
948
- 3,
949
- 2
950
- ],
951
  "adjacent_points": [
952
  29,
953
  31,
@@ -957,18 +531,10 @@
957
  13,
958
  9,
959
  8
960
- ],
961
- "pixel_coords": [
962
- 287.5,
963
- 261.02885682970026
964
  ]
965
  },
966
  {
967
  "point_id": 31,
968
- "game_coords": [
969
- 3,
970
- 3
971
- ],
972
  "adjacent_points": [
973
  30,
974
  32,
@@ -978,18 +544,10 @@
978
  14,
979
  13,
980
  9
981
- ],
982
- "pixel_coords": [
983
- 310,
984
- 300
985
  ]
986
  },
987
  {
988
  "point_id": 32,
989
- "game_coords": [
990
- 3,
991
- 4
992
- ],
993
  "adjacent_points": [
994
  31,
995
  33,
@@ -999,18 +557,10 @@
999
  14,
1000
  10,
1001
  9
1002
- ],
1003
- "pixel_coords": [
1004
- 355,
1005
- 300
1006
  ]
1007
  },
1008
  {
1009
  "point_id": 33,
1010
- "game_coords": [
1011
- 3,
1012
- 5
1013
- ],
1014
  "adjacent_points": [
1015
  32,
1016
  34,
@@ -1020,18 +570,10 @@
1020
  15,
1021
  14,
1022
  10
1023
- ],
1024
- "pixel_coords": [
1025
- 377.5,
1026
- 338.97114317029974
1027
  ]
1028
  },
1029
  {
1030
  "point_id": 34,
1031
- "game_coords": [
1032
- 3,
1033
- 6
1034
- ],
1035
  "adjacent_points": [
1036
  33,
1037
  35,
@@ -1041,18 +583,10 @@
1041
  15,
1042
  11,
1043
  10
1044
- ],
1045
- "pixel_coords": [
1046
- 422.5,
1047
- 338.97114317029974
1048
  ]
1049
  },
1050
  {
1051
  "point_id": 35,
1052
- "game_coords": [
1053
- 3,
1054
- 7
1055
- ],
1056
  "adjacent_points": [
1057
  34,
1058
  36,
@@ -1062,18 +596,10 @@
1062
  16,
1063
  15,
1064
  11
1065
- ],
1066
- "pixel_coords": [
1067
- 445,
1068
- 377.9422863405995
1069
  ]
1070
  },
1071
  {
1072
  "point_id": 36,
1073
- "game_coords": [
1074
- 3,
1075
- 8
1076
- ],
1077
  "adjacent_points": [
1078
  35,
1079
  37,
@@ -1083,18 +609,10 @@
1083
  16,
1084
  12,
1085
  11
1086
- ],
1087
- "pixel_coords": [
1088
- 490,
1089
- 377.9422863405995
1090
  ]
1091
  },
1092
  {
1093
  "point_id": 37,
1094
- "game_coords": [
1095
- 3,
1096
- 9
1097
- ],
1098
  "adjacent_points": [
1099
  36,
1100
  38,
@@ -1103,54 +621,30 @@
1103
  "adjacent_hexes": [
1104
  16,
1105
  12
1106
- ],
1107
- "pixel_coords": [
1108
- 512.5,
1109
- 416.9134295108992
1110
  ]
1111
  },
1112
  {
1113
  "point_id": 38,
1114
- "game_coords": [
1115
- 3,
1116
- 10
1117
- ],
1118
  "adjacent_points": [
1119
  37,
1120
  27
1121
  ],
1122
  "adjacent_hexes": [
1123
  12
1124
- ],
1125
- "pixel_coords": [
1126
- 557.5,
1127
- 416.9134295108992
1128
  ]
1129
  },
1130
  {
1131
  "point_id": 39,
1132
- "game_coords": [
1133
- 4,
1134
- 0
1135
- ],
1136
  "adjacent_points": [
1137
  40,
1138
  29
1139
  ],
1140
  "adjacent_hexes": [
1141
  13
1142
- ],
1143
- "pixel_coords": [
1144
- 220,
1145
- 300
1146
  ]
1147
  },
1148
  {
1149
  "point_id": 40,
1150
- "game_coords": [
1151
- 4,
1152
- 1
1153
- ],
1154
  "adjacent_points": [
1155
  39,
1156
  41,
@@ -1159,18 +653,10 @@
1159
  "adjacent_hexes": [
1160
  17,
1161
  13
1162
- ],
1163
- "pixel_coords": [
1164
- 242.5,
1165
- 338.97114317029974
1166
  ]
1167
  },
1168
  {
1169
  "point_id": 41,
1170
- "game_coords": [
1171
- 4,
1172
- 2
1173
- ],
1174
  "adjacent_points": [
1175
  40,
1176
  42,
@@ -1180,18 +666,10 @@
1180
  17,
1181
  14,
1182
  13
1183
- ],
1184
- "pixel_coords": [
1185
- 287.5,
1186
- 338.97114317029974
1187
  ]
1188
  },
1189
  {
1190
  "point_id": 42,
1191
- "game_coords": [
1192
- 4,
1193
- 3
1194
- ],
1195
  "adjacent_points": [
1196
  41,
1197
  43,
@@ -1201,18 +679,10 @@
1201
  18,
1202
  17,
1203
  14
1204
- ],
1205
- "pixel_coords": [
1206
- 310,
1207
- 377.9422863405995
1208
  ]
1209
  },
1210
  {
1211
  "point_id": 43,
1212
- "game_coords": [
1213
- 4,
1214
- 4
1215
- ],
1216
  "adjacent_points": [
1217
  42,
1218
  44,
@@ -1222,18 +692,10 @@
1222
  18,
1223
  15,
1224
  14
1225
- ],
1226
- "pixel_coords": [
1227
- 355,
1228
- 377.9422863405995
1229
  ]
1230
  },
1231
  {
1232
  "point_id": 44,
1233
- "game_coords": [
1234
- 4,
1235
- 5
1236
- ],
1237
  "adjacent_points": [
1238
  43,
1239
  45,
@@ -1243,18 +705,10 @@
1243
  19,
1244
  18,
1245
  15
1246
- ],
1247
- "pixel_coords": [
1248
- 377.5,
1249
- 416.9134295108992
1250
  ]
1251
  },
1252
  {
1253
  "point_id": 45,
1254
- "game_coords": [
1255
- 4,
1256
- 6
1257
- ],
1258
  "adjacent_points": [
1259
  44,
1260
  46,
@@ -1264,18 +718,10 @@
1264
  19,
1265
  16,
1266
  15
1267
- ],
1268
- "pixel_coords": [
1269
- 422.5,
1270
- 416.9134295108992
1271
  ]
1272
  },
1273
  {
1274
  "point_id": 46,
1275
- "game_coords": [
1276
- 4,
1277
- 7
1278
- ],
1279
  "adjacent_points": [
1280
  45,
1281
  47,
@@ -1284,72 +730,40 @@
1284
  "adjacent_hexes": [
1285
  19,
1286
  16
1287
- ],
1288
- "pixel_coords": [
1289
- 445,
1290
- 455.88457268119896
1291
  ]
1292
  },
1293
  {
1294
  "point_id": 47,
1295
- "game_coords": [
1296
- 4,
1297
- 8
1298
- ],
1299
  "adjacent_points": [
1300
  46,
1301
  37
1302
  ],
1303
  "adjacent_hexes": [
1304
  16
1305
- ],
1306
- "pixel_coords": [
1307
- 490,
1308
- 455.88457268119896
1309
  ]
1310
  },
1311
  {
1312
  "point_id": 48,
1313
- "game_coords": [
1314
- 5,
1315
- 0
1316
- ],
1317
  "adjacent_points": [
1318
  49,
1319
  40
1320
  ],
1321
  "adjacent_hexes": [
1322
  17
1323
- ],
1324
- "pixel_coords": [
1325
- 220,
1326
- 377.9422863405995
1327
  ]
1328
  },
1329
  {
1330
  "point_id": 49,
1331
- "game_coords": [
1332
- 5,
1333
- 1
1334
- ],
1335
  "adjacent_points": [
1336
  48,
1337
  50
1338
  ],
1339
  "adjacent_hexes": [
1340
  17
1341
- ],
1342
- "pixel_coords": [
1343
- 242.5,
1344
- 416.9134295108992
1345
  ]
1346
  },
1347
  {
1348
  "point_id": 50,
1349
- "game_coords": [
1350
- 5,
1351
- 2
1352
- ],
1353
  "adjacent_points": [
1354
  49,
1355
  51,
@@ -1358,36 +772,20 @@
1358
  "adjacent_hexes": [
1359
  18,
1360
  17
1361
- ],
1362
- "pixel_coords": [
1363
- 287.5,
1364
- 416.9134295108992
1365
  ]
1366
  },
1367
  {
1368
  "point_id": 51,
1369
- "game_coords": [
1370
- 5,
1371
- 3
1372
- ],
1373
  "adjacent_points": [
1374
  50,
1375
  52
1376
  ],
1377
  "adjacent_hexes": [
1378
  18
1379
- ],
1380
- "pixel_coords": [
1381
- 310,
1382
- 455.88457268119896
1383
  ]
1384
  },
1385
  {
1386
  "point_id": 52,
1387
- "game_coords": [
1388
- 5,
1389
- 4
1390
- ],
1391
  "adjacent_points": [
1392
  51,
1393
  53,
@@ -1396,461 +794,29 @@
1396
  "adjacent_hexes": [
1397
  19,
1398
  18
1399
- ],
1400
- "pixel_coords": [
1401
- 355,
1402
- 455.88457268119896
1403
  ]
1404
  },
1405
  {
1406
  "point_id": 53,
1407
- "game_coords": [
1408
- 5,
1409
- 5
1410
- ],
1411
  "adjacent_points": [
1412
  52,
1413
  54
1414
  ],
1415
  "adjacent_hexes": [
1416
  19
1417
- ],
1418
- "pixel_coords": [
1419
- 377.5,
1420
- 494.8557158514987
1421
  ]
1422
  },
1423
  {
1424
  "point_id": 54,
1425
- "game_coords": [
1426
- 5,
1427
- 6
1428
- ],
1429
  "adjacent_points": [
1430
  53,
1431
  46
1432
  ],
1433
  "adjacent_hexes": [
1434
  19
1435
- ],
1436
- "pixel_coords": [
1437
- 422.5,
1438
- 494.8557158514987
1439
  ]
1440
  }
1441
- ],
1442
- "board_graph": {
1443
- "adjacency": {
1444
- "1": [
1445
- 2,
1446
- 9
1447
- ],
1448
- "2": [
1449
- 1,
1450
- 3
1451
- ],
1452
- "3": [
1453
- 2,
1454
- 4,
1455
- 11
1456
- ],
1457
- "4": [
1458
- 3,
1459
- 5
1460
- ],
1461
- "5": [
1462
- 4,
1463
- 6,
1464
- 13
1465
- ],
1466
- "6": [
1467
- 5,
1468
- 7
1469
- ],
1470
- "7": [
1471
- 6,
1472
- 15
1473
- ],
1474
- "8": [
1475
- 9,
1476
- 18
1477
- ],
1478
- "9": [
1479
- 8,
1480
- 10,
1481
- 1
1482
- ],
1483
- "10": [
1484
- 9,
1485
- 11,
1486
- 20
1487
- ],
1488
- "11": [
1489
- 10,
1490
- 12,
1491
- 3
1492
- ],
1493
- "12": [
1494
- 11,
1495
- 13,
1496
- 22
1497
- ],
1498
- "13": [
1499
- 12,
1500
- 14,
1501
- 5
1502
- ],
1503
- "14": [
1504
- 13,
1505
- 15,
1506
- 24
1507
- ],
1508
- "15": [
1509
- 14,
1510
- 16,
1511
- 7
1512
- ],
1513
- "16": [
1514
- 15,
1515
- 26
1516
- ],
1517
- "17": [
1518
- 18,
1519
- 28
1520
- ],
1521
- "18": [
1522
- 17,
1523
- 19,
1524
- 8
1525
- ],
1526
- "19": [
1527
- 18,
1528
- 20,
1529
- 30
1530
- ],
1531
- "20": [
1532
- 19,
1533
- 21,
1534
- 10
1535
- ],
1536
- "21": [
1537
- 20,
1538
- 22,
1539
- 32
1540
- ],
1541
- "22": [
1542
- 21,
1543
- 23,
1544
- 12
1545
- ],
1546
- "23": [
1547
- 22,
1548
- 24,
1549
- 34
1550
- ],
1551
- "24": [
1552
- 23,
1553
- 25,
1554
- 14
1555
- ],
1556
- "25": [
1557
- 24,
1558
- 26,
1559
- 36
1560
- ],
1561
- "26": [
1562
- 25,
1563
- 27,
1564
- 16
1565
- ],
1566
- "27": [
1567
- 26,
1568
- 38
1569
- ],
1570
- "28": [
1571
- 29,
1572
- 17
1573
- ],
1574
- "29": [
1575
- 28,
1576
- 30,
1577
- 39
1578
- ],
1579
- "30": [
1580
- 29,
1581
- 31,
1582
- 19
1583
- ],
1584
- "31": [
1585
- 30,
1586
- 32,
1587
- 41
1588
- ],
1589
- "32": [
1590
- 31,
1591
- 33,
1592
- 21
1593
- ],
1594
- "33": [
1595
- 32,
1596
- 34,
1597
- 43
1598
- ],
1599
- "34": [
1600
- 33,
1601
- 35,
1602
- 23
1603
- ],
1604
- "35": [
1605
- 34,
1606
- 36,
1607
- 45
1608
- ],
1609
- "36": [
1610
- 35,
1611
- 37,
1612
- 25
1613
- ],
1614
- "37": [
1615
- 36,
1616
- 38,
1617
- 47
1618
- ],
1619
- "38": [
1620
- 37,
1621
- 27
1622
- ],
1623
- "39": [
1624
- 40,
1625
- 29
1626
- ],
1627
- "40": [
1628
- 39,
1629
- 41,
1630
- 48
1631
- ],
1632
- "41": [
1633
- 40,
1634
- 42,
1635
- 31
1636
- ],
1637
- "42": [
1638
- 41,
1639
- 43,
1640
- 50
1641
- ],
1642
- "43": [
1643
- 42,
1644
- 44,
1645
- 33
1646
- ],
1647
- "44": [
1648
- 43,
1649
- 45,
1650
- 52
1651
- ],
1652
- "45": [
1653
- 44,
1654
- 46,
1655
- 35
1656
- ],
1657
- "46": [
1658
- 45,
1659
- 47,
1660
- 54
1661
- ],
1662
- "47": [
1663
- 46,
1664
- 37
1665
- ],
1666
- "48": [
1667
- 49,
1668
- 40
1669
- ],
1670
- "49": [
1671
- 48,
1672
- 50
1673
- ],
1674
- "50": [
1675
- 49,
1676
- 51,
1677
- 42
1678
- ],
1679
- "51": [
1680
- 50,
1681
- 52
1682
- ],
1683
- "52": [
1684
- 51,
1685
- 53,
1686
- 44
1687
- ],
1688
- "53": [
1689
- 52,
1690
- 54
1691
- ],
1692
- "54": [
1693
- 53,
1694
- 46
1695
- ]
1696
- },
1697
- "hex_to_points": {
1698
- "1": [
1699
- 1,
1700
- 2,
1701
- 3,
1702
- 9,
1703
- 10,
1704
- 11
1705
- ],
1706
- "2": [
1707
- 3,
1708
- 4,
1709
- 5,
1710
- 11,
1711
- 12,
1712
- 13
1713
- ],
1714
- "3": [
1715
- 5,
1716
- 6,
1717
- 7,
1718
- 13,
1719
- 14,
1720
- 15
1721
- ],
1722
- "4": [
1723
- 8,
1724
- 9,
1725
- 10,
1726
- 18,
1727
- 19,
1728
- 20
1729
- ],
1730
- "5": [
1731
- 10,
1732
- 11,
1733
- 12,
1734
- 20,
1735
- 21,
1736
- 22
1737
- ],
1738
- "6": [
1739
- 12,
1740
- 13,
1741
- 14,
1742
- 22,
1743
- 23,
1744
- 24
1745
- ],
1746
- "7": [
1747
- 14,
1748
- 15,
1749
- 16,
1750
- 24,
1751
- 25,
1752
- 26
1753
- ],
1754
- "8": [
1755
- 17,
1756
- 18,
1757
- 19,
1758
- 28,
1759
- 29,
1760
- 30
1761
- ],
1762
- "9": [
1763
- 19,
1764
- 20,
1765
- 21,
1766
- 30,
1767
- 31,
1768
- 32
1769
- ],
1770
- "10": [
1771
- 21,
1772
- 22,
1773
- 23,
1774
- 32,
1775
- 33,
1776
- 34
1777
- ],
1778
- "11": [
1779
- 23,
1780
- 24,
1781
- 25,
1782
- 34,
1783
- 35,
1784
- 36
1785
- ],
1786
- "12": [
1787
- 25,
1788
- 26,
1789
- 27,
1790
- 36,
1791
- 37,
1792
- 38
1793
- ],
1794
- "13": [
1795
- 29,
1796
- 30,
1797
- 31,
1798
- 39,
1799
- 40,
1800
- 41
1801
- ],
1802
- "14": [
1803
- 31,
1804
- 32,
1805
- 33,
1806
- 41,
1807
- 42,
1808
- 43
1809
- ],
1810
- "15": [
1811
- 33,
1812
- 34,
1813
- 35,
1814
- 43,
1815
- 44,
1816
- 45
1817
- ],
1818
- "16": [
1819
- 35,
1820
- 36,
1821
- 37,
1822
- 45,
1823
- 46,
1824
- 47
1825
- ],
1826
- "17": [
1827
- 40,
1828
- 41,
1829
- 42,
1830
- 48,
1831
- 49,
1832
- 50
1833
- ],
1834
- "18": [
1835
- 42,
1836
- 43,
1837
- 44,
1838
- 50,
1839
- 51,
1840
- 52
1841
- ],
1842
- "19": [
1843
- 44,
1844
- 45,
1845
- 46,
1846
- 52,
1847
- 53,
1848
- 54
1849
- ]
1850
- },
1851
- "total_points": 54,
1852
- "total_hexes": 19
1853
- }
1854
  }
1855
  ]
1856
  }
 
1
  {
2
  "total_states": 1,
3
+ "timestamp": "20251226_143710",
4
  "states": [
5
  {
6
  "hexes": [
7
  {
8
  "id": 1,
 
 
9
  "type": "wood",
10
  "number": 12,
11
+ "has_robber": false
 
 
 
 
 
 
 
 
12
  },
13
  {
14
  "id": 2,
 
 
15
  "type": "sheep",
16
  "number": 5,
17
+ "has_robber": false
 
 
 
 
 
 
 
 
18
  },
19
  {
20
  "id": 3,
 
 
21
  "type": "wood",
22
  "number": 4,
23
+ "has_robber": false
 
 
 
 
 
 
 
 
24
  },
25
  {
26
  "id": 4,
 
 
27
  "type": "sheep",
28
  "number": 8,
29
+ "has_robber": false
 
 
 
 
 
 
 
 
30
  },
31
  {
32
  "id": 5,
 
 
33
  "type": "brick",
34
  "number": 6,
35
+ "has_robber": false
 
 
 
 
 
 
 
 
36
  },
37
  {
38
  "id": 6,
 
 
39
  "type": "wood",
40
  "number": 3,
41
+ "has_robber": false
 
 
 
 
 
 
 
 
42
  },
43
  {
44
  "id": 7,
 
 
45
  "type": "wheat",
46
  "number": 8,
47
+ "has_robber": false
 
 
 
 
 
 
 
 
48
  },
49
  {
50
  "id": 8,
 
 
51
  "type": "brick",
52
  "number": 10,
53
+ "has_robber": false
 
 
 
 
 
 
 
 
54
  },
55
  {
56
  "id": 9,
 
 
57
  "type": "wood",
58
  "number": 11,
59
+ "has_robber": false
 
 
 
 
 
 
 
 
60
  },
61
  {
62
  "id": 10,
 
 
63
  "type": "desert",
64
  "number": null,
65
+ "has_robber": true
 
 
 
 
 
 
 
 
66
  },
67
  {
68
  "id": 11,
 
 
69
  "type": "ore",
70
  "number": 3,
71
+ "has_robber": false
 
 
 
 
 
 
 
 
72
  },
73
  {
74
  "id": 12,
 
 
75
  "type": "sheep",
76
  "number": 4,
77
+ "has_robber": false
 
 
 
 
 
 
 
 
78
  },
79
  {
80
  "id": 13,
 
 
81
  "type": "brick",
82
  "number": 10,
83
+ "has_robber": false
 
 
 
 
 
 
 
 
84
  },
85
  {
86
  "id": 14,
 
 
87
  "type": "wheat",
88
  "number": 9,
89
+ "has_robber": false
 
 
 
 
 
 
 
 
90
  },
91
  {
92
  "id": 15,
 
 
93
  "type": "wheat",
94
  "number": 6,
95
+ "has_robber": false
 
 
 
 
 
 
 
 
96
  },
97
  {
98
  "id": 16,
 
 
99
  "type": "sheep",
100
  "number": 11,
101
+ "has_robber": false
 
 
 
 
 
 
 
 
102
  },
103
  {
104
  "id": 17,
 
 
105
  "type": "ore",
106
  "number": 5,
107
+ "has_robber": false
 
 
 
 
 
 
 
 
108
  },
109
  {
110
  "id": 18,
 
 
111
  "type": "wheat",
112
  "number": 9,
113
+ "has_robber": false
 
 
 
 
 
 
 
 
114
  },
115
  {
116
  "id": 19,
 
 
117
  "type": "ore",
118
  "number": 2,
119
+ "has_robber": false
 
 
 
 
 
 
 
 
120
  }
121
  ],
122
  "settlements": [],
 
182
  "points": [
183
  {
184
  "point_id": 1,
 
 
 
 
185
  "adjacent_points": [
186
  2,
187
  9
188
  ],
189
  "adjacent_hexes": [
190
  1
 
 
 
 
191
  ]
192
  },
193
  {
194
  "point_id": 2,
 
 
 
 
195
  "adjacent_points": [
196
  1,
197
  3
198
  ],
199
  "adjacent_hexes": [
200
  1
 
 
 
 
201
  ]
202
  },
203
  {
204
  "point_id": 3,
 
 
 
 
205
  "adjacent_points": [
206
  2,
207
  4,
 
210
  "adjacent_hexes": [
211
  2,
212
  1
 
 
 
 
213
  ]
214
  },
215
  {
216
  "point_id": 4,
 
 
 
 
217
  "adjacent_points": [
218
  3,
219
  5
220
  ],
221
  "adjacent_hexes": [
222
  2
 
 
 
 
223
  ]
224
  },
225
  {
226
  "point_id": 5,
 
 
 
 
227
  "adjacent_points": [
228
  4,
229
  6,
 
232
  "adjacent_hexes": [
233
  3,
234
  2
 
 
 
 
235
  ]
236
  },
237
  {
238
  "point_id": 6,
 
 
 
 
239
  "adjacent_points": [
240
  5,
241
  7
242
  ],
243
  "adjacent_hexes": [
244
  3
 
 
 
 
245
  ]
246
  },
247
  {
248
  "point_id": 7,
 
 
 
 
249
  "adjacent_points": [
250
  6,
251
  15
252
  ],
253
  "adjacent_hexes": [
254
  3
 
 
 
 
255
  ]
256
  },
257
  {
258
  "point_id": 8,
 
 
 
 
259
  "adjacent_points": [
260
  9,
261
  18
262
  ],
263
  "adjacent_hexes": [
264
  4
 
 
 
 
265
  ]
266
  },
267
  {
268
  "point_id": 9,
 
 
 
 
269
  "adjacent_points": [
270
  8,
271
  10,
 
274
  "adjacent_hexes": [
275
  4,
276
  1
 
 
 
 
277
  ]
278
  },
279
  {
280
  "point_id": 10,
 
 
 
 
281
  "adjacent_points": [
282
  9,
283
  11,
 
287
  5,
288
  4,
289
  1
 
 
 
 
290
  ]
291
  },
292
  {
293
  "point_id": 11,
 
 
 
 
294
  "adjacent_points": [
295
  10,
296
  12,
 
300
  5,
301
  2,
302
  1
 
 
 
 
303
  ]
304
  },
305
  {
306
  "point_id": 12,
 
 
 
 
307
  "adjacent_points": [
308
  11,
309
  13,
 
313
  6,
314
  5,
315
  2
 
 
 
 
316
  ]
317
  },
318
  {
319
  "point_id": 13,
 
 
 
 
320
  "adjacent_points": [
321
  12,
322
  14,
 
326
  6,
327
  3,
328
  2
 
 
 
 
329
  ]
330
  },
331
  {
332
  "point_id": 14,
 
 
 
 
333
  "adjacent_points": [
334
  13,
335
  15,
 
339
  7,
340
  6,
341
  3
 
 
 
 
342
  ]
343
  },
344
  {
345
  "point_id": 15,
 
 
 
 
346
  "adjacent_points": [
347
  14,
348
  16,
 
351
  "adjacent_hexes": [
352
  7,
353
  3
 
 
 
 
354
  ]
355
  },
356
  {
357
  "point_id": 16,
 
 
 
 
358
  "adjacent_points": [
359
  15,
360
  26
361
  ],
362
  "adjacent_hexes": [
363
  7
 
 
 
 
364
  ]
365
  },
366
  {
367
  "point_id": 17,
 
 
 
 
368
  "adjacent_points": [
369
  18,
370
  28
371
  ],
372
  "adjacent_hexes": [
373
  8
 
 
 
 
374
  ]
375
  },
376
  {
377
  "point_id": 18,
 
 
 
 
378
  "adjacent_points": [
379
  17,
380
  19,
 
383
  "adjacent_hexes": [
384
  8,
385
  4
 
 
 
 
386
  ]
387
  },
388
  {
389
  "point_id": 19,
 
 
 
 
390
  "adjacent_points": [
391
  18,
392
  20,
 
396
  9,
397
  8,
398
  4
 
 
 
 
399
  ]
400
  },
401
  {
402
  "point_id": 20,
 
 
 
 
403
  "adjacent_points": [
404
  19,
405
  21,
 
409
  9,
410
  5,
411
  4
 
 
 
 
412
  ]
413
  },
414
  {
415
  "point_id": 21,
 
 
 
 
416
  "adjacent_points": [
417
  20,
418
  22,
 
422
  10,
423
  9,
424
  5
 
 
 
 
425
  ]
426
  },
427
  {
428
  "point_id": 22,
 
 
 
 
429
  "adjacent_points": [
430
  21,
431
  23,
 
435
  10,
436
  6,
437
  5
 
 
 
 
438
  ]
439
  },
440
  {
441
  "point_id": 23,
 
 
 
 
442
  "adjacent_points": [
443
  22,
444
  24,
 
448
  11,
449
  10,
450
  6
 
 
 
 
451
  ]
452
  },
453
  {
454
  "point_id": 24,
 
 
 
 
455
  "adjacent_points": [
456
  23,
457
  25,
 
461
  11,
462
  7,
463
  6
 
 
 
 
464
  ]
465
  },
466
  {
467
  "point_id": 25,
 
 
 
 
468
  "adjacent_points": [
469
  24,
470
  26,
 
474
  12,
475
  11,
476
  7
 
 
 
 
477
  ]
478
  },
479
  {
480
  "point_id": 26,
 
 
 
 
481
  "adjacent_points": [
482
  25,
483
  27,
 
486
  "adjacent_hexes": [
487
  12,
488
  7
 
 
 
 
489
  ]
490
  },
491
  {
492
  "point_id": 27,
 
 
 
 
493
  "adjacent_points": [
494
  26,
495
  38
496
  ],
497
  "adjacent_hexes": [
498
  12
 
 
 
 
499
  ]
500
  },
501
  {
502
  "point_id": 28,
 
 
 
 
503
  "adjacent_points": [
504
  29,
505
  17
506
  ],
507
  "adjacent_hexes": [
508
  8
 
 
 
 
509
  ]
510
  },
511
  {
512
  "point_id": 29,
 
 
 
 
513
  "adjacent_points": [
514
  28,
515
  30,
 
518
  "adjacent_hexes": [
519
  13,
520
  8
 
 
 
 
521
  ]
522
  },
523
  {
524
  "point_id": 30,
 
 
 
 
525
  "adjacent_points": [
526
  29,
527
  31,
 
531
  13,
532
  9,
533
  8
 
 
 
 
534
  ]
535
  },
536
  {
537
  "point_id": 31,
 
 
 
 
538
  "adjacent_points": [
539
  30,
540
  32,
 
544
  14,
545
  13,
546
  9
 
 
 
 
547
  ]
548
  },
549
  {
550
  "point_id": 32,
 
 
 
 
551
  "adjacent_points": [
552
  31,
553
  33,
 
557
  14,
558
  10,
559
  9
 
 
 
 
560
  ]
561
  },
562
  {
563
  "point_id": 33,
 
 
 
 
564
  "adjacent_points": [
565
  32,
566
  34,
 
570
  15,
571
  14,
572
  10
 
 
 
 
573
  ]
574
  },
575
  {
576
  "point_id": 34,
 
 
 
 
577
  "adjacent_points": [
578
  33,
579
  35,
 
583
  15,
584
  11,
585
  10
 
 
 
 
586
  ]
587
  },
588
  {
589
  "point_id": 35,
 
 
 
 
590
  "adjacent_points": [
591
  34,
592
  36,
 
596
  16,
597
  15,
598
  11
 
 
 
 
599
  ]
600
  },
601
  {
602
  "point_id": 36,
 
 
 
 
603
  "adjacent_points": [
604
  35,
605
  37,
 
609
  16,
610
  12,
611
  11
 
 
 
 
612
  ]
613
  },
614
  {
615
  "point_id": 37,
 
 
 
 
616
  "adjacent_points": [
617
  36,
618
  38,
 
621
  "adjacent_hexes": [
622
  16,
623
  12
 
 
 
 
624
  ]
625
  },
626
  {
627
  "point_id": 38,
 
 
 
 
628
  "adjacent_points": [
629
  37,
630
  27
631
  ],
632
  "adjacent_hexes": [
633
  12
 
 
 
 
634
  ]
635
  },
636
  {
637
  "point_id": 39,
 
 
 
 
638
  "adjacent_points": [
639
  40,
640
  29
641
  ],
642
  "adjacent_hexes": [
643
  13
 
 
 
 
644
  ]
645
  },
646
  {
647
  "point_id": 40,
 
 
 
 
648
  "adjacent_points": [
649
  39,
650
  41,
 
653
  "adjacent_hexes": [
654
  17,
655
  13
 
 
 
 
656
  ]
657
  },
658
  {
659
  "point_id": 41,
 
 
 
 
660
  "adjacent_points": [
661
  40,
662
  42,
 
666
  17,
667
  14,
668
  13
 
 
 
 
669
  ]
670
  },
671
  {
672
  "point_id": 42,
 
 
 
 
673
  "adjacent_points": [
674
  41,
675
  43,
 
679
  18,
680
  17,
681
  14
 
 
 
 
682
  ]
683
  },
684
  {
685
  "point_id": 43,
 
 
 
 
686
  "adjacent_points": [
687
  42,
688
  44,
 
692
  18,
693
  15,
694
  14
 
 
 
 
695
  ]
696
  },
697
  {
698
  "point_id": 44,
 
 
 
 
699
  "adjacent_points": [
700
  43,
701
  45,
 
705
  19,
706
  18,
707
  15
 
 
 
 
708
  ]
709
  },
710
  {
711
  "point_id": 45,
 
 
 
 
712
  "adjacent_points": [
713
  44,
714
  46,
 
718
  19,
719
  16,
720
  15
 
 
 
 
721
  ]
722
  },
723
  {
724
  "point_id": 46,
 
 
 
 
725
  "adjacent_points": [
726
  45,
727
  47,
 
730
  "adjacent_hexes": [
731
  19,
732
  16
 
 
 
 
733
  ]
734
  },
735
  {
736
  "point_id": 47,
 
 
 
 
737
  "adjacent_points": [
738
  46,
739
  37
740
  ],
741
  "adjacent_hexes": [
742
  16
 
 
 
 
743
  ]
744
  },
745
  {
746
  "point_id": 48,
 
 
 
 
747
  "adjacent_points": [
748
  49,
749
  40
750
  ],
751
  "adjacent_hexes": [
752
  17
 
 
 
 
753
  ]
754
  },
755
  {
756
  "point_id": 49,
 
 
 
 
757
  "adjacent_points": [
758
  48,
759
  50
760
  ],
761
  "adjacent_hexes": [
762
  17
 
 
 
 
763
  ]
764
  },
765
  {
766
  "point_id": 50,
 
 
 
 
767
  "adjacent_points": [
768
  49,
769
  51,
 
772
  "adjacent_hexes": [
773
  18,
774
  17
 
 
 
 
775
  ]
776
  },
777
  {
778
  "point_id": 51,
 
 
 
 
779
  "adjacent_points": [
780
  50,
781
  52
782
  ],
783
  "adjacent_hexes": [
784
  18
 
 
 
 
785
  ]
786
  },
787
  {
788
  "point_id": 52,
 
 
 
 
789
  "adjacent_points": [
790
  51,
791
  53,
 
794
  "adjacent_hexes": [
795
  19,
796
  18
 
 
 
 
797
  ]
798
  },
799
  {
800
  "point_id": 53,
 
 
 
 
801
  "adjacent_points": [
802
  52,
803
  54
804
  ],
805
  "adjacent_hexes": [
806
  19
 
 
 
 
807
  ]
808
  },
809
  {
810
  "point_id": 54,
 
 
 
 
811
  "adjacent_points": [
812
  53,
813
  46
814
  ],
815
  "adjacent_hexes": [
816
  19
 
 
 
 
817
  ]
818
  }
819
+ ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
820
  }
821
  ]
822
  }
examples/ai_testing/play_and_capture.py CHANGED
@@ -23,29 +23,62 @@ original_update_state = None
23
 
24
 
25
  def capturing_wrapper(original_method):
26
- """Wrap the update_full_state method to capture all calls."""
27
- def wrapper(self, game_state=None):
28
- # Call original
29
  result = original_method(self, game_state)
30
 
31
- # Capture from web visualization
32
  for viz in self.visualizations:
33
  if hasattr(viz, 'current_game_state') and viz.current_game_state:
34
- state_copy = json.loads(json.dumps(viz.current_game_state))
35
- captured_states.append(state_copy)
36
- print(f"[Captured state #{len(captured_states)}]", flush=True)
37
- break # Only capture once per update
 
 
 
 
 
38
 
39
  return result
40
  return wrapper
41
 
42
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  def save_all_states():
44
  """Save all captured states to files."""
45
  if not captured_states:
46
  print("\n⚠️ No states were captured during this game.")
47
  return
48
 
 
 
 
49
  # Create output directory
50
  output_dir = Path('examples/ai_testing/my_games')
51
  output_dir.mkdir(exist_ok=True)
@@ -53,25 +86,25 @@ def save_all_states():
53
  # Generate timestamp
54
  timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
55
 
56
- # Save full history
57
  history_file = output_dir / f'game_{timestamp}_full.json'
58
  with open(history_file, 'w', encoding='utf-8') as f:
59
  json.dump({
60
- 'total_states': len(captured_states),
61
  'timestamp': timestamp,
62
- 'states': captured_states
63
  }, f, indent=2, ensure_ascii=False)
64
 
65
- # Save final state
66
  final_file = output_dir / f'game_{timestamp}_final.json'
67
  with open(final_file, 'w', encoding='utf-8') as f:
68
- json.dump(captured_states[-1], f, indent=2, ensure_ascii=False)
69
 
70
- # Also save to standard location
71
  sample_file = Path('examples/ai_testing/sample_states/captured_game.json')
72
  sample_file.parent.mkdir(exist_ok=True)
73
  with open(sample_file, 'w', encoding='utf-8') as f:
74
- json.dump(captured_states[-1], f, indent=2, ensure_ascii=False)
75
 
76
  print("\n" + "="*80)
77
  print("✅ GAME SAVED SUCCESSFULLY!")
@@ -123,12 +156,31 @@ def main():
123
  print("Press Ctrl+C anytime to stop and save.")
124
  print("="*80 + "\n")
125
 
126
- # Patch the VisualizationManager's update_full_state
127
  from pycatan.visualizations.visualization import VisualizationManager
128
- VisualizationManager.update_full_state = capturing_wrapper(
129
- VisualizationManager.update_full_state
130
  )
131
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
132
  try:
133
  # Start game
134
  game = RealGame()
 
23
 
24
 
25
  def capturing_wrapper(original_method):
26
+ """Wrap the display_game_state method to capture all calls."""
27
+ def wrapper(self, game_state):
28
+ # Call original (this will update visualizations with converted state)
29
  result = original_method(self, game_state)
30
 
31
+ # Now capture from web visualization's converted state
32
  for viz in self.visualizations:
33
  if hasattr(viz, 'current_game_state') and viz.current_game_state:
34
+ try:
35
+ # current_game_state is already a dict (JSON-serializable)
36
+ state_copy = json.loads(json.dumps(viz.current_game_state))
37
+ captured_states.append(state_copy)
38
+ print(f"[✅ Captured state #{len(captured_states)}]", flush=True)
39
+ break # Only capture once per update
40
+ except (TypeError, AttributeError) as e:
41
+ # Skip if not serializable
42
+ pass
43
 
44
  return result
45
  return wrapper
46
 
47
 
48
+ def clean_state_for_llm(state):
49
+ """Remove unnecessary fields that are noise for LLM."""
50
+ cleaned = json.loads(json.dumps(state)) # Deep copy
51
+
52
+ # Clean hexes: remove pixel_coords, position, axial_coords, q, r
53
+ if 'hexes' in cleaned:
54
+ for hex in cleaned['hexes']:
55
+ hex.pop('pixel_coords', None)
56
+ hex.pop('position', None)
57
+ hex.pop('axial_coords', None)
58
+ hex.pop('q', None)
59
+ hex.pop('r', None)
60
+
61
+ # Clean points: remove pixel_coords, game_coords
62
+ if 'points' in cleaned:
63
+ for point in cleaned['points']:
64
+ point.pop('pixel_coords', None)
65
+ point.pop('game_coords', None)
66
+
67
+ # Remove board_graph entirely (redundant with points data)
68
+ cleaned.pop('board_graph', None)
69
+
70
+ return cleaned
71
+
72
+
73
  def save_all_states():
74
  """Save all captured states to files."""
75
  if not captured_states:
76
  print("\n⚠️ No states were captured during this game.")
77
  return
78
 
79
+ # Clean all states for LLM
80
+ cleaned_states = [clean_state_for_llm(state) for state in captured_states]
81
+
82
  # Create output directory
83
  output_dir = Path('examples/ai_testing/my_games')
84
  output_dir.mkdir(exist_ok=True)
 
86
  # Generate timestamp
87
  timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
88
 
89
+ # Save full history (cleaned)
90
  history_file = output_dir / f'game_{timestamp}_full.json'
91
  with open(history_file, 'w', encoding='utf-8') as f:
92
  json.dump({
93
+ 'total_states': len(cleaned_states),
94
  'timestamp': timestamp,
95
+ 'states': cleaned_states
96
  }, f, indent=2, ensure_ascii=False)
97
 
98
+ # Save final state (cleaned)
99
  final_file = output_dir / f'game_{timestamp}_final.json'
100
  with open(final_file, 'w', encoding='utf-8') as f:
101
+ json.dump(cleaned_states[-1], f, indent=2, ensure_ascii=False)
102
 
103
+ # Also save to standard location (cleaned)
104
  sample_file = Path('examples/ai_testing/sample_states/captured_game.json')
105
  sample_file.parent.mkdir(exist_ok=True)
106
  with open(sample_file, 'w', encoding='utf-8') as f:
107
+ json.dump(cleaned_states[-1], f, indent=2, ensure_ascii=False)
108
 
109
  print("\n" + "="*80)
110
  print("✅ GAME SAVED SUCCESSFULLY!")
 
156
  print("Press Ctrl+C anytime to stop and save.")
157
  print("="*80 + "\n")
158
 
159
+ # Patch the VisualizationManager's display_game_state
160
  from pycatan.visualizations.visualization import VisualizationManager
161
+ VisualizationManager.display_game_state = capturing_wrapper(
162
+ VisualizationManager.display_game_state
163
  )
164
 
165
+ # Also patch WebVisualization.update_full_state (called directly by RealGame)
166
+ from pycatan.visualizations.web_visualization import WebVisualization
167
+ original_web_update = WebVisualization.update_full_state
168
+
169
+ def web_update_wrapper(self, game_state):
170
+ """Wrap WebVisualization.update_full_state to capture states."""
171
+ # Call original FIRST (this updates self.current_game_state)
172
+ result = original_web_update(self, game_state)
173
+
174
+ # NOW capture from the updated current_game_state
175
+ if hasattr(self, 'current_game_state') and self.current_game_state:
176
+ state_copy = json.loads(json.dumps(self.current_game_state))
177
+ captured_states.append(state_copy)
178
+ print(f"[✅ Captured state #{len(captured_states)}]", flush=True)
179
+
180
+ return result
181
+
182
+ WebVisualization.update_full_state = web_update_wrapper
183
+
184
  try:
185
  # Start game
186
  game = RealGame()
examples/ai_testing/play_and_save.py DELETED
@@ -1,179 +0,0 @@
1
- """
2
- Play Interactive Game and Auto-Save States
3
- -------------------------------------------
4
- Play Catan interactively in your browser, and all states
5
- are automatically captured and saved to JSON files.
6
-
7
- Usage:
8
- python examples/ai_testing/play_and_save.py
9
- """
10
-
11
- import sys
12
- from pathlib import Path
13
- import json
14
- import signal
15
- import atexit
16
-
17
- # Add parent directory to path
18
- sys.path.insert(0, str(Path(__file__).parent.parent.parent))
19
-
20
- from pycatan import RealGame
21
- from pycatan.visualizations.web_visualization import WebVisualization
22
-
23
- # Global list to capture states
24
- captured_states = []
25
- game_active = False
26
-
27
- # Store original functions
28
- original_web_update = WebVisualization.update_full_state
29
- original_display_action = None
30
-
31
- try:
32
- from pycatan.management.game_manager import GameManager
33
- original_display_action = GameManager.display_action
34
- except:
35
- pass
36
-
37
-
38
- def capturing_update(self, game_state):
39
- """Capture all state updates automatically."""
40
- global captured_states
41
-
42
- # Call original function
43
- original_web_update(self, game_state)
44
-
45
- # Capture the state
46
- if hasattr(self, 'current_game_state') and self.current_game_state:
47
- state_copy = json.loads(json.dumps(self.current_game_state))
48
- captured_states.append(state_copy)
49
-
50
- # Print notification (less verbose)
51
- if len(captured_states) % 5 == 0 or len(captured_states) == 1:
52
- print(f"[Captured {len(captured_states)} states so far...]", flush=True)
53
-
54
-
55
- def capturing_display_action(self, action, result=None):
56
- """Hook into display_action to capture after each action."""
57
- # Call original
58
- if original_display_action:
59
- original_display_action(self, action, result)
60
-
61
- # Force a state capture by updating all visualizations
62
- if hasattr(self, 'visualization_manager'):
63
- try:
64
- self.visualization_manager.update_full_state(self.game.get_state())
65
- except:
66
- pass
67
-
68
-
69
- def save_all_states():
70
- """Save all captured states to files."""
71
- if not captured_states:
72
- print("\n⚠️ No states were captured during this game.")
73
- return
74
-
75
- # Create output directory
76
- output_dir = Path('examples/ai_testing/my_games')
77
- output_dir.mkdir(exist_ok=True)
78
-
79
- # Generate timestamp for unique filename
80
- from datetime import datetime
81
- timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
82
-
83
- # Save full game history
84
- history_file = output_dir / f'game_{timestamp}_full.json'
85
- with open(history_file, 'w', encoding='utf-8') as f:
86
- json.dump({
87
- 'total_states': len(captured_states),
88
- 'timestamp': timestamp,
89
- 'states': captured_states
90
- }, f, indent=2, ensure_ascii=False)
91
-
92
- # Save just the final state
93
- final_file = output_dir / f'game_{timestamp}_final.json'
94
- with open(final_file, 'w', encoding='utf-8') as f:
95
- json.dump(captured_states[-1], f, indent=2, ensure_ascii=False)
96
-
97
- # Also save to standard location
98
- sample_file = Path('examples/ai_testing/sample_states/captured_game.json')
99
- sample_file.parent.mkdir(exist_ok=True)
100
- with open(sample_file, 'w', encoding='utf-8') as f:
101
- json.dump(captured_states[-1], f, indent=2, ensure_ascii=False)
102
-
103
- print("\n" + "="*80)
104
- print("✅ GAME SAVED SUCCESSFULLY!")
105
- print("="*80)
106
- print(f"\nTotal states captured: {len(captured_states)}")
107
- print(f"\nSaved to:")
108
- print(f" 📁 Full game history: {history_file}")
109
- print(f" 📄 Final state: {final_file}")
110
- print(f" 📌 Standard location: {sample_file}")
111
- print("\n" + "="*80)
112
-
113
- # Print summary
114
- if captured_states:
115
- final_state = captured_states[-1]
116
- print("\n📊 FINAL GAME STATE:")
117
- print(f" Current Phase: {final_state.get('current_phase', 'UNKNOWN')}")
118
- print(f" Settlements: {len(final_state.get('settlements', []))}")
119
- print(f" Cities: {len(final_state.get('cities', []))}")
120
- print(f" Roads: {len(final_state.get('roads', []))}")
121
- print(f" Players: {len(final_state.get('players', []))}")
122
- print("="*80)
123
-
124
-
125
- # Register save function to run on exit
126
- atexit.register(save_all_states)
127
-
128
-
129
- def signal_handler(sig, frame):
130
- """Handle Ctrl+C gracefully."""
131
- print("\n\n🛑 Game interrupted by user...")
132
- save_all_states()
133
- sys.exit(0)
134
-
135
-
136
- # Register signal handler
137
- signal.signal(signal.SIGINT, signal_handler)
138
-
139
-
140
- def main():
141
- global game_active
142
-
143
- print("="*80)
144
- print("🎮 INTERACTIVE CATAN WITH AUTO-SAVE")
145
- print("="*80)
146
- print("\nPlay the game normally in your browser.")
147
- print("All states will be automatically captured and saved!")
148
- print("\nPress Ctrl+C at any time to stop and save.")
149
- print("="*80 + "\n")
150
-
151
- # Apply the patches
152
- WebVisualization.update_full_state = capturing_update
153
-
154
- # Also patch GameManager if available
155
- if original_display_action:
156
- from pycatan.management.game_manager import GameManager
157
- GameManager.display_action = capturing_display_action
158
-
159
- try:
160
- # Start the game
161
- game_active = True
162
- game = RealGame()
163
- game.run()
164
-
165
- except KeyboardInterrupt:
166
- print("\n\n🛑 Game stopped by user")
167
- except EOFError:
168
- print("\n\n✅ Game completed")
169
- except Exception as e:
170
- print(f"\n\n❌ Error: {e}")
171
- import traceback
172
- traceback.print_exc()
173
- finally:
174
- game_active = False
175
- # save_all_states() will be called by atexit
176
-
177
-
178
- if __name__ == '__main__':
179
- main()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
examples/ai_testing/sample_states/captured_game.json CHANGED
@@ -2,307 +2,117 @@
2
  "hexes": [
3
  {
4
  "id": 1,
5
- "q": 0,
6
- "r": -2,
7
  "type": "wood",
8
  "number": 12,
9
- "has_robber": false,
10
- "position": [
11
- 0,
12
- 0
13
- ],
14
- "axial_coords": [
15
- 0,
16
- -2
17
- ]
18
  },
19
  {
20
  "id": 2,
21
- "q": 1,
22
- "r": -2,
23
  "type": "sheep",
24
  "number": 5,
25
- "has_robber": false,
26
- "position": [
27
- 0,
28
- 1
29
- ],
30
- "axial_coords": [
31
- 1,
32
- -2
33
- ]
34
  },
35
  {
36
  "id": 3,
37
- "q": 2,
38
- "r": -2,
39
  "type": "wood",
40
  "number": 4,
41
- "has_robber": false,
42
- "position": [
43
- 0,
44
- 2
45
- ],
46
- "axial_coords": [
47
- 2,
48
- -2
49
- ]
50
  },
51
  {
52
  "id": 4,
53
- "q": -1,
54
- "r": -1,
55
  "type": "sheep",
56
  "number": 8,
57
- "has_robber": false,
58
- "position": [
59
- 1,
60
- 0
61
- ],
62
- "axial_coords": [
63
- -1,
64
- -1
65
- ]
66
  },
67
  {
68
  "id": 5,
69
- "q": 0,
70
- "r": -1,
71
  "type": "brick",
72
  "number": 6,
73
- "has_robber": false,
74
- "position": [
75
- 1,
76
- 1
77
- ],
78
- "axial_coords": [
79
- 0,
80
- -1
81
- ]
82
  },
83
  {
84
  "id": 6,
85
- "q": 1,
86
- "r": -1,
87
  "type": "wood",
88
  "number": 3,
89
- "has_robber": false,
90
- "position": [
91
- 1,
92
- 2
93
- ],
94
- "axial_coords": [
95
- 1,
96
- -1
97
- ]
98
  },
99
  {
100
  "id": 7,
101
- "q": 2,
102
- "r": -1,
103
  "type": "wheat",
104
  "number": 8,
105
- "has_robber": false,
106
- "position": [
107
- 1,
108
- 3
109
- ],
110
- "axial_coords": [
111
- 2,
112
- -1
113
- ]
114
  },
115
  {
116
  "id": 8,
117
- "q": -2,
118
- "r": 0,
119
  "type": "brick",
120
  "number": 10,
121
- "has_robber": false,
122
- "position": [
123
- 2,
124
- 0
125
- ],
126
- "axial_coords": [
127
- -2,
128
- 0
129
- ]
130
  },
131
  {
132
  "id": 9,
133
- "q": -1,
134
- "r": 0,
135
  "type": "wood",
136
  "number": 11,
137
- "has_robber": false,
138
- "position": [
139
- 2,
140
- 1
141
- ],
142
- "axial_coords": [
143
- -1,
144
- 0
145
- ]
146
  },
147
  {
148
  "id": 10,
149
- "q": 0,
150
- "r": 0,
151
  "type": "desert",
152
  "number": null,
153
- "has_robber": true,
154
- "position": [
155
- 2,
156
- 2
157
- ],
158
- "axial_coords": [
159
- 0,
160
- 0
161
- ]
162
  },
163
  {
164
  "id": 11,
165
- "q": 1,
166
- "r": 0,
167
  "type": "ore",
168
  "number": 3,
169
- "has_robber": false,
170
- "position": [
171
- 2,
172
- 3
173
- ],
174
- "axial_coords": [
175
- 1,
176
- 0
177
- ]
178
  },
179
  {
180
  "id": 12,
181
- "q": 2,
182
- "r": 0,
183
  "type": "sheep",
184
  "number": 4,
185
- "has_robber": false,
186
- "position": [
187
- 2,
188
- 4
189
- ],
190
- "axial_coords": [
191
- 2,
192
- 0
193
- ]
194
  },
195
  {
196
  "id": 13,
197
- "q": -2,
198
- "r": 1,
199
  "type": "brick",
200
  "number": 10,
201
- "has_robber": false,
202
- "position": [
203
- 3,
204
- 0
205
- ],
206
- "axial_coords": [
207
- -2,
208
- 1
209
- ]
210
  },
211
  {
212
  "id": 14,
213
- "q": -1,
214
- "r": 1,
215
  "type": "wheat",
216
  "number": 9,
217
- "has_robber": false,
218
- "position": [
219
- 3,
220
- 1
221
- ],
222
- "axial_coords": [
223
- -1,
224
- 1
225
- ]
226
  },
227
  {
228
  "id": 15,
229
- "q": 0,
230
- "r": 1,
231
  "type": "wheat",
232
  "number": 6,
233
- "has_robber": false,
234
- "position": [
235
- 3,
236
- 2
237
- ],
238
- "axial_coords": [
239
- 0,
240
- 1
241
- ]
242
  },
243
  {
244
  "id": 16,
245
- "q": 1,
246
- "r": 1,
247
  "type": "sheep",
248
  "number": 11,
249
- "has_robber": false,
250
- "position": [
251
- 3,
252
- 3
253
- ],
254
- "axial_coords": [
255
- 1,
256
- 1
257
- ]
258
  },
259
  {
260
  "id": 17,
261
- "q": -2,
262
- "r": 2,
263
  "type": "ore",
264
  "number": 5,
265
- "has_robber": false,
266
- "position": [
267
- 4,
268
- 0
269
- ],
270
- "axial_coords": [
271
- -2,
272
- 2
273
- ]
274
  },
275
  {
276
  "id": 18,
277
- "q": -1,
278
- "r": 2,
279
  "type": "wheat",
280
  "number": 9,
281
- "has_robber": false,
282
- "position": [
283
- 4,
284
- 1
285
- ],
286
- "axial_coords": [
287
- -1,
288
- 2
289
- ]
290
  },
291
  {
292
  "id": 19,
293
- "q": 0,
294
- "r": 2,
295
  "type": "ore",
296
  "number": 2,
297
- "has_robber": false,
298
- "position": [
299
- 4,
300
- 2
301
- ],
302
- "axial_coords": [
303
- 0,
304
- 2
305
- ]
306
  }
307
  ],
308
  "settlements": [],
@@ -311,7 +121,7 @@
311
  "players": [
312
  {
313
  "id": 0,
314
- "name": "A",
315
  "victory_points": 0,
316
  "total_cards": 0,
317
  "cards_list": [],
@@ -327,7 +137,7 @@
327
  },
328
  {
329
  "id": 1,
330
- "name": "B",
331
  "victory_points": 0,
332
  "total_cards": 0,
333
  "cards_list": [],
@@ -343,7 +153,7 @@
343
  },
344
  {
345
  "id": 2,
346
- "name": "C",
347
  "victory_points": 0,
348
  "total_cards": 0,
349
  "cards_list": [],
@@ -368,46 +178,26 @@
368
  "points": [
369
  {
370
  "point_id": 1,
371
- "game_coords": [
372
- 0,
373
- 0
374
- ],
375
  "adjacent_points": [
376
  2,
377
  9
378
  ],
379
  "adjacent_hexes": [
380
  1
381
- ],
382
- "pixel_coords": [
383
- 377.5,
384
- 105.14428414850131
385
  ]
386
  },
387
  {
388
  "point_id": 2,
389
- "game_coords": [
390
- 0,
391
- 1
392
- ],
393
  "adjacent_points": [
394
  1,
395
  3
396
  ],
397
  "adjacent_hexes": [
398
  1
399
- ],
400
- "pixel_coords": [
401
- 422.5,
402
- 105.14428414850128
403
  ]
404
  },
405
  {
406
  "point_id": 3,
407
- "game_coords": [
408
- 0,
409
- 2
410
- ],
411
  "adjacent_points": [
412
  2,
413
  4,
@@ -416,36 +206,20 @@
416
  "adjacent_hexes": [
417
  2,
418
  1
419
- ],
420
- "pixel_coords": [
421
- 445,
422
- 144.11542731880104
423
  ]
424
  },
425
  {
426
  "point_id": 4,
427
- "game_coords": [
428
- 0,
429
- 3
430
- ],
431
  "adjacent_points": [
432
  3,
433
  5
434
  ],
435
  "adjacent_hexes": [
436
  2
437
- ],
438
- "pixel_coords": [
439
- 490,
440
- 144.11542731880104
441
  ]
442
  },
443
  {
444
  "point_id": 5,
445
- "game_coords": [
446
- 0,
447
- 4
448
- ],
449
  "adjacent_points": [
450
  4,
451
  6,
@@ -454,72 +228,40 @@
454
  "adjacent_hexes": [
455
  3,
456
  2
457
- ],
458
- "pixel_coords": [
459
- 512.5,
460
- 183.08657048910078
461
  ]
462
  },
463
  {
464
  "point_id": 6,
465
- "game_coords": [
466
- 0,
467
- 5
468
- ],
469
  "adjacent_points": [
470
  5,
471
  7
472
  ],
473
  "adjacent_hexes": [
474
  3
475
- ],
476
- "pixel_coords": [
477
- 557.5,
478
- 183.08657048910078
479
  ]
480
  },
481
  {
482
  "point_id": 7,
483
- "game_coords": [
484
- 0,
485
- 6
486
- ],
487
  "adjacent_points": [
488
  6,
489
  15
490
  ],
491
  "adjacent_hexes": [
492
  3
493
- ],
494
- "pixel_coords": [
495
- 580,
496
- 222.05771365940052
497
  ]
498
  },
499
  {
500
  "point_id": 8,
501
- "game_coords": [
502
- 1,
503
- 0
504
- ],
505
  "adjacent_points": [
506
  9,
507
  18
508
  ],
509
  "adjacent_hexes": [
510
  4
511
- ],
512
- "pixel_coords": [
513
- 310,
514
- 144.11542731880104
515
  ]
516
  },
517
  {
518
  "point_id": 9,
519
- "game_coords": [
520
- 1,
521
- 1
522
- ],
523
  "adjacent_points": [
524
  8,
525
  10,
@@ -528,18 +270,10 @@
528
  "adjacent_hexes": [
529
  4,
530
  1
531
- ],
532
- "pixel_coords": [
533
- 355,
534
- 144.11542731880104
535
  ]
536
  },
537
  {
538
  "point_id": 10,
539
- "game_coords": [
540
- 1,
541
- 2
542
- ],
543
  "adjacent_points": [
544
  9,
545
  11,
@@ -549,18 +283,10 @@
549
  5,
550
  4,
551
  1
552
- ],
553
- "pixel_coords": [
554
- 377.5,
555
- 183.08657048910078
556
  ]
557
  },
558
  {
559
  "point_id": 11,
560
- "game_coords": [
561
- 1,
562
- 3
563
- ],
564
  "adjacent_points": [
565
  10,
566
  12,
@@ -570,18 +296,10 @@
570
  5,
571
  2,
572
  1
573
- ],
574
- "pixel_coords": [
575
- 422.5,
576
- 183.08657048910078
577
  ]
578
  },
579
  {
580
  "point_id": 12,
581
- "game_coords": [
582
- 1,
583
- 4
584
- ],
585
  "adjacent_points": [
586
  11,
587
  13,
@@ -591,18 +309,10 @@
591
  6,
592
  5,
593
  2
594
- ],
595
- "pixel_coords": [
596
- 445,
597
- 222.05771365940052
598
  ]
599
  },
600
  {
601
  "point_id": 13,
602
- "game_coords": [
603
- 1,
604
- 5
605
- ],
606
  "adjacent_points": [
607
  12,
608
  14,
@@ -612,18 +322,10 @@
612
  6,
613
  3,
614
  2
615
- ],
616
- "pixel_coords": [
617
- 490,
618
- 222.05771365940052
619
  ]
620
  },
621
  {
622
  "point_id": 14,
623
- "game_coords": [
624
- 1,
625
- 6
626
- ],
627
  "adjacent_points": [
628
  13,
629
  15,
@@ -633,18 +335,10 @@
633
  7,
634
  6,
635
  3
636
- ],
637
- "pixel_coords": [
638
- 512.5,
639
- 261.02885682970026
640
  ]
641
  },
642
  {
643
  "point_id": 15,
644
- "game_coords": [
645
- 1,
646
- 7
647
- ],
648
  "adjacent_points": [
649
  14,
650
  16,
@@ -653,54 +347,30 @@
653
  "adjacent_hexes": [
654
  7,
655
  3
656
- ],
657
- "pixel_coords": [
658
- 557.5,
659
- 261.02885682970026
660
  ]
661
  },
662
  {
663
  "point_id": 16,
664
- "game_coords": [
665
- 1,
666
- 8
667
- ],
668
  "adjacent_points": [
669
  15,
670
  26
671
  ],
672
  "adjacent_hexes": [
673
  7
674
- ],
675
- "pixel_coords": [
676
- 580,
677
- 300
678
  ]
679
  },
680
  {
681
  "point_id": 17,
682
- "game_coords": [
683
- 2,
684
- 0
685
- ],
686
  "adjacent_points": [
687
  18,
688
  28
689
  ],
690
  "adjacent_hexes": [
691
  8
692
- ],
693
- "pixel_coords": [
694
- 242.49999999999997,
695
- 183.08657048910078
696
  ]
697
  },
698
  {
699
  "point_id": 18,
700
- "game_coords": [
701
- 2,
702
- 1
703
- ],
704
  "adjacent_points": [
705
  17,
706
  19,
@@ -709,18 +379,10 @@
709
  "adjacent_hexes": [
710
  8,
711
  4
712
- ],
713
- "pixel_coords": [
714
- 287.5,
715
- 183.08657048910078
716
  ]
717
  },
718
  {
719
  "point_id": 19,
720
- "game_coords": [
721
- 2,
722
- 2
723
- ],
724
  "adjacent_points": [
725
  18,
726
  20,
@@ -730,18 +392,10 @@
730
  9,
731
  8,
732
  4
733
- ],
734
- "pixel_coords": [
735
- 310,
736
- 222.05771365940052
737
  ]
738
  },
739
  {
740
  "point_id": 20,
741
- "game_coords": [
742
- 2,
743
- 3
744
- ],
745
  "adjacent_points": [
746
  19,
747
  21,
@@ -751,18 +405,10 @@
751
  9,
752
  5,
753
  4
754
- ],
755
- "pixel_coords": [
756
- 355,
757
- 222.05771365940052
758
  ]
759
  },
760
  {
761
  "point_id": 21,
762
- "game_coords": [
763
- 2,
764
- 4
765
- ],
766
  "adjacent_points": [
767
  20,
768
  22,
@@ -772,18 +418,10 @@
772
  10,
773
  9,
774
  5
775
- ],
776
- "pixel_coords": [
777
- 377.5,
778
- 261.02885682970026
779
  ]
780
  },
781
  {
782
  "point_id": 22,
783
- "game_coords": [
784
- 2,
785
- 5
786
- ],
787
  "adjacent_points": [
788
  21,
789
  23,
@@ -793,18 +431,10 @@
793
  10,
794
  6,
795
  5
796
- ],
797
- "pixel_coords": [
798
- 422.5,
799
- 261.02885682970026
800
  ]
801
  },
802
  {
803
  "point_id": 23,
804
- "game_coords": [
805
- 2,
806
- 6
807
- ],
808
  "adjacent_points": [
809
  22,
810
  24,
@@ -814,18 +444,10 @@
814
  11,
815
  10,
816
  6
817
- ],
818
- "pixel_coords": [
819
- 445,
820
- 300
821
  ]
822
  },
823
  {
824
  "point_id": 24,
825
- "game_coords": [
826
- 2,
827
- 7
828
- ],
829
  "adjacent_points": [
830
  23,
831
  25,
@@ -835,18 +457,10 @@
835
  11,
836
  7,
837
  6
838
- ],
839
- "pixel_coords": [
840
- 490,
841
- 300
842
  ]
843
  },
844
  {
845
  "point_id": 25,
846
- "game_coords": [
847
- 2,
848
- 8
849
- ],
850
  "adjacent_points": [
851
  24,
852
  26,
@@ -856,18 +470,10 @@
856
  12,
857
  11,
858
  7
859
- ],
860
- "pixel_coords": [
861
- 512.5,
862
- 338.97114317029974
863
  ]
864
  },
865
  {
866
  "point_id": 26,
867
- "game_coords": [
868
- 2,
869
- 9
870
- ],
871
  "adjacent_points": [
872
  25,
873
  27,
@@ -876,54 +482,30 @@
876
  "adjacent_hexes": [
877
  12,
878
  7
879
- ],
880
- "pixel_coords": [
881
- 557.5,
882
- 338.97114317029974
883
  ]
884
  },
885
  {
886
  "point_id": 27,
887
- "game_coords": [
888
- 2,
889
- 10
890
- ],
891
  "adjacent_points": [
892
  26,
893
  38
894
  ],
895
  "adjacent_hexes": [
896
  12
897
- ],
898
- "pixel_coords": [
899
- 580,
900
- 377.9422863405995
901
  ]
902
  },
903
  {
904
  "point_id": 28,
905
- "game_coords": [
906
- 3,
907
- 0
908
- ],
909
  "adjacent_points": [
910
  29,
911
  17
912
  ],
913
  "adjacent_hexes": [
914
  8
915
- ],
916
- "pixel_coords": [
917
- 220,
918
- 222.05771365940052
919
  ]
920
  },
921
  {
922
  "point_id": 29,
923
- "game_coords": [
924
- 3,
925
- 1
926
- ],
927
  "adjacent_points": [
928
  28,
929
  30,
@@ -932,18 +514,10 @@
932
  "adjacent_hexes": [
933
  13,
934
  8
935
- ],
936
- "pixel_coords": [
937
- 242.5,
938
- 261.02885682970026
939
  ]
940
  },
941
  {
942
  "point_id": 30,
943
- "game_coords": [
944
- 3,
945
- 2
946
- ],
947
  "adjacent_points": [
948
  29,
949
  31,
@@ -953,18 +527,10 @@
953
  13,
954
  9,
955
  8
956
- ],
957
- "pixel_coords": [
958
- 287.5,
959
- 261.02885682970026
960
  ]
961
  },
962
  {
963
  "point_id": 31,
964
- "game_coords": [
965
- 3,
966
- 3
967
- ],
968
  "adjacent_points": [
969
  30,
970
  32,
@@ -974,18 +540,10 @@
974
  14,
975
  13,
976
  9
977
- ],
978
- "pixel_coords": [
979
- 310,
980
- 300
981
  ]
982
  },
983
  {
984
  "point_id": 32,
985
- "game_coords": [
986
- 3,
987
- 4
988
- ],
989
  "adjacent_points": [
990
  31,
991
  33,
@@ -995,18 +553,10 @@
995
  14,
996
  10,
997
  9
998
- ],
999
- "pixel_coords": [
1000
- 355,
1001
- 300
1002
  ]
1003
  },
1004
  {
1005
  "point_id": 33,
1006
- "game_coords": [
1007
- 3,
1008
- 5
1009
- ],
1010
  "adjacent_points": [
1011
  32,
1012
  34,
@@ -1016,18 +566,10 @@
1016
  15,
1017
  14,
1018
  10
1019
- ],
1020
- "pixel_coords": [
1021
- 377.5,
1022
- 338.97114317029974
1023
  ]
1024
  },
1025
  {
1026
  "point_id": 34,
1027
- "game_coords": [
1028
- 3,
1029
- 6
1030
- ],
1031
  "adjacent_points": [
1032
  33,
1033
  35,
@@ -1037,18 +579,10 @@
1037
  15,
1038
  11,
1039
  10
1040
- ],
1041
- "pixel_coords": [
1042
- 422.5,
1043
- 338.97114317029974
1044
  ]
1045
  },
1046
  {
1047
  "point_id": 35,
1048
- "game_coords": [
1049
- 3,
1050
- 7
1051
- ],
1052
  "adjacent_points": [
1053
  34,
1054
  36,
@@ -1058,18 +592,10 @@
1058
  16,
1059
  15,
1060
  11
1061
- ],
1062
- "pixel_coords": [
1063
- 445,
1064
- 377.9422863405995
1065
  ]
1066
  },
1067
  {
1068
  "point_id": 36,
1069
- "game_coords": [
1070
- 3,
1071
- 8
1072
- ],
1073
  "adjacent_points": [
1074
  35,
1075
  37,
@@ -1079,18 +605,10 @@
1079
  16,
1080
  12,
1081
  11
1082
- ],
1083
- "pixel_coords": [
1084
- 490,
1085
- 377.9422863405995
1086
  ]
1087
  },
1088
  {
1089
  "point_id": 37,
1090
- "game_coords": [
1091
- 3,
1092
- 9
1093
- ],
1094
  "adjacent_points": [
1095
  36,
1096
  38,
@@ -1099,54 +617,30 @@
1099
  "adjacent_hexes": [
1100
  16,
1101
  12
1102
- ],
1103
- "pixel_coords": [
1104
- 512.5,
1105
- 416.9134295108992
1106
  ]
1107
  },
1108
  {
1109
  "point_id": 38,
1110
- "game_coords": [
1111
- 3,
1112
- 10
1113
- ],
1114
  "adjacent_points": [
1115
  37,
1116
  27
1117
  ],
1118
  "adjacent_hexes": [
1119
  12
1120
- ],
1121
- "pixel_coords": [
1122
- 557.5,
1123
- 416.9134295108992
1124
  ]
1125
  },
1126
  {
1127
  "point_id": 39,
1128
- "game_coords": [
1129
- 4,
1130
- 0
1131
- ],
1132
  "adjacent_points": [
1133
  40,
1134
  29
1135
  ],
1136
  "adjacent_hexes": [
1137
  13
1138
- ],
1139
- "pixel_coords": [
1140
- 220,
1141
- 300
1142
  ]
1143
  },
1144
  {
1145
  "point_id": 40,
1146
- "game_coords": [
1147
- 4,
1148
- 1
1149
- ],
1150
  "adjacent_points": [
1151
  39,
1152
  41,
@@ -1155,18 +649,10 @@
1155
  "adjacent_hexes": [
1156
  17,
1157
  13
1158
- ],
1159
- "pixel_coords": [
1160
- 242.5,
1161
- 338.97114317029974
1162
  ]
1163
  },
1164
  {
1165
  "point_id": 41,
1166
- "game_coords": [
1167
- 4,
1168
- 2
1169
- ],
1170
  "adjacent_points": [
1171
  40,
1172
  42,
@@ -1176,18 +662,10 @@
1176
  17,
1177
  14,
1178
  13
1179
- ],
1180
- "pixel_coords": [
1181
- 287.5,
1182
- 338.97114317029974
1183
  ]
1184
  },
1185
  {
1186
  "point_id": 42,
1187
- "game_coords": [
1188
- 4,
1189
- 3
1190
- ],
1191
  "adjacent_points": [
1192
  41,
1193
  43,
@@ -1197,18 +675,10 @@
1197
  18,
1198
  17,
1199
  14
1200
- ],
1201
- "pixel_coords": [
1202
- 310,
1203
- 377.9422863405995
1204
  ]
1205
  },
1206
  {
1207
  "point_id": 43,
1208
- "game_coords": [
1209
- 4,
1210
- 4
1211
- ],
1212
  "adjacent_points": [
1213
  42,
1214
  44,
@@ -1218,18 +688,10 @@
1218
  18,
1219
  15,
1220
  14
1221
- ],
1222
- "pixel_coords": [
1223
- 355,
1224
- 377.9422863405995
1225
  ]
1226
  },
1227
  {
1228
  "point_id": 44,
1229
- "game_coords": [
1230
- 4,
1231
- 5
1232
- ],
1233
  "adjacent_points": [
1234
  43,
1235
  45,
@@ -1239,18 +701,10 @@
1239
  19,
1240
  18,
1241
  15
1242
- ],
1243
- "pixel_coords": [
1244
- 377.5,
1245
- 416.9134295108992
1246
  ]
1247
  },
1248
  {
1249
  "point_id": 45,
1250
- "game_coords": [
1251
- 4,
1252
- 6
1253
- ],
1254
  "adjacent_points": [
1255
  44,
1256
  46,
@@ -1260,18 +714,10 @@
1260
  19,
1261
  16,
1262
  15
1263
- ],
1264
- "pixel_coords": [
1265
- 422.5,
1266
- 416.9134295108992
1267
  ]
1268
  },
1269
  {
1270
  "point_id": 46,
1271
- "game_coords": [
1272
- 4,
1273
- 7
1274
- ],
1275
  "adjacent_points": [
1276
  45,
1277
  47,
@@ -1280,72 +726,40 @@
1280
  "adjacent_hexes": [
1281
  19,
1282
  16
1283
- ],
1284
- "pixel_coords": [
1285
- 445,
1286
- 455.88457268119896
1287
  ]
1288
  },
1289
  {
1290
  "point_id": 47,
1291
- "game_coords": [
1292
- 4,
1293
- 8
1294
- ],
1295
  "adjacent_points": [
1296
  46,
1297
  37
1298
  ],
1299
  "adjacent_hexes": [
1300
  16
1301
- ],
1302
- "pixel_coords": [
1303
- 490,
1304
- 455.88457268119896
1305
  ]
1306
  },
1307
  {
1308
  "point_id": 48,
1309
- "game_coords": [
1310
- 5,
1311
- 0
1312
- ],
1313
  "adjacent_points": [
1314
  49,
1315
  40
1316
  ],
1317
  "adjacent_hexes": [
1318
  17
1319
- ],
1320
- "pixel_coords": [
1321
- 220,
1322
- 377.9422863405995
1323
  ]
1324
  },
1325
  {
1326
  "point_id": 49,
1327
- "game_coords": [
1328
- 5,
1329
- 1
1330
- ],
1331
  "adjacent_points": [
1332
  48,
1333
  50
1334
  ],
1335
  "adjacent_hexes": [
1336
  17
1337
- ],
1338
- "pixel_coords": [
1339
- 242.5,
1340
- 416.9134295108992
1341
  ]
1342
  },
1343
  {
1344
  "point_id": 50,
1345
- "game_coords": [
1346
- 5,
1347
- 2
1348
- ],
1349
  "adjacent_points": [
1350
  49,
1351
  51,
@@ -1354,36 +768,20 @@
1354
  "adjacent_hexes": [
1355
  18,
1356
  17
1357
- ],
1358
- "pixel_coords": [
1359
- 287.5,
1360
- 416.9134295108992
1361
  ]
1362
  },
1363
  {
1364
  "point_id": 51,
1365
- "game_coords": [
1366
- 5,
1367
- 3
1368
- ],
1369
  "adjacent_points": [
1370
  50,
1371
  52
1372
  ],
1373
  "adjacent_hexes": [
1374
  18
1375
- ],
1376
- "pixel_coords": [
1377
- 310,
1378
- 455.88457268119896
1379
  ]
1380
  },
1381
  {
1382
  "point_id": 52,
1383
- "game_coords": [
1384
- 5,
1385
- 4
1386
- ],
1387
  "adjacent_points": [
1388
  51,
1389
  53,
@@ -1392,459 +790,27 @@
1392
  "adjacent_hexes": [
1393
  19,
1394
  18
1395
- ],
1396
- "pixel_coords": [
1397
- 355,
1398
- 455.88457268119896
1399
  ]
1400
  },
1401
  {
1402
  "point_id": 53,
1403
- "game_coords": [
1404
- 5,
1405
- 5
1406
- ],
1407
  "adjacent_points": [
1408
  52,
1409
  54
1410
  ],
1411
  "adjacent_hexes": [
1412
  19
1413
- ],
1414
- "pixel_coords": [
1415
- 377.5,
1416
- 494.8557158514987
1417
  ]
1418
  },
1419
  {
1420
  "point_id": 54,
1421
- "game_coords": [
1422
- 5,
1423
- 6
1424
- ],
1425
  "adjacent_points": [
1426
  53,
1427
  46
1428
  ],
1429
  "adjacent_hexes": [
1430
  19
1431
- ],
1432
- "pixel_coords": [
1433
- 422.5,
1434
- 494.8557158514987
1435
  ]
1436
  }
1437
- ],
1438
- "board_graph": {
1439
- "adjacency": {
1440
- "1": [
1441
- 2,
1442
- 9
1443
- ],
1444
- "2": [
1445
- 1,
1446
- 3
1447
- ],
1448
- "3": [
1449
- 2,
1450
- 4,
1451
- 11
1452
- ],
1453
- "4": [
1454
- 3,
1455
- 5
1456
- ],
1457
- "5": [
1458
- 4,
1459
- 6,
1460
- 13
1461
- ],
1462
- "6": [
1463
- 5,
1464
- 7
1465
- ],
1466
- "7": [
1467
- 6,
1468
- 15
1469
- ],
1470
- "8": [
1471
- 9,
1472
- 18
1473
- ],
1474
- "9": [
1475
- 8,
1476
- 10,
1477
- 1
1478
- ],
1479
- "10": [
1480
- 9,
1481
- 11,
1482
- 20
1483
- ],
1484
- "11": [
1485
- 10,
1486
- 12,
1487
- 3
1488
- ],
1489
- "12": [
1490
- 11,
1491
- 13,
1492
- 22
1493
- ],
1494
- "13": [
1495
- 12,
1496
- 14,
1497
- 5
1498
- ],
1499
- "14": [
1500
- 13,
1501
- 15,
1502
- 24
1503
- ],
1504
- "15": [
1505
- 14,
1506
- 16,
1507
- 7
1508
- ],
1509
- "16": [
1510
- 15,
1511
- 26
1512
- ],
1513
- "17": [
1514
- 18,
1515
- 28
1516
- ],
1517
- "18": [
1518
- 17,
1519
- 19,
1520
- 8
1521
- ],
1522
- "19": [
1523
- 18,
1524
- 20,
1525
- 30
1526
- ],
1527
- "20": [
1528
- 19,
1529
- 21,
1530
- 10
1531
- ],
1532
- "21": [
1533
- 20,
1534
- 22,
1535
- 32
1536
- ],
1537
- "22": [
1538
- 21,
1539
- 23,
1540
- 12
1541
- ],
1542
- "23": [
1543
- 22,
1544
- 24,
1545
- 34
1546
- ],
1547
- "24": [
1548
- 23,
1549
- 25,
1550
- 14
1551
- ],
1552
- "25": [
1553
- 24,
1554
- 26,
1555
- 36
1556
- ],
1557
- "26": [
1558
- 25,
1559
- 27,
1560
- 16
1561
- ],
1562
- "27": [
1563
- 26,
1564
- 38
1565
- ],
1566
- "28": [
1567
- 29,
1568
- 17
1569
- ],
1570
- "29": [
1571
- 28,
1572
- 30,
1573
- 39
1574
- ],
1575
- "30": [
1576
- 29,
1577
- 31,
1578
- 19
1579
- ],
1580
- "31": [
1581
- 30,
1582
- 32,
1583
- 41
1584
- ],
1585
- "32": [
1586
- 31,
1587
- 33,
1588
- 21
1589
- ],
1590
- "33": [
1591
- 32,
1592
- 34,
1593
- 43
1594
- ],
1595
- "34": [
1596
- 33,
1597
- 35,
1598
- 23
1599
- ],
1600
- "35": [
1601
- 34,
1602
- 36,
1603
- 45
1604
- ],
1605
- "36": [
1606
- 35,
1607
- 37,
1608
- 25
1609
- ],
1610
- "37": [
1611
- 36,
1612
- 38,
1613
- 47
1614
- ],
1615
- "38": [
1616
- 37,
1617
- 27
1618
- ],
1619
- "39": [
1620
- 40,
1621
- 29
1622
- ],
1623
- "40": [
1624
- 39,
1625
- 41,
1626
- 48
1627
- ],
1628
- "41": [
1629
- 40,
1630
- 42,
1631
- 31
1632
- ],
1633
- "42": [
1634
- 41,
1635
- 43,
1636
- 50
1637
- ],
1638
- "43": [
1639
- 42,
1640
- 44,
1641
- 33
1642
- ],
1643
- "44": [
1644
- 43,
1645
- 45,
1646
- 52
1647
- ],
1648
- "45": [
1649
- 44,
1650
- 46,
1651
- 35
1652
- ],
1653
- "46": [
1654
- 45,
1655
- 47,
1656
- 54
1657
- ],
1658
- "47": [
1659
- 46,
1660
- 37
1661
- ],
1662
- "48": [
1663
- 49,
1664
- 40
1665
- ],
1666
- "49": [
1667
- 48,
1668
- 50
1669
- ],
1670
- "50": [
1671
- 49,
1672
- 51,
1673
- 42
1674
- ],
1675
- "51": [
1676
- 50,
1677
- 52
1678
- ],
1679
- "52": [
1680
- 51,
1681
- 53,
1682
- 44
1683
- ],
1684
- "53": [
1685
- 52,
1686
- 54
1687
- ],
1688
- "54": [
1689
- 53,
1690
- 46
1691
- ]
1692
- },
1693
- "hex_to_points": {
1694
- "1": [
1695
- 1,
1696
- 2,
1697
- 3,
1698
- 9,
1699
- 10,
1700
- 11
1701
- ],
1702
- "2": [
1703
- 3,
1704
- 4,
1705
- 5,
1706
- 11,
1707
- 12,
1708
- 13
1709
- ],
1710
- "3": [
1711
- 5,
1712
- 6,
1713
- 7,
1714
- 13,
1715
- 14,
1716
- 15
1717
- ],
1718
- "4": [
1719
- 8,
1720
- 9,
1721
- 10,
1722
- 18,
1723
- 19,
1724
- 20
1725
- ],
1726
- "5": [
1727
- 10,
1728
- 11,
1729
- 12,
1730
- 20,
1731
- 21,
1732
- 22
1733
- ],
1734
- "6": [
1735
- 12,
1736
- 13,
1737
- 14,
1738
- 22,
1739
- 23,
1740
- 24
1741
- ],
1742
- "7": [
1743
- 14,
1744
- 15,
1745
- 16,
1746
- 24,
1747
- 25,
1748
- 26
1749
- ],
1750
- "8": [
1751
- 17,
1752
- 18,
1753
- 19,
1754
- 28,
1755
- 29,
1756
- 30
1757
- ],
1758
- "9": [
1759
- 19,
1760
- 20,
1761
- 21,
1762
- 30,
1763
- 31,
1764
- 32
1765
- ],
1766
- "10": [
1767
- 21,
1768
- 22,
1769
- 23,
1770
- 32,
1771
- 33,
1772
- 34
1773
- ],
1774
- "11": [
1775
- 23,
1776
- 24,
1777
- 25,
1778
- 34,
1779
- 35,
1780
- 36
1781
- ],
1782
- "12": [
1783
- 25,
1784
- 26,
1785
- 27,
1786
- 36,
1787
- 37,
1788
- 38
1789
- ],
1790
- "13": [
1791
- 29,
1792
- 30,
1793
- 31,
1794
- 39,
1795
- 40,
1796
- 41
1797
- ],
1798
- "14": [
1799
- 31,
1800
- 32,
1801
- 33,
1802
- 41,
1803
- 42,
1804
- 43
1805
- ],
1806
- "15": [
1807
- 33,
1808
- 34,
1809
- 35,
1810
- 43,
1811
- 44,
1812
- 45
1813
- ],
1814
- "16": [
1815
- 35,
1816
- 36,
1817
- 37,
1818
- 45,
1819
- 46,
1820
- 47
1821
- ],
1822
- "17": [
1823
- 40,
1824
- 41,
1825
- 42,
1826
- 48,
1827
- 49,
1828
- 50
1829
- ],
1830
- "18": [
1831
- 42,
1832
- 43,
1833
- 44,
1834
- 50,
1835
- 51,
1836
- 52
1837
- ],
1838
- "19": [
1839
- 44,
1840
- 45,
1841
- 46,
1842
- 52,
1843
- 53,
1844
- 54
1845
- ]
1846
- },
1847
- "total_points": 54,
1848
- "total_hexes": 19
1849
- }
1850
  }
 
2
  "hexes": [
3
  {
4
  "id": 1,
 
 
5
  "type": "wood",
6
  "number": 12,
7
+ "has_robber": false
 
 
 
 
 
 
 
 
8
  },
9
  {
10
  "id": 2,
 
 
11
  "type": "sheep",
12
  "number": 5,
13
+ "has_robber": false
 
 
 
 
 
 
 
 
14
  },
15
  {
16
  "id": 3,
 
 
17
  "type": "wood",
18
  "number": 4,
19
+ "has_robber": false
 
 
 
 
 
 
 
 
20
  },
21
  {
22
  "id": 4,
 
 
23
  "type": "sheep",
24
  "number": 8,
25
+ "has_robber": false
 
 
 
 
 
 
 
 
26
  },
27
  {
28
  "id": 5,
 
 
29
  "type": "brick",
30
  "number": 6,
31
+ "has_robber": false
 
 
 
 
 
 
 
 
32
  },
33
  {
34
  "id": 6,
 
 
35
  "type": "wood",
36
  "number": 3,
37
+ "has_robber": false
 
 
 
 
 
 
 
 
38
  },
39
  {
40
  "id": 7,
 
 
41
  "type": "wheat",
42
  "number": 8,
43
+ "has_robber": false
 
 
 
 
 
 
 
 
44
  },
45
  {
46
  "id": 8,
 
 
47
  "type": "brick",
48
  "number": 10,
49
+ "has_robber": false
 
 
 
 
 
 
 
 
50
  },
51
  {
52
  "id": 9,
 
 
53
  "type": "wood",
54
  "number": 11,
55
+ "has_robber": false
 
 
 
 
 
 
 
 
56
  },
57
  {
58
  "id": 10,
 
 
59
  "type": "desert",
60
  "number": null,
61
+ "has_robber": true
 
 
 
 
 
 
 
 
62
  },
63
  {
64
  "id": 11,
 
 
65
  "type": "ore",
66
  "number": 3,
67
+ "has_robber": false
 
 
 
 
 
 
 
 
68
  },
69
  {
70
  "id": 12,
 
 
71
  "type": "sheep",
72
  "number": 4,
73
+ "has_robber": false
 
 
 
 
 
 
 
 
74
  },
75
  {
76
  "id": 13,
 
 
77
  "type": "brick",
78
  "number": 10,
79
+ "has_robber": false
 
 
 
 
 
 
 
 
80
  },
81
  {
82
  "id": 14,
 
 
83
  "type": "wheat",
84
  "number": 9,
85
+ "has_robber": false
 
 
 
 
 
 
 
 
86
  },
87
  {
88
  "id": 15,
 
 
89
  "type": "wheat",
90
  "number": 6,
91
+ "has_robber": false
 
 
 
 
 
 
 
 
92
  },
93
  {
94
  "id": 16,
 
 
95
  "type": "sheep",
96
  "number": 11,
97
+ "has_robber": false
 
 
 
 
 
 
 
 
98
  },
99
  {
100
  "id": 17,
 
 
101
  "type": "ore",
102
  "number": 5,
103
+ "has_robber": false
 
 
 
 
 
 
 
 
104
  },
105
  {
106
  "id": 18,
 
 
107
  "type": "wheat",
108
  "number": 9,
109
+ "has_robber": false
 
 
 
 
 
 
 
 
110
  },
111
  {
112
  "id": 19,
 
 
113
  "type": "ore",
114
  "number": 2,
115
+ "has_robber": false
 
 
 
 
 
 
 
 
116
  }
117
  ],
118
  "settlements": [],
 
121
  "players": [
122
  {
123
  "id": 0,
124
+ "name": "a",
125
  "victory_points": 0,
126
  "total_cards": 0,
127
  "cards_list": [],
 
137
  },
138
  {
139
  "id": 1,
140
+ "name": "b",
141
  "victory_points": 0,
142
  "total_cards": 0,
143
  "cards_list": [],
 
153
  },
154
  {
155
  "id": 2,
156
+ "name": "c",
157
  "victory_points": 0,
158
  "total_cards": 0,
159
  "cards_list": [],
 
178
  "points": [
179
  {
180
  "point_id": 1,
 
 
 
 
181
  "adjacent_points": [
182
  2,
183
  9
184
  ],
185
  "adjacent_hexes": [
186
  1
 
 
 
 
187
  ]
188
  },
189
  {
190
  "point_id": 2,
 
 
 
 
191
  "adjacent_points": [
192
  1,
193
  3
194
  ],
195
  "adjacent_hexes": [
196
  1
 
 
 
 
197
  ]
198
  },
199
  {
200
  "point_id": 3,
 
 
 
 
201
  "adjacent_points": [
202
  2,
203
  4,
 
206
  "adjacent_hexes": [
207
  2,
208
  1
 
 
 
 
209
  ]
210
  },
211
  {
212
  "point_id": 4,
 
 
 
 
213
  "adjacent_points": [
214
  3,
215
  5
216
  ],
217
  "adjacent_hexes": [
218
  2
 
 
 
 
219
  ]
220
  },
221
  {
222
  "point_id": 5,
 
 
 
 
223
  "adjacent_points": [
224
  4,
225
  6,
 
228
  "adjacent_hexes": [
229
  3,
230
  2
 
 
 
 
231
  ]
232
  },
233
  {
234
  "point_id": 6,
 
 
 
 
235
  "adjacent_points": [
236
  5,
237
  7
238
  ],
239
  "adjacent_hexes": [
240
  3
 
 
 
 
241
  ]
242
  },
243
  {
244
  "point_id": 7,
 
 
 
 
245
  "adjacent_points": [
246
  6,
247
  15
248
  ],
249
  "adjacent_hexes": [
250
  3
 
 
 
 
251
  ]
252
  },
253
  {
254
  "point_id": 8,
 
 
 
 
255
  "adjacent_points": [
256
  9,
257
  18
258
  ],
259
  "adjacent_hexes": [
260
  4
 
 
 
 
261
  ]
262
  },
263
  {
264
  "point_id": 9,
 
 
 
 
265
  "adjacent_points": [
266
  8,
267
  10,
 
270
  "adjacent_hexes": [
271
  4,
272
  1
 
 
 
 
273
  ]
274
  },
275
  {
276
  "point_id": 10,
 
 
 
 
277
  "adjacent_points": [
278
  9,
279
  11,
 
283
  5,
284
  4,
285
  1
 
 
 
 
286
  ]
287
  },
288
  {
289
  "point_id": 11,
 
 
 
 
290
  "adjacent_points": [
291
  10,
292
  12,
 
296
  5,
297
  2,
298
  1
 
 
 
 
299
  ]
300
  },
301
  {
302
  "point_id": 12,
 
 
 
 
303
  "adjacent_points": [
304
  11,
305
  13,
 
309
  6,
310
  5,
311
  2
 
 
 
 
312
  ]
313
  },
314
  {
315
  "point_id": 13,
 
 
 
 
316
  "adjacent_points": [
317
  12,
318
  14,
 
322
  6,
323
  3,
324
  2
 
 
 
 
325
  ]
326
  },
327
  {
328
  "point_id": 14,
 
 
 
 
329
  "adjacent_points": [
330
  13,
331
  15,
 
335
  7,
336
  6,
337
  3
 
 
 
 
338
  ]
339
  },
340
  {
341
  "point_id": 15,
 
 
 
 
342
  "adjacent_points": [
343
  14,
344
  16,
 
347
  "adjacent_hexes": [
348
  7,
349
  3
 
 
 
 
350
  ]
351
  },
352
  {
353
  "point_id": 16,
 
 
 
 
354
  "adjacent_points": [
355
  15,
356
  26
357
  ],
358
  "adjacent_hexes": [
359
  7
 
 
 
 
360
  ]
361
  },
362
  {
363
  "point_id": 17,
 
 
 
 
364
  "adjacent_points": [
365
  18,
366
  28
367
  ],
368
  "adjacent_hexes": [
369
  8
 
 
 
 
370
  ]
371
  },
372
  {
373
  "point_id": 18,
 
 
 
 
374
  "adjacent_points": [
375
  17,
376
  19,
 
379
  "adjacent_hexes": [
380
  8,
381
  4
 
 
 
 
382
  ]
383
  },
384
  {
385
  "point_id": 19,
 
 
 
 
386
  "adjacent_points": [
387
  18,
388
  20,
 
392
  9,
393
  8,
394
  4
 
 
 
 
395
  ]
396
  },
397
  {
398
  "point_id": 20,
 
 
 
 
399
  "adjacent_points": [
400
  19,
401
  21,
 
405
  9,
406
  5,
407
  4
 
 
 
 
408
  ]
409
  },
410
  {
411
  "point_id": 21,
 
 
 
 
412
  "adjacent_points": [
413
  20,
414
  22,
 
418
  10,
419
  9,
420
  5
 
 
 
 
421
  ]
422
  },
423
  {
424
  "point_id": 22,
 
 
 
 
425
  "adjacent_points": [
426
  21,
427
  23,
 
431
  10,
432
  6,
433
  5
 
 
 
 
434
  ]
435
  },
436
  {
437
  "point_id": 23,
 
 
 
 
438
  "adjacent_points": [
439
  22,
440
  24,
 
444
  11,
445
  10,
446
  6
 
 
 
 
447
  ]
448
  },
449
  {
450
  "point_id": 24,
 
 
 
 
451
  "adjacent_points": [
452
  23,
453
  25,
 
457
  11,
458
  7,
459
  6
 
 
 
 
460
  ]
461
  },
462
  {
463
  "point_id": 25,
 
 
 
 
464
  "adjacent_points": [
465
  24,
466
  26,
 
470
  12,
471
  11,
472
  7
 
 
 
 
473
  ]
474
  },
475
  {
476
  "point_id": 26,
 
 
 
 
477
  "adjacent_points": [
478
  25,
479
  27,
 
482
  "adjacent_hexes": [
483
  12,
484
  7
 
 
 
 
485
  ]
486
  },
487
  {
488
  "point_id": 27,
 
 
 
 
489
  "adjacent_points": [
490
  26,
491
  38
492
  ],
493
  "adjacent_hexes": [
494
  12
 
 
 
 
495
  ]
496
  },
497
  {
498
  "point_id": 28,
 
 
 
 
499
  "adjacent_points": [
500
  29,
501
  17
502
  ],
503
  "adjacent_hexes": [
504
  8
 
 
 
 
505
  ]
506
  },
507
  {
508
  "point_id": 29,
 
 
 
 
509
  "adjacent_points": [
510
  28,
511
  30,
 
514
  "adjacent_hexes": [
515
  13,
516
  8
 
 
 
 
517
  ]
518
  },
519
  {
520
  "point_id": 30,
 
 
 
 
521
  "adjacent_points": [
522
  29,
523
  31,
 
527
  13,
528
  9,
529
  8
 
 
 
 
530
  ]
531
  },
532
  {
533
  "point_id": 31,
 
 
 
 
534
  "adjacent_points": [
535
  30,
536
  32,
 
540
  14,
541
  13,
542
  9
 
 
 
 
543
  ]
544
  },
545
  {
546
  "point_id": 32,
 
 
 
 
547
  "adjacent_points": [
548
  31,
549
  33,
 
553
  14,
554
  10,
555
  9
 
 
 
 
556
  ]
557
  },
558
  {
559
  "point_id": 33,
 
 
 
 
560
  "adjacent_points": [
561
  32,
562
  34,
 
566
  15,
567
  14,
568
  10
 
 
 
 
569
  ]
570
  },
571
  {
572
  "point_id": 34,
 
 
 
 
573
  "adjacent_points": [
574
  33,
575
  35,
 
579
  15,
580
  11,
581
  10
 
 
 
 
582
  ]
583
  },
584
  {
585
  "point_id": 35,
 
 
 
 
586
  "adjacent_points": [
587
  34,
588
  36,
 
592
  16,
593
  15,
594
  11
 
 
 
 
595
  ]
596
  },
597
  {
598
  "point_id": 36,
 
 
 
 
599
  "adjacent_points": [
600
  35,
601
  37,
 
605
  16,
606
  12,
607
  11
 
 
 
 
608
  ]
609
  },
610
  {
611
  "point_id": 37,
 
 
 
 
612
  "adjacent_points": [
613
  36,
614
  38,
 
617
  "adjacent_hexes": [
618
  16,
619
  12
 
 
 
 
620
  ]
621
  },
622
  {
623
  "point_id": 38,
 
 
 
 
624
  "adjacent_points": [
625
  37,
626
  27
627
  ],
628
  "adjacent_hexes": [
629
  12
 
 
 
 
630
  ]
631
  },
632
  {
633
  "point_id": 39,
 
 
 
 
634
  "adjacent_points": [
635
  40,
636
  29
637
  ],
638
  "adjacent_hexes": [
639
  13
 
 
 
 
640
  ]
641
  },
642
  {
643
  "point_id": 40,
 
 
 
 
644
  "adjacent_points": [
645
  39,
646
  41,
 
649
  "adjacent_hexes": [
650
  17,
651
  13
 
 
 
 
652
  ]
653
  },
654
  {
655
  "point_id": 41,
 
 
 
 
656
  "adjacent_points": [
657
  40,
658
  42,
 
662
  17,
663
  14,
664
  13
 
 
 
 
665
  ]
666
  },
667
  {
668
  "point_id": 42,
 
 
 
 
669
  "adjacent_points": [
670
  41,
671
  43,
 
675
  18,
676
  17,
677
  14
 
 
 
 
678
  ]
679
  },
680
  {
681
  "point_id": 43,
 
 
 
 
682
  "adjacent_points": [
683
  42,
684
  44,
 
688
  18,
689
  15,
690
  14
 
 
 
 
691
  ]
692
  },
693
  {
694
  "point_id": 44,
 
 
 
 
695
  "adjacent_points": [
696
  43,
697
  45,
 
701
  19,
702
  18,
703
  15
 
 
 
 
704
  ]
705
  },
706
  {
707
  "point_id": 45,
 
 
 
 
708
  "adjacent_points": [
709
  44,
710
  46,
 
714
  19,
715
  16,
716
  15
 
 
 
 
717
  ]
718
  },
719
  {
720
  "point_id": 46,
 
 
 
 
721
  "adjacent_points": [
722
  45,
723
  47,
 
726
  "adjacent_hexes": [
727
  19,
728
  16
 
 
 
 
729
  ]
730
  },
731
  {
732
  "point_id": 47,
 
 
 
 
733
  "adjacent_points": [
734
  46,
735
  37
736
  ],
737
  "adjacent_hexes": [
738
  16
 
 
 
 
739
  ]
740
  },
741
  {
742
  "point_id": 48,
 
 
 
 
743
  "adjacent_points": [
744
  49,
745
  40
746
  ],
747
  "adjacent_hexes": [
748
  17
 
 
 
 
749
  ]
750
  },
751
  {
752
  "point_id": 49,
 
 
 
 
753
  "adjacent_points": [
754
  48,
755
  50
756
  ],
757
  "adjacent_hexes": [
758
  17
 
 
 
 
759
  ]
760
  },
761
  {
762
  "point_id": 50,
 
 
 
 
763
  "adjacent_points": [
764
  49,
765
  51,
 
768
  "adjacent_hexes": [
769
  18,
770
  17
 
 
 
 
771
  ]
772
  },
773
  {
774
  "point_id": 51,
 
 
 
 
775
  "adjacent_points": [
776
  50,
777
  52
778
  ],
779
  "adjacent_hexes": [
780
  18
 
 
 
 
781
  ]
782
  },
783
  {
784
  "point_id": 52,
 
 
 
 
785
  "adjacent_points": [
786
  51,
787
  53,
 
790
  "adjacent_hexes": [
791
  19,
792
  18
 
 
 
 
793
  ]
794
  },
795
  {
796
  "point_id": 53,
 
 
 
 
797
  "adjacent_points": [
798
  52,
799
  54
800
  ],
801
  "adjacent_hexes": [
802
  19
 
 
 
 
803
  ]
804
  },
805
  {
806
  "point_id": 54,
 
 
 
 
807
  "adjacent_points": [
808
  53,
809
  46
810
  ],
811
  "adjacent_hexes": [
812
  19
 
 
 
 
813
  ]
814
  }
815
+ ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
816
  }
examples/ai_testing/sample_states/early_game.json DELETED
@@ -1,91 +0,0 @@
1
- {
2
- "game_id": "early_game",
3
- "turn_number": 1,
4
- "current_player": 0,
5
- "game_phase": "NORMAL_PLAY",
6
- "turn_phase": "PLAYER_ACTIONS",
7
- "dice_rolled": [3, 4],
8
- "board_state": {
9
- "tiles": [
10
- {"coords": [0, 0], "type": "HILLS", "number": 3, "has_robber": false},
11
- {"coords": [0, 1], "type": "PASTURE", "number": 6, "has_robber": false},
12
- {"coords": [0, 2], "type": "MOUNTAINS", "number": 5, "has_robber": false},
13
- {"coords": [1, 0], "type": "FIELDS", "number": 4, "has_robber": false},
14
- {"coords": [1, 1], "type": "FOREST", "number": 11, "has_robber": false},
15
- {"coords": [1, 2], "type": "PASTURE", "number": 12, "has_robber": false},
16
- {"coords": [1, 3], "type": "FIELDS", "number": 9, "has_robber": false},
17
- {"coords": [2, 0], "type": "FOREST", "number": 8, "has_robber": false},
18
- {"coords": [2, 1], "type": "DESERT", "number": null, "has_robber": true},
19
- {"coords": [2, 2], "type": "FOREST", "number": 10, "has_robber": false},
20
- {"coords": [2, 3], "type": "MOUNTAINS", "number": 9, "has_robber": false},
21
- {"coords": [3, 0], "type": "HILLS", "number": 11, "has_robber": false},
22
- {"coords": [3, 1], "type": "FIELDS", "number": 2, "has_robber": false},
23
- {"coords": [3, 2], "type": "PASTURE", "number": 6, "has_robber": false},
24
- {"coords": [4, 0], "type": "PASTURE", "number": 4, "has_robber": false},
25
- {"coords": [4, 1], "type": "FIELDS", "number": 5, "has_robber": false},
26
- {"coords": [4, 2], "type": "MOUNTAINS", "number": 10, "has_robber": false}
27
- ],
28
- "robber_position": [2, 1],
29
- "harbors": [],
30
- "buildings": {
31
- "[0, 0]": {"type": "SETTLEMENT", "owner": 0},
32
- "[1, 5]": {"type": "SETTLEMENT", "owner": 1},
33
- "[3, 2]": {"type": "SETTLEMENT", "owner": 2},
34
- "[4, 1]": {"type": "SETTLEMENT", "owner": 0},
35
- "[2, 4]": {"type": "SETTLEMENT", "owner": 1},
36
- "[5, 3]": {"type": "SETTLEMENT", "owner": 2}
37
- },
38
- "roads": [
39
- {"start": [0, 0], "end": [1, 0], "owner": 0},
40
- {"start": [1, 5], "end": [2, 5], "owner": 1},
41
- {"start": [3, 2], "end": [4, 2], "owner": 2},
42
- {"start": [4, 1], "end": [5, 1], "owner": 0},
43
- {"start": [2, 4], "end": [3, 4], "owner": 1},
44
- {"start": [5, 3], "end": [6, 3], "owner": 2}
45
- ]
46
- },
47
- "players_state": [
48
- {
49
- "player_id": 0,
50
- "name": "Player 0 (Red)",
51
- "cards": ["WOOD", "WOOD", "BRICK", "WHEAT"],
52
- "dev_cards": [],
53
- "settlements": [[0, 0], [4, 1]],
54
- "cities": [],
55
- "roads": [[[0, 0], [1, 0]], [[4, 1], [5, 1]]],
56
- "victory_points": 2,
57
- "longest_road_length": 1,
58
- "has_longest_road": false,
59
- "has_largest_army": false,
60
- "knights_played": 0
61
- },
62
- {
63
- "player_id": 1,
64
- "name": "Player 1 (Blue)",
65
- "cards": ["SHEEP", "WHEAT", "ORE"],
66
- "dev_cards": [],
67
- "settlements": [[1, 5], [2, 4]],
68
- "cities": [],
69
- "roads": [[[1, 5], [2, 5]], [[2, 4], [3, 4]]],
70
- "victory_points": 2,
71
- "longest_road_length": 1,
72
- "has_longest_road": false,
73
- "has_largest_army": false,
74
- "knights_played": 0
75
- },
76
- {
77
- "player_id": 2,
78
- "name": "Player 2 (Green)",
79
- "cards": ["WOOD", "BRICK", "SHEEP"],
80
- "dev_cards": [],
81
- "settlements": [[3, 2], [5, 3]],
82
- "cities": [],
83
- "roads": [[[3, 2], [4, 2]], [[5, 3], [6, 3]]],
84
- "victory_points": 2,
85
- "longest_road_length": 1,
86
- "has_longest_road": false,
87
- "has_largest_army": false,
88
- "knights_played": 0
89
- }
90
- ]
91
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
examples/ai_testing/sample_states/mid_game_competitive.json DELETED
@@ -1,115 +0,0 @@
1
- {
2
- "game_id": "mid_game_competitive",
3
- "turn_number": 15,
4
- "current_player": 1,
5
- "game_phase": "NORMAL_PLAY",
6
- "turn_phase": "PLAYER_ACTIONS",
7
- "dice_rolled": [5, 6],
8
- "board_state": {
9
- "tiles": [
10
- {"coords": [0, 0], "type": "HILLS", "number": 3, "has_robber": false},
11
- {"coords": [0, 1], "type": "PASTURE", "number": 6, "has_robber": false},
12
- {"coords": [0, 2], "type": "MOUNTAINS", "number": 5, "has_robber": false},
13
- {"coords": [1, 0], "type": "FIELDS", "number": 4, "has_robber": false},
14
- {"coords": [1, 1], "type": "FOREST", "number": 11, "has_robber": false},
15
- {"coords": [1, 2], "type": "PASTURE", "number": 12, "has_robber": false},
16
- {"coords": [1, 3], "type": "FIELDS", "number": 9, "has_robber": false},
17
- {"coords": [2, 0], "type": "FOREST", "number": 8, "has_robber": false},
18
- {"coords": [2, 1], "type": "DESERT", "number": null, "has_robber": false},
19
- {"coords": [2, 2], "type": "FOREST", "number": 10, "has_robber": true},
20
- {"coords": [2, 3], "type": "MOUNTAINS", "number": 9, "has_robber": false},
21
- {"coords": [3, 0], "type": "HILLS", "number": 11, "has_robber": false},
22
- {"coords": [3, 1], "type": "FIELDS", "number": 2, "has_robber": false},
23
- {"coords": [3, 2], "type": "PASTURE", "number": 6, "has_robber": false},
24
- {"coords": [4, 0], "type": "PASTURE", "number": 4, "has_robber": false},
25
- {"coords": [4, 1], "type": "FIELDS", "number": 5, "has_robber": false},
26
- {"coords": [4, 2], "type": "MOUNTAINS", "number": 10, "has_robber": false}
27
- ],
28
- "robber_position": [2, 2],
29
- "harbors": [],
30
- "buildings": {
31
- "[0, 0]": {"type": "CITY", "owner": 0},
32
- "[1, 5]": {"type": "SETTLEMENT", "owner": 1},
33
- "[3, 2]": {"type": "SETTLEMENT", "owner": 2},
34
- "[4, 1]": {"type": "SETTLEMENT", "owner": 0},
35
- "[2, 4]": {"type": "CITY", "owner": 1},
36
- "[5, 3]": {"type": "SETTLEMENT", "owner": 2},
37
- "[1, 1]": {"type": "SETTLEMENT", "owner": 0},
38
- "[3, 5]": {"type": "SETTLEMENT", "owner": 1},
39
- "[6, 2]": {"type": "SETTLEMENT", "owner": 2}
40
- },
41
- "roads": [
42
- {"start": [0, 0], "end": [1, 0], "owner": 0},
43
- {"start": [1, 0], "end": [2, 0], "owner": 0},
44
- {"start": [1, 5], "end": [2, 5], "owner": 1},
45
- {"start": [2, 5], "end": [3, 5], "owner": 1},
46
- {"start": [3, 2], "end": [4, 2], "owner": 2},
47
- {"start": [4, 2], "end": [5, 2], "owner": 2},
48
- {"start": [4, 1], "end": [5, 1], "owner": 0},
49
- {"start": [2, 4], "end": [3, 4], "owner": 1},
50
- {"start": [5, 3], "end": [6, 3], "owner": 2},
51
- {"start": [0, 0], "end": [0, 1], "owner": 0},
52
- {"start": [0, 1], "end": [1, 1], "owner": 0},
53
- {"start": [5, 2], "end": [6, 2], "owner": 2}
54
- ]
55
- },
56
- "players_state": [
57
- {
58
- "player_id": 0,
59
- "name": "Player 0 (Red)",
60
- "cards": ["WOOD", "WOOD", "BRICK", "WHEAT", "ORE", "ORE", "SHEEP"],
61
- "dev_cards": ["KNIGHT", "VICTORY_POINT"],
62
- "settlements": [[4, 1], [1, 1]],
63
- "cities": [[0, 0]],
64
- "roads": [
65
- [[0, 0], [1, 0]],
66
- [[1, 0], [2, 0]],
67
- [[4, 1], [5, 1]],
68
- [[0, 0], [0, 1]],
69
- [[0, 1], [1, 1]]
70
- ],
71
- "victory_points": 6,
72
- "longest_road_length": 5,
73
- "has_longest_road": true,
74
- "has_largest_army": false,
75
- "knights_played": 1
76
- },
77
- {
78
- "player_id": 1,
79
- "name": "Player 1 (Blue)",
80
- "cards": ["SHEEP", "SHEEP", "WHEAT", "WHEAT", "ORE", "BRICK"],
81
- "dev_cards": ["KNIGHT", "KNIGHT", "ROAD_BUILDING"],
82
- "settlements": [[1, 5], [3, 5]],
83
- "cities": [[2, 4]],
84
- "roads": [
85
- [[1, 5], [2, 5]],
86
- [[2, 5], [3, 5]],
87
- [[2, 4], [3, 4]]
88
- ],
89
- "victory_points": 5,
90
- "longest_road_length": 2,
91
- "has_longest_road": false,
92
- "has_largest_army": false,
93
- "knights_played": 2
94
- },
95
- {
96
- "player_id": 2,
97
- "name": "Player 2 (Green)",
98
- "cards": ["WOOD", "WOOD", "BRICK", "BRICK", "SHEEP", "WHEAT"],
99
- "dev_cards": ["YEAR_OF_PLENTY"],
100
- "settlements": [[3, 2], [5, 3], [6, 2]],
101
- "cities": [],
102
- "roads": [
103
- [[3, 2], [4, 2]],
104
- [[4, 2], [5, 2]],
105
- [[5, 3], [6, 3]],
106
- [[5, 2], [6, 2]]
107
- ],
108
- "victory_points": 4,
109
- "longest_road_length": 4,
110
- "has_longest_road": false,
111
- "has_largest_army": false,
112
- "knights_played": 0
113
- }
114
- ]
115
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
examples/ai_testing/show_complete_state.py DELETED
@@ -1,194 +0,0 @@
1
- """
2
- Show Complete Game State
3
- -------------------------
4
- Runs a game to a specific point and shows the COMPLETE JSON.
5
- """
6
-
7
- import sys
8
- from pathlib import Path
9
- import os
10
- import json
11
-
12
- # Add parent directory to path
13
- sys.path.insert(0, str(Path(__file__).parent.parent.parent))
14
-
15
- from pycatan.visualizations.web_visualization import WebVisualization
16
-
17
- # Capture states
18
- captured_states = []
19
- update_counter = 0
20
-
21
- original_update = WebVisualization.update_full_state
22
- original_start_server = WebVisualization.start_server
23
-
24
- def capturing_update(self, game_state):
25
- """Capture and save all states."""
26
- global update_counter
27
- original_update(self, game_state)
28
-
29
- if hasattr(self, 'current_game_state') and self.current_game_state:
30
- update_counter += 1
31
- state_copy = json.loads(json.dumps(self.current_game_state))
32
- captured_states.append(state_copy)
33
-
34
- # Print just a notification
35
- print(f"\r[Captured state #{update_counter}]", end='', flush=True)
36
-
37
- def no_server(self):
38
- """Disable web server."""
39
- self.running = True
40
-
41
- # Apply patches
42
- WebVisualization.update_full_state = capturing_update
43
- WebVisualization.start_server = no_server
44
-
45
-
46
- def print_complete_state(state, title="COMPLETE GAME STATE"):
47
- """Print the complete state in a readable format."""
48
- print("\n" + "="*80)
49
- print(f"🎮 {title}")
50
- print("="*80)
51
-
52
- # Print complete JSON
53
- print(json.dumps(state, indent=2, ensure_ascii=False))
54
-
55
- print("\n" + "="*80)
56
- print("📊 SUMMARY")
57
- print("="*80)
58
-
59
- # Summary
60
- print(f"\n🎲 Game Info:")
61
- print(f" Current Player: {state.get('current_player', '?')}")
62
- print(f" Game Phase: {state.get('current_phase', '?')}")
63
-
64
- if state.get('dice_result'):
65
- print(f" Last Dice: {state['dice_result']}")
66
-
67
- print(f"\n🗺️ Board:")
68
- print(f" Hexes: {len(state.get('hexes', []))}")
69
- hexes_by_type = {}
70
- for hex in state.get('hexes', []):
71
- htype = hex.get('type', 'unknown')
72
- hexes_by_type[htype] = hexes_by_type.get(htype, 0) + 1
73
- for htype, count in sorted(hexes_by_type.items()):
74
- print(f" - {htype}: {count}")
75
-
76
- robber = state.get('robber_position')
77
- if robber:
78
- print(f" Robber: {robber}")
79
-
80
- print(f"\n🏘️ Buildings:")
81
- settlements = state.get('settlements', [])
82
- cities = state.get('cities', [])
83
- roads = state.get('roads', [])
84
- print(f" Settlements: {len(settlements)}")
85
- for s in settlements[:5]: # Show first 5
86
- print(f" - Point {s.get('point_id')}: Player {s.get('owner')}")
87
- if len(settlements) > 5:
88
- print(f" ... and {len(settlements)-5} more")
89
-
90
- print(f" Cities: {len(cities)}")
91
- for c in cities[:5]:
92
- print(f" - Point {c.get('point_id')}: Player {c.get('owner')}")
93
- if len(cities) > 5:
94
- print(f" ... and {len(cities)-5} more")
95
-
96
- print(f" Roads: {len(roads)}")
97
- for r in roads[:5]:
98
- print(f" - {r.get('start_point')} -> {r.get('end_point')}: Player {r.get('owner')}")
99
- if len(roads) > 5:
100
- print(f" ... and {len(roads)-5} more")
101
-
102
- print(f"\n👥 Players: {len(state.get('players', []))}")
103
- for player in state.get('players', []):
104
- print(f"\n Player {player.get('id')}: {player.get('name', 'Unknown')}")
105
- print(f" Victory Points: {player.get('victory_points', 0)}")
106
- print(f" Resources: {len(player.get('cards', []))} cards")
107
- if player.get('cards'):
108
- card_counts = {}
109
- for card in player['cards']:
110
- card_counts[card] = card_counts.get(card, 0) + 1
111
- print(f" {dict(card_counts)}")
112
- print(f" Dev Cards: {len(player.get('dev_cards', []))}")
113
- if player.get('dev_cards'):
114
- print(f" {player['dev_cards']}")
115
- print(f" Knights Played: {player.get('knights_played', 0)}")
116
- if player.get('has_longest_road'):
117
- print(f" 🛣️ Has LONGEST ROAD")
118
- if player.get('has_largest_army'):
119
- print(f" ⚔️ Has LARGEST ARMY")
120
-
121
- print("\n" + "="*80)
122
-
123
-
124
- def main():
125
- if len(sys.argv) > 1:
126
- input_file = sys.argv[1]
127
- else:
128
- input_file = 'examples/data/game_moves_3Players.txt'
129
-
130
- print(f"\nRunning game with: {input_file}")
131
- print("(Web server disabled, capturing states...)\n")
132
-
133
- # Read inputs
134
- with open(input_file, 'r', encoding='utf-8') as f:
135
- inputs = f.read()
136
-
137
- from io import StringIO
138
- sys.stdin = StringIO(inputs)
139
-
140
- try:
141
- from pycatan import RealGame
142
- game = RealGame()
143
- game.run()
144
-
145
- except (EOFError, KeyboardInterrupt):
146
- print("\n\nGame stopped")
147
- except Exception as e:
148
- print(f"\n\nError: {e}")
149
-
150
- # Show results
151
- print(f"\n\n{'='*80}")
152
- print(f"✅ Captured {len(captured_states)} states total")
153
- print("="*80)
154
-
155
- if captured_states:
156
- # Save all states
157
- output_dir = Path('examples/ai_testing/captured_states')
158
- output_dir.mkdir(exist_ok=True)
159
-
160
- # Save first state
161
- first_state = captured_states[0]
162
- first_file = output_dir / 'state_001_initial.json'
163
- with open(first_file, 'w', encoding='utf-8') as f:
164
- json.dump(first_state, f, indent=2, ensure_ascii=False)
165
- print(f"\n💾 Saved first state to: {first_file}")
166
-
167
- # Save last state
168
- last_state = captured_states[-1]
169
- last_file = output_dir / f'state_{len(captured_states):03d}_final.json'
170
- with open(last_file, 'w', encoding='utf-8') as f:
171
- json.dump(last_state, f, indent=2, ensure_ascii=False)
172
- print(f"💾 Saved last state to: {last_file}")
173
-
174
- # Also save to sample_states for compatibility
175
- sample_file = Path('examples/ai_testing/sample_states/captured_game.json')
176
- sample_file.parent.mkdir(exist_ok=True)
177
- with open(sample_file, 'w', encoding='utf-8') as f:
178
- json.dump(last_state, f, indent=2, ensure_ascii=False)
179
- print(f"💾 Saved to: {sample_file}")
180
-
181
- # Print complete final state
182
- print_complete_state(last_state, "FINAL GAME STATE - THIS IS WHAT AI SEES")
183
-
184
- print("\n" + "="*80)
185
- print("📝 To see full JSON of any state, check the files above")
186
- print("🌐 To view in browser, run:")
187
- print(f" py examples/ai_testing/visualize_game_state.py --state-file {sample_file}")
188
- print("="*80)
189
- else:
190
- print("❌ No states were captured!")
191
-
192
-
193
- if __name__ == '__main__':
194
- main()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
examples/ai_testing/simple_capture.py DELETED
@@ -1,109 +0,0 @@
1
- """
2
- Simple Game State Capturer
3
- ---------------------------
4
- Runs a game and prints the JSON at each major point.
5
- WITHOUT starting a web server (to avoid port conflicts).
6
- """
7
-
8
- import sys
9
- from pathlib import Path
10
- import os
11
-
12
- # Add parent directory to path for imports
13
- sys.path.insert(0, str(Path(__file__).parent.parent.parent))
14
-
15
- import json
16
- from pycatan.visualizations.web_visualization import WebVisualization
17
-
18
-
19
- # Monkey-patch to capture states WITHOUT starting server
20
- original_update = WebVisualization.update_full_state
21
- original_start_server = WebVisualization.start_server
22
- captured_states = []
23
-
24
- def capturing_update(self, game_state):
25
- """Capture state and print JSON."""
26
- original_update(self, game_state)
27
-
28
- if hasattr(self, 'current_game_state') and self.current_game_state:
29
- print("\n" + "="*80)
30
- print("GAME STATE JSON (This is what AI receives)")
31
- print("="*80)
32
- print(json.dumps(self.current_game_state, indent=2, ensure_ascii=False))
33
- print("="*80 + "\n")
34
-
35
- # Save to list
36
- captured_states.append(self.current_game_state.copy())
37
-
38
- def no_start_server(self):
39
- """Don't start the server - just capture data."""
40
- print("[INFO] Web server disabled for capture mode")
41
- self.running = True # Pretend it's running
42
- pass
43
-
44
- # Apply monkey patches
45
- WebVisualization.update_full_state = capturing_update
46
- WebVisualization.start_server = no_start_server
47
-
48
-
49
- def main():
50
- """Run game with input file."""
51
- import sys
52
- import os
53
-
54
- # Fix encoding for Windows console
55
- if sys.platform == 'win32':
56
- os.environ['PYTHONIOENCODING'] = 'utf-8'
57
-
58
- # Check if input file provided
59
- if len(sys.argv) > 1:
60
- input_file = sys.argv[1]
61
- else:
62
- input_file = 'examples/data/game_moves_3Players.txt'
63
-
64
- print(f"\nRunning game with inputs from: {input_file}")
65
- print("="*80)
66
-
67
- # Read inputs
68
- with open(input_file, 'r', encoding='utf-8') as f:
69
- inputs = f.read()
70
-
71
- # Feed to stdin
72
- from io import StringIO
73
- sys.stdin = StringIO(inputs)
74
-
75
- try:
76
- print("[INFO] Starting game in capture mode (web server disabled)")
77
- print("="*80)
78
-
79
- # Import after patching
80
- from pycatan import RealGame
81
-
82
- # Run the game - this will print JSON at each update
83
- game = RealGame()
84
- game.run()
85
-
86
- except (EOFError, KeyboardInterrupt):
87
- print("\n\nGame stopped")
88
- except Exception as e:
89
- print(f"\nError: {e}")
90
- import traceback
91
- traceback.print_exc()
92
-
93
- print("\n" + "="*80)
94
- print(f"Captured {len(captured_states)} states total")
95
- print("="*80)
96
-
97
- # Save last state
98
- if captured_states:
99
- output_file = 'examples/ai_testing/sample_states/captured_game.json'
100
- os.makedirs(os.path.dirname(output_file), exist_ok=True)
101
- with open(output_file, 'w', encoding='utf-8') as f:
102
- json.dump(captured_states[-1], f, indent=2, ensure_ascii=False)
103
- print(f"Last state saved to: {output_file}")
104
- else:
105
- print("WARNING: No states were captured!")
106
-
107
-
108
- if __name__ == '__main__':
109
- main()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
examples/ai_testing/visualize_game_state.py DELETED
@@ -1,364 +0,0 @@
1
- """
2
- Visualize Game State for AI Testing
3
- ------------------------------------
4
- This script creates a specific game state and displays it using Web Visualizer.
5
- It also prints all the JSON data that would be sent to an AI agent.
6
-
7
- Usage:
8
- python visualize_game_state.py [--state-file STATE_FILE]
9
-
10
- If STATE_FILE is not provided, uses a default test state.
11
- """
12
-
13
- import sys
14
- import json
15
- import time
16
- import threading
17
- from pathlib import Path
18
-
19
- # Add parent directory to path for imports
20
- sys.path.insert(0, str(Path(__file__).parent.parent.parent))
21
-
22
- from pycatan.core.game import Game
23
- from pycatan.management.actions import GameState, PlayerState, BoardState, GamePhase, TurnPhase
24
- from pycatan.visualizations.web_visualization import WebVisualization
25
- from pycatan.core.card import ResCard, DevCard
26
- from pycatan.core.building import Building
27
-
28
-
29
- class GameStateCapture:
30
- """Captures and displays all JSON data sent to Web Visualizer."""
31
-
32
- def __init__(self, web_viz):
33
- self.web_viz = web_viz
34
- self.captured_states = []
35
- self.captured_events = []
36
-
37
- def capture_state_update(self, game_state):
38
- """Capture and print game state JSON."""
39
- print("\n" + "="*80)
40
- print("📊 GAME STATE JSON (This is what the AI would receive)")
41
- print("="*80)
42
-
43
- # Convert to web format (same as what web visualizer does)
44
- web_format = self.web_viz._convert_game_state(game_state)
45
-
46
- # Print formatted JSON
47
- json_str = json.dumps(web_format, indent=2, ensure_ascii=False)
48
- print(json_str)
49
-
50
- print("\n" + "="*80)
51
- print("📈 SUMMARY")
52
- print("="*80)
53
- self._print_summary(web_format)
54
-
55
- self.captured_states.append(web_format)
56
- return web_format
57
-
58
- def _print_summary(self, state_data):
59
- """Print a human-readable summary of the game state."""
60
- print(f"Current Player: {state_data.get('current_player', 0)}")
61
- print(f"Game Phase: {state_data.get('current_phase', 'UNKNOWN')}")
62
- print(f"Robber Position: {state_data.get('robber_position', 'Unknown')}")
63
-
64
- if state_data.get('dice_result'):
65
- print(f"Last Dice Roll: {state_data['dice_result']}")
66
-
67
- print(f"\nBoard:")
68
- print(f" - Hexes: {len(state_data.get('hexes', []))}")
69
- print(f" - Settlements: {len(state_data.get('settlements', []))}")
70
- print(f" - Cities: {len(state_data.get('cities', []))}")
71
- print(f" - Roads: {len(state_data.get('roads', []))}")
72
-
73
- print(f"\nPlayers: {len(state_data.get('players', []))}")
74
- for player in state_data.get('players', []):
75
- print(f" Player {player.get('id', '?')}: {player.get('name', 'Unknown')}")
76
- print(f" - Victory Points: {player.get('victory_points', 0)}")
77
- print(f" - Resources: {len(player.get('cards', []))}")
78
- print(f" - Dev Cards: {len(player.get('dev_cards', []))}")
79
- if player.get('has_longest_road'):
80
- print(f" - Has Longest Road!")
81
- if player.get('has_largest_army'):
82
- print(f" - Has Largest Army!")
83
-
84
-
85
- def create_test_game_state():
86
- """
87
- Create a test game state with some buildings and resources.
88
- This simulates a game in progress.
89
- """
90
- print("\n🎮 Creating test game state...")
91
-
92
- # Create a real game to get proper board structure
93
- game = Game(num_of_players=3)
94
-
95
- # Build some structures for testing
96
- # Player 0 (Red) - settlements and roads
97
- point1 = game.board.points[0][0] # Top left
98
- point2 = game.board.points[1][0] # Below it
99
-
100
- # Starting phase - build without resources
101
- game.add_settlement(0, point1, is_starting=True)
102
- game.add_road(0, point1, point2, is_starting=True)
103
-
104
- # Player 1 (Blue)
105
- point4 = game.board.points[2][2]
106
- point5 = game.board.points[3][2]
107
- game.add_settlement(1, point4, is_starting=True)
108
- game.add_road(1, point4, point5, is_starting=True)
109
-
110
- # Player 2 (Green)
111
- point6 = game.board.points[4][3]
112
- point7 = game.board.points[5][3]
113
- game.add_settlement(2, point6, is_starting=True)
114
- game.add_road(2, point6, point7, is_starting=True)
115
-
116
- # Second round of starting placements
117
- game.add_settlement(2, game.board.points[1][3], is_starting=True)
118
- game.add_road(2, game.board.points[1][3], game.board.points[2][3], is_starting=True)
119
-
120
- game.add_settlement(1, game.board.points[2][1], is_starting=True)
121
- game.add_road(1, game.board.points[2][1], game.board.points[3][1], is_starting=True)
122
-
123
- game.add_settlement(0, game.board.points[4][1], is_starting=True)
124
- game.add_road(0, game.board.points[4][1], game.board.points[5][1], is_starting=True)
125
-
126
- # Give players some resources
127
- game.players[0].cards[ResCard.Wood] = 3
128
- game.players[0].cards[ResCard.Brick] = 2
129
- game.players[0].cards[ResCard.Wheat] = 2
130
- game.players[0].cards[ResCard.Ore] = 1
131
-
132
- game.players[1].cards[ResCard.Sheep] = 4
133
- game.players[1].cards[ResCard.Wheat] = 1
134
- game.players[1].cards[ResCard.Ore] = 2
135
-
136
- game.players[2].cards[ResCard.Wood] = 2
137
- game.players[2].cards[ResCard.Brick] = 3
138
- game.players[2].cards[ResCard.Sheep] = 1
139
-
140
- # Give player 0 some development cards
141
- game.players[0].dev_cards[DevCard.Knight] = 2
142
- game.players[0].dev_cards[DevCard.VictoryPoint] = 1
143
- game.players[0].knights_played = 1
144
-
145
- # Position robber on a tile
146
- game.board.robber = game.board.tiles[2][1] # Move to a different tile
147
-
148
- print("✅ Test game state created!")
149
- print(f" - 3 Players")
150
- print(f" - 6 Settlements placed")
151
- print(f" - 6 Roads built")
152
- print(f" - Resources distributed")
153
- print(f" - Robber positioned")
154
-
155
- return game
156
-
157
-
158
- def game_to_game_state(game: Game) -> GameState:
159
- """
160
- Convert a Game object to a GameState object for visualization.
161
- """
162
- # Create board state
163
- tiles = []
164
- for row_idx, row in enumerate(game.board.tiles):
165
- for col_idx, tile in enumerate(row):
166
- if tile: # Skip None tiles
167
- tiles.append({
168
- 'coords': [row_idx, col_idx],
169
- 'type': tile.tile_type.name if tile.tile_type else 'DESERT',
170
- 'number': tile.number if hasattr(tile, 'number') else None,
171
- 'has_robber': tile == game.board.robber
172
- })
173
-
174
- # Create buildings dictionary
175
- buildings = {}
176
- for row in game.board.points:
177
- for point in row:
178
- if point.building:
179
- coords = tuple([point.row, point.index])
180
- building_type_name = "SETTLEMENT" if point.building.type == Building.BUILDING_SETTLEMENT else \
181
- "CITY" if point.building.type == Building.BUILDING_CITY else "UNKNOWN"
182
- buildings[coords] = {
183
- 'type': building_type_name,
184
- 'owner': point.building.owner
185
- }
186
-
187
- # Create roads list
188
- roads = []
189
- for player in game.players:
190
- for road in player.roads:
191
- roads.append({
192
- 'start': [road.start.row, road.start.index],
193
- 'end': [road.end.row, road.end.index],
194
- 'owner': road.owner
195
- })
196
-
197
- # Find robber position
198
- robber_pos = (0, 0)
199
- if game.board.robber:
200
- robber_pos = (game.board.robber.row, game.board.robber.index)
201
-
202
- board_state = BoardState(
203
- tiles=tiles,
204
- robber_position=robber_pos,
205
- harbors=[], # Can be added if needed
206
- buildings=buildings,
207
- roads=roads
208
- )
209
-
210
- # Create player states
211
- players_state = []
212
- for player in game.players:
213
- # Convert cards to list of strings
214
- cards = []
215
- for card_type, count in player.cards.items():
216
- cards.extend([card_type.name] * count)
217
-
218
- dev_cards = []
219
- for card_type, count in player.dev_cards.items():
220
- dev_cards.extend([card_type.name] * count)
221
-
222
- # Get settlements and cities
223
- settlements = []
224
- cities = []
225
- for row in game.board.points:
226
- for point in row:
227
- if point.building and point.building.owner == player.player_num:
228
- coords = (point.row, point.index)
229
- if point.building.type == Building.BUILDING_SETTLEMENT:
230
- settlements.append(coords)
231
- elif point.building.type == Building.BUILDING_CITY:
232
- cities.append(coords)
233
-
234
- # Get roads (as tuples of start, end)
235
- roads_list = []
236
- for road in player.roads:
237
- roads_list.append(((road.start.row, road.start.index),
238
- (road.end.row, road.end.index)))
239
-
240
- player_state = PlayerState(
241
- player_id=player.player_num,
242
- name=f"Player {player.player_num}",
243
- cards=cards,
244
- dev_cards=dev_cards,
245
- settlements=settlements,
246
- cities=cities,
247
- roads=roads_list,
248
- victory_points=player.victory_points,
249
- longest_road_length=player.longest_road_length,
250
- has_longest_road=player.has_longest_road,
251
- has_largest_army=player.has_largest_army,
252
- knights_played=player.knights_played
253
- )
254
- players_state.append(player_state)
255
-
256
- # Create full game state
257
- game_state = GameState(
258
- game_id="test_game",
259
- turn_number=5,
260
- current_player=0,
261
- game_phase=GamePhase.NORMAL_PLAY,
262
- turn_phase=TurnPhase.PLAYER_ACTIONS,
263
- board_state=board_state,
264
- players_state=players_state,
265
- dice_rolled=(4, 3) # Example dice roll
266
- )
267
-
268
- return game_state
269
-
270
-
271
- def load_game_state_from_file(filepath: str) -> GameState:
272
- """
273
- Load a game state from a JSON file.
274
-
275
- Args:
276
- filepath: Path to JSON file containing game state
277
-
278
- Returns:
279
- GameState object
280
- """
281
- with open(filepath, 'r', encoding='utf-8') as f:
282
- data = json.load(f)
283
-
284
- # Reconstruct GameState from JSON
285
- # This is a simplified version - may need expansion
286
- board_state = BoardState(**data['board_state'])
287
- players_state = [PlayerState(**p) for p in data['players_state']]
288
-
289
- game_state = GameState(
290
- game_id=data.get('game_id', 'loaded_game'),
291
- turn_number=data.get('turn_number', 0),
292
- current_player=data.get('current_player', 0),
293
- game_phase=GamePhase[data.get('game_phase', 'NORMAL_PLAY')],
294
- turn_phase=TurnPhase[data.get('turn_phase', 'PLAYER_ACTIONS')],
295
- board_state=board_state,
296
- players_state=players_state,
297
- dice_rolled=tuple(data['dice_rolled']) if data.get('dice_rolled') else None
298
- )
299
-
300
- return game_state
301
-
302
-
303
- def main():
304
- """Main function to visualize game state."""
305
- import argparse
306
-
307
- parser = argparse.ArgumentParser(description='Visualize game state for AI testing')
308
- parser.add_argument('--state-file', type=str, help='Path to game state JSON file')
309
- parser.add_argument('--port', type=int, default=5000, help='Port for web server')
310
- parser.add_argument('--no-browser', action='store_true', help='Don\'t open browser automatically')
311
-
312
- args = parser.parse_args()
313
-
314
- # Create or load game state
315
- if args.state_file:
316
- print(f"\n📂 Loading game state from: {args.state_file}")
317
- game_state = load_game_state_from_file(args.state_file)
318
- else:
319
- print("\n🎲 Using default test game state...")
320
- game = create_test_game_state()
321
- game_state = game_to_game_state(game)
322
-
323
- # Create web visualization
324
- print(f"\n🌐 Starting Web Visualizer on port {args.port}...")
325
- web_viz = WebVisualization(port=args.port, auto_open=not args.no_browser)
326
-
327
- # Create capture wrapper
328
- capture = GameStateCapture(web_viz)
329
-
330
- # Capture and print the JSON
331
- web_format = capture.capture_state_update(game_state)
332
-
333
- # Update the visualization
334
- web_viz.update_full_state(game_state)
335
-
336
- # Start the web server in a separate thread
337
- def run_server():
338
- web_viz.start()
339
-
340
- server_thread = threading.Thread(target=run_server, daemon=True)
341
- server_thread.start()
342
-
343
- # Wait a moment for server to start
344
- time.sleep(1)
345
-
346
- print("\n" + "="*80)
347
- print("🎮 WEB VISUALIZER RUNNING")
348
- print("="*80)
349
- print(f"URL: http://localhost:{args.port}")
350
- print("\nThe game state is now visible in your browser.")
351
- print("The JSON data above is what an AI agent would receive.")
352
- print("\nPress Ctrl+C to stop the server.")
353
- print("="*80)
354
-
355
- try:
356
- # Keep the main thread alive
357
- while True:
358
- time.sleep(1)
359
- except KeyboardInterrupt:
360
- print("\n\n👋 Shutting down...")
361
-
362
-
363
- if __name__ == '__main__':
364
- main()