shon98 commited on
Commit
af7246f
·
1 Parent(s): afd3d15
examples/ai_testing/README.md ADDED
@@ -0,0 +1,249 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,147 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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/__init__.py ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ """
2
+ AI Testing Tools
3
+ ----------------
4
+ Tools for testing AI understanding of game state via Web Visualizer.
5
+
6
+ This package helps visualize game states and capture the JSON data
7
+ that would be sent to an AI agent for decision making.
8
+ """
examples/ai_testing/capture_game_state.py ADDED
@@ -0,0 +1,260 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,160 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,1850 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,1856 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,1850 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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_204416_full.json ADDED
@@ -0,0 +1,1856 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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": [],
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_204440_final.json ADDED
@@ -0,0 +1,1850 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,1856 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,1850 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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_205200_full.json ADDED
@@ -0,0 +1,1856 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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": [],
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/play_and_capture.py ADDED
@@ -0,0 +1,148 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Play Interactive Game with Guaranteed State Capture
3
+ ----------------------------------------------------
4
+ This version captures EVERY game state update reliably.
5
+ """
6
+
7
+ import sys
8
+ from pathlib import Path
9
+ import json
10
+ import signal
11
+ import atexit
12
+ from datetime import datetime
13
+
14
+ # Add parent directory to path
15
+ sys.path.insert(0, str(Path(__file__).parent.parent.parent))
16
+
17
+ from pycatan import RealGame
18
+ from pycatan.management import game_manager as gm_module
19
+
20
+ # Global list to capture states
21
+ captured_states = []
22
+ 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)
52
+
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!")
78
+ print("="*80)
79
+ print(f"\nTotal states captured: {len(captured_states)}")
80
+ print(f"\nSaved to:")
81
+ print(f" 📁 Full history: {history_file}")
82
+ print(f" 📄 Final state: {final_file}")
83
+ print(f" 📌 Quick access: {sample_file}")
84
+ print("\n" + "="*80)
85
+
86
+ # Print summary
87
+ if captured_states:
88
+ final = captured_states[-1]
89
+ print("\n📊 FINAL GAME STATE:")
90
+ print(f" Phase: {final.get('current_phase', 'UNKNOWN')}")
91
+ print(f" Settlements: {len(final.get('settlements', []))}")
92
+ print(f" Cities: {len(final.get('cities', []))}")
93
+ print(f" Roads: {len(final.get('roads', []))}")
94
+
95
+ for player in final.get('players', []):
96
+ print(f"\n Player {player['id']} ({player['name']}):")
97
+ print(f" Victory Points: {player['victory_points']}")
98
+ print(f" Resources: {len(player.get('cards_list', []))}")
99
+ print(f" Settlements: {player['settlements']}")
100
+ print(f" Roads: {player['roads']}")
101
+
102
+ print("="*80)
103
+
104
+
105
+ # Register save function
106
+ atexit.register(save_all_states)
107
+
108
+
109
+ def signal_handler(sig, frame):
110
+ """Handle Ctrl+C gracefully."""
111
+ print("\n\n🛑 Game interrupted...")
112
+ sys.exit(0)
113
+
114
+
115
+ signal.signal(signal.SIGINT, signal_handler)
116
+
117
+
118
+ def main():
119
+ print("="*80)
120
+ print("🎮 CATAN WITH GUARANTEED STATE CAPTURE")
121
+ print("="*80)
122
+ print("\nEvery game action will be automatically saved!")
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()
135
+ game.run()
136
+
137
+ except KeyboardInterrupt:
138
+ print("\n\n✅ Game stopped")
139
+ except EOFError:
140
+ print("\n\n✅ Game completed")
141
+ except Exception as e:
142
+ print(f"\n\n❌ Error: {e}")
143
+ import traceback
144
+ traceback.print_exc()
145
+
146
+
147
+ if __name__ == '__main__':
148
+ main()
examples/ai_testing/play_and_save.py ADDED
@@ -0,0 +1,179 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,1850 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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/sample_states/early_game.json ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,194 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,364 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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()
pycatan/core/game.py CHANGED
@@ -79,12 +79,10 @@ class Game:
79
  return Statuses.ERR_CARDS
80
  # removes the cards
81
  self.players[player].remove_cards(needed_cards)
82
- # gives the player a dev card
83
- # DEBUG: Force Year of Plenty for testing
84
- self.players[player].add_dev_card(DevCard.YearOfPlenty)
85
- # self.players[player].add_dev_card(self.dev_deck[0]) # Original: random card
86
  # removes that dev card from the deck
87
- # del self.dev_deck[0] # Commented out: not removing from deck in debug mode
88
  return Statuses.ALL_GOOD
89
 
90
  # gives players the proper cards for a given roll
 
79
  return Statuses.ERR_CARDS
80
  # removes the cards
81
  self.players[player].remove_cards(needed_cards)
82
+
83
+ self.players[player].add_dev_card(self.dev_deck[0])
 
 
84
  # removes that dev card from the deck
85
+ del self.dev_deck[0] # Commented out: not removing from deck in debug mode
86
  return Statuses.ALL_GOOD
87
 
88
  # gives players the proper cards for a given roll
pycatan/visualizations/web_visualization.py CHANGED
@@ -282,7 +282,10 @@ class WebVisualization(Visualization):
282
  'current_player': getattr(game_state, 'current_player', 0),
283
  'current_phase': getattr(game_state, 'game_phase', 'ACTION').name if hasattr(getattr(game_state, 'game_phase', None), 'name') else str(getattr(game_state, 'game_phase', 'ACTION')),
284
  'robber_position': None,
285
- 'dice_result': getattr(game_state, 'dice_rolled', None)
 
 
 
286
  }
287
 
288
  # Convert board data
@@ -393,6 +396,57 @@ class WebVisualization(Visualization):
393
 
394
  return hexes
395
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
396
  def _find_robber_position(self, board_state) -> Optional[int]:
397
  """Find which hex has the robber."""
398
  if hasattr(board_state, 'robber_position'):
 
282
  'current_player': getattr(game_state, 'current_player', 0),
283
  'current_phase': getattr(game_state, 'game_phase', 'ACTION').name if hasattr(getattr(game_state, 'game_phase', None), 'name') else str(getattr(game_state, 'game_phase', 'ACTION')),
284
  'robber_position': None,
285
+ 'dice_result': getattr(game_state, 'dice_rolled', None),
286
+ # Add board structure information - CRITICAL FOR AI!
287
+ 'points': self._get_points_info(),
288
+ 'board_graph': self._get_board_graph()
289
  }
290
 
291
  # Convert board data
 
396
 
397
  return hexes
398
 
399
+ def _get_points_info(self) -> List[Dict[str, Any]]:
400
+ """
401
+ Get complete information about all points on the board.
402
+ CRITICAL FOR AI - provides board structure and connectivity.
403
+
404
+ Returns:
405
+ List of point definitions with adjacency information
406
+ """
407
+ points_info = []
408
+
409
+ for point_id in board_definition.get_all_point_ids():
410
+ point_def = board_definition.points.get(point_id)
411
+ if point_def:
412
+ points_info.append({
413
+ 'point_id': point_id,
414
+ 'game_coords': list(point_def.game_coords),
415
+ 'adjacent_points': point_def.adjacent_points, # Which points connect via roads
416
+ 'adjacent_hexes': point_def.adjacent_hexes, # Which hexes touch this point
417
+ 'pixel_coords': list(point_def.pixel_coords) # For visualization
418
+ })
419
+
420
+ return points_info
421
+
422
+ def _get_board_graph(self) -> Dict[str, Any]:
423
+ """
424
+ Get the board as a graph structure for AI pathfinding and strategy.
425
+
426
+ Returns:
427
+ Graph representation with nodes (points) and edges (possible roads)
428
+ """
429
+ # Create adjacency list for quick lookup
430
+ adjacency = {}
431
+ for point_id in board_definition.get_all_point_ids():
432
+ point_def = board_definition.points.get(point_id)
433
+ if point_def:
434
+ adjacency[point_id] = point_def.adjacent_points
435
+
436
+ # Get hex-to-points mapping for resource strategy
437
+ hex_to_points = {}
438
+ for hex_id in board_definition.get_all_hex_ids():
439
+ hex_def = board_definition.hexes.get(hex_id)
440
+ if hex_def:
441
+ hex_to_points[hex_id] = hex_def.adjacent_points
442
+
443
+ return {
444
+ 'adjacency': adjacency, # point_id -> [connected_point_ids]
445
+ 'hex_to_points': hex_to_points, # hex_id -> [point_ids_on_hex]
446
+ 'total_points': len(board_definition.points),
447
+ 'total_hexes': len(board_definition.hexes)
448
+ }
449
+
450
  def _find_robber_position(self, board_state) -> Optional[int]:
451
  """Find which hex has the robber."""
452
  if hasattr(board_state, 'robber_position'):
run.bat ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ @echo off
2
+ REM Activate virtual environment and run the Catan game
3
+ call .venv\Scripts\activate.bat
4
+ python play_catan.py
5
+ pause