Spaces:
Configuration error
Configuration error
EZTIME2025 commited on
Commit ·
b4a2ca4
1
Parent(s): e84109f
adding pots
Browse files- .github/copilot-instructions.md +0 -98
- examples/ai_testing/my_games/current_state.json +885 -0
- examples/ai_testing/my_games/game_20251226_143530_final.json +0 -816
- examples/ai_testing/my_games/game_20251226_143530_full.json +0 -822
- examples/ai_testing/my_games/game_20251226_143710_final.json +0 -816
- examples/ai_testing/my_games/game_20251226_143710_full.json +0 -822
- examples/ai_testing/play_and_capture.py +31 -2
- examples/ai_testing/sample_states/captured_game.json +168 -22
- pycatan/core/game.py +15 -2
- pycatan/static/css/style.css +14 -0
- pycatan/static/js/board.js +130 -0
- pycatan/visualizations/web_visualization.py +50 -0
- temp_viz_console.py +31 -0
- test_harbors_display.py +70 -0
.github/copilot-instructions.md
CHANGED
|
@@ -1,98 +0,0 @@
|
|
| 1 |
-
# PyCatan AI - Development Instructions
|
| 2 |
-
|
| 3 |
-
## 🎯 Project Status
|
| 4 |
-
|
| 5 |
-
**The Game is Ready and Tested!**
|
| 6 |
-
|
| 7 |
-
The project contains a complete and tested implementation of The Settlers of Catan game in Python, including:
|
| 8 |
-
- ✅ Complete game logic and rules
|
| 9 |
-
- ✅ GameManager that coordinates turns and gameplay
|
| 10 |
-
- ✅ Built-in Actions system
|
| 11 |
-
- ✅ Tested and working human user
|
| 12 |
-
- ✅ Display systems (Console + Web)
|
| 13 |
-
- ✅ Extensive integration and unit tests
|
| 14 |
-
|
| 15 |
-
## 🚀 New Focus: Building an AI Agent
|
| 16 |
-
|
| 17 |
-
**From now on, the project moves to the next phase:**
|
| 18 |
-
|
| 19 |
-
Building an LLM-based AI agent that can play the game autonomously.
|
| 20 |
-
|
| 21 |
-
### 🎮 How Will the Agent Play?
|
| 22 |
-
The agent will interact with the game using the **existing Actions system** - the same actions a human user performs:
|
| 23 |
-
- Building settlements and cities
|
| 24 |
-
- Building roads
|
| 25 |
-
- Trading with other players
|
| 26 |
-
- Using development cards
|
| 27 |
-
- Making strategic decisions
|
| 28 |
-
|
| 29 |
-
### 📋 Agent Development Stages
|
| 30 |
-
|
| 31 |
-
1. **Agent Architecture** (current stage)
|
| 32 |
-
- Planning the overall structure
|
| 33 |
-
- Defining interfaces
|
| 34 |
-
- Integration with GameManager
|
| 35 |
-
|
| 36 |
-
2. **Basic Agent**
|
| 37 |
-
- Implementing basic actions
|
| 38 |
-
- Receiving game state
|
| 39 |
-
- Returning simple decisions
|
| 40 |
-
|
| 41 |
-
3. **Strategy Improvement**
|
| 42 |
-
- Adding strategic thinking
|
| 43 |
-
- Planning ahead
|
| 44 |
-
- Learning from mistakes
|
| 45 |
-
|
| 46 |
-
## 📚 Relevant Documents
|
| 47 |
-
|
| 48 |
-
### Architecture and Structure
|
| 49 |
-
- **[AI_ARCHITECTURE.md](instructions/AI_ARCHITECTURE.md)** - Agent architecture and integration (new!)
|
| 50 |
-
- **[MODULAR_ORGANIZATION.md](../docs/MODULAR_ORGANIZATION.md)** - Modular project structure
|
| 51 |
-
- **[REORGANIZATION.md](../docs/REORGANIZATION.md)** - Documentation of project reorganization
|
| 52 |
-
|
| 53 |
-
### Code and Examples
|
| 54 |
-
- **[README.md](../readme.md)** - Main documentation, usage examples
|
| 55 |
-
- **[examples/](../examples/)** - Code examples and scripts
|
| 56 |
-
- **[tests/](../tests/)** - Integration and unit tests
|
| 57 |
-
|
| 58 |
-
### Blog and Post Series
|
| 59 |
-
- **[docs/blog/](../docs/blog/)** - Series of posts about project development
|
| 60 |
-
|
| 61 |
-
## 🏗️ Project Structure (Summary)
|
| 62 |
-
|
| 63 |
-
```
|
| 64 |
-
pycatan/
|
| 65 |
-
├── core/ # Pure game logic
|
| 66 |
-
│ ├── game.py
|
| 67 |
-
│ ├── board.py
|
| 68 |
-
│ ├── player.py
|
| 69 |
-
│ └── ...
|
| 70 |
-
├── management/ # Coordination and game manager
|
| 71 |
-
│ ├── game_manager.py
|
| 72 |
-
│ ├── actions.py
|
| 73 |
-
│ └── log_events.py
|
| 74 |
-
├── players/ # Player implementations
|
| 75 |
-
│ ├── user.py # Base class
|
| 76 |
-
│ ├── human_user.py # Human user ✅
|
| 77 |
-
│ └── ai_agent.py # AI agent (under construction)
|
| 78 |
-
├── visualizations/ # Display interfaces
|
| 79 |
-
└── config/ # Settings and mappings
|
| 80 |
-
```
|
| 81 |
-
|
| 82 |
-
## 💡 Working Principles
|
| 83 |
-
|
| 84 |
-
1. **The game is stable** - Don't change core/ and management/ unless truly necessary
|
| 85 |
-
2. **Use the Actions system** - All interactions go through Actions
|
| 86 |
-
3. **Document thoroughly** - The project is well-documented, maintain the standard
|
| 87 |
-
4. **Tests** - Write tests for every new feature
|
| 88 |
-
5. **Modularity** - Maintain clear separation between modules
|
| 89 |
-
|
| 90 |
-
## 🎯 Current Goal
|
| 91 |
-
|
| 92 |
-
**Create an initial AI agent that can:**
|
| 93 |
-
- Receive game state
|
| 94 |
-
- Choose a legal action
|
| 95 |
-
- Execute it through GameManager
|
| 96 |
-
- Document the process
|
| 97 |
-
|
| 98 |
-
See [AI_ARCHITECTURE.md](instructions/AI_ARCHITECTURE.md) for full details.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
examples/ai_testing/my_games/current_state.json
ADDED
|
@@ -0,0 +1,885 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"timestamp": "2025-12-26T16:21:38.408731",
|
| 3 |
+
"state_number": 1,
|
| 4 |
+
"state": {
|
| 5 |
+
"hexes": [
|
| 6 |
+
{
|
| 7 |
+
"id": 1,
|
| 8 |
+
"type": "wood",
|
| 9 |
+
"number": 12,
|
| 10 |
+
"has_robber": false
|
| 11 |
+
},
|
| 12 |
+
{
|
| 13 |
+
"id": 2,
|
| 14 |
+
"type": "sheep",
|
| 15 |
+
"number": 5,
|
| 16 |
+
"has_robber": false
|
| 17 |
+
},
|
| 18 |
+
{
|
| 19 |
+
"id": 3,
|
| 20 |
+
"type": "wood",
|
| 21 |
+
"number": 4,
|
| 22 |
+
"has_robber": false
|
| 23 |
+
},
|
| 24 |
+
{
|
| 25 |
+
"id": 4,
|
| 26 |
+
"type": "sheep",
|
| 27 |
+
"number": 8,
|
| 28 |
+
"has_robber": false
|
| 29 |
+
},
|
| 30 |
+
{
|
| 31 |
+
"id": 5,
|
| 32 |
+
"type": "brick",
|
| 33 |
+
"number": 6,
|
| 34 |
+
"has_robber": false
|
| 35 |
+
},
|
| 36 |
+
{
|
| 37 |
+
"id": 6,
|
| 38 |
+
"type": "wood",
|
| 39 |
+
"number": 3,
|
| 40 |
+
"has_robber": false
|
| 41 |
+
},
|
| 42 |
+
{
|
| 43 |
+
"id": 7,
|
| 44 |
+
"type": "wheat",
|
| 45 |
+
"number": 8,
|
| 46 |
+
"has_robber": false
|
| 47 |
+
},
|
| 48 |
+
{
|
| 49 |
+
"id": 8,
|
| 50 |
+
"type": "brick",
|
| 51 |
+
"number": 10,
|
| 52 |
+
"has_robber": false
|
| 53 |
+
},
|
| 54 |
+
{
|
| 55 |
+
"id": 9,
|
| 56 |
+
"type": "wood",
|
| 57 |
+
"number": 11,
|
| 58 |
+
"has_robber": false
|
| 59 |
+
},
|
| 60 |
+
{
|
| 61 |
+
"id": 10,
|
| 62 |
+
"type": "desert",
|
| 63 |
+
"number": null,
|
| 64 |
+
"has_robber": true
|
| 65 |
+
},
|
| 66 |
+
{
|
| 67 |
+
"id": 11,
|
| 68 |
+
"type": "ore",
|
| 69 |
+
"number": 3,
|
| 70 |
+
"has_robber": false
|
| 71 |
+
},
|
| 72 |
+
{
|
| 73 |
+
"id": 12,
|
| 74 |
+
"type": "sheep",
|
| 75 |
+
"number": 4,
|
| 76 |
+
"has_robber": false
|
| 77 |
+
},
|
| 78 |
+
{
|
| 79 |
+
"id": 13,
|
| 80 |
+
"type": "brick",
|
| 81 |
+
"number": 10,
|
| 82 |
+
"has_robber": false
|
| 83 |
+
},
|
| 84 |
+
{
|
| 85 |
+
"id": 14,
|
| 86 |
+
"type": "wheat",
|
| 87 |
+
"number": 9,
|
| 88 |
+
"has_robber": false
|
| 89 |
+
},
|
| 90 |
+
{
|
| 91 |
+
"id": 15,
|
| 92 |
+
"type": "wheat",
|
| 93 |
+
"number": 6,
|
| 94 |
+
"has_robber": false
|
| 95 |
+
},
|
| 96 |
+
{
|
| 97 |
+
"id": 16,
|
| 98 |
+
"type": "sheep",
|
| 99 |
+
"number": 11,
|
| 100 |
+
"has_robber": false
|
| 101 |
+
},
|
| 102 |
+
{
|
| 103 |
+
"id": 17,
|
| 104 |
+
"type": "ore",
|
| 105 |
+
"number": 5,
|
| 106 |
+
"has_robber": false
|
| 107 |
+
},
|
| 108 |
+
{
|
| 109 |
+
"id": 18,
|
| 110 |
+
"type": "wheat",
|
| 111 |
+
"number": 9,
|
| 112 |
+
"has_robber": false
|
| 113 |
+
},
|
| 114 |
+
{
|
| 115 |
+
"id": 19,
|
| 116 |
+
"type": "ore",
|
| 117 |
+
"number": 2,
|
| 118 |
+
"has_robber": false
|
| 119 |
+
}
|
| 120 |
+
],
|
| 121 |
+
"settlements": [],
|
| 122 |
+
"cities": [],
|
| 123 |
+
"roads": [],
|
| 124 |
+
"harbors": [
|
| 125 |
+
{
|
| 126 |
+
"id": 1,
|
| 127 |
+
"type": "any",
|
| 128 |
+
"ratio": 3,
|
| 129 |
+
"point_one": 9,
|
| 130 |
+
"point_two": 8
|
| 131 |
+
},
|
| 132 |
+
{
|
| 133 |
+
"id": 2,
|
| 134 |
+
"type": "sheep",
|
| 135 |
+
"ratio": 2,
|
| 136 |
+
"point_one": 17,
|
| 137 |
+
"point_two": 28
|
| 138 |
+
},
|
| 139 |
+
{
|
| 140 |
+
"id": 3,
|
| 141 |
+
"type": "wood",
|
| 142 |
+
"ratio": 2,
|
| 143 |
+
"point_one": 40,
|
| 144 |
+
"point_two": 48
|
| 145 |
+
},
|
| 146 |
+
{
|
| 147 |
+
"id": 4,
|
| 148 |
+
"type": "any",
|
| 149 |
+
"ratio": 3,
|
| 150 |
+
"point_one": 50,
|
| 151 |
+
"point_two": 51
|
| 152 |
+
},
|
| 153 |
+
{
|
| 154 |
+
"id": 5,
|
| 155 |
+
"type": "any",
|
| 156 |
+
"ratio": 3,
|
| 157 |
+
"point_one": 53,
|
| 158 |
+
"point_two": 54
|
| 159 |
+
},
|
| 160 |
+
{
|
| 161 |
+
"id": 6,
|
| 162 |
+
"type": "any",
|
| 163 |
+
"ratio": 3,
|
| 164 |
+
"point_one": 37,
|
| 165 |
+
"point_two": 38
|
| 166 |
+
},
|
| 167 |
+
{
|
| 168 |
+
"id": 7,
|
| 169 |
+
"type": "ore",
|
| 170 |
+
"ratio": 2,
|
| 171 |
+
"point_one": 26,
|
| 172 |
+
"point_two": 16
|
| 173 |
+
},
|
| 174 |
+
{
|
| 175 |
+
"id": 8,
|
| 176 |
+
"type": "brick",
|
| 177 |
+
"ratio": 2,
|
| 178 |
+
"point_one": 7,
|
| 179 |
+
"point_two": 6
|
| 180 |
+
},
|
| 181 |
+
{
|
| 182 |
+
"id": 9,
|
| 183 |
+
"type": "wheat",
|
| 184 |
+
"ratio": 2,
|
| 185 |
+
"point_one": 3,
|
| 186 |
+
"point_two": 2
|
| 187 |
+
}
|
| 188 |
+
],
|
| 189 |
+
"players": [
|
| 190 |
+
{
|
| 191 |
+
"id": 0,
|
| 192 |
+
"name": "a",
|
| 193 |
+
"victory_points": 0,
|
| 194 |
+
"total_cards": 0,
|
| 195 |
+
"cards_list": [],
|
| 196 |
+
"dev_cards_list": [],
|
| 197 |
+
"settlements": 0,
|
| 198 |
+
"cities": 0,
|
| 199 |
+
"roads": 0,
|
| 200 |
+
"longest_road": 0,
|
| 201 |
+
"has_longest_road": false,
|
| 202 |
+
"knights": 0,
|
| 203 |
+
"knights_played": 0,
|
| 204 |
+
"has_largest_army": false
|
| 205 |
+
},
|
| 206 |
+
{
|
| 207 |
+
"id": 1,
|
| 208 |
+
"name": "b",
|
| 209 |
+
"victory_points": 0,
|
| 210 |
+
"total_cards": 0,
|
| 211 |
+
"cards_list": [],
|
| 212 |
+
"dev_cards_list": [],
|
| 213 |
+
"settlements": 0,
|
| 214 |
+
"cities": 0,
|
| 215 |
+
"roads": 0,
|
| 216 |
+
"longest_road": 0,
|
| 217 |
+
"has_longest_road": false,
|
| 218 |
+
"knights": 0,
|
| 219 |
+
"knights_played": 0,
|
| 220 |
+
"has_largest_army": false
|
| 221 |
+
},
|
| 222 |
+
{
|
| 223 |
+
"id": 2,
|
| 224 |
+
"name": "c",
|
| 225 |
+
"victory_points": 0,
|
| 226 |
+
"total_cards": 0,
|
| 227 |
+
"cards_list": [],
|
| 228 |
+
"dev_cards_list": [],
|
| 229 |
+
"settlements": 0,
|
| 230 |
+
"cities": 0,
|
| 231 |
+
"roads": 0,
|
| 232 |
+
"longest_road": 0,
|
| 233 |
+
"has_longest_road": false,
|
| 234 |
+
"knights": 0,
|
| 235 |
+
"knights_played": 0,
|
| 236 |
+
"has_largest_army": false
|
| 237 |
+
}
|
| 238 |
+
],
|
| 239 |
+
"current_player": 0,
|
| 240 |
+
"current_phase": "SETUP_FIRST_ROUND",
|
| 241 |
+
"robber_position": [
|
| 242 |
+
2,
|
| 243 |
+
2
|
| 244 |
+
],
|
| 245 |
+
"dice_result": null,
|
| 246 |
+
"points": [
|
| 247 |
+
{
|
| 248 |
+
"point_id": 1,
|
| 249 |
+
"adjacent_points": [
|
| 250 |
+
2,
|
| 251 |
+
9
|
| 252 |
+
],
|
| 253 |
+
"adjacent_hexes": [
|
| 254 |
+
1
|
| 255 |
+
]
|
| 256 |
+
},
|
| 257 |
+
{
|
| 258 |
+
"point_id": 2,
|
| 259 |
+
"adjacent_points": [
|
| 260 |
+
1,
|
| 261 |
+
3
|
| 262 |
+
],
|
| 263 |
+
"adjacent_hexes": [
|
| 264 |
+
1
|
| 265 |
+
]
|
| 266 |
+
},
|
| 267 |
+
{
|
| 268 |
+
"point_id": 3,
|
| 269 |
+
"adjacent_points": [
|
| 270 |
+
2,
|
| 271 |
+
4,
|
| 272 |
+
11
|
| 273 |
+
],
|
| 274 |
+
"adjacent_hexes": [
|
| 275 |
+
2,
|
| 276 |
+
1
|
| 277 |
+
]
|
| 278 |
+
},
|
| 279 |
+
{
|
| 280 |
+
"point_id": 4,
|
| 281 |
+
"adjacent_points": [
|
| 282 |
+
3,
|
| 283 |
+
5
|
| 284 |
+
],
|
| 285 |
+
"adjacent_hexes": [
|
| 286 |
+
2
|
| 287 |
+
]
|
| 288 |
+
},
|
| 289 |
+
{
|
| 290 |
+
"point_id": 5,
|
| 291 |
+
"adjacent_points": [
|
| 292 |
+
4,
|
| 293 |
+
6,
|
| 294 |
+
13
|
| 295 |
+
],
|
| 296 |
+
"adjacent_hexes": [
|
| 297 |
+
3,
|
| 298 |
+
2
|
| 299 |
+
]
|
| 300 |
+
},
|
| 301 |
+
{
|
| 302 |
+
"point_id": 6,
|
| 303 |
+
"adjacent_points": [
|
| 304 |
+
5,
|
| 305 |
+
7
|
| 306 |
+
],
|
| 307 |
+
"adjacent_hexes": [
|
| 308 |
+
3
|
| 309 |
+
]
|
| 310 |
+
},
|
| 311 |
+
{
|
| 312 |
+
"point_id": 7,
|
| 313 |
+
"adjacent_points": [
|
| 314 |
+
6,
|
| 315 |
+
15
|
| 316 |
+
],
|
| 317 |
+
"adjacent_hexes": [
|
| 318 |
+
3
|
| 319 |
+
]
|
| 320 |
+
},
|
| 321 |
+
{
|
| 322 |
+
"point_id": 8,
|
| 323 |
+
"adjacent_points": [
|
| 324 |
+
9,
|
| 325 |
+
18
|
| 326 |
+
],
|
| 327 |
+
"adjacent_hexes": [
|
| 328 |
+
4
|
| 329 |
+
]
|
| 330 |
+
},
|
| 331 |
+
{
|
| 332 |
+
"point_id": 9,
|
| 333 |
+
"adjacent_points": [
|
| 334 |
+
8,
|
| 335 |
+
10,
|
| 336 |
+
1
|
| 337 |
+
],
|
| 338 |
+
"adjacent_hexes": [
|
| 339 |
+
4,
|
| 340 |
+
1
|
| 341 |
+
]
|
| 342 |
+
},
|
| 343 |
+
{
|
| 344 |
+
"point_id": 10,
|
| 345 |
+
"adjacent_points": [
|
| 346 |
+
9,
|
| 347 |
+
11,
|
| 348 |
+
20
|
| 349 |
+
],
|
| 350 |
+
"adjacent_hexes": [
|
| 351 |
+
5,
|
| 352 |
+
4,
|
| 353 |
+
1
|
| 354 |
+
]
|
| 355 |
+
},
|
| 356 |
+
{
|
| 357 |
+
"point_id": 11,
|
| 358 |
+
"adjacent_points": [
|
| 359 |
+
10,
|
| 360 |
+
12,
|
| 361 |
+
3
|
| 362 |
+
],
|
| 363 |
+
"adjacent_hexes": [
|
| 364 |
+
5,
|
| 365 |
+
2,
|
| 366 |
+
1
|
| 367 |
+
]
|
| 368 |
+
},
|
| 369 |
+
{
|
| 370 |
+
"point_id": 12,
|
| 371 |
+
"adjacent_points": [
|
| 372 |
+
11,
|
| 373 |
+
13,
|
| 374 |
+
22
|
| 375 |
+
],
|
| 376 |
+
"adjacent_hexes": [
|
| 377 |
+
6,
|
| 378 |
+
5,
|
| 379 |
+
2
|
| 380 |
+
]
|
| 381 |
+
},
|
| 382 |
+
{
|
| 383 |
+
"point_id": 13,
|
| 384 |
+
"adjacent_points": [
|
| 385 |
+
12,
|
| 386 |
+
14,
|
| 387 |
+
5
|
| 388 |
+
],
|
| 389 |
+
"adjacent_hexes": [
|
| 390 |
+
6,
|
| 391 |
+
3,
|
| 392 |
+
2
|
| 393 |
+
]
|
| 394 |
+
},
|
| 395 |
+
{
|
| 396 |
+
"point_id": 14,
|
| 397 |
+
"adjacent_points": [
|
| 398 |
+
13,
|
| 399 |
+
15,
|
| 400 |
+
24
|
| 401 |
+
],
|
| 402 |
+
"adjacent_hexes": [
|
| 403 |
+
7,
|
| 404 |
+
6,
|
| 405 |
+
3
|
| 406 |
+
]
|
| 407 |
+
},
|
| 408 |
+
{
|
| 409 |
+
"point_id": 15,
|
| 410 |
+
"adjacent_points": [
|
| 411 |
+
14,
|
| 412 |
+
16,
|
| 413 |
+
7
|
| 414 |
+
],
|
| 415 |
+
"adjacent_hexes": [
|
| 416 |
+
7,
|
| 417 |
+
3
|
| 418 |
+
]
|
| 419 |
+
},
|
| 420 |
+
{
|
| 421 |
+
"point_id": 16,
|
| 422 |
+
"adjacent_points": [
|
| 423 |
+
15,
|
| 424 |
+
26
|
| 425 |
+
],
|
| 426 |
+
"adjacent_hexes": [
|
| 427 |
+
7
|
| 428 |
+
]
|
| 429 |
+
},
|
| 430 |
+
{
|
| 431 |
+
"point_id": 17,
|
| 432 |
+
"adjacent_points": [
|
| 433 |
+
18,
|
| 434 |
+
28
|
| 435 |
+
],
|
| 436 |
+
"adjacent_hexes": [
|
| 437 |
+
8
|
| 438 |
+
]
|
| 439 |
+
},
|
| 440 |
+
{
|
| 441 |
+
"point_id": 18,
|
| 442 |
+
"adjacent_points": [
|
| 443 |
+
17,
|
| 444 |
+
19,
|
| 445 |
+
8
|
| 446 |
+
],
|
| 447 |
+
"adjacent_hexes": [
|
| 448 |
+
8,
|
| 449 |
+
4
|
| 450 |
+
]
|
| 451 |
+
},
|
| 452 |
+
{
|
| 453 |
+
"point_id": 19,
|
| 454 |
+
"adjacent_points": [
|
| 455 |
+
18,
|
| 456 |
+
20,
|
| 457 |
+
30
|
| 458 |
+
],
|
| 459 |
+
"adjacent_hexes": [
|
| 460 |
+
9,
|
| 461 |
+
8,
|
| 462 |
+
4
|
| 463 |
+
]
|
| 464 |
+
},
|
| 465 |
+
{
|
| 466 |
+
"point_id": 20,
|
| 467 |
+
"adjacent_points": [
|
| 468 |
+
19,
|
| 469 |
+
21,
|
| 470 |
+
10
|
| 471 |
+
],
|
| 472 |
+
"adjacent_hexes": [
|
| 473 |
+
9,
|
| 474 |
+
5,
|
| 475 |
+
4
|
| 476 |
+
]
|
| 477 |
+
},
|
| 478 |
+
{
|
| 479 |
+
"point_id": 21,
|
| 480 |
+
"adjacent_points": [
|
| 481 |
+
20,
|
| 482 |
+
22,
|
| 483 |
+
32
|
| 484 |
+
],
|
| 485 |
+
"adjacent_hexes": [
|
| 486 |
+
10,
|
| 487 |
+
9,
|
| 488 |
+
5
|
| 489 |
+
]
|
| 490 |
+
},
|
| 491 |
+
{
|
| 492 |
+
"point_id": 22,
|
| 493 |
+
"adjacent_points": [
|
| 494 |
+
21,
|
| 495 |
+
23,
|
| 496 |
+
12
|
| 497 |
+
],
|
| 498 |
+
"adjacent_hexes": [
|
| 499 |
+
10,
|
| 500 |
+
6,
|
| 501 |
+
5
|
| 502 |
+
]
|
| 503 |
+
},
|
| 504 |
+
{
|
| 505 |
+
"point_id": 23,
|
| 506 |
+
"adjacent_points": [
|
| 507 |
+
22,
|
| 508 |
+
24,
|
| 509 |
+
34
|
| 510 |
+
],
|
| 511 |
+
"adjacent_hexes": [
|
| 512 |
+
11,
|
| 513 |
+
10,
|
| 514 |
+
6
|
| 515 |
+
]
|
| 516 |
+
},
|
| 517 |
+
{
|
| 518 |
+
"point_id": 24,
|
| 519 |
+
"adjacent_points": [
|
| 520 |
+
23,
|
| 521 |
+
25,
|
| 522 |
+
14
|
| 523 |
+
],
|
| 524 |
+
"adjacent_hexes": [
|
| 525 |
+
11,
|
| 526 |
+
7,
|
| 527 |
+
6
|
| 528 |
+
]
|
| 529 |
+
},
|
| 530 |
+
{
|
| 531 |
+
"point_id": 25,
|
| 532 |
+
"adjacent_points": [
|
| 533 |
+
24,
|
| 534 |
+
26,
|
| 535 |
+
36
|
| 536 |
+
],
|
| 537 |
+
"adjacent_hexes": [
|
| 538 |
+
12,
|
| 539 |
+
11,
|
| 540 |
+
7
|
| 541 |
+
]
|
| 542 |
+
},
|
| 543 |
+
{
|
| 544 |
+
"point_id": 26,
|
| 545 |
+
"adjacent_points": [
|
| 546 |
+
25,
|
| 547 |
+
27,
|
| 548 |
+
16
|
| 549 |
+
],
|
| 550 |
+
"adjacent_hexes": [
|
| 551 |
+
12,
|
| 552 |
+
7
|
| 553 |
+
]
|
| 554 |
+
},
|
| 555 |
+
{
|
| 556 |
+
"point_id": 27,
|
| 557 |
+
"adjacent_points": [
|
| 558 |
+
26,
|
| 559 |
+
38
|
| 560 |
+
],
|
| 561 |
+
"adjacent_hexes": [
|
| 562 |
+
12
|
| 563 |
+
]
|
| 564 |
+
},
|
| 565 |
+
{
|
| 566 |
+
"point_id": 28,
|
| 567 |
+
"adjacent_points": [
|
| 568 |
+
29,
|
| 569 |
+
17
|
| 570 |
+
],
|
| 571 |
+
"adjacent_hexes": [
|
| 572 |
+
8
|
| 573 |
+
]
|
| 574 |
+
},
|
| 575 |
+
{
|
| 576 |
+
"point_id": 29,
|
| 577 |
+
"adjacent_points": [
|
| 578 |
+
28,
|
| 579 |
+
30,
|
| 580 |
+
39
|
| 581 |
+
],
|
| 582 |
+
"adjacent_hexes": [
|
| 583 |
+
13,
|
| 584 |
+
8
|
| 585 |
+
]
|
| 586 |
+
},
|
| 587 |
+
{
|
| 588 |
+
"point_id": 30,
|
| 589 |
+
"adjacent_points": [
|
| 590 |
+
29,
|
| 591 |
+
31,
|
| 592 |
+
19
|
| 593 |
+
],
|
| 594 |
+
"adjacent_hexes": [
|
| 595 |
+
13,
|
| 596 |
+
9,
|
| 597 |
+
8
|
| 598 |
+
]
|
| 599 |
+
},
|
| 600 |
+
{
|
| 601 |
+
"point_id": 31,
|
| 602 |
+
"adjacent_points": [
|
| 603 |
+
30,
|
| 604 |
+
32,
|
| 605 |
+
41
|
| 606 |
+
],
|
| 607 |
+
"adjacent_hexes": [
|
| 608 |
+
14,
|
| 609 |
+
13,
|
| 610 |
+
9
|
| 611 |
+
]
|
| 612 |
+
},
|
| 613 |
+
{
|
| 614 |
+
"point_id": 32,
|
| 615 |
+
"adjacent_points": [
|
| 616 |
+
31,
|
| 617 |
+
33,
|
| 618 |
+
21
|
| 619 |
+
],
|
| 620 |
+
"adjacent_hexes": [
|
| 621 |
+
14,
|
| 622 |
+
10,
|
| 623 |
+
9
|
| 624 |
+
]
|
| 625 |
+
},
|
| 626 |
+
{
|
| 627 |
+
"point_id": 33,
|
| 628 |
+
"adjacent_points": [
|
| 629 |
+
32,
|
| 630 |
+
34,
|
| 631 |
+
43
|
| 632 |
+
],
|
| 633 |
+
"adjacent_hexes": [
|
| 634 |
+
15,
|
| 635 |
+
14,
|
| 636 |
+
10
|
| 637 |
+
]
|
| 638 |
+
},
|
| 639 |
+
{
|
| 640 |
+
"point_id": 34,
|
| 641 |
+
"adjacent_points": [
|
| 642 |
+
33,
|
| 643 |
+
35,
|
| 644 |
+
23
|
| 645 |
+
],
|
| 646 |
+
"adjacent_hexes": [
|
| 647 |
+
15,
|
| 648 |
+
11,
|
| 649 |
+
10
|
| 650 |
+
]
|
| 651 |
+
},
|
| 652 |
+
{
|
| 653 |
+
"point_id": 35,
|
| 654 |
+
"adjacent_points": [
|
| 655 |
+
34,
|
| 656 |
+
36,
|
| 657 |
+
45
|
| 658 |
+
],
|
| 659 |
+
"adjacent_hexes": [
|
| 660 |
+
16,
|
| 661 |
+
15,
|
| 662 |
+
11
|
| 663 |
+
]
|
| 664 |
+
},
|
| 665 |
+
{
|
| 666 |
+
"point_id": 36,
|
| 667 |
+
"adjacent_points": [
|
| 668 |
+
35,
|
| 669 |
+
37,
|
| 670 |
+
25
|
| 671 |
+
],
|
| 672 |
+
"adjacent_hexes": [
|
| 673 |
+
16,
|
| 674 |
+
12,
|
| 675 |
+
11
|
| 676 |
+
]
|
| 677 |
+
},
|
| 678 |
+
{
|
| 679 |
+
"point_id": 37,
|
| 680 |
+
"adjacent_points": [
|
| 681 |
+
36,
|
| 682 |
+
38,
|
| 683 |
+
47
|
| 684 |
+
],
|
| 685 |
+
"adjacent_hexes": [
|
| 686 |
+
16,
|
| 687 |
+
12
|
| 688 |
+
]
|
| 689 |
+
},
|
| 690 |
+
{
|
| 691 |
+
"point_id": 38,
|
| 692 |
+
"adjacent_points": [
|
| 693 |
+
37,
|
| 694 |
+
27
|
| 695 |
+
],
|
| 696 |
+
"adjacent_hexes": [
|
| 697 |
+
12
|
| 698 |
+
]
|
| 699 |
+
},
|
| 700 |
+
{
|
| 701 |
+
"point_id": 39,
|
| 702 |
+
"adjacent_points": [
|
| 703 |
+
40,
|
| 704 |
+
29
|
| 705 |
+
],
|
| 706 |
+
"adjacent_hexes": [
|
| 707 |
+
13
|
| 708 |
+
]
|
| 709 |
+
},
|
| 710 |
+
{
|
| 711 |
+
"point_id": 40,
|
| 712 |
+
"adjacent_points": [
|
| 713 |
+
39,
|
| 714 |
+
41,
|
| 715 |
+
48
|
| 716 |
+
],
|
| 717 |
+
"adjacent_hexes": [
|
| 718 |
+
17,
|
| 719 |
+
13
|
| 720 |
+
]
|
| 721 |
+
},
|
| 722 |
+
{
|
| 723 |
+
"point_id": 41,
|
| 724 |
+
"adjacent_points": [
|
| 725 |
+
40,
|
| 726 |
+
42,
|
| 727 |
+
31
|
| 728 |
+
],
|
| 729 |
+
"adjacent_hexes": [
|
| 730 |
+
17,
|
| 731 |
+
14,
|
| 732 |
+
13
|
| 733 |
+
]
|
| 734 |
+
},
|
| 735 |
+
{
|
| 736 |
+
"point_id": 42,
|
| 737 |
+
"adjacent_points": [
|
| 738 |
+
41,
|
| 739 |
+
43,
|
| 740 |
+
50
|
| 741 |
+
],
|
| 742 |
+
"adjacent_hexes": [
|
| 743 |
+
18,
|
| 744 |
+
17,
|
| 745 |
+
14
|
| 746 |
+
]
|
| 747 |
+
},
|
| 748 |
+
{
|
| 749 |
+
"point_id": 43,
|
| 750 |
+
"adjacent_points": [
|
| 751 |
+
42,
|
| 752 |
+
44,
|
| 753 |
+
33
|
| 754 |
+
],
|
| 755 |
+
"adjacent_hexes": [
|
| 756 |
+
18,
|
| 757 |
+
15,
|
| 758 |
+
14
|
| 759 |
+
]
|
| 760 |
+
},
|
| 761 |
+
{
|
| 762 |
+
"point_id": 44,
|
| 763 |
+
"adjacent_points": [
|
| 764 |
+
43,
|
| 765 |
+
45,
|
| 766 |
+
52
|
| 767 |
+
],
|
| 768 |
+
"adjacent_hexes": [
|
| 769 |
+
19,
|
| 770 |
+
18,
|
| 771 |
+
15
|
| 772 |
+
]
|
| 773 |
+
},
|
| 774 |
+
{
|
| 775 |
+
"point_id": 45,
|
| 776 |
+
"adjacent_points": [
|
| 777 |
+
44,
|
| 778 |
+
46,
|
| 779 |
+
35
|
| 780 |
+
],
|
| 781 |
+
"adjacent_hexes": [
|
| 782 |
+
19,
|
| 783 |
+
16,
|
| 784 |
+
15
|
| 785 |
+
]
|
| 786 |
+
},
|
| 787 |
+
{
|
| 788 |
+
"point_id": 46,
|
| 789 |
+
"adjacent_points": [
|
| 790 |
+
45,
|
| 791 |
+
47,
|
| 792 |
+
54
|
| 793 |
+
],
|
| 794 |
+
"adjacent_hexes": [
|
| 795 |
+
19,
|
| 796 |
+
16
|
| 797 |
+
]
|
| 798 |
+
},
|
| 799 |
+
{
|
| 800 |
+
"point_id": 47,
|
| 801 |
+
"adjacent_points": [
|
| 802 |
+
46,
|
| 803 |
+
37
|
| 804 |
+
],
|
| 805 |
+
"adjacent_hexes": [
|
| 806 |
+
16
|
| 807 |
+
]
|
| 808 |
+
},
|
| 809 |
+
{
|
| 810 |
+
"point_id": 48,
|
| 811 |
+
"adjacent_points": [
|
| 812 |
+
49,
|
| 813 |
+
40
|
| 814 |
+
],
|
| 815 |
+
"adjacent_hexes": [
|
| 816 |
+
17
|
| 817 |
+
]
|
| 818 |
+
},
|
| 819 |
+
{
|
| 820 |
+
"point_id": 49,
|
| 821 |
+
"adjacent_points": [
|
| 822 |
+
48,
|
| 823 |
+
50
|
| 824 |
+
],
|
| 825 |
+
"adjacent_hexes": [
|
| 826 |
+
17
|
| 827 |
+
]
|
| 828 |
+
},
|
| 829 |
+
{
|
| 830 |
+
"point_id": 50,
|
| 831 |
+
"adjacent_points": [
|
| 832 |
+
49,
|
| 833 |
+
51,
|
| 834 |
+
42
|
| 835 |
+
],
|
| 836 |
+
"adjacent_hexes": [
|
| 837 |
+
18,
|
| 838 |
+
17
|
| 839 |
+
]
|
| 840 |
+
},
|
| 841 |
+
{
|
| 842 |
+
"point_id": 51,
|
| 843 |
+
"adjacent_points": [
|
| 844 |
+
50,
|
| 845 |
+
52
|
| 846 |
+
],
|
| 847 |
+
"adjacent_hexes": [
|
| 848 |
+
18
|
| 849 |
+
]
|
| 850 |
+
},
|
| 851 |
+
{
|
| 852 |
+
"point_id": 52,
|
| 853 |
+
"adjacent_points": [
|
| 854 |
+
51,
|
| 855 |
+
53,
|
| 856 |
+
44
|
| 857 |
+
],
|
| 858 |
+
"adjacent_hexes": [
|
| 859 |
+
19,
|
| 860 |
+
18
|
| 861 |
+
]
|
| 862 |
+
},
|
| 863 |
+
{
|
| 864 |
+
"point_id": 53,
|
| 865 |
+
"adjacent_points": [
|
| 866 |
+
52,
|
| 867 |
+
54
|
| 868 |
+
],
|
| 869 |
+
"adjacent_hexes": [
|
| 870 |
+
19
|
| 871 |
+
]
|
| 872 |
+
},
|
| 873 |
+
{
|
| 874 |
+
"point_id": 54,
|
| 875 |
+
"adjacent_points": [
|
| 876 |
+
53,
|
| 877 |
+
46
|
| 878 |
+
],
|
| 879 |
+
"adjacent_hexes": [
|
| 880 |
+
19
|
| 881 |
+
]
|
| 882 |
+
}
|
| 883 |
+
]
|
| 884 |
+
}
|
| 885 |
+
}
|
examples/ai_testing/my_games/game_20251226_143530_final.json
DELETED
|
@@ -1,816 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"hexes": [
|
| 3 |
-
{
|
| 4 |
-
"id": 1,
|
| 5 |
-
"type": "wood",
|
| 6 |
-
"number": 12,
|
| 7 |
-
"has_robber": false
|
| 8 |
-
},
|
| 9 |
-
{
|
| 10 |
-
"id": 2,
|
| 11 |
-
"type": "sheep",
|
| 12 |
-
"number": 5,
|
| 13 |
-
"has_robber": false
|
| 14 |
-
},
|
| 15 |
-
{
|
| 16 |
-
"id": 3,
|
| 17 |
-
"type": "wood",
|
| 18 |
-
"number": 4,
|
| 19 |
-
"has_robber": false
|
| 20 |
-
},
|
| 21 |
-
{
|
| 22 |
-
"id": 4,
|
| 23 |
-
"type": "sheep",
|
| 24 |
-
"number": 8,
|
| 25 |
-
"has_robber": false
|
| 26 |
-
},
|
| 27 |
-
{
|
| 28 |
-
"id": 5,
|
| 29 |
-
"type": "brick",
|
| 30 |
-
"number": 6,
|
| 31 |
-
"has_robber": false
|
| 32 |
-
},
|
| 33 |
-
{
|
| 34 |
-
"id": 6,
|
| 35 |
-
"type": "wood",
|
| 36 |
-
"number": 3,
|
| 37 |
-
"has_robber": false
|
| 38 |
-
},
|
| 39 |
-
{
|
| 40 |
-
"id": 7,
|
| 41 |
-
"type": "wheat",
|
| 42 |
-
"number": 8,
|
| 43 |
-
"has_robber": false
|
| 44 |
-
},
|
| 45 |
-
{
|
| 46 |
-
"id": 8,
|
| 47 |
-
"type": "brick",
|
| 48 |
-
"number": 10,
|
| 49 |
-
"has_robber": false
|
| 50 |
-
},
|
| 51 |
-
{
|
| 52 |
-
"id": 9,
|
| 53 |
-
"type": "wood",
|
| 54 |
-
"number": 11,
|
| 55 |
-
"has_robber": false
|
| 56 |
-
},
|
| 57 |
-
{
|
| 58 |
-
"id": 10,
|
| 59 |
-
"type": "desert",
|
| 60 |
-
"number": null,
|
| 61 |
-
"has_robber": true
|
| 62 |
-
},
|
| 63 |
-
{
|
| 64 |
-
"id": 11,
|
| 65 |
-
"type": "ore",
|
| 66 |
-
"number": 3,
|
| 67 |
-
"has_robber": false
|
| 68 |
-
},
|
| 69 |
-
{
|
| 70 |
-
"id": 12,
|
| 71 |
-
"type": "sheep",
|
| 72 |
-
"number": 4,
|
| 73 |
-
"has_robber": false
|
| 74 |
-
},
|
| 75 |
-
{
|
| 76 |
-
"id": 13,
|
| 77 |
-
"type": "brick",
|
| 78 |
-
"number": 10,
|
| 79 |
-
"has_robber": false
|
| 80 |
-
},
|
| 81 |
-
{
|
| 82 |
-
"id": 14,
|
| 83 |
-
"type": "wheat",
|
| 84 |
-
"number": 9,
|
| 85 |
-
"has_robber": false
|
| 86 |
-
},
|
| 87 |
-
{
|
| 88 |
-
"id": 15,
|
| 89 |
-
"type": "wheat",
|
| 90 |
-
"number": 6,
|
| 91 |
-
"has_robber": false
|
| 92 |
-
},
|
| 93 |
-
{
|
| 94 |
-
"id": 16,
|
| 95 |
-
"type": "sheep",
|
| 96 |
-
"number": 11,
|
| 97 |
-
"has_robber": false
|
| 98 |
-
},
|
| 99 |
-
{
|
| 100 |
-
"id": 17,
|
| 101 |
-
"type": "ore",
|
| 102 |
-
"number": 5,
|
| 103 |
-
"has_robber": false
|
| 104 |
-
},
|
| 105 |
-
{
|
| 106 |
-
"id": 18,
|
| 107 |
-
"type": "wheat",
|
| 108 |
-
"number": 9,
|
| 109 |
-
"has_robber": false
|
| 110 |
-
},
|
| 111 |
-
{
|
| 112 |
-
"id": 19,
|
| 113 |
-
"type": "ore",
|
| 114 |
-
"number": 2,
|
| 115 |
-
"has_robber": false
|
| 116 |
-
}
|
| 117 |
-
],
|
| 118 |
-
"settlements": [],
|
| 119 |
-
"cities": [],
|
| 120 |
-
"roads": [],
|
| 121 |
-
"players": [
|
| 122 |
-
{
|
| 123 |
-
"id": 0,
|
| 124 |
-
"name": "ש",
|
| 125 |
-
"victory_points": 0,
|
| 126 |
-
"total_cards": 0,
|
| 127 |
-
"cards_list": [],
|
| 128 |
-
"dev_cards_list": [],
|
| 129 |
-
"settlements": 0,
|
| 130 |
-
"cities": 0,
|
| 131 |
-
"roads": 0,
|
| 132 |
-
"longest_road": 0,
|
| 133 |
-
"has_longest_road": false,
|
| 134 |
-
"knights": 0,
|
| 135 |
-
"knights_played": 0,
|
| 136 |
-
"has_largest_army": false
|
| 137 |
-
},
|
| 138 |
-
{
|
| 139 |
-
"id": 1,
|
| 140 |
-
"name": "ה",
|
| 141 |
-
"victory_points": 0,
|
| 142 |
-
"total_cards": 0,
|
| 143 |
-
"cards_list": [],
|
| 144 |
-
"dev_cards_list": [],
|
| 145 |
-
"settlements": 0,
|
| 146 |
-
"cities": 0,
|
| 147 |
-
"roads": 0,
|
| 148 |
-
"longest_road": 0,
|
| 149 |
-
"has_longest_road": false,
|
| 150 |
-
"knights": 0,
|
| 151 |
-
"knights_played": 0,
|
| 152 |
-
"has_largest_army": false
|
| 153 |
-
},
|
| 154 |
-
{
|
| 155 |
-
"id": 2,
|
| 156 |
-
"name": "ב",
|
| 157 |
-
"victory_points": 0,
|
| 158 |
-
"total_cards": 0,
|
| 159 |
-
"cards_list": [],
|
| 160 |
-
"dev_cards_list": [],
|
| 161 |
-
"settlements": 0,
|
| 162 |
-
"cities": 0,
|
| 163 |
-
"roads": 0,
|
| 164 |
-
"longest_road": 0,
|
| 165 |
-
"has_longest_road": false,
|
| 166 |
-
"knights": 0,
|
| 167 |
-
"knights_played": 0,
|
| 168 |
-
"has_largest_army": false
|
| 169 |
-
}
|
| 170 |
-
],
|
| 171 |
-
"current_player": 0,
|
| 172 |
-
"current_phase": "SETUP_FIRST_ROUND",
|
| 173 |
-
"robber_position": [
|
| 174 |
-
2,
|
| 175 |
-
2
|
| 176 |
-
],
|
| 177 |
-
"dice_result": null,
|
| 178 |
-
"points": [
|
| 179 |
-
{
|
| 180 |
-
"point_id": 1,
|
| 181 |
-
"adjacent_points": [
|
| 182 |
-
2,
|
| 183 |
-
9
|
| 184 |
-
],
|
| 185 |
-
"adjacent_hexes": [
|
| 186 |
-
1
|
| 187 |
-
]
|
| 188 |
-
},
|
| 189 |
-
{
|
| 190 |
-
"point_id": 2,
|
| 191 |
-
"adjacent_points": [
|
| 192 |
-
1,
|
| 193 |
-
3
|
| 194 |
-
],
|
| 195 |
-
"adjacent_hexes": [
|
| 196 |
-
1
|
| 197 |
-
]
|
| 198 |
-
},
|
| 199 |
-
{
|
| 200 |
-
"point_id": 3,
|
| 201 |
-
"adjacent_points": [
|
| 202 |
-
2,
|
| 203 |
-
4,
|
| 204 |
-
11
|
| 205 |
-
],
|
| 206 |
-
"adjacent_hexes": [
|
| 207 |
-
2,
|
| 208 |
-
1
|
| 209 |
-
]
|
| 210 |
-
},
|
| 211 |
-
{
|
| 212 |
-
"point_id": 4,
|
| 213 |
-
"adjacent_points": [
|
| 214 |
-
3,
|
| 215 |
-
5
|
| 216 |
-
],
|
| 217 |
-
"adjacent_hexes": [
|
| 218 |
-
2
|
| 219 |
-
]
|
| 220 |
-
},
|
| 221 |
-
{
|
| 222 |
-
"point_id": 5,
|
| 223 |
-
"adjacent_points": [
|
| 224 |
-
4,
|
| 225 |
-
6,
|
| 226 |
-
13
|
| 227 |
-
],
|
| 228 |
-
"adjacent_hexes": [
|
| 229 |
-
3,
|
| 230 |
-
2
|
| 231 |
-
]
|
| 232 |
-
},
|
| 233 |
-
{
|
| 234 |
-
"point_id": 6,
|
| 235 |
-
"adjacent_points": [
|
| 236 |
-
5,
|
| 237 |
-
7
|
| 238 |
-
],
|
| 239 |
-
"adjacent_hexes": [
|
| 240 |
-
3
|
| 241 |
-
]
|
| 242 |
-
},
|
| 243 |
-
{
|
| 244 |
-
"point_id": 7,
|
| 245 |
-
"adjacent_points": [
|
| 246 |
-
6,
|
| 247 |
-
15
|
| 248 |
-
],
|
| 249 |
-
"adjacent_hexes": [
|
| 250 |
-
3
|
| 251 |
-
]
|
| 252 |
-
},
|
| 253 |
-
{
|
| 254 |
-
"point_id": 8,
|
| 255 |
-
"adjacent_points": [
|
| 256 |
-
9,
|
| 257 |
-
18
|
| 258 |
-
],
|
| 259 |
-
"adjacent_hexes": [
|
| 260 |
-
4
|
| 261 |
-
]
|
| 262 |
-
},
|
| 263 |
-
{
|
| 264 |
-
"point_id": 9,
|
| 265 |
-
"adjacent_points": [
|
| 266 |
-
8,
|
| 267 |
-
10,
|
| 268 |
-
1
|
| 269 |
-
],
|
| 270 |
-
"adjacent_hexes": [
|
| 271 |
-
4,
|
| 272 |
-
1
|
| 273 |
-
]
|
| 274 |
-
},
|
| 275 |
-
{
|
| 276 |
-
"point_id": 10,
|
| 277 |
-
"adjacent_points": [
|
| 278 |
-
9,
|
| 279 |
-
11,
|
| 280 |
-
20
|
| 281 |
-
],
|
| 282 |
-
"adjacent_hexes": [
|
| 283 |
-
5,
|
| 284 |
-
4,
|
| 285 |
-
1
|
| 286 |
-
]
|
| 287 |
-
},
|
| 288 |
-
{
|
| 289 |
-
"point_id": 11,
|
| 290 |
-
"adjacent_points": [
|
| 291 |
-
10,
|
| 292 |
-
12,
|
| 293 |
-
3
|
| 294 |
-
],
|
| 295 |
-
"adjacent_hexes": [
|
| 296 |
-
5,
|
| 297 |
-
2,
|
| 298 |
-
1
|
| 299 |
-
]
|
| 300 |
-
},
|
| 301 |
-
{
|
| 302 |
-
"point_id": 12,
|
| 303 |
-
"adjacent_points": [
|
| 304 |
-
11,
|
| 305 |
-
13,
|
| 306 |
-
22
|
| 307 |
-
],
|
| 308 |
-
"adjacent_hexes": [
|
| 309 |
-
6,
|
| 310 |
-
5,
|
| 311 |
-
2
|
| 312 |
-
]
|
| 313 |
-
},
|
| 314 |
-
{
|
| 315 |
-
"point_id": 13,
|
| 316 |
-
"adjacent_points": [
|
| 317 |
-
12,
|
| 318 |
-
14,
|
| 319 |
-
5
|
| 320 |
-
],
|
| 321 |
-
"adjacent_hexes": [
|
| 322 |
-
6,
|
| 323 |
-
3,
|
| 324 |
-
2
|
| 325 |
-
]
|
| 326 |
-
},
|
| 327 |
-
{
|
| 328 |
-
"point_id": 14,
|
| 329 |
-
"adjacent_points": [
|
| 330 |
-
13,
|
| 331 |
-
15,
|
| 332 |
-
24
|
| 333 |
-
],
|
| 334 |
-
"adjacent_hexes": [
|
| 335 |
-
7,
|
| 336 |
-
6,
|
| 337 |
-
3
|
| 338 |
-
]
|
| 339 |
-
},
|
| 340 |
-
{
|
| 341 |
-
"point_id": 15,
|
| 342 |
-
"adjacent_points": [
|
| 343 |
-
14,
|
| 344 |
-
16,
|
| 345 |
-
7
|
| 346 |
-
],
|
| 347 |
-
"adjacent_hexes": [
|
| 348 |
-
7,
|
| 349 |
-
3
|
| 350 |
-
]
|
| 351 |
-
},
|
| 352 |
-
{
|
| 353 |
-
"point_id": 16,
|
| 354 |
-
"adjacent_points": [
|
| 355 |
-
15,
|
| 356 |
-
26
|
| 357 |
-
],
|
| 358 |
-
"adjacent_hexes": [
|
| 359 |
-
7
|
| 360 |
-
]
|
| 361 |
-
},
|
| 362 |
-
{
|
| 363 |
-
"point_id": 17,
|
| 364 |
-
"adjacent_points": [
|
| 365 |
-
18,
|
| 366 |
-
28
|
| 367 |
-
],
|
| 368 |
-
"adjacent_hexes": [
|
| 369 |
-
8
|
| 370 |
-
]
|
| 371 |
-
},
|
| 372 |
-
{
|
| 373 |
-
"point_id": 18,
|
| 374 |
-
"adjacent_points": [
|
| 375 |
-
17,
|
| 376 |
-
19,
|
| 377 |
-
8
|
| 378 |
-
],
|
| 379 |
-
"adjacent_hexes": [
|
| 380 |
-
8,
|
| 381 |
-
4
|
| 382 |
-
]
|
| 383 |
-
},
|
| 384 |
-
{
|
| 385 |
-
"point_id": 19,
|
| 386 |
-
"adjacent_points": [
|
| 387 |
-
18,
|
| 388 |
-
20,
|
| 389 |
-
30
|
| 390 |
-
],
|
| 391 |
-
"adjacent_hexes": [
|
| 392 |
-
9,
|
| 393 |
-
8,
|
| 394 |
-
4
|
| 395 |
-
]
|
| 396 |
-
},
|
| 397 |
-
{
|
| 398 |
-
"point_id": 20,
|
| 399 |
-
"adjacent_points": [
|
| 400 |
-
19,
|
| 401 |
-
21,
|
| 402 |
-
10
|
| 403 |
-
],
|
| 404 |
-
"adjacent_hexes": [
|
| 405 |
-
9,
|
| 406 |
-
5,
|
| 407 |
-
4
|
| 408 |
-
]
|
| 409 |
-
},
|
| 410 |
-
{
|
| 411 |
-
"point_id": 21,
|
| 412 |
-
"adjacent_points": [
|
| 413 |
-
20,
|
| 414 |
-
22,
|
| 415 |
-
32
|
| 416 |
-
],
|
| 417 |
-
"adjacent_hexes": [
|
| 418 |
-
10,
|
| 419 |
-
9,
|
| 420 |
-
5
|
| 421 |
-
]
|
| 422 |
-
},
|
| 423 |
-
{
|
| 424 |
-
"point_id": 22,
|
| 425 |
-
"adjacent_points": [
|
| 426 |
-
21,
|
| 427 |
-
23,
|
| 428 |
-
12
|
| 429 |
-
],
|
| 430 |
-
"adjacent_hexes": [
|
| 431 |
-
10,
|
| 432 |
-
6,
|
| 433 |
-
5
|
| 434 |
-
]
|
| 435 |
-
},
|
| 436 |
-
{
|
| 437 |
-
"point_id": 23,
|
| 438 |
-
"adjacent_points": [
|
| 439 |
-
22,
|
| 440 |
-
24,
|
| 441 |
-
34
|
| 442 |
-
],
|
| 443 |
-
"adjacent_hexes": [
|
| 444 |
-
11,
|
| 445 |
-
10,
|
| 446 |
-
6
|
| 447 |
-
]
|
| 448 |
-
},
|
| 449 |
-
{
|
| 450 |
-
"point_id": 24,
|
| 451 |
-
"adjacent_points": [
|
| 452 |
-
23,
|
| 453 |
-
25,
|
| 454 |
-
14
|
| 455 |
-
],
|
| 456 |
-
"adjacent_hexes": [
|
| 457 |
-
11,
|
| 458 |
-
7,
|
| 459 |
-
6
|
| 460 |
-
]
|
| 461 |
-
},
|
| 462 |
-
{
|
| 463 |
-
"point_id": 25,
|
| 464 |
-
"adjacent_points": [
|
| 465 |
-
24,
|
| 466 |
-
26,
|
| 467 |
-
36
|
| 468 |
-
],
|
| 469 |
-
"adjacent_hexes": [
|
| 470 |
-
12,
|
| 471 |
-
11,
|
| 472 |
-
7
|
| 473 |
-
]
|
| 474 |
-
},
|
| 475 |
-
{
|
| 476 |
-
"point_id": 26,
|
| 477 |
-
"adjacent_points": [
|
| 478 |
-
25,
|
| 479 |
-
27,
|
| 480 |
-
16
|
| 481 |
-
],
|
| 482 |
-
"adjacent_hexes": [
|
| 483 |
-
12,
|
| 484 |
-
7
|
| 485 |
-
]
|
| 486 |
-
},
|
| 487 |
-
{
|
| 488 |
-
"point_id": 27,
|
| 489 |
-
"adjacent_points": [
|
| 490 |
-
26,
|
| 491 |
-
38
|
| 492 |
-
],
|
| 493 |
-
"adjacent_hexes": [
|
| 494 |
-
12
|
| 495 |
-
]
|
| 496 |
-
},
|
| 497 |
-
{
|
| 498 |
-
"point_id": 28,
|
| 499 |
-
"adjacent_points": [
|
| 500 |
-
29,
|
| 501 |
-
17
|
| 502 |
-
],
|
| 503 |
-
"adjacent_hexes": [
|
| 504 |
-
8
|
| 505 |
-
]
|
| 506 |
-
},
|
| 507 |
-
{
|
| 508 |
-
"point_id": 29,
|
| 509 |
-
"adjacent_points": [
|
| 510 |
-
28,
|
| 511 |
-
30,
|
| 512 |
-
39
|
| 513 |
-
],
|
| 514 |
-
"adjacent_hexes": [
|
| 515 |
-
13,
|
| 516 |
-
8
|
| 517 |
-
]
|
| 518 |
-
},
|
| 519 |
-
{
|
| 520 |
-
"point_id": 30,
|
| 521 |
-
"adjacent_points": [
|
| 522 |
-
29,
|
| 523 |
-
31,
|
| 524 |
-
19
|
| 525 |
-
],
|
| 526 |
-
"adjacent_hexes": [
|
| 527 |
-
13,
|
| 528 |
-
9,
|
| 529 |
-
8
|
| 530 |
-
]
|
| 531 |
-
},
|
| 532 |
-
{
|
| 533 |
-
"point_id": 31,
|
| 534 |
-
"adjacent_points": [
|
| 535 |
-
30,
|
| 536 |
-
32,
|
| 537 |
-
41
|
| 538 |
-
],
|
| 539 |
-
"adjacent_hexes": [
|
| 540 |
-
14,
|
| 541 |
-
13,
|
| 542 |
-
9
|
| 543 |
-
]
|
| 544 |
-
},
|
| 545 |
-
{
|
| 546 |
-
"point_id": 32,
|
| 547 |
-
"adjacent_points": [
|
| 548 |
-
31,
|
| 549 |
-
33,
|
| 550 |
-
21
|
| 551 |
-
],
|
| 552 |
-
"adjacent_hexes": [
|
| 553 |
-
14,
|
| 554 |
-
10,
|
| 555 |
-
9
|
| 556 |
-
]
|
| 557 |
-
},
|
| 558 |
-
{
|
| 559 |
-
"point_id": 33,
|
| 560 |
-
"adjacent_points": [
|
| 561 |
-
32,
|
| 562 |
-
34,
|
| 563 |
-
43
|
| 564 |
-
],
|
| 565 |
-
"adjacent_hexes": [
|
| 566 |
-
15,
|
| 567 |
-
14,
|
| 568 |
-
10
|
| 569 |
-
]
|
| 570 |
-
},
|
| 571 |
-
{
|
| 572 |
-
"point_id": 34,
|
| 573 |
-
"adjacent_points": [
|
| 574 |
-
33,
|
| 575 |
-
35,
|
| 576 |
-
23
|
| 577 |
-
],
|
| 578 |
-
"adjacent_hexes": [
|
| 579 |
-
15,
|
| 580 |
-
11,
|
| 581 |
-
10
|
| 582 |
-
]
|
| 583 |
-
},
|
| 584 |
-
{
|
| 585 |
-
"point_id": 35,
|
| 586 |
-
"adjacent_points": [
|
| 587 |
-
34,
|
| 588 |
-
36,
|
| 589 |
-
45
|
| 590 |
-
],
|
| 591 |
-
"adjacent_hexes": [
|
| 592 |
-
16,
|
| 593 |
-
15,
|
| 594 |
-
11
|
| 595 |
-
]
|
| 596 |
-
},
|
| 597 |
-
{
|
| 598 |
-
"point_id": 36,
|
| 599 |
-
"adjacent_points": [
|
| 600 |
-
35,
|
| 601 |
-
37,
|
| 602 |
-
25
|
| 603 |
-
],
|
| 604 |
-
"adjacent_hexes": [
|
| 605 |
-
16,
|
| 606 |
-
12,
|
| 607 |
-
11
|
| 608 |
-
]
|
| 609 |
-
},
|
| 610 |
-
{
|
| 611 |
-
"point_id": 37,
|
| 612 |
-
"adjacent_points": [
|
| 613 |
-
36,
|
| 614 |
-
38,
|
| 615 |
-
47
|
| 616 |
-
],
|
| 617 |
-
"adjacent_hexes": [
|
| 618 |
-
16,
|
| 619 |
-
12
|
| 620 |
-
]
|
| 621 |
-
},
|
| 622 |
-
{
|
| 623 |
-
"point_id": 38,
|
| 624 |
-
"adjacent_points": [
|
| 625 |
-
37,
|
| 626 |
-
27
|
| 627 |
-
],
|
| 628 |
-
"adjacent_hexes": [
|
| 629 |
-
12
|
| 630 |
-
]
|
| 631 |
-
},
|
| 632 |
-
{
|
| 633 |
-
"point_id": 39,
|
| 634 |
-
"adjacent_points": [
|
| 635 |
-
40,
|
| 636 |
-
29
|
| 637 |
-
],
|
| 638 |
-
"adjacent_hexes": [
|
| 639 |
-
13
|
| 640 |
-
]
|
| 641 |
-
},
|
| 642 |
-
{
|
| 643 |
-
"point_id": 40,
|
| 644 |
-
"adjacent_points": [
|
| 645 |
-
39,
|
| 646 |
-
41,
|
| 647 |
-
48
|
| 648 |
-
],
|
| 649 |
-
"adjacent_hexes": [
|
| 650 |
-
17,
|
| 651 |
-
13
|
| 652 |
-
]
|
| 653 |
-
},
|
| 654 |
-
{
|
| 655 |
-
"point_id": 41,
|
| 656 |
-
"adjacent_points": [
|
| 657 |
-
40,
|
| 658 |
-
42,
|
| 659 |
-
31
|
| 660 |
-
],
|
| 661 |
-
"adjacent_hexes": [
|
| 662 |
-
17,
|
| 663 |
-
14,
|
| 664 |
-
13
|
| 665 |
-
]
|
| 666 |
-
},
|
| 667 |
-
{
|
| 668 |
-
"point_id": 42,
|
| 669 |
-
"adjacent_points": [
|
| 670 |
-
41,
|
| 671 |
-
43,
|
| 672 |
-
50
|
| 673 |
-
],
|
| 674 |
-
"adjacent_hexes": [
|
| 675 |
-
18,
|
| 676 |
-
17,
|
| 677 |
-
14
|
| 678 |
-
]
|
| 679 |
-
},
|
| 680 |
-
{
|
| 681 |
-
"point_id": 43,
|
| 682 |
-
"adjacent_points": [
|
| 683 |
-
42,
|
| 684 |
-
44,
|
| 685 |
-
33
|
| 686 |
-
],
|
| 687 |
-
"adjacent_hexes": [
|
| 688 |
-
18,
|
| 689 |
-
15,
|
| 690 |
-
14
|
| 691 |
-
]
|
| 692 |
-
},
|
| 693 |
-
{
|
| 694 |
-
"point_id": 44,
|
| 695 |
-
"adjacent_points": [
|
| 696 |
-
43,
|
| 697 |
-
45,
|
| 698 |
-
52
|
| 699 |
-
],
|
| 700 |
-
"adjacent_hexes": [
|
| 701 |
-
19,
|
| 702 |
-
18,
|
| 703 |
-
15
|
| 704 |
-
]
|
| 705 |
-
},
|
| 706 |
-
{
|
| 707 |
-
"point_id": 45,
|
| 708 |
-
"adjacent_points": [
|
| 709 |
-
44,
|
| 710 |
-
46,
|
| 711 |
-
35
|
| 712 |
-
],
|
| 713 |
-
"adjacent_hexes": [
|
| 714 |
-
19,
|
| 715 |
-
16,
|
| 716 |
-
15
|
| 717 |
-
]
|
| 718 |
-
},
|
| 719 |
-
{
|
| 720 |
-
"point_id": 46,
|
| 721 |
-
"adjacent_points": [
|
| 722 |
-
45,
|
| 723 |
-
47,
|
| 724 |
-
54
|
| 725 |
-
],
|
| 726 |
-
"adjacent_hexes": [
|
| 727 |
-
19,
|
| 728 |
-
16
|
| 729 |
-
]
|
| 730 |
-
},
|
| 731 |
-
{
|
| 732 |
-
"point_id": 47,
|
| 733 |
-
"adjacent_points": [
|
| 734 |
-
46,
|
| 735 |
-
37
|
| 736 |
-
],
|
| 737 |
-
"adjacent_hexes": [
|
| 738 |
-
16
|
| 739 |
-
]
|
| 740 |
-
},
|
| 741 |
-
{
|
| 742 |
-
"point_id": 48,
|
| 743 |
-
"adjacent_points": [
|
| 744 |
-
49,
|
| 745 |
-
40
|
| 746 |
-
],
|
| 747 |
-
"adjacent_hexes": [
|
| 748 |
-
17
|
| 749 |
-
]
|
| 750 |
-
},
|
| 751 |
-
{
|
| 752 |
-
"point_id": 49,
|
| 753 |
-
"adjacent_points": [
|
| 754 |
-
48,
|
| 755 |
-
50
|
| 756 |
-
],
|
| 757 |
-
"adjacent_hexes": [
|
| 758 |
-
17
|
| 759 |
-
]
|
| 760 |
-
},
|
| 761 |
-
{
|
| 762 |
-
"point_id": 50,
|
| 763 |
-
"adjacent_points": [
|
| 764 |
-
49,
|
| 765 |
-
51,
|
| 766 |
-
42
|
| 767 |
-
],
|
| 768 |
-
"adjacent_hexes": [
|
| 769 |
-
18,
|
| 770 |
-
17
|
| 771 |
-
]
|
| 772 |
-
},
|
| 773 |
-
{
|
| 774 |
-
"point_id": 51,
|
| 775 |
-
"adjacent_points": [
|
| 776 |
-
50,
|
| 777 |
-
52
|
| 778 |
-
],
|
| 779 |
-
"adjacent_hexes": [
|
| 780 |
-
18
|
| 781 |
-
]
|
| 782 |
-
},
|
| 783 |
-
{
|
| 784 |
-
"point_id": 52,
|
| 785 |
-
"adjacent_points": [
|
| 786 |
-
51,
|
| 787 |
-
53,
|
| 788 |
-
44
|
| 789 |
-
],
|
| 790 |
-
"adjacent_hexes": [
|
| 791 |
-
19,
|
| 792 |
-
18
|
| 793 |
-
]
|
| 794 |
-
},
|
| 795 |
-
{
|
| 796 |
-
"point_id": 53,
|
| 797 |
-
"adjacent_points": [
|
| 798 |
-
52,
|
| 799 |
-
54
|
| 800 |
-
],
|
| 801 |
-
"adjacent_hexes": [
|
| 802 |
-
19
|
| 803 |
-
]
|
| 804 |
-
},
|
| 805 |
-
{
|
| 806 |
-
"point_id": 54,
|
| 807 |
-
"adjacent_points": [
|
| 808 |
-
53,
|
| 809 |
-
46
|
| 810 |
-
],
|
| 811 |
-
"adjacent_hexes": [
|
| 812 |
-
19
|
| 813 |
-
]
|
| 814 |
-
}
|
| 815 |
-
]
|
| 816 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
examples/ai_testing/my_games/game_20251226_143530_full.json
DELETED
|
@@ -1,822 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"total_states": 1,
|
| 3 |
-
"timestamp": "20251226_143530",
|
| 4 |
-
"states": [
|
| 5 |
-
{
|
| 6 |
-
"hexes": [
|
| 7 |
-
{
|
| 8 |
-
"id": 1,
|
| 9 |
-
"type": "wood",
|
| 10 |
-
"number": 12,
|
| 11 |
-
"has_robber": false
|
| 12 |
-
},
|
| 13 |
-
{
|
| 14 |
-
"id": 2,
|
| 15 |
-
"type": "sheep",
|
| 16 |
-
"number": 5,
|
| 17 |
-
"has_robber": false
|
| 18 |
-
},
|
| 19 |
-
{
|
| 20 |
-
"id": 3,
|
| 21 |
-
"type": "wood",
|
| 22 |
-
"number": 4,
|
| 23 |
-
"has_robber": false
|
| 24 |
-
},
|
| 25 |
-
{
|
| 26 |
-
"id": 4,
|
| 27 |
-
"type": "sheep",
|
| 28 |
-
"number": 8,
|
| 29 |
-
"has_robber": false
|
| 30 |
-
},
|
| 31 |
-
{
|
| 32 |
-
"id": 5,
|
| 33 |
-
"type": "brick",
|
| 34 |
-
"number": 6,
|
| 35 |
-
"has_robber": false
|
| 36 |
-
},
|
| 37 |
-
{
|
| 38 |
-
"id": 6,
|
| 39 |
-
"type": "wood",
|
| 40 |
-
"number": 3,
|
| 41 |
-
"has_robber": false
|
| 42 |
-
},
|
| 43 |
-
{
|
| 44 |
-
"id": 7,
|
| 45 |
-
"type": "wheat",
|
| 46 |
-
"number": 8,
|
| 47 |
-
"has_robber": false
|
| 48 |
-
},
|
| 49 |
-
{
|
| 50 |
-
"id": 8,
|
| 51 |
-
"type": "brick",
|
| 52 |
-
"number": 10,
|
| 53 |
-
"has_robber": false
|
| 54 |
-
},
|
| 55 |
-
{
|
| 56 |
-
"id": 9,
|
| 57 |
-
"type": "wood",
|
| 58 |
-
"number": 11,
|
| 59 |
-
"has_robber": false
|
| 60 |
-
},
|
| 61 |
-
{
|
| 62 |
-
"id": 10,
|
| 63 |
-
"type": "desert",
|
| 64 |
-
"number": null,
|
| 65 |
-
"has_robber": true
|
| 66 |
-
},
|
| 67 |
-
{
|
| 68 |
-
"id": 11,
|
| 69 |
-
"type": "ore",
|
| 70 |
-
"number": 3,
|
| 71 |
-
"has_robber": false
|
| 72 |
-
},
|
| 73 |
-
{
|
| 74 |
-
"id": 12,
|
| 75 |
-
"type": "sheep",
|
| 76 |
-
"number": 4,
|
| 77 |
-
"has_robber": false
|
| 78 |
-
},
|
| 79 |
-
{
|
| 80 |
-
"id": 13,
|
| 81 |
-
"type": "brick",
|
| 82 |
-
"number": 10,
|
| 83 |
-
"has_robber": false
|
| 84 |
-
},
|
| 85 |
-
{
|
| 86 |
-
"id": 14,
|
| 87 |
-
"type": "wheat",
|
| 88 |
-
"number": 9,
|
| 89 |
-
"has_robber": false
|
| 90 |
-
},
|
| 91 |
-
{
|
| 92 |
-
"id": 15,
|
| 93 |
-
"type": "wheat",
|
| 94 |
-
"number": 6,
|
| 95 |
-
"has_robber": false
|
| 96 |
-
},
|
| 97 |
-
{
|
| 98 |
-
"id": 16,
|
| 99 |
-
"type": "sheep",
|
| 100 |
-
"number": 11,
|
| 101 |
-
"has_robber": false
|
| 102 |
-
},
|
| 103 |
-
{
|
| 104 |
-
"id": 17,
|
| 105 |
-
"type": "ore",
|
| 106 |
-
"number": 5,
|
| 107 |
-
"has_robber": false
|
| 108 |
-
},
|
| 109 |
-
{
|
| 110 |
-
"id": 18,
|
| 111 |
-
"type": "wheat",
|
| 112 |
-
"number": 9,
|
| 113 |
-
"has_robber": false
|
| 114 |
-
},
|
| 115 |
-
{
|
| 116 |
-
"id": 19,
|
| 117 |
-
"type": "ore",
|
| 118 |
-
"number": 2,
|
| 119 |
-
"has_robber": false
|
| 120 |
-
}
|
| 121 |
-
],
|
| 122 |
-
"settlements": [],
|
| 123 |
-
"cities": [],
|
| 124 |
-
"roads": [],
|
| 125 |
-
"players": [
|
| 126 |
-
{
|
| 127 |
-
"id": 0,
|
| 128 |
-
"name": "ש",
|
| 129 |
-
"victory_points": 0,
|
| 130 |
-
"total_cards": 0,
|
| 131 |
-
"cards_list": [],
|
| 132 |
-
"dev_cards_list": [],
|
| 133 |
-
"settlements": 0,
|
| 134 |
-
"cities": 0,
|
| 135 |
-
"roads": 0,
|
| 136 |
-
"longest_road": 0,
|
| 137 |
-
"has_longest_road": false,
|
| 138 |
-
"knights": 0,
|
| 139 |
-
"knights_played": 0,
|
| 140 |
-
"has_largest_army": false
|
| 141 |
-
},
|
| 142 |
-
{
|
| 143 |
-
"id": 1,
|
| 144 |
-
"name": "ה",
|
| 145 |
-
"victory_points": 0,
|
| 146 |
-
"total_cards": 0,
|
| 147 |
-
"cards_list": [],
|
| 148 |
-
"dev_cards_list": [],
|
| 149 |
-
"settlements": 0,
|
| 150 |
-
"cities": 0,
|
| 151 |
-
"roads": 0,
|
| 152 |
-
"longest_road": 0,
|
| 153 |
-
"has_longest_road": false,
|
| 154 |
-
"knights": 0,
|
| 155 |
-
"knights_played": 0,
|
| 156 |
-
"has_largest_army": false
|
| 157 |
-
},
|
| 158 |
-
{
|
| 159 |
-
"id": 2,
|
| 160 |
-
"name": "ב",
|
| 161 |
-
"victory_points": 0,
|
| 162 |
-
"total_cards": 0,
|
| 163 |
-
"cards_list": [],
|
| 164 |
-
"dev_cards_list": [],
|
| 165 |
-
"settlements": 0,
|
| 166 |
-
"cities": 0,
|
| 167 |
-
"roads": 0,
|
| 168 |
-
"longest_road": 0,
|
| 169 |
-
"has_longest_road": false,
|
| 170 |
-
"knights": 0,
|
| 171 |
-
"knights_played": 0,
|
| 172 |
-
"has_largest_army": false
|
| 173 |
-
}
|
| 174 |
-
],
|
| 175 |
-
"current_player": 0,
|
| 176 |
-
"current_phase": "SETUP_FIRST_ROUND",
|
| 177 |
-
"robber_position": [
|
| 178 |
-
2,
|
| 179 |
-
2
|
| 180 |
-
],
|
| 181 |
-
"dice_result": null,
|
| 182 |
-
"points": [
|
| 183 |
-
{
|
| 184 |
-
"point_id": 1,
|
| 185 |
-
"adjacent_points": [
|
| 186 |
-
2,
|
| 187 |
-
9
|
| 188 |
-
],
|
| 189 |
-
"adjacent_hexes": [
|
| 190 |
-
1
|
| 191 |
-
]
|
| 192 |
-
},
|
| 193 |
-
{
|
| 194 |
-
"point_id": 2,
|
| 195 |
-
"adjacent_points": [
|
| 196 |
-
1,
|
| 197 |
-
3
|
| 198 |
-
],
|
| 199 |
-
"adjacent_hexes": [
|
| 200 |
-
1
|
| 201 |
-
]
|
| 202 |
-
},
|
| 203 |
-
{
|
| 204 |
-
"point_id": 3,
|
| 205 |
-
"adjacent_points": [
|
| 206 |
-
2,
|
| 207 |
-
4,
|
| 208 |
-
11
|
| 209 |
-
],
|
| 210 |
-
"adjacent_hexes": [
|
| 211 |
-
2,
|
| 212 |
-
1
|
| 213 |
-
]
|
| 214 |
-
},
|
| 215 |
-
{
|
| 216 |
-
"point_id": 4,
|
| 217 |
-
"adjacent_points": [
|
| 218 |
-
3,
|
| 219 |
-
5
|
| 220 |
-
],
|
| 221 |
-
"adjacent_hexes": [
|
| 222 |
-
2
|
| 223 |
-
]
|
| 224 |
-
},
|
| 225 |
-
{
|
| 226 |
-
"point_id": 5,
|
| 227 |
-
"adjacent_points": [
|
| 228 |
-
4,
|
| 229 |
-
6,
|
| 230 |
-
13
|
| 231 |
-
],
|
| 232 |
-
"adjacent_hexes": [
|
| 233 |
-
3,
|
| 234 |
-
2
|
| 235 |
-
]
|
| 236 |
-
},
|
| 237 |
-
{
|
| 238 |
-
"point_id": 6,
|
| 239 |
-
"adjacent_points": [
|
| 240 |
-
5,
|
| 241 |
-
7
|
| 242 |
-
],
|
| 243 |
-
"adjacent_hexes": [
|
| 244 |
-
3
|
| 245 |
-
]
|
| 246 |
-
},
|
| 247 |
-
{
|
| 248 |
-
"point_id": 7,
|
| 249 |
-
"adjacent_points": [
|
| 250 |
-
6,
|
| 251 |
-
15
|
| 252 |
-
],
|
| 253 |
-
"adjacent_hexes": [
|
| 254 |
-
3
|
| 255 |
-
]
|
| 256 |
-
},
|
| 257 |
-
{
|
| 258 |
-
"point_id": 8,
|
| 259 |
-
"adjacent_points": [
|
| 260 |
-
9,
|
| 261 |
-
18
|
| 262 |
-
],
|
| 263 |
-
"adjacent_hexes": [
|
| 264 |
-
4
|
| 265 |
-
]
|
| 266 |
-
},
|
| 267 |
-
{
|
| 268 |
-
"point_id": 9,
|
| 269 |
-
"adjacent_points": [
|
| 270 |
-
8,
|
| 271 |
-
10,
|
| 272 |
-
1
|
| 273 |
-
],
|
| 274 |
-
"adjacent_hexes": [
|
| 275 |
-
4,
|
| 276 |
-
1
|
| 277 |
-
]
|
| 278 |
-
},
|
| 279 |
-
{
|
| 280 |
-
"point_id": 10,
|
| 281 |
-
"adjacent_points": [
|
| 282 |
-
9,
|
| 283 |
-
11,
|
| 284 |
-
20
|
| 285 |
-
],
|
| 286 |
-
"adjacent_hexes": [
|
| 287 |
-
5,
|
| 288 |
-
4,
|
| 289 |
-
1
|
| 290 |
-
]
|
| 291 |
-
},
|
| 292 |
-
{
|
| 293 |
-
"point_id": 11,
|
| 294 |
-
"adjacent_points": [
|
| 295 |
-
10,
|
| 296 |
-
12,
|
| 297 |
-
3
|
| 298 |
-
],
|
| 299 |
-
"adjacent_hexes": [
|
| 300 |
-
5,
|
| 301 |
-
2,
|
| 302 |
-
1
|
| 303 |
-
]
|
| 304 |
-
},
|
| 305 |
-
{
|
| 306 |
-
"point_id": 12,
|
| 307 |
-
"adjacent_points": [
|
| 308 |
-
11,
|
| 309 |
-
13,
|
| 310 |
-
22
|
| 311 |
-
],
|
| 312 |
-
"adjacent_hexes": [
|
| 313 |
-
6,
|
| 314 |
-
5,
|
| 315 |
-
2
|
| 316 |
-
]
|
| 317 |
-
},
|
| 318 |
-
{
|
| 319 |
-
"point_id": 13,
|
| 320 |
-
"adjacent_points": [
|
| 321 |
-
12,
|
| 322 |
-
14,
|
| 323 |
-
5
|
| 324 |
-
],
|
| 325 |
-
"adjacent_hexes": [
|
| 326 |
-
6,
|
| 327 |
-
3,
|
| 328 |
-
2
|
| 329 |
-
]
|
| 330 |
-
},
|
| 331 |
-
{
|
| 332 |
-
"point_id": 14,
|
| 333 |
-
"adjacent_points": [
|
| 334 |
-
13,
|
| 335 |
-
15,
|
| 336 |
-
24
|
| 337 |
-
],
|
| 338 |
-
"adjacent_hexes": [
|
| 339 |
-
7,
|
| 340 |
-
6,
|
| 341 |
-
3
|
| 342 |
-
]
|
| 343 |
-
},
|
| 344 |
-
{
|
| 345 |
-
"point_id": 15,
|
| 346 |
-
"adjacent_points": [
|
| 347 |
-
14,
|
| 348 |
-
16,
|
| 349 |
-
7
|
| 350 |
-
],
|
| 351 |
-
"adjacent_hexes": [
|
| 352 |
-
7,
|
| 353 |
-
3
|
| 354 |
-
]
|
| 355 |
-
},
|
| 356 |
-
{
|
| 357 |
-
"point_id": 16,
|
| 358 |
-
"adjacent_points": [
|
| 359 |
-
15,
|
| 360 |
-
26
|
| 361 |
-
],
|
| 362 |
-
"adjacent_hexes": [
|
| 363 |
-
7
|
| 364 |
-
]
|
| 365 |
-
},
|
| 366 |
-
{
|
| 367 |
-
"point_id": 17,
|
| 368 |
-
"adjacent_points": [
|
| 369 |
-
18,
|
| 370 |
-
28
|
| 371 |
-
],
|
| 372 |
-
"adjacent_hexes": [
|
| 373 |
-
8
|
| 374 |
-
]
|
| 375 |
-
},
|
| 376 |
-
{
|
| 377 |
-
"point_id": 18,
|
| 378 |
-
"adjacent_points": [
|
| 379 |
-
17,
|
| 380 |
-
19,
|
| 381 |
-
8
|
| 382 |
-
],
|
| 383 |
-
"adjacent_hexes": [
|
| 384 |
-
8,
|
| 385 |
-
4
|
| 386 |
-
]
|
| 387 |
-
},
|
| 388 |
-
{
|
| 389 |
-
"point_id": 19,
|
| 390 |
-
"adjacent_points": [
|
| 391 |
-
18,
|
| 392 |
-
20,
|
| 393 |
-
30
|
| 394 |
-
],
|
| 395 |
-
"adjacent_hexes": [
|
| 396 |
-
9,
|
| 397 |
-
8,
|
| 398 |
-
4
|
| 399 |
-
]
|
| 400 |
-
},
|
| 401 |
-
{
|
| 402 |
-
"point_id": 20,
|
| 403 |
-
"adjacent_points": [
|
| 404 |
-
19,
|
| 405 |
-
21,
|
| 406 |
-
10
|
| 407 |
-
],
|
| 408 |
-
"adjacent_hexes": [
|
| 409 |
-
9,
|
| 410 |
-
5,
|
| 411 |
-
4
|
| 412 |
-
]
|
| 413 |
-
},
|
| 414 |
-
{
|
| 415 |
-
"point_id": 21,
|
| 416 |
-
"adjacent_points": [
|
| 417 |
-
20,
|
| 418 |
-
22,
|
| 419 |
-
32
|
| 420 |
-
],
|
| 421 |
-
"adjacent_hexes": [
|
| 422 |
-
10,
|
| 423 |
-
9,
|
| 424 |
-
5
|
| 425 |
-
]
|
| 426 |
-
},
|
| 427 |
-
{
|
| 428 |
-
"point_id": 22,
|
| 429 |
-
"adjacent_points": [
|
| 430 |
-
21,
|
| 431 |
-
23,
|
| 432 |
-
12
|
| 433 |
-
],
|
| 434 |
-
"adjacent_hexes": [
|
| 435 |
-
10,
|
| 436 |
-
6,
|
| 437 |
-
5
|
| 438 |
-
]
|
| 439 |
-
},
|
| 440 |
-
{
|
| 441 |
-
"point_id": 23,
|
| 442 |
-
"adjacent_points": [
|
| 443 |
-
22,
|
| 444 |
-
24,
|
| 445 |
-
34
|
| 446 |
-
],
|
| 447 |
-
"adjacent_hexes": [
|
| 448 |
-
11,
|
| 449 |
-
10,
|
| 450 |
-
6
|
| 451 |
-
]
|
| 452 |
-
},
|
| 453 |
-
{
|
| 454 |
-
"point_id": 24,
|
| 455 |
-
"adjacent_points": [
|
| 456 |
-
23,
|
| 457 |
-
25,
|
| 458 |
-
14
|
| 459 |
-
],
|
| 460 |
-
"adjacent_hexes": [
|
| 461 |
-
11,
|
| 462 |
-
7,
|
| 463 |
-
6
|
| 464 |
-
]
|
| 465 |
-
},
|
| 466 |
-
{
|
| 467 |
-
"point_id": 25,
|
| 468 |
-
"adjacent_points": [
|
| 469 |
-
24,
|
| 470 |
-
26,
|
| 471 |
-
36
|
| 472 |
-
],
|
| 473 |
-
"adjacent_hexes": [
|
| 474 |
-
12,
|
| 475 |
-
11,
|
| 476 |
-
7
|
| 477 |
-
]
|
| 478 |
-
},
|
| 479 |
-
{
|
| 480 |
-
"point_id": 26,
|
| 481 |
-
"adjacent_points": [
|
| 482 |
-
25,
|
| 483 |
-
27,
|
| 484 |
-
16
|
| 485 |
-
],
|
| 486 |
-
"adjacent_hexes": [
|
| 487 |
-
12,
|
| 488 |
-
7
|
| 489 |
-
]
|
| 490 |
-
},
|
| 491 |
-
{
|
| 492 |
-
"point_id": 27,
|
| 493 |
-
"adjacent_points": [
|
| 494 |
-
26,
|
| 495 |
-
38
|
| 496 |
-
],
|
| 497 |
-
"adjacent_hexes": [
|
| 498 |
-
12
|
| 499 |
-
]
|
| 500 |
-
},
|
| 501 |
-
{
|
| 502 |
-
"point_id": 28,
|
| 503 |
-
"adjacent_points": [
|
| 504 |
-
29,
|
| 505 |
-
17
|
| 506 |
-
],
|
| 507 |
-
"adjacent_hexes": [
|
| 508 |
-
8
|
| 509 |
-
]
|
| 510 |
-
},
|
| 511 |
-
{
|
| 512 |
-
"point_id": 29,
|
| 513 |
-
"adjacent_points": [
|
| 514 |
-
28,
|
| 515 |
-
30,
|
| 516 |
-
39
|
| 517 |
-
],
|
| 518 |
-
"adjacent_hexes": [
|
| 519 |
-
13,
|
| 520 |
-
8
|
| 521 |
-
]
|
| 522 |
-
},
|
| 523 |
-
{
|
| 524 |
-
"point_id": 30,
|
| 525 |
-
"adjacent_points": [
|
| 526 |
-
29,
|
| 527 |
-
31,
|
| 528 |
-
19
|
| 529 |
-
],
|
| 530 |
-
"adjacent_hexes": [
|
| 531 |
-
13,
|
| 532 |
-
9,
|
| 533 |
-
8
|
| 534 |
-
]
|
| 535 |
-
},
|
| 536 |
-
{
|
| 537 |
-
"point_id": 31,
|
| 538 |
-
"adjacent_points": [
|
| 539 |
-
30,
|
| 540 |
-
32,
|
| 541 |
-
41
|
| 542 |
-
],
|
| 543 |
-
"adjacent_hexes": [
|
| 544 |
-
14,
|
| 545 |
-
13,
|
| 546 |
-
9
|
| 547 |
-
]
|
| 548 |
-
},
|
| 549 |
-
{
|
| 550 |
-
"point_id": 32,
|
| 551 |
-
"adjacent_points": [
|
| 552 |
-
31,
|
| 553 |
-
33,
|
| 554 |
-
21
|
| 555 |
-
],
|
| 556 |
-
"adjacent_hexes": [
|
| 557 |
-
14,
|
| 558 |
-
10,
|
| 559 |
-
9
|
| 560 |
-
]
|
| 561 |
-
},
|
| 562 |
-
{
|
| 563 |
-
"point_id": 33,
|
| 564 |
-
"adjacent_points": [
|
| 565 |
-
32,
|
| 566 |
-
34,
|
| 567 |
-
43
|
| 568 |
-
],
|
| 569 |
-
"adjacent_hexes": [
|
| 570 |
-
15,
|
| 571 |
-
14,
|
| 572 |
-
10
|
| 573 |
-
]
|
| 574 |
-
},
|
| 575 |
-
{
|
| 576 |
-
"point_id": 34,
|
| 577 |
-
"adjacent_points": [
|
| 578 |
-
33,
|
| 579 |
-
35,
|
| 580 |
-
23
|
| 581 |
-
],
|
| 582 |
-
"adjacent_hexes": [
|
| 583 |
-
15,
|
| 584 |
-
11,
|
| 585 |
-
10
|
| 586 |
-
]
|
| 587 |
-
},
|
| 588 |
-
{
|
| 589 |
-
"point_id": 35,
|
| 590 |
-
"adjacent_points": [
|
| 591 |
-
34,
|
| 592 |
-
36,
|
| 593 |
-
45
|
| 594 |
-
],
|
| 595 |
-
"adjacent_hexes": [
|
| 596 |
-
16,
|
| 597 |
-
15,
|
| 598 |
-
11
|
| 599 |
-
]
|
| 600 |
-
},
|
| 601 |
-
{
|
| 602 |
-
"point_id": 36,
|
| 603 |
-
"adjacent_points": [
|
| 604 |
-
35,
|
| 605 |
-
37,
|
| 606 |
-
25
|
| 607 |
-
],
|
| 608 |
-
"adjacent_hexes": [
|
| 609 |
-
16,
|
| 610 |
-
12,
|
| 611 |
-
11
|
| 612 |
-
]
|
| 613 |
-
},
|
| 614 |
-
{
|
| 615 |
-
"point_id": 37,
|
| 616 |
-
"adjacent_points": [
|
| 617 |
-
36,
|
| 618 |
-
38,
|
| 619 |
-
47
|
| 620 |
-
],
|
| 621 |
-
"adjacent_hexes": [
|
| 622 |
-
16,
|
| 623 |
-
12
|
| 624 |
-
]
|
| 625 |
-
},
|
| 626 |
-
{
|
| 627 |
-
"point_id": 38,
|
| 628 |
-
"adjacent_points": [
|
| 629 |
-
37,
|
| 630 |
-
27
|
| 631 |
-
],
|
| 632 |
-
"adjacent_hexes": [
|
| 633 |
-
12
|
| 634 |
-
]
|
| 635 |
-
},
|
| 636 |
-
{
|
| 637 |
-
"point_id": 39,
|
| 638 |
-
"adjacent_points": [
|
| 639 |
-
40,
|
| 640 |
-
29
|
| 641 |
-
],
|
| 642 |
-
"adjacent_hexes": [
|
| 643 |
-
13
|
| 644 |
-
]
|
| 645 |
-
},
|
| 646 |
-
{
|
| 647 |
-
"point_id": 40,
|
| 648 |
-
"adjacent_points": [
|
| 649 |
-
39,
|
| 650 |
-
41,
|
| 651 |
-
48
|
| 652 |
-
],
|
| 653 |
-
"adjacent_hexes": [
|
| 654 |
-
17,
|
| 655 |
-
13
|
| 656 |
-
]
|
| 657 |
-
},
|
| 658 |
-
{
|
| 659 |
-
"point_id": 41,
|
| 660 |
-
"adjacent_points": [
|
| 661 |
-
40,
|
| 662 |
-
42,
|
| 663 |
-
31
|
| 664 |
-
],
|
| 665 |
-
"adjacent_hexes": [
|
| 666 |
-
17,
|
| 667 |
-
14,
|
| 668 |
-
13
|
| 669 |
-
]
|
| 670 |
-
},
|
| 671 |
-
{
|
| 672 |
-
"point_id": 42,
|
| 673 |
-
"adjacent_points": [
|
| 674 |
-
41,
|
| 675 |
-
43,
|
| 676 |
-
50
|
| 677 |
-
],
|
| 678 |
-
"adjacent_hexes": [
|
| 679 |
-
18,
|
| 680 |
-
17,
|
| 681 |
-
14
|
| 682 |
-
]
|
| 683 |
-
},
|
| 684 |
-
{
|
| 685 |
-
"point_id": 43,
|
| 686 |
-
"adjacent_points": [
|
| 687 |
-
42,
|
| 688 |
-
44,
|
| 689 |
-
33
|
| 690 |
-
],
|
| 691 |
-
"adjacent_hexes": [
|
| 692 |
-
18,
|
| 693 |
-
15,
|
| 694 |
-
14
|
| 695 |
-
]
|
| 696 |
-
},
|
| 697 |
-
{
|
| 698 |
-
"point_id": 44,
|
| 699 |
-
"adjacent_points": [
|
| 700 |
-
43,
|
| 701 |
-
45,
|
| 702 |
-
52
|
| 703 |
-
],
|
| 704 |
-
"adjacent_hexes": [
|
| 705 |
-
19,
|
| 706 |
-
18,
|
| 707 |
-
15
|
| 708 |
-
]
|
| 709 |
-
},
|
| 710 |
-
{
|
| 711 |
-
"point_id": 45,
|
| 712 |
-
"adjacent_points": [
|
| 713 |
-
44,
|
| 714 |
-
46,
|
| 715 |
-
35
|
| 716 |
-
],
|
| 717 |
-
"adjacent_hexes": [
|
| 718 |
-
19,
|
| 719 |
-
16,
|
| 720 |
-
15
|
| 721 |
-
]
|
| 722 |
-
},
|
| 723 |
-
{
|
| 724 |
-
"point_id": 46,
|
| 725 |
-
"adjacent_points": [
|
| 726 |
-
45,
|
| 727 |
-
47,
|
| 728 |
-
54
|
| 729 |
-
],
|
| 730 |
-
"adjacent_hexes": [
|
| 731 |
-
19,
|
| 732 |
-
16
|
| 733 |
-
]
|
| 734 |
-
},
|
| 735 |
-
{
|
| 736 |
-
"point_id": 47,
|
| 737 |
-
"adjacent_points": [
|
| 738 |
-
46,
|
| 739 |
-
37
|
| 740 |
-
],
|
| 741 |
-
"adjacent_hexes": [
|
| 742 |
-
16
|
| 743 |
-
]
|
| 744 |
-
},
|
| 745 |
-
{
|
| 746 |
-
"point_id": 48,
|
| 747 |
-
"adjacent_points": [
|
| 748 |
-
49,
|
| 749 |
-
40
|
| 750 |
-
],
|
| 751 |
-
"adjacent_hexes": [
|
| 752 |
-
17
|
| 753 |
-
]
|
| 754 |
-
},
|
| 755 |
-
{
|
| 756 |
-
"point_id": 49,
|
| 757 |
-
"adjacent_points": [
|
| 758 |
-
48,
|
| 759 |
-
50
|
| 760 |
-
],
|
| 761 |
-
"adjacent_hexes": [
|
| 762 |
-
17
|
| 763 |
-
]
|
| 764 |
-
},
|
| 765 |
-
{
|
| 766 |
-
"point_id": 50,
|
| 767 |
-
"adjacent_points": [
|
| 768 |
-
49,
|
| 769 |
-
51,
|
| 770 |
-
42
|
| 771 |
-
],
|
| 772 |
-
"adjacent_hexes": [
|
| 773 |
-
18,
|
| 774 |
-
17
|
| 775 |
-
]
|
| 776 |
-
},
|
| 777 |
-
{
|
| 778 |
-
"point_id": 51,
|
| 779 |
-
"adjacent_points": [
|
| 780 |
-
50,
|
| 781 |
-
52
|
| 782 |
-
],
|
| 783 |
-
"adjacent_hexes": [
|
| 784 |
-
18
|
| 785 |
-
]
|
| 786 |
-
},
|
| 787 |
-
{
|
| 788 |
-
"point_id": 52,
|
| 789 |
-
"adjacent_points": [
|
| 790 |
-
51,
|
| 791 |
-
53,
|
| 792 |
-
44
|
| 793 |
-
],
|
| 794 |
-
"adjacent_hexes": [
|
| 795 |
-
19,
|
| 796 |
-
18
|
| 797 |
-
]
|
| 798 |
-
},
|
| 799 |
-
{
|
| 800 |
-
"point_id": 53,
|
| 801 |
-
"adjacent_points": [
|
| 802 |
-
52,
|
| 803 |
-
54
|
| 804 |
-
],
|
| 805 |
-
"adjacent_hexes": [
|
| 806 |
-
19
|
| 807 |
-
]
|
| 808 |
-
},
|
| 809 |
-
{
|
| 810 |
-
"point_id": 54,
|
| 811 |
-
"adjacent_points": [
|
| 812 |
-
53,
|
| 813 |
-
46
|
| 814 |
-
],
|
| 815 |
-
"adjacent_hexes": [
|
| 816 |
-
19
|
| 817 |
-
]
|
| 818 |
-
}
|
| 819 |
-
]
|
| 820 |
-
}
|
| 821 |
-
]
|
| 822 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
examples/ai_testing/my_games/game_20251226_143710_final.json
DELETED
|
@@ -1,816 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"hexes": [
|
| 3 |
-
{
|
| 4 |
-
"id": 1,
|
| 5 |
-
"type": "wood",
|
| 6 |
-
"number": 12,
|
| 7 |
-
"has_robber": false
|
| 8 |
-
},
|
| 9 |
-
{
|
| 10 |
-
"id": 2,
|
| 11 |
-
"type": "sheep",
|
| 12 |
-
"number": 5,
|
| 13 |
-
"has_robber": false
|
| 14 |
-
},
|
| 15 |
-
{
|
| 16 |
-
"id": 3,
|
| 17 |
-
"type": "wood",
|
| 18 |
-
"number": 4,
|
| 19 |
-
"has_robber": false
|
| 20 |
-
},
|
| 21 |
-
{
|
| 22 |
-
"id": 4,
|
| 23 |
-
"type": "sheep",
|
| 24 |
-
"number": 8,
|
| 25 |
-
"has_robber": false
|
| 26 |
-
},
|
| 27 |
-
{
|
| 28 |
-
"id": 5,
|
| 29 |
-
"type": "brick",
|
| 30 |
-
"number": 6,
|
| 31 |
-
"has_robber": false
|
| 32 |
-
},
|
| 33 |
-
{
|
| 34 |
-
"id": 6,
|
| 35 |
-
"type": "wood",
|
| 36 |
-
"number": 3,
|
| 37 |
-
"has_robber": false
|
| 38 |
-
},
|
| 39 |
-
{
|
| 40 |
-
"id": 7,
|
| 41 |
-
"type": "wheat",
|
| 42 |
-
"number": 8,
|
| 43 |
-
"has_robber": false
|
| 44 |
-
},
|
| 45 |
-
{
|
| 46 |
-
"id": 8,
|
| 47 |
-
"type": "brick",
|
| 48 |
-
"number": 10,
|
| 49 |
-
"has_robber": false
|
| 50 |
-
},
|
| 51 |
-
{
|
| 52 |
-
"id": 9,
|
| 53 |
-
"type": "wood",
|
| 54 |
-
"number": 11,
|
| 55 |
-
"has_robber": false
|
| 56 |
-
},
|
| 57 |
-
{
|
| 58 |
-
"id": 10,
|
| 59 |
-
"type": "desert",
|
| 60 |
-
"number": null,
|
| 61 |
-
"has_robber": true
|
| 62 |
-
},
|
| 63 |
-
{
|
| 64 |
-
"id": 11,
|
| 65 |
-
"type": "ore",
|
| 66 |
-
"number": 3,
|
| 67 |
-
"has_robber": false
|
| 68 |
-
},
|
| 69 |
-
{
|
| 70 |
-
"id": 12,
|
| 71 |
-
"type": "sheep",
|
| 72 |
-
"number": 4,
|
| 73 |
-
"has_robber": false
|
| 74 |
-
},
|
| 75 |
-
{
|
| 76 |
-
"id": 13,
|
| 77 |
-
"type": "brick",
|
| 78 |
-
"number": 10,
|
| 79 |
-
"has_robber": false
|
| 80 |
-
},
|
| 81 |
-
{
|
| 82 |
-
"id": 14,
|
| 83 |
-
"type": "wheat",
|
| 84 |
-
"number": 9,
|
| 85 |
-
"has_robber": false
|
| 86 |
-
},
|
| 87 |
-
{
|
| 88 |
-
"id": 15,
|
| 89 |
-
"type": "wheat",
|
| 90 |
-
"number": 6,
|
| 91 |
-
"has_robber": false
|
| 92 |
-
},
|
| 93 |
-
{
|
| 94 |
-
"id": 16,
|
| 95 |
-
"type": "sheep",
|
| 96 |
-
"number": 11,
|
| 97 |
-
"has_robber": false
|
| 98 |
-
},
|
| 99 |
-
{
|
| 100 |
-
"id": 17,
|
| 101 |
-
"type": "ore",
|
| 102 |
-
"number": 5,
|
| 103 |
-
"has_robber": false
|
| 104 |
-
},
|
| 105 |
-
{
|
| 106 |
-
"id": 18,
|
| 107 |
-
"type": "wheat",
|
| 108 |
-
"number": 9,
|
| 109 |
-
"has_robber": false
|
| 110 |
-
},
|
| 111 |
-
{
|
| 112 |
-
"id": 19,
|
| 113 |
-
"type": "ore",
|
| 114 |
-
"number": 2,
|
| 115 |
-
"has_robber": false
|
| 116 |
-
}
|
| 117 |
-
],
|
| 118 |
-
"settlements": [],
|
| 119 |
-
"cities": [],
|
| 120 |
-
"roads": [],
|
| 121 |
-
"players": [
|
| 122 |
-
{
|
| 123 |
-
"id": 0,
|
| 124 |
-
"name": "a",
|
| 125 |
-
"victory_points": 0,
|
| 126 |
-
"total_cards": 0,
|
| 127 |
-
"cards_list": [],
|
| 128 |
-
"dev_cards_list": [],
|
| 129 |
-
"settlements": 0,
|
| 130 |
-
"cities": 0,
|
| 131 |
-
"roads": 0,
|
| 132 |
-
"longest_road": 0,
|
| 133 |
-
"has_longest_road": false,
|
| 134 |
-
"knights": 0,
|
| 135 |
-
"knights_played": 0,
|
| 136 |
-
"has_largest_army": false
|
| 137 |
-
},
|
| 138 |
-
{
|
| 139 |
-
"id": 1,
|
| 140 |
-
"name": "b",
|
| 141 |
-
"victory_points": 0,
|
| 142 |
-
"total_cards": 0,
|
| 143 |
-
"cards_list": [],
|
| 144 |
-
"dev_cards_list": [],
|
| 145 |
-
"settlements": 0,
|
| 146 |
-
"cities": 0,
|
| 147 |
-
"roads": 0,
|
| 148 |
-
"longest_road": 0,
|
| 149 |
-
"has_longest_road": false,
|
| 150 |
-
"knights": 0,
|
| 151 |
-
"knights_played": 0,
|
| 152 |
-
"has_largest_army": false
|
| 153 |
-
},
|
| 154 |
-
{
|
| 155 |
-
"id": 2,
|
| 156 |
-
"name": "c",
|
| 157 |
-
"victory_points": 0,
|
| 158 |
-
"total_cards": 0,
|
| 159 |
-
"cards_list": [],
|
| 160 |
-
"dev_cards_list": [],
|
| 161 |
-
"settlements": 0,
|
| 162 |
-
"cities": 0,
|
| 163 |
-
"roads": 0,
|
| 164 |
-
"longest_road": 0,
|
| 165 |
-
"has_longest_road": false,
|
| 166 |
-
"knights": 0,
|
| 167 |
-
"knights_played": 0,
|
| 168 |
-
"has_largest_army": false
|
| 169 |
-
}
|
| 170 |
-
],
|
| 171 |
-
"current_player": 0,
|
| 172 |
-
"current_phase": "SETUP_FIRST_ROUND",
|
| 173 |
-
"robber_position": [
|
| 174 |
-
2,
|
| 175 |
-
2
|
| 176 |
-
],
|
| 177 |
-
"dice_result": null,
|
| 178 |
-
"points": [
|
| 179 |
-
{
|
| 180 |
-
"point_id": 1,
|
| 181 |
-
"adjacent_points": [
|
| 182 |
-
2,
|
| 183 |
-
9
|
| 184 |
-
],
|
| 185 |
-
"adjacent_hexes": [
|
| 186 |
-
1
|
| 187 |
-
]
|
| 188 |
-
},
|
| 189 |
-
{
|
| 190 |
-
"point_id": 2,
|
| 191 |
-
"adjacent_points": [
|
| 192 |
-
1,
|
| 193 |
-
3
|
| 194 |
-
],
|
| 195 |
-
"adjacent_hexes": [
|
| 196 |
-
1
|
| 197 |
-
]
|
| 198 |
-
},
|
| 199 |
-
{
|
| 200 |
-
"point_id": 3,
|
| 201 |
-
"adjacent_points": [
|
| 202 |
-
2,
|
| 203 |
-
4,
|
| 204 |
-
11
|
| 205 |
-
],
|
| 206 |
-
"adjacent_hexes": [
|
| 207 |
-
2,
|
| 208 |
-
1
|
| 209 |
-
]
|
| 210 |
-
},
|
| 211 |
-
{
|
| 212 |
-
"point_id": 4,
|
| 213 |
-
"adjacent_points": [
|
| 214 |
-
3,
|
| 215 |
-
5
|
| 216 |
-
],
|
| 217 |
-
"adjacent_hexes": [
|
| 218 |
-
2
|
| 219 |
-
]
|
| 220 |
-
},
|
| 221 |
-
{
|
| 222 |
-
"point_id": 5,
|
| 223 |
-
"adjacent_points": [
|
| 224 |
-
4,
|
| 225 |
-
6,
|
| 226 |
-
13
|
| 227 |
-
],
|
| 228 |
-
"adjacent_hexes": [
|
| 229 |
-
3,
|
| 230 |
-
2
|
| 231 |
-
]
|
| 232 |
-
},
|
| 233 |
-
{
|
| 234 |
-
"point_id": 6,
|
| 235 |
-
"adjacent_points": [
|
| 236 |
-
5,
|
| 237 |
-
7
|
| 238 |
-
],
|
| 239 |
-
"adjacent_hexes": [
|
| 240 |
-
3
|
| 241 |
-
]
|
| 242 |
-
},
|
| 243 |
-
{
|
| 244 |
-
"point_id": 7,
|
| 245 |
-
"adjacent_points": [
|
| 246 |
-
6,
|
| 247 |
-
15
|
| 248 |
-
],
|
| 249 |
-
"adjacent_hexes": [
|
| 250 |
-
3
|
| 251 |
-
]
|
| 252 |
-
},
|
| 253 |
-
{
|
| 254 |
-
"point_id": 8,
|
| 255 |
-
"adjacent_points": [
|
| 256 |
-
9,
|
| 257 |
-
18
|
| 258 |
-
],
|
| 259 |
-
"adjacent_hexes": [
|
| 260 |
-
4
|
| 261 |
-
]
|
| 262 |
-
},
|
| 263 |
-
{
|
| 264 |
-
"point_id": 9,
|
| 265 |
-
"adjacent_points": [
|
| 266 |
-
8,
|
| 267 |
-
10,
|
| 268 |
-
1
|
| 269 |
-
],
|
| 270 |
-
"adjacent_hexes": [
|
| 271 |
-
4,
|
| 272 |
-
1
|
| 273 |
-
]
|
| 274 |
-
},
|
| 275 |
-
{
|
| 276 |
-
"point_id": 10,
|
| 277 |
-
"adjacent_points": [
|
| 278 |
-
9,
|
| 279 |
-
11,
|
| 280 |
-
20
|
| 281 |
-
],
|
| 282 |
-
"adjacent_hexes": [
|
| 283 |
-
5,
|
| 284 |
-
4,
|
| 285 |
-
1
|
| 286 |
-
]
|
| 287 |
-
},
|
| 288 |
-
{
|
| 289 |
-
"point_id": 11,
|
| 290 |
-
"adjacent_points": [
|
| 291 |
-
10,
|
| 292 |
-
12,
|
| 293 |
-
3
|
| 294 |
-
],
|
| 295 |
-
"adjacent_hexes": [
|
| 296 |
-
5,
|
| 297 |
-
2,
|
| 298 |
-
1
|
| 299 |
-
]
|
| 300 |
-
},
|
| 301 |
-
{
|
| 302 |
-
"point_id": 12,
|
| 303 |
-
"adjacent_points": [
|
| 304 |
-
11,
|
| 305 |
-
13,
|
| 306 |
-
22
|
| 307 |
-
],
|
| 308 |
-
"adjacent_hexes": [
|
| 309 |
-
6,
|
| 310 |
-
5,
|
| 311 |
-
2
|
| 312 |
-
]
|
| 313 |
-
},
|
| 314 |
-
{
|
| 315 |
-
"point_id": 13,
|
| 316 |
-
"adjacent_points": [
|
| 317 |
-
12,
|
| 318 |
-
14,
|
| 319 |
-
5
|
| 320 |
-
],
|
| 321 |
-
"adjacent_hexes": [
|
| 322 |
-
6,
|
| 323 |
-
3,
|
| 324 |
-
2
|
| 325 |
-
]
|
| 326 |
-
},
|
| 327 |
-
{
|
| 328 |
-
"point_id": 14,
|
| 329 |
-
"adjacent_points": [
|
| 330 |
-
13,
|
| 331 |
-
15,
|
| 332 |
-
24
|
| 333 |
-
],
|
| 334 |
-
"adjacent_hexes": [
|
| 335 |
-
7,
|
| 336 |
-
6,
|
| 337 |
-
3
|
| 338 |
-
]
|
| 339 |
-
},
|
| 340 |
-
{
|
| 341 |
-
"point_id": 15,
|
| 342 |
-
"adjacent_points": [
|
| 343 |
-
14,
|
| 344 |
-
16,
|
| 345 |
-
7
|
| 346 |
-
],
|
| 347 |
-
"adjacent_hexes": [
|
| 348 |
-
7,
|
| 349 |
-
3
|
| 350 |
-
]
|
| 351 |
-
},
|
| 352 |
-
{
|
| 353 |
-
"point_id": 16,
|
| 354 |
-
"adjacent_points": [
|
| 355 |
-
15,
|
| 356 |
-
26
|
| 357 |
-
],
|
| 358 |
-
"adjacent_hexes": [
|
| 359 |
-
7
|
| 360 |
-
]
|
| 361 |
-
},
|
| 362 |
-
{
|
| 363 |
-
"point_id": 17,
|
| 364 |
-
"adjacent_points": [
|
| 365 |
-
18,
|
| 366 |
-
28
|
| 367 |
-
],
|
| 368 |
-
"adjacent_hexes": [
|
| 369 |
-
8
|
| 370 |
-
]
|
| 371 |
-
},
|
| 372 |
-
{
|
| 373 |
-
"point_id": 18,
|
| 374 |
-
"adjacent_points": [
|
| 375 |
-
17,
|
| 376 |
-
19,
|
| 377 |
-
8
|
| 378 |
-
],
|
| 379 |
-
"adjacent_hexes": [
|
| 380 |
-
8,
|
| 381 |
-
4
|
| 382 |
-
]
|
| 383 |
-
},
|
| 384 |
-
{
|
| 385 |
-
"point_id": 19,
|
| 386 |
-
"adjacent_points": [
|
| 387 |
-
18,
|
| 388 |
-
20,
|
| 389 |
-
30
|
| 390 |
-
],
|
| 391 |
-
"adjacent_hexes": [
|
| 392 |
-
9,
|
| 393 |
-
8,
|
| 394 |
-
4
|
| 395 |
-
]
|
| 396 |
-
},
|
| 397 |
-
{
|
| 398 |
-
"point_id": 20,
|
| 399 |
-
"adjacent_points": [
|
| 400 |
-
19,
|
| 401 |
-
21,
|
| 402 |
-
10
|
| 403 |
-
],
|
| 404 |
-
"adjacent_hexes": [
|
| 405 |
-
9,
|
| 406 |
-
5,
|
| 407 |
-
4
|
| 408 |
-
]
|
| 409 |
-
},
|
| 410 |
-
{
|
| 411 |
-
"point_id": 21,
|
| 412 |
-
"adjacent_points": [
|
| 413 |
-
20,
|
| 414 |
-
22,
|
| 415 |
-
32
|
| 416 |
-
],
|
| 417 |
-
"adjacent_hexes": [
|
| 418 |
-
10,
|
| 419 |
-
9,
|
| 420 |
-
5
|
| 421 |
-
]
|
| 422 |
-
},
|
| 423 |
-
{
|
| 424 |
-
"point_id": 22,
|
| 425 |
-
"adjacent_points": [
|
| 426 |
-
21,
|
| 427 |
-
23,
|
| 428 |
-
12
|
| 429 |
-
],
|
| 430 |
-
"adjacent_hexes": [
|
| 431 |
-
10,
|
| 432 |
-
6,
|
| 433 |
-
5
|
| 434 |
-
]
|
| 435 |
-
},
|
| 436 |
-
{
|
| 437 |
-
"point_id": 23,
|
| 438 |
-
"adjacent_points": [
|
| 439 |
-
22,
|
| 440 |
-
24,
|
| 441 |
-
34
|
| 442 |
-
],
|
| 443 |
-
"adjacent_hexes": [
|
| 444 |
-
11,
|
| 445 |
-
10,
|
| 446 |
-
6
|
| 447 |
-
]
|
| 448 |
-
},
|
| 449 |
-
{
|
| 450 |
-
"point_id": 24,
|
| 451 |
-
"adjacent_points": [
|
| 452 |
-
23,
|
| 453 |
-
25,
|
| 454 |
-
14
|
| 455 |
-
],
|
| 456 |
-
"adjacent_hexes": [
|
| 457 |
-
11,
|
| 458 |
-
7,
|
| 459 |
-
6
|
| 460 |
-
]
|
| 461 |
-
},
|
| 462 |
-
{
|
| 463 |
-
"point_id": 25,
|
| 464 |
-
"adjacent_points": [
|
| 465 |
-
24,
|
| 466 |
-
26,
|
| 467 |
-
36
|
| 468 |
-
],
|
| 469 |
-
"adjacent_hexes": [
|
| 470 |
-
12,
|
| 471 |
-
11,
|
| 472 |
-
7
|
| 473 |
-
]
|
| 474 |
-
},
|
| 475 |
-
{
|
| 476 |
-
"point_id": 26,
|
| 477 |
-
"adjacent_points": [
|
| 478 |
-
25,
|
| 479 |
-
27,
|
| 480 |
-
16
|
| 481 |
-
],
|
| 482 |
-
"adjacent_hexes": [
|
| 483 |
-
12,
|
| 484 |
-
7
|
| 485 |
-
]
|
| 486 |
-
},
|
| 487 |
-
{
|
| 488 |
-
"point_id": 27,
|
| 489 |
-
"adjacent_points": [
|
| 490 |
-
26,
|
| 491 |
-
38
|
| 492 |
-
],
|
| 493 |
-
"adjacent_hexes": [
|
| 494 |
-
12
|
| 495 |
-
]
|
| 496 |
-
},
|
| 497 |
-
{
|
| 498 |
-
"point_id": 28,
|
| 499 |
-
"adjacent_points": [
|
| 500 |
-
29,
|
| 501 |
-
17
|
| 502 |
-
],
|
| 503 |
-
"adjacent_hexes": [
|
| 504 |
-
8
|
| 505 |
-
]
|
| 506 |
-
},
|
| 507 |
-
{
|
| 508 |
-
"point_id": 29,
|
| 509 |
-
"adjacent_points": [
|
| 510 |
-
28,
|
| 511 |
-
30,
|
| 512 |
-
39
|
| 513 |
-
],
|
| 514 |
-
"adjacent_hexes": [
|
| 515 |
-
13,
|
| 516 |
-
8
|
| 517 |
-
]
|
| 518 |
-
},
|
| 519 |
-
{
|
| 520 |
-
"point_id": 30,
|
| 521 |
-
"adjacent_points": [
|
| 522 |
-
29,
|
| 523 |
-
31,
|
| 524 |
-
19
|
| 525 |
-
],
|
| 526 |
-
"adjacent_hexes": [
|
| 527 |
-
13,
|
| 528 |
-
9,
|
| 529 |
-
8
|
| 530 |
-
]
|
| 531 |
-
},
|
| 532 |
-
{
|
| 533 |
-
"point_id": 31,
|
| 534 |
-
"adjacent_points": [
|
| 535 |
-
30,
|
| 536 |
-
32,
|
| 537 |
-
41
|
| 538 |
-
],
|
| 539 |
-
"adjacent_hexes": [
|
| 540 |
-
14,
|
| 541 |
-
13,
|
| 542 |
-
9
|
| 543 |
-
]
|
| 544 |
-
},
|
| 545 |
-
{
|
| 546 |
-
"point_id": 32,
|
| 547 |
-
"adjacent_points": [
|
| 548 |
-
31,
|
| 549 |
-
33,
|
| 550 |
-
21
|
| 551 |
-
],
|
| 552 |
-
"adjacent_hexes": [
|
| 553 |
-
14,
|
| 554 |
-
10,
|
| 555 |
-
9
|
| 556 |
-
]
|
| 557 |
-
},
|
| 558 |
-
{
|
| 559 |
-
"point_id": 33,
|
| 560 |
-
"adjacent_points": [
|
| 561 |
-
32,
|
| 562 |
-
34,
|
| 563 |
-
43
|
| 564 |
-
],
|
| 565 |
-
"adjacent_hexes": [
|
| 566 |
-
15,
|
| 567 |
-
14,
|
| 568 |
-
10
|
| 569 |
-
]
|
| 570 |
-
},
|
| 571 |
-
{
|
| 572 |
-
"point_id": 34,
|
| 573 |
-
"adjacent_points": [
|
| 574 |
-
33,
|
| 575 |
-
35,
|
| 576 |
-
23
|
| 577 |
-
],
|
| 578 |
-
"adjacent_hexes": [
|
| 579 |
-
15,
|
| 580 |
-
11,
|
| 581 |
-
10
|
| 582 |
-
]
|
| 583 |
-
},
|
| 584 |
-
{
|
| 585 |
-
"point_id": 35,
|
| 586 |
-
"adjacent_points": [
|
| 587 |
-
34,
|
| 588 |
-
36,
|
| 589 |
-
45
|
| 590 |
-
],
|
| 591 |
-
"adjacent_hexes": [
|
| 592 |
-
16,
|
| 593 |
-
15,
|
| 594 |
-
11
|
| 595 |
-
]
|
| 596 |
-
},
|
| 597 |
-
{
|
| 598 |
-
"point_id": 36,
|
| 599 |
-
"adjacent_points": [
|
| 600 |
-
35,
|
| 601 |
-
37,
|
| 602 |
-
25
|
| 603 |
-
],
|
| 604 |
-
"adjacent_hexes": [
|
| 605 |
-
16,
|
| 606 |
-
12,
|
| 607 |
-
11
|
| 608 |
-
]
|
| 609 |
-
},
|
| 610 |
-
{
|
| 611 |
-
"point_id": 37,
|
| 612 |
-
"adjacent_points": [
|
| 613 |
-
36,
|
| 614 |
-
38,
|
| 615 |
-
47
|
| 616 |
-
],
|
| 617 |
-
"adjacent_hexes": [
|
| 618 |
-
16,
|
| 619 |
-
12
|
| 620 |
-
]
|
| 621 |
-
},
|
| 622 |
-
{
|
| 623 |
-
"point_id": 38,
|
| 624 |
-
"adjacent_points": [
|
| 625 |
-
37,
|
| 626 |
-
27
|
| 627 |
-
],
|
| 628 |
-
"adjacent_hexes": [
|
| 629 |
-
12
|
| 630 |
-
]
|
| 631 |
-
},
|
| 632 |
-
{
|
| 633 |
-
"point_id": 39,
|
| 634 |
-
"adjacent_points": [
|
| 635 |
-
40,
|
| 636 |
-
29
|
| 637 |
-
],
|
| 638 |
-
"adjacent_hexes": [
|
| 639 |
-
13
|
| 640 |
-
]
|
| 641 |
-
},
|
| 642 |
-
{
|
| 643 |
-
"point_id": 40,
|
| 644 |
-
"adjacent_points": [
|
| 645 |
-
39,
|
| 646 |
-
41,
|
| 647 |
-
48
|
| 648 |
-
],
|
| 649 |
-
"adjacent_hexes": [
|
| 650 |
-
17,
|
| 651 |
-
13
|
| 652 |
-
]
|
| 653 |
-
},
|
| 654 |
-
{
|
| 655 |
-
"point_id": 41,
|
| 656 |
-
"adjacent_points": [
|
| 657 |
-
40,
|
| 658 |
-
42,
|
| 659 |
-
31
|
| 660 |
-
],
|
| 661 |
-
"adjacent_hexes": [
|
| 662 |
-
17,
|
| 663 |
-
14,
|
| 664 |
-
13
|
| 665 |
-
]
|
| 666 |
-
},
|
| 667 |
-
{
|
| 668 |
-
"point_id": 42,
|
| 669 |
-
"adjacent_points": [
|
| 670 |
-
41,
|
| 671 |
-
43,
|
| 672 |
-
50
|
| 673 |
-
],
|
| 674 |
-
"adjacent_hexes": [
|
| 675 |
-
18,
|
| 676 |
-
17,
|
| 677 |
-
14
|
| 678 |
-
]
|
| 679 |
-
},
|
| 680 |
-
{
|
| 681 |
-
"point_id": 43,
|
| 682 |
-
"adjacent_points": [
|
| 683 |
-
42,
|
| 684 |
-
44,
|
| 685 |
-
33
|
| 686 |
-
],
|
| 687 |
-
"adjacent_hexes": [
|
| 688 |
-
18,
|
| 689 |
-
15,
|
| 690 |
-
14
|
| 691 |
-
]
|
| 692 |
-
},
|
| 693 |
-
{
|
| 694 |
-
"point_id": 44,
|
| 695 |
-
"adjacent_points": [
|
| 696 |
-
43,
|
| 697 |
-
45,
|
| 698 |
-
52
|
| 699 |
-
],
|
| 700 |
-
"adjacent_hexes": [
|
| 701 |
-
19,
|
| 702 |
-
18,
|
| 703 |
-
15
|
| 704 |
-
]
|
| 705 |
-
},
|
| 706 |
-
{
|
| 707 |
-
"point_id": 45,
|
| 708 |
-
"adjacent_points": [
|
| 709 |
-
44,
|
| 710 |
-
46,
|
| 711 |
-
35
|
| 712 |
-
],
|
| 713 |
-
"adjacent_hexes": [
|
| 714 |
-
19,
|
| 715 |
-
16,
|
| 716 |
-
15
|
| 717 |
-
]
|
| 718 |
-
},
|
| 719 |
-
{
|
| 720 |
-
"point_id": 46,
|
| 721 |
-
"adjacent_points": [
|
| 722 |
-
45,
|
| 723 |
-
47,
|
| 724 |
-
54
|
| 725 |
-
],
|
| 726 |
-
"adjacent_hexes": [
|
| 727 |
-
19,
|
| 728 |
-
16
|
| 729 |
-
]
|
| 730 |
-
},
|
| 731 |
-
{
|
| 732 |
-
"point_id": 47,
|
| 733 |
-
"adjacent_points": [
|
| 734 |
-
46,
|
| 735 |
-
37
|
| 736 |
-
],
|
| 737 |
-
"adjacent_hexes": [
|
| 738 |
-
16
|
| 739 |
-
]
|
| 740 |
-
},
|
| 741 |
-
{
|
| 742 |
-
"point_id": 48,
|
| 743 |
-
"adjacent_points": [
|
| 744 |
-
49,
|
| 745 |
-
40
|
| 746 |
-
],
|
| 747 |
-
"adjacent_hexes": [
|
| 748 |
-
17
|
| 749 |
-
]
|
| 750 |
-
},
|
| 751 |
-
{
|
| 752 |
-
"point_id": 49,
|
| 753 |
-
"adjacent_points": [
|
| 754 |
-
48,
|
| 755 |
-
50
|
| 756 |
-
],
|
| 757 |
-
"adjacent_hexes": [
|
| 758 |
-
17
|
| 759 |
-
]
|
| 760 |
-
},
|
| 761 |
-
{
|
| 762 |
-
"point_id": 50,
|
| 763 |
-
"adjacent_points": [
|
| 764 |
-
49,
|
| 765 |
-
51,
|
| 766 |
-
42
|
| 767 |
-
],
|
| 768 |
-
"adjacent_hexes": [
|
| 769 |
-
18,
|
| 770 |
-
17
|
| 771 |
-
]
|
| 772 |
-
},
|
| 773 |
-
{
|
| 774 |
-
"point_id": 51,
|
| 775 |
-
"adjacent_points": [
|
| 776 |
-
50,
|
| 777 |
-
52
|
| 778 |
-
],
|
| 779 |
-
"adjacent_hexes": [
|
| 780 |
-
18
|
| 781 |
-
]
|
| 782 |
-
},
|
| 783 |
-
{
|
| 784 |
-
"point_id": 52,
|
| 785 |
-
"adjacent_points": [
|
| 786 |
-
51,
|
| 787 |
-
53,
|
| 788 |
-
44
|
| 789 |
-
],
|
| 790 |
-
"adjacent_hexes": [
|
| 791 |
-
19,
|
| 792 |
-
18
|
| 793 |
-
]
|
| 794 |
-
},
|
| 795 |
-
{
|
| 796 |
-
"point_id": 53,
|
| 797 |
-
"adjacent_points": [
|
| 798 |
-
52,
|
| 799 |
-
54
|
| 800 |
-
],
|
| 801 |
-
"adjacent_hexes": [
|
| 802 |
-
19
|
| 803 |
-
]
|
| 804 |
-
},
|
| 805 |
-
{
|
| 806 |
-
"point_id": 54,
|
| 807 |
-
"adjacent_points": [
|
| 808 |
-
53,
|
| 809 |
-
46
|
| 810 |
-
],
|
| 811 |
-
"adjacent_hexes": [
|
| 812 |
-
19
|
| 813 |
-
]
|
| 814 |
-
}
|
| 815 |
-
]
|
| 816 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
examples/ai_testing/my_games/game_20251226_143710_full.json
DELETED
|
@@ -1,822 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"total_states": 1,
|
| 3 |
-
"timestamp": "20251226_143710",
|
| 4 |
-
"states": [
|
| 5 |
-
{
|
| 6 |
-
"hexes": [
|
| 7 |
-
{
|
| 8 |
-
"id": 1,
|
| 9 |
-
"type": "wood",
|
| 10 |
-
"number": 12,
|
| 11 |
-
"has_robber": false
|
| 12 |
-
},
|
| 13 |
-
{
|
| 14 |
-
"id": 2,
|
| 15 |
-
"type": "sheep",
|
| 16 |
-
"number": 5,
|
| 17 |
-
"has_robber": false
|
| 18 |
-
},
|
| 19 |
-
{
|
| 20 |
-
"id": 3,
|
| 21 |
-
"type": "wood",
|
| 22 |
-
"number": 4,
|
| 23 |
-
"has_robber": false
|
| 24 |
-
},
|
| 25 |
-
{
|
| 26 |
-
"id": 4,
|
| 27 |
-
"type": "sheep",
|
| 28 |
-
"number": 8,
|
| 29 |
-
"has_robber": false
|
| 30 |
-
},
|
| 31 |
-
{
|
| 32 |
-
"id": 5,
|
| 33 |
-
"type": "brick",
|
| 34 |
-
"number": 6,
|
| 35 |
-
"has_robber": false
|
| 36 |
-
},
|
| 37 |
-
{
|
| 38 |
-
"id": 6,
|
| 39 |
-
"type": "wood",
|
| 40 |
-
"number": 3,
|
| 41 |
-
"has_robber": false
|
| 42 |
-
},
|
| 43 |
-
{
|
| 44 |
-
"id": 7,
|
| 45 |
-
"type": "wheat",
|
| 46 |
-
"number": 8,
|
| 47 |
-
"has_robber": false
|
| 48 |
-
},
|
| 49 |
-
{
|
| 50 |
-
"id": 8,
|
| 51 |
-
"type": "brick",
|
| 52 |
-
"number": 10,
|
| 53 |
-
"has_robber": false
|
| 54 |
-
},
|
| 55 |
-
{
|
| 56 |
-
"id": 9,
|
| 57 |
-
"type": "wood",
|
| 58 |
-
"number": 11,
|
| 59 |
-
"has_robber": false
|
| 60 |
-
},
|
| 61 |
-
{
|
| 62 |
-
"id": 10,
|
| 63 |
-
"type": "desert",
|
| 64 |
-
"number": null,
|
| 65 |
-
"has_robber": true
|
| 66 |
-
},
|
| 67 |
-
{
|
| 68 |
-
"id": 11,
|
| 69 |
-
"type": "ore",
|
| 70 |
-
"number": 3,
|
| 71 |
-
"has_robber": false
|
| 72 |
-
},
|
| 73 |
-
{
|
| 74 |
-
"id": 12,
|
| 75 |
-
"type": "sheep",
|
| 76 |
-
"number": 4,
|
| 77 |
-
"has_robber": false
|
| 78 |
-
},
|
| 79 |
-
{
|
| 80 |
-
"id": 13,
|
| 81 |
-
"type": "brick",
|
| 82 |
-
"number": 10,
|
| 83 |
-
"has_robber": false
|
| 84 |
-
},
|
| 85 |
-
{
|
| 86 |
-
"id": 14,
|
| 87 |
-
"type": "wheat",
|
| 88 |
-
"number": 9,
|
| 89 |
-
"has_robber": false
|
| 90 |
-
},
|
| 91 |
-
{
|
| 92 |
-
"id": 15,
|
| 93 |
-
"type": "wheat",
|
| 94 |
-
"number": 6,
|
| 95 |
-
"has_robber": false
|
| 96 |
-
},
|
| 97 |
-
{
|
| 98 |
-
"id": 16,
|
| 99 |
-
"type": "sheep",
|
| 100 |
-
"number": 11,
|
| 101 |
-
"has_robber": false
|
| 102 |
-
},
|
| 103 |
-
{
|
| 104 |
-
"id": 17,
|
| 105 |
-
"type": "ore",
|
| 106 |
-
"number": 5,
|
| 107 |
-
"has_robber": false
|
| 108 |
-
},
|
| 109 |
-
{
|
| 110 |
-
"id": 18,
|
| 111 |
-
"type": "wheat",
|
| 112 |
-
"number": 9,
|
| 113 |
-
"has_robber": false
|
| 114 |
-
},
|
| 115 |
-
{
|
| 116 |
-
"id": 19,
|
| 117 |
-
"type": "ore",
|
| 118 |
-
"number": 2,
|
| 119 |
-
"has_robber": false
|
| 120 |
-
}
|
| 121 |
-
],
|
| 122 |
-
"settlements": [],
|
| 123 |
-
"cities": [],
|
| 124 |
-
"roads": [],
|
| 125 |
-
"players": [
|
| 126 |
-
{
|
| 127 |
-
"id": 0,
|
| 128 |
-
"name": "a",
|
| 129 |
-
"victory_points": 0,
|
| 130 |
-
"total_cards": 0,
|
| 131 |
-
"cards_list": [],
|
| 132 |
-
"dev_cards_list": [],
|
| 133 |
-
"settlements": 0,
|
| 134 |
-
"cities": 0,
|
| 135 |
-
"roads": 0,
|
| 136 |
-
"longest_road": 0,
|
| 137 |
-
"has_longest_road": false,
|
| 138 |
-
"knights": 0,
|
| 139 |
-
"knights_played": 0,
|
| 140 |
-
"has_largest_army": false
|
| 141 |
-
},
|
| 142 |
-
{
|
| 143 |
-
"id": 1,
|
| 144 |
-
"name": "b",
|
| 145 |
-
"victory_points": 0,
|
| 146 |
-
"total_cards": 0,
|
| 147 |
-
"cards_list": [],
|
| 148 |
-
"dev_cards_list": [],
|
| 149 |
-
"settlements": 0,
|
| 150 |
-
"cities": 0,
|
| 151 |
-
"roads": 0,
|
| 152 |
-
"longest_road": 0,
|
| 153 |
-
"has_longest_road": false,
|
| 154 |
-
"knights": 0,
|
| 155 |
-
"knights_played": 0,
|
| 156 |
-
"has_largest_army": false
|
| 157 |
-
},
|
| 158 |
-
{
|
| 159 |
-
"id": 2,
|
| 160 |
-
"name": "c",
|
| 161 |
-
"victory_points": 0,
|
| 162 |
-
"total_cards": 0,
|
| 163 |
-
"cards_list": [],
|
| 164 |
-
"dev_cards_list": [],
|
| 165 |
-
"settlements": 0,
|
| 166 |
-
"cities": 0,
|
| 167 |
-
"roads": 0,
|
| 168 |
-
"longest_road": 0,
|
| 169 |
-
"has_longest_road": false,
|
| 170 |
-
"knights": 0,
|
| 171 |
-
"knights_played": 0,
|
| 172 |
-
"has_largest_army": false
|
| 173 |
-
}
|
| 174 |
-
],
|
| 175 |
-
"current_player": 0,
|
| 176 |
-
"current_phase": "SETUP_FIRST_ROUND",
|
| 177 |
-
"robber_position": [
|
| 178 |
-
2,
|
| 179 |
-
2
|
| 180 |
-
],
|
| 181 |
-
"dice_result": null,
|
| 182 |
-
"points": [
|
| 183 |
-
{
|
| 184 |
-
"point_id": 1,
|
| 185 |
-
"adjacent_points": [
|
| 186 |
-
2,
|
| 187 |
-
9
|
| 188 |
-
],
|
| 189 |
-
"adjacent_hexes": [
|
| 190 |
-
1
|
| 191 |
-
]
|
| 192 |
-
},
|
| 193 |
-
{
|
| 194 |
-
"point_id": 2,
|
| 195 |
-
"adjacent_points": [
|
| 196 |
-
1,
|
| 197 |
-
3
|
| 198 |
-
],
|
| 199 |
-
"adjacent_hexes": [
|
| 200 |
-
1
|
| 201 |
-
]
|
| 202 |
-
},
|
| 203 |
-
{
|
| 204 |
-
"point_id": 3,
|
| 205 |
-
"adjacent_points": [
|
| 206 |
-
2,
|
| 207 |
-
4,
|
| 208 |
-
11
|
| 209 |
-
],
|
| 210 |
-
"adjacent_hexes": [
|
| 211 |
-
2,
|
| 212 |
-
1
|
| 213 |
-
]
|
| 214 |
-
},
|
| 215 |
-
{
|
| 216 |
-
"point_id": 4,
|
| 217 |
-
"adjacent_points": [
|
| 218 |
-
3,
|
| 219 |
-
5
|
| 220 |
-
],
|
| 221 |
-
"adjacent_hexes": [
|
| 222 |
-
2
|
| 223 |
-
]
|
| 224 |
-
},
|
| 225 |
-
{
|
| 226 |
-
"point_id": 5,
|
| 227 |
-
"adjacent_points": [
|
| 228 |
-
4,
|
| 229 |
-
6,
|
| 230 |
-
13
|
| 231 |
-
],
|
| 232 |
-
"adjacent_hexes": [
|
| 233 |
-
3,
|
| 234 |
-
2
|
| 235 |
-
]
|
| 236 |
-
},
|
| 237 |
-
{
|
| 238 |
-
"point_id": 6,
|
| 239 |
-
"adjacent_points": [
|
| 240 |
-
5,
|
| 241 |
-
7
|
| 242 |
-
],
|
| 243 |
-
"adjacent_hexes": [
|
| 244 |
-
3
|
| 245 |
-
]
|
| 246 |
-
},
|
| 247 |
-
{
|
| 248 |
-
"point_id": 7,
|
| 249 |
-
"adjacent_points": [
|
| 250 |
-
6,
|
| 251 |
-
15
|
| 252 |
-
],
|
| 253 |
-
"adjacent_hexes": [
|
| 254 |
-
3
|
| 255 |
-
]
|
| 256 |
-
},
|
| 257 |
-
{
|
| 258 |
-
"point_id": 8,
|
| 259 |
-
"adjacent_points": [
|
| 260 |
-
9,
|
| 261 |
-
18
|
| 262 |
-
],
|
| 263 |
-
"adjacent_hexes": [
|
| 264 |
-
4
|
| 265 |
-
]
|
| 266 |
-
},
|
| 267 |
-
{
|
| 268 |
-
"point_id": 9,
|
| 269 |
-
"adjacent_points": [
|
| 270 |
-
8,
|
| 271 |
-
10,
|
| 272 |
-
1
|
| 273 |
-
],
|
| 274 |
-
"adjacent_hexes": [
|
| 275 |
-
4,
|
| 276 |
-
1
|
| 277 |
-
]
|
| 278 |
-
},
|
| 279 |
-
{
|
| 280 |
-
"point_id": 10,
|
| 281 |
-
"adjacent_points": [
|
| 282 |
-
9,
|
| 283 |
-
11,
|
| 284 |
-
20
|
| 285 |
-
],
|
| 286 |
-
"adjacent_hexes": [
|
| 287 |
-
5,
|
| 288 |
-
4,
|
| 289 |
-
1
|
| 290 |
-
]
|
| 291 |
-
},
|
| 292 |
-
{
|
| 293 |
-
"point_id": 11,
|
| 294 |
-
"adjacent_points": [
|
| 295 |
-
10,
|
| 296 |
-
12,
|
| 297 |
-
3
|
| 298 |
-
],
|
| 299 |
-
"adjacent_hexes": [
|
| 300 |
-
5,
|
| 301 |
-
2,
|
| 302 |
-
1
|
| 303 |
-
]
|
| 304 |
-
},
|
| 305 |
-
{
|
| 306 |
-
"point_id": 12,
|
| 307 |
-
"adjacent_points": [
|
| 308 |
-
11,
|
| 309 |
-
13,
|
| 310 |
-
22
|
| 311 |
-
],
|
| 312 |
-
"adjacent_hexes": [
|
| 313 |
-
6,
|
| 314 |
-
5,
|
| 315 |
-
2
|
| 316 |
-
]
|
| 317 |
-
},
|
| 318 |
-
{
|
| 319 |
-
"point_id": 13,
|
| 320 |
-
"adjacent_points": [
|
| 321 |
-
12,
|
| 322 |
-
14,
|
| 323 |
-
5
|
| 324 |
-
],
|
| 325 |
-
"adjacent_hexes": [
|
| 326 |
-
6,
|
| 327 |
-
3,
|
| 328 |
-
2
|
| 329 |
-
]
|
| 330 |
-
},
|
| 331 |
-
{
|
| 332 |
-
"point_id": 14,
|
| 333 |
-
"adjacent_points": [
|
| 334 |
-
13,
|
| 335 |
-
15,
|
| 336 |
-
24
|
| 337 |
-
],
|
| 338 |
-
"adjacent_hexes": [
|
| 339 |
-
7,
|
| 340 |
-
6,
|
| 341 |
-
3
|
| 342 |
-
]
|
| 343 |
-
},
|
| 344 |
-
{
|
| 345 |
-
"point_id": 15,
|
| 346 |
-
"adjacent_points": [
|
| 347 |
-
14,
|
| 348 |
-
16,
|
| 349 |
-
7
|
| 350 |
-
],
|
| 351 |
-
"adjacent_hexes": [
|
| 352 |
-
7,
|
| 353 |
-
3
|
| 354 |
-
]
|
| 355 |
-
},
|
| 356 |
-
{
|
| 357 |
-
"point_id": 16,
|
| 358 |
-
"adjacent_points": [
|
| 359 |
-
15,
|
| 360 |
-
26
|
| 361 |
-
],
|
| 362 |
-
"adjacent_hexes": [
|
| 363 |
-
7
|
| 364 |
-
]
|
| 365 |
-
},
|
| 366 |
-
{
|
| 367 |
-
"point_id": 17,
|
| 368 |
-
"adjacent_points": [
|
| 369 |
-
18,
|
| 370 |
-
28
|
| 371 |
-
],
|
| 372 |
-
"adjacent_hexes": [
|
| 373 |
-
8
|
| 374 |
-
]
|
| 375 |
-
},
|
| 376 |
-
{
|
| 377 |
-
"point_id": 18,
|
| 378 |
-
"adjacent_points": [
|
| 379 |
-
17,
|
| 380 |
-
19,
|
| 381 |
-
8
|
| 382 |
-
],
|
| 383 |
-
"adjacent_hexes": [
|
| 384 |
-
8,
|
| 385 |
-
4
|
| 386 |
-
]
|
| 387 |
-
},
|
| 388 |
-
{
|
| 389 |
-
"point_id": 19,
|
| 390 |
-
"adjacent_points": [
|
| 391 |
-
18,
|
| 392 |
-
20,
|
| 393 |
-
30
|
| 394 |
-
],
|
| 395 |
-
"adjacent_hexes": [
|
| 396 |
-
9,
|
| 397 |
-
8,
|
| 398 |
-
4
|
| 399 |
-
]
|
| 400 |
-
},
|
| 401 |
-
{
|
| 402 |
-
"point_id": 20,
|
| 403 |
-
"adjacent_points": [
|
| 404 |
-
19,
|
| 405 |
-
21,
|
| 406 |
-
10
|
| 407 |
-
],
|
| 408 |
-
"adjacent_hexes": [
|
| 409 |
-
9,
|
| 410 |
-
5,
|
| 411 |
-
4
|
| 412 |
-
]
|
| 413 |
-
},
|
| 414 |
-
{
|
| 415 |
-
"point_id": 21,
|
| 416 |
-
"adjacent_points": [
|
| 417 |
-
20,
|
| 418 |
-
22,
|
| 419 |
-
32
|
| 420 |
-
],
|
| 421 |
-
"adjacent_hexes": [
|
| 422 |
-
10,
|
| 423 |
-
9,
|
| 424 |
-
5
|
| 425 |
-
]
|
| 426 |
-
},
|
| 427 |
-
{
|
| 428 |
-
"point_id": 22,
|
| 429 |
-
"adjacent_points": [
|
| 430 |
-
21,
|
| 431 |
-
23,
|
| 432 |
-
12
|
| 433 |
-
],
|
| 434 |
-
"adjacent_hexes": [
|
| 435 |
-
10,
|
| 436 |
-
6,
|
| 437 |
-
5
|
| 438 |
-
]
|
| 439 |
-
},
|
| 440 |
-
{
|
| 441 |
-
"point_id": 23,
|
| 442 |
-
"adjacent_points": [
|
| 443 |
-
22,
|
| 444 |
-
24,
|
| 445 |
-
34
|
| 446 |
-
],
|
| 447 |
-
"adjacent_hexes": [
|
| 448 |
-
11,
|
| 449 |
-
10,
|
| 450 |
-
6
|
| 451 |
-
]
|
| 452 |
-
},
|
| 453 |
-
{
|
| 454 |
-
"point_id": 24,
|
| 455 |
-
"adjacent_points": [
|
| 456 |
-
23,
|
| 457 |
-
25,
|
| 458 |
-
14
|
| 459 |
-
],
|
| 460 |
-
"adjacent_hexes": [
|
| 461 |
-
11,
|
| 462 |
-
7,
|
| 463 |
-
6
|
| 464 |
-
]
|
| 465 |
-
},
|
| 466 |
-
{
|
| 467 |
-
"point_id": 25,
|
| 468 |
-
"adjacent_points": [
|
| 469 |
-
24,
|
| 470 |
-
26,
|
| 471 |
-
36
|
| 472 |
-
],
|
| 473 |
-
"adjacent_hexes": [
|
| 474 |
-
12,
|
| 475 |
-
11,
|
| 476 |
-
7
|
| 477 |
-
]
|
| 478 |
-
},
|
| 479 |
-
{
|
| 480 |
-
"point_id": 26,
|
| 481 |
-
"adjacent_points": [
|
| 482 |
-
25,
|
| 483 |
-
27,
|
| 484 |
-
16
|
| 485 |
-
],
|
| 486 |
-
"adjacent_hexes": [
|
| 487 |
-
12,
|
| 488 |
-
7
|
| 489 |
-
]
|
| 490 |
-
},
|
| 491 |
-
{
|
| 492 |
-
"point_id": 27,
|
| 493 |
-
"adjacent_points": [
|
| 494 |
-
26,
|
| 495 |
-
38
|
| 496 |
-
],
|
| 497 |
-
"adjacent_hexes": [
|
| 498 |
-
12
|
| 499 |
-
]
|
| 500 |
-
},
|
| 501 |
-
{
|
| 502 |
-
"point_id": 28,
|
| 503 |
-
"adjacent_points": [
|
| 504 |
-
29,
|
| 505 |
-
17
|
| 506 |
-
],
|
| 507 |
-
"adjacent_hexes": [
|
| 508 |
-
8
|
| 509 |
-
]
|
| 510 |
-
},
|
| 511 |
-
{
|
| 512 |
-
"point_id": 29,
|
| 513 |
-
"adjacent_points": [
|
| 514 |
-
28,
|
| 515 |
-
30,
|
| 516 |
-
39
|
| 517 |
-
],
|
| 518 |
-
"adjacent_hexes": [
|
| 519 |
-
13,
|
| 520 |
-
8
|
| 521 |
-
]
|
| 522 |
-
},
|
| 523 |
-
{
|
| 524 |
-
"point_id": 30,
|
| 525 |
-
"adjacent_points": [
|
| 526 |
-
29,
|
| 527 |
-
31,
|
| 528 |
-
19
|
| 529 |
-
],
|
| 530 |
-
"adjacent_hexes": [
|
| 531 |
-
13,
|
| 532 |
-
9,
|
| 533 |
-
8
|
| 534 |
-
]
|
| 535 |
-
},
|
| 536 |
-
{
|
| 537 |
-
"point_id": 31,
|
| 538 |
-
"adjacent_points": [
|
| 539 |
-
30,
|
| 540 |
-
32,
|
| 541 |
-
41
|
| 542 |
-
],
|
| 543 |
-
"adjacent_hexes": [
|
| 544 |
-
14,
|
| 545 |
-
13,
|
| 546 |
-
9
|
| 547 |
-
]
|
| 548 |
-
},
|
| 549 |
-
{
|
| 550 |
-
"point_id": 32,
|
| 551 |
-
"adjacent_points": [
|
| 552 |
-
31,
|
| 553 |
-
33,
|
| 554 |
-
21
|
| 555 |
-
],
|
| 556 |
-
"adjacent_hexes": [
|
| 557 |
-
14,
|
| 558 |
-
10,
|
| 559 |
-
9
|
| 560 |
-
]
|
| 561 |
-
},
|
| 562 |
-
{
|
| 563 |
-
"point_id": 33,
|
| 564 |
-
"adjacent_points": [
|
| 565 |
-
32,
|
| 566 |
-
34,
|
| 567 |
-
43
|
| 568 |
-
],
|
| 569 |
-
"adjacent_hexes": [
|
| 570 |
-
15,
|
| 571 |
-
14,
|
| 572 |
-
10
|
| 573 |
-
]
|
| 574 |
-
},
|
| 575 |
-
{
|
| 576 |
-
"point_id": 34,
|
| 577 |
-
"adjacent_points": [
|
| 578 |
-
33,
|
| 579 |
-
35,
|
| 580 |
-
23
|
| 581 |
-
],
|
| 582 |
-
"adjacent_hexes": [
|
| 583 |
-
15,
|
| 584 |
-
11,
|
| 585 |
-
10
|
| 586 |
-
]
|
| 587 |
-
},
|
| 588 |
-
{
|
| 589 |
-
"point_id": 35,
|
| 590 |
-
"adjacent_points": [
|
| 591 |
-
34,
|
| 592 |
-
36,
|
| 593 |
-
45
|
| 594 |
-
],
|
| 595 |
-
"adjacent_hexes": [
|
| 596 |
-
16,
|
| 597 |
-
15,
|
| 598 |
-
11
|
| 599 |
-
]
|
| 600 |
-
},
|
| 601 |
-
{
|
| 602 |
-
"point_id": 36,
|
| 603 |
-
"adjacent_points": [
|
| 604 |
-
35,
|
| 605 |
-
37,
|
| 606 |
-
25
|
| 607 |
-
],
|
| 608 |
-
"adjacent_hexes": [
|
| 609 |
-
16,
|
| 610 |
-
12,
|
| 611 |
-
11
|
| 612 |
-
]
|
| 613 |
-
},
|
| 614 |
-
{
|
| 615 |
-
"point_id": 37,
|
| 616 |
-
"adjacent_points": [
|
| 617 |
-
36,
|
| 618 |
-
38,
|
| 619 |
-
47
|
| 620 |
-
],
|
| 621 |
-
"adjacent_hexes": [
|
| 622 |
-
16,
|
| 623 |
-
12
|
| 624 |
-
]
|
| 625 |
-
},
|
| 626 |
-
{
|
| 627 |
-
"point_id": 38,
|
| 628 |
-
"adjacent_points": [
|
| 629 |
-
37,
|
| 630 |
-
27
|
| 631 |
-
],
|
| 632 |
-
"adjacent_hexes": [
|
| 633 |
-
12
|
| 634 |
-
]
|
| 635 |
-
},
|
| 636 |
-
{
|
| 637 |
-
"point_id": 39,
|
| 638 |
-
"adjacent_points": [
|
| 639 |
-
40,
|
| 640 |
-
29
|
| 641 |
-
],
|
| 642 |
-
"adjacent_hexes": [
|
| 643 |
-
13
|
| 644 |
-
]
|
| 645 |
-
},
|
| 646 |
-
{
|
| 647 |
-
"point_id": 40,
|
| 648 |
-
"adjacent_points": [
|
| 649 |
-
39,
|
| 650 |
-
41,
|
| 651 |
-
48
|
| 652 |
-
],
|
| 653 |
-
"adjacent_hexes": [
|
| 654 |
-
17,
|
| 655 |
-
13
|
| 656 |
-
]
|
| 657 |
-
},
|
| 658 |
-
{
|
| 659 |
-
"point_id": 41,
|
| 660 |
-
"adjacent_points": [
|
| 661 |
-
40,
|
| 662 |
-
42,
|
| 663 |
-
31
|
| 664 |
-
],
|
| 665 |
-
"adjacent_hexes": [
|
| 666 |
-
17,
|
| 667 |
-
14,
|
| 668 |
-
13
|
| 669 |
-
]
|
| 670 |
-
},
|
| 671 |
-
{
|
| 672 |
-
"point_id": 42,
|
| 673 |
-
"adjacent_points": [
|
| 674 |
-
41,
|
| 675 |
-
43,
|
| 676 |
-
50
|
| 677 |
-
],
|
| 678 |
-
"adjacent_hexes": [
|
| 679 |
-
18,
|
| 680 |
-
17,
|
| 681 |
-
14
|
| 682 |
-
]
|
| 683 |
-
},
|
| 684 |
-
{
|
| 685 |
-
"point_id": 43,
|
| 686 |
-
"adjacent_points": [
|
| 687 |
-
42,
|
| 688 |
-
44,
|
| 689 |
-
33
|
| 690 |
-
],
|
| 691 |
-
"adjacent_hexes": [
|
| 692 |
-
18,
|
| 693 |
-
15,
|
| 694 |
-
14
|
| 695 |
-
]
|
| 696 |
-
},
|
| 697 |
-
{
|
| 698 |
-
"point_id": 44,
|
| 699 |
-
"adjacent_points": [
|
| 700 |
-
43,
|
| 701 |
-
45,
|
| 702 |
-
52
|
| 703 |
-
],
|
| 704 |
-
"adjacent_hexes": [
|
| 705 |
-
19,
|
| 706 |
-
18,
|
| 707 |
-
15
|
| 708 |
-
]
|
| 709 |
-
},
|
| 710 |
-
{
|
| 711 |
-
"point_id": 45,
|
| 712 |
-
"adjacent_points": [
|
| 713 |
-
44,
|
| 714 |
-
46,
|
| 715 |
-
35
|
| 716 |
-
],
|
| 717 |
-
"adjacent_hexes": [
|
| 718 |
-
19,
|
| 719 |
-
16,
|
| 720 |
-
15
|
| 721 |
-
]
|
| 722 |
-
},
|
| 723 |
-
{
|
| 724 |
-
"point_id": 46,
|
| 725 |
-
"adjacent_points": [
|
| 726 |
-
45,
|
| 727 |
-
47,
|
| 728 |
-
54
|
| 729 |
-
],
|
| 730 |
-
"adjacent_hexes": [
|
| 731 |
-
19,
|
| 732 |
-
16
|
| 733 |
-
]
|
| 734 |
-
},
|
| 735 |
-
{
|
| 736 |
-
"point_id": 47,
|
| 737 |
-
"adjacent_points": [
|
| 738 |
-
46,
|
| 739 |
-
37
|
| 740 |
-
],
|
| 741 |
-
"adjacent_hexes": [
|
| 742 |
-
16
|
| 743 |
-
]
|
| 744 |
-
},
|
| 745 |
-
{
|
| 746 |
-
"point_id": 48,
|
| 747 |
-
"adjacent_points": [
|
| 748 |
-
49,
|
| 749 |
-
40
|
| 750 |
-
],
|
| 751 |
-
"adjacent_hexes": [
|
| 752 |
-
17
|
| 753 |
-
]
|
| 754 |
-
},
|
| 755 |
-
{
|
| 756 |
-
"point_id": 49,
|
| 757 |
-
"adjacent_points": [
|
| 758 |
-
48,
|
| 759 |
-
50
|
| 760 |
-
],
|
| 761 |
-
"adjacent_hexes": [
|
| 762 |
-
17
|
| 763 |
-
]
|
| 764 |
-
},
|
| 765 |
-
{
|
| 766 |
-
"point_id": 50,
|
| 767 |
-
"adjacent_points": [
|
| 768 |
-
49,
|
| 769 |
-
51,
|
| 770 |
-
42
|
| 771 |
-
],
|
| 772 |
-
"adjacent_hexes": [
|
| 773 |
-
18,
|
| 774 |
-
17
|
| 775 |
-
]
|
| 776 |
-
},
|
| 777 |
-
{
|
| 778 |
-
"point_id": 51,
|
| 779 |
-
"adjacent_points": [
|
| 780 |
-
50,
|
| 781 |
-
52
|
| 782 |
-
],
|
| 783 |
-
"adjacent_hexes": [
|
| 784 |
-
18
|
| 785 |
-
]
|
| 786 |
-
},
|
| 787 |
-
{
|
| 788 |
-
"point_id": 52,
|
| 789 |
-
"adjacent_points": [
|
| 790 |
-
51,
|
| 791 |
-
53,
|
| 792 |
-
44
|
| 793 |
-
],
|
| 794 |
-
"adjacent_hexes": [
|
| 795 |
-
19,
|
| 796 |
-
18
|
| 797 |
-
]
|
| 798 |
-
},
|
| 799 |
-
{
|
| 800 |
-
"point_id": 53,
|
| 801 |
-
"adjacent_points": [
|
| 802 |
-
52,
|
| 803 |
-
54
|
| 804 |
-
],
|
| 805 |
-
"adjacent_hexes": [
|
| 806 |
-
19
|
| 807 |
-
]
|
| 808 |
-
},
|
| 809 |
-
{
|
| 810 |
-
"point_id": 54,
|
| 811 |
-
"adjacent_points": [
|
| 812 |
-
53,
|
| 813 |
-
46
|
| 814 |
-
],
|
| 815 |
-
"adjacent_hexes": [
|
| 816 |
-
19
|
| 817 |
-
]
|
| 818 |
-
}
|
| 819 |
-
]
|
| 820 |
-
}
|
| 821 |
-
]
|
| 822 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
examples/ai_testing/play_and_capture.py
CHANGED
|
@@ -21,6 +21,25 @@ from pycatan.management import game_manager as gm_module
|
|
| 21 |
captured_states = []
|
| 22 |
original_update_state = None
|
| 23 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 24 |
|
| 25 |
def capturing_wrapper(original_method):
|
| 26 |
"""Wrap the display_game_state method to capture all calls."""
|
|
@@ -36,6 +55,10 @@ def capturing_wrapper(original_method):
|
|
| 36 |
state_copy = json.loads(json.dumps(viz.current_game_state))
|
| 37 |
captured_states.append(state_copy)
|
| 38 |
print(f"[✅ Captured state #{len(captured_states)}]", flush=True)
|
|
|
|
|
|
|
|
|
|
|
|
|
| 39 |
break # Only capture once per update
|
| 40 |
except (TypeError, AttributeError) as e:
|
| 41 |
# Skip if not serializable
|
|
@@ -114,6 +137,7 @@ def save_all_states():
|
|
| 114 |
print(f" 📁 Full history: {history_file}")
|
| 115 |
print(f" 📄 Final state: {final_file}")
|
| 116 |
print(f" 📌 Quick access: {sample_file}")
|
|
|
|
| 117 |
print("\n" + "="*80)
|
| 118 |
|
| 119 |
# Print summary
|
|
@@ -152,8 +176,10 @@ def main():
|
|
| 152 |
print("="*80)
|
| 153 |
print("🎮 CATAN WITH GUARANTEED STATE CAPTURE")
|
| 154 |
print("="*80)
|
| 155 |
-
print("\
|
| 156 |
-
print("
|
|
|
|
|
|
|
| 157 |
print("="*80 + "\n")
|
| 158 |
|
| 159 |
# Patch the VisualizationManager's display_game_state
|
|
@@ -176,6 +202,9 @@ def main():
|
|
| 176 |
state_copy = json.loads(json.dumps(self.current_game_state))
|
| 177 |
captured_states.append(state_copy)
|
| 178 |
print(f"[✅ Captured state #{len(captured_states)}]", flush=True)
|
|
|
|
|
|
|
|
|
|
| 179 |
|
| 180 |
return result
|
| 181 |
|
|
|
|
| 21 |
captured_states = []
|
| 22 |
original_update_state = None
|
| 23 |
|
| 24 |
+
# Output directory for states
|
| 25 |
+
OUTPUT_DIR = Path('examples/ai_testing/my_games')
|
| 26 |
+
CURRENT_STATE_FILE = OUTPUT_DIR / 'current_state.json'
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
def save_current_state(state):
|
| 30 |
+
"""Save the current state to a file (updated in real-time)."""
|
| 31 |
+
try:
|
| 32 |
+
OUTPUT_DIR.mkdir(exist_ok=True)
|
| 33 |
+
cleaned = clean_state_for_llm(state)
|
| 34 |
+
with open(CURRENT_STATE_FILE, 'w', encoding='utf-8') as f:
|
| 35 |
+
json.dump({
|
| 36 |
+
'timestamp': datetime.now().isoformat(),
|
| 37 |
+
'state_number': len(captured_states),
|
| 38 |
+
'state': cleaned
|
| 39 |
+
}, f, indent=2, ensure_ascii=False)
|
| 40 |
+
except Exception as e:
|
| 41 |
+
print(f"[⚠️ Failed to save current state: {e}]", flush=True)
|
| 42 |
+
|
| 43 |
|
| 44 |
def capturing_wrapper(original_method):
|
| 45 |
"""Wrap the display_game_state method to capture all calls."""
|
|
|
|
| 55 |
state_copy = json.loads(json.dumps(viz.current_game_state))
|
| 56 |
captured_states.append(state_copy)
|
| 57 |
print(f"[✅ Captured state #{len(captured_states)}]", flush=True)
|
| 58 |
+
|
| 59 |
+
# Save current state to file (real-time update)
|
| 60 |
+
save_current_state(state_copy)
|
| 61 |
+
|
| 62 |
break # Only capture once per update
|
| 63 |
except (TypeError, AttributeError) as e:
|
| 64 |
# Skip if not serializable
|
|
|
|
| 137 |
print(f" 📁 Full history: {history_file}")
|
| 138 |
print(f" 📄 Final state: {final_file}")
|
| 139 |
print(f" 📌 Quick access: {sample_file}")
|
| 140 |
+
print(f" 🔄 Real-time: {CURRENT_STATE_FILE} (updated during game)")
|
| 141 |
print("\n" + "="*80)
|
| 142 |
|
| 143 |
# Print summary
|
|
|
|
| 176 |
print("="*80)
|
| 177 |
print("🎮 CATAN WITH GUARANTEED STATE CAPTURE")
|
| 178 |
print("="*80)
|
| 179 |
+
print("\n📝 Every game action will be automatically saved!")
|
| 180 |
+
print(f"🔄 Real-time state: {CURRENT_STATE_FILE}")
|
| 181 |
+
print("💾 Full history saved at end of game")
|
| 182 |
+
print("⌨️ Press Ctrl+C anytime to stop and save.")
|
| 183 |
print("="*80 + "\n")
|
| 184 |
|
| 185 |
# Patch the VisualizationManager's display_game_state
|
|
|
|
| 202 |
state_copy = json.loads(json.dumps(self.current_game_state))
|
| 203 |
captured_states.append(state_copy)
|
| 204 |
print(f"[✅ Captured state #{len(captured_states)}]", flush=True)
|
| 205 |
+
|
| 206 |
+
# Save current state to file (real-time update)
|
| 207 |
+
save_current_state(state_copy)
|
| 208 |
|
| 209 |
return result
|
| 210 |
|
examples/ai_testing/sample_states/captured_game.json
CHANGED
|
@@ -115,21 +115,158 @@
|
|
| 115 |
"has_robber": false
|
| 116 |
}
|
| 117 |
],
|
| 118 |
-
"settlements": [
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 119 |
"cities": [],
|
| 120 |
-
"roads": [
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 121 |
"players": [
|
| 122 |
{
|
| 123 |
"id": 0,
|
| 124 |
"name": "a",
|
| 125 |
-
"victory_points":
|
| 126 |
-
"total_cards":
|
| 127 |
-
"cards_list": [
|
|
|
|
|
|
|
|
|
|
|
|
|
| 128 |
"dev_cards_list": [],
|
| 129 |
-
"settlements":
|
| 130 |
"cities": 0,
|
| 131 |
-
"roads":
|
| 132 |
-
"longest_road":
|
| 133 |
"has_longest_road": false,
|
| 134 |
"knights": 0,
|
| 135 |
"knights_played": 0,
|
|
@@ -138,14 +275,19 @@
|
|
| 138 |
{
|
| 139 |
"id": 1,
|
| 140 |
"name": "b",
|
| 141 |
-
"victory_points":
|
| 142 |
-
"total_cards":
|
| 143 |
-
"cards_list": [
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 144 |
"dev_cards_list": [],
|
| 145 |
-
"settlements":
|
| 146 |
"cities": 0,
|
| 147 |
-
"roads":
|
| 148 |
-
"longest_road":
|
| 149 |
"has_longest_road": false,
|
| 150 |
"knights": 0,
|
| 151 |
"knights_played": 0,
|
|
@@ -154,22 +296,26 @@
|
|
| 154 |
{
|
| 155 |
"id": 2,
|
| 156 |
"name": "c",
|
| 157 |
-
"victory_points":
|
| 158 |
-
"total_cards":
|
| 159 |
-
"cards_list": [
|
|
|
|
|
|
|
|
|
|
|
|
|
| 160 |
"dev_cards_list": [],
|
| 161 |
-
"settlements":
|
| 162 |
"cities": 0,
|
| 163 |
-
"roads":
|
| 164 |
-
"longest_road":
|
| 165 |
"has_longest_road": false,
|
| 166 |
"knights": 0,
|
| 167 |
"knights_played": 0,
|
| 168 |
"has_largest_army": false
|
| 169 |
}
|
| 170 |
],
|
| 171 |
-
"current_player":
|
| 172 |
-
"current_phase": "
|
| 173 |
"robber_position": [
|
| 174 |
2,
|
| 175 |
2
|
|
|
|
| 115 |
"has_robber": false
|
| 116 |
}
|
| 117 |
],
|
| 118 |
+
"settlements": [
|
| 119 |
+
{
|
| 120 |
+
"id": "b_10",
|
| 121 |
+
"vertex": 10,
|
| 122 |
+
"player": 1
|
| 123 |
+
},
|
| 124 |
+
{
|
| 125 |
+
"id": "b_14",
|
| 126 |
+
"vertex": 14,
|
| 127 |
+
"player": 2
|
| 128 |
+
},
|
| 129 |
+
{
|
| 130 |
+
"id": "b_31",
|
| 131 |
+
"vertex": 31,
|
| 132 |
+
"player": 3
|
| 133 |
+
},
|
| 134 |
+
{
|
| 135 |
+
"id": "b_36",
|
| 136 |
+
"vertex": 36,
|
| 137 |
+
"player": 2
|
| 138 |
+
},
|
| 139 |
+
{
|
| 140 |
+
"id": "b_40",
|
| 141 |
+
"vertex": 40,
|
| 142 |
+
"player": 1
|
| 143 |
+
},
|
| 144 |
+
{
|
| 145 |
+
"id": "b_44",
|
| 146 |
+
"vertex": 44,
|
| 147 |
+
"player": 3
|
| 148 |
+
}
|
| 149 |
+
],
|
| 150 |
"cities": [],
|
| 151 |
+
"roads": [
|
| 152 |
+
{
|
| 153 |
+
"id": 1,
|
| 154 |
+
"from": 10,
|
| 155 |
+
"to": 11,
|
| 156 |
+
"player": 1
|
| 157 |
+
},
|
| 158 |
+
{
|
| 159 |
+
"id": 2,
|
| 160 |
+
"from": 14,
|
| 161 |
+
"to": 13,
|
| 162 |
+
"player": 2
|
| 163 |
+
},
|
| 164 |
+
{
|
| 165 |
+
"id": 3,
|
| 166 |
+
"from": 31,
|
| 167 |
+
"to": 30,
|
| 168 |
+
"player": 3
|
| 169 |
+
},
|
| 170 |
+
{
|
| 171 |
+
"id": 4,
|
| 172 |
+
"from": 44,
|
| 173 |
+
"to": 43,
|
| 174 |
+
"player": 3
|
| 175 |
+
},
|
| 176 |
+
{
|
| 177 |
+
"id": 5,
|
| 178 |
+
"from": 36,
|
| 179 |
+
"to": 35,
|
| 180 |
+
"player": 2
|
| 181 |
+
},
|
| 182 |
+
{
|
| 183 |
+
"id": 6,
|
| 184 |
+
"from": 40,
|
| 185 |
+
"to": 41,
|
| 186 |
+
"player": 1
|
| 187 |
+
}
|
| 188 |
+
],
|
| 189 |
+
"harbors": [
|
| 190 |
+
{
|
| 191 |
+
"id": 1,
|
| 192 |
+
"type": "any",
|
| 193 |
+
"ratio": 3,
|
| 194 |
+
"point_one": 9,
|
| 195 |
+
"point_two": 8
|
| 196 |
+
},
|
| 197 |
+
{
|
| 198 |
+
"id": 2,
|
| 199 |
+
"type": "sheep",
|
| 200 |
+
"ratio": 2,
|
| 201 |
+
"point_one": 17,
|
| 202 |
+
"point_two": 28
|
| 203 |
+
},
|
| 204 |
+
{
|
| 205 |
+
"id": 3,
|
| 206 |
+
"type": "wood",
|
| 207 |
+
"ratio": 2,
|
| 208 |
+
"point_one": 40,
|
| 209 |
+
"point_two": 48
|
| 210 |
+
},
|
| 211 |
+
{
|
| 212 |
+
"id": 4,
|
| 213 |
+
"type": "any",
|
| 214 |
+
"ratio": 3,
|
| 215 |
+
"point_one": 50,
|
| 216 |
+
"point_two": 51
|
| 217 |
+
},
|
| 218 |
+
{
|
| 219 |
+
"id": 5,
|
| 220 |
+
"type": "any",
|
| 221 |
+
"ratio": 3,
|
| 222 |
+
"point_one": 53,
|
| 223 |
+
"point_two": 54
|
| 224 |
+
},
|
| 225 |
+
{
|
| 226 |
+
"id": 6,
|
| 227 |
+
"type": "any",
|
| 228 |
+
"ratio": 3,
|
| 229 |
+
"point_one": 37,
|
| 230 |
+
"point_two": 38
|
| 231 |
+
},
|
| 232 |
+
{
|
| 233 |
+
"id": 7,
|
| 234 |
+
"type": "ore",
|
| 235 |
+
"ratio": 2,
|
| 236 |
+
"point_one": 26,
|
| 237 |
+
"point_two": 16
|
| 238 |
+
},
|
| 239 |
+
{
|
| 240 |
+
"id": 8,
|
| 241 |
+
"type": "brick",
|
| 242 |
+
"ratio": 2,
|
| 243 |
+
"point_one": 7,
|
| 244 |
+
"point_two": 6
|
| 245 |
+
},
|
| 246 |
+
{
|
| 247 |
+
"id": 9,
|
| 248 |
+
"type": "wheat",
|
| 249 |
+
"ratio": 2,
|
| 250 |
+
"point_one": 3,
|
| 251 |
+
"point_two": 2
|
| 252 |
+
}
|
| 253 |
+
],
|
| 254 |
"players": [
|
| 255 |
{
|
| 256 |
"id": 0,
|
| 257 |
"name": "a",
|
| 258 |
+
"victory_points": 2,
|
| 259 |
+
"total_cards": 3,
|
| 260 |
+
"cards_list": [
|
| 261 |
+
"ore",
|
| 262 |
+
"brick",
|
| 263 |
+
"sheep"
|
| 264 |
+
],
|
| 265 |
"dev_cards_list": [],
|
| 266 |
+
"settlements": 2,
|
| 267 |
"cities": 0,
|
| 268 |
+
"roads": 2,
|
| 269 |
+
"longest_road": 1,
|
| 270 |
"has_longest_road": false,
|
| 271 |
"knights": 0,
|
| 272 |
"knights_played": 0,
|
|
|
|
| 275 |
{
|
| 276 |
"id": 1,
|
| 277 |
"name": "b",
|
| 278 |
+
"victory_points": 2,
|
| 279 |
+
"total_cards": 4,
|
| 280 |
+
"cards_list": [
|
| 281 |
+
"sheep",
|
| 282 |
+
"sheep",
|
| 283 |
+
"ore",
|
| 284 |
+
"wheat"
|
| 285 |
+
],
|
| 286 |
"dev_cards_list": [],
|
| 287 |
+
"settlements": 2,
|
| 288 |
"cities": 0,
|
| 289 |
+
"roads": 2,
|
| 290 |
+
"longest_road": 1,
|
| 291 |
"has_longest_road": false,
|
| 292 |
"knights": 0,
|
| 293 |
"knights_played": 0,
|
|
|
|
| 296 |
{
|
| 297 |
"id": 2,
|
| 298 |
"name": "c",
|
| 299 |
+
"victory_points": 2,
|
| 300 |
+
"total_cards": 3,
|
| 301 |
+
"cards_list": [
|
| 302 |
+
"ore",
|
| 303 |
+
"wheat",
|
| 304 |
+
"wheat"
|
| 305 |
+
],
|
| 306 |
"dev_cards_list": [],
|
| 307 |
+
"settlements": 2,
|
| 308 |
"cities": 0,
|
| 309 |
+
"roads": 2,
|
| 310 |
+
"longest_road": 1,
|
| 311 |
"has_longest_road": false,
|
| 312 |
"knights": 0,
|
| 313 |
"knights_played": 0,
|
| 314 |
"has_largest_army": false
|
| 315 |
}
|
| 316 |
],
|
| 317 |
+
"current_player": 1,
|
| 318 |
+
"current_phase": "NORMAL_PLAY",
|
| 319 |
"robber_position": [
|
| 320 |
2,
|
| 321 |
2
|
pycatan/core/game.py
CHANGED
|
@@ -483,10 +483,23 @@ class Game:
|
|
| 483 |
ports = []
|
| 484 |
for harbor in self.board.harbors:
|
| 485 |
if harbor:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 486 |
port_info = {
|
| 487 |
-
'
|
|
|
|
| 488 |
'resource': harbor.type.name.lower() if hasattr(harbor.type, 'name') else 'any',
|
| 489 |
-
'ratio':
|
| 490 |
}
|
| 491 |
ports.append(port_info)
|
| 492 |
return ports
|
|
|
|
| 483 |
ports = []
|
| 484 |
for harbor in self.board.harbors:
|
| 485 |
if harbor:
|
| 486 |
+
# Get point coordinates for harbor location
|
| 487 |
+
point_one_coords = harbor.point_one.position if hasattr(harbor.point_one, 'position') else [0, 0]
|
| 488 |
+
point_two_coords = harbor.point_two.position if hasattr(harbor.point_two, 'position') else [0, 0]
|
| 489 |
+
|
| 490 |
+
# Convert points to point IDs using BoardDefinition
|
| 491 |
+
from pycatan.config.board_definition import board_definition
|
| 492 |
+
point_one_id = board_definition.game_coords_to_point_id(point_one_coords[0], point_one_coords[1])
|
| 493 |
+
point_two_id = board_definition.game_coords_to_point_id(point_two_coords[0], point_two_coords[1])
|
| 494 |
+
|
| 495 |
+
# Determine ratio based on harbor type
|
| 496 |
+
ratio = 2 if harbor.type.name.lower() != 'any' else 3
|
| 497 |
+
|
| 498 |
port_info = {
|
| 499 |
+
'point_one': point_one_id,
|
| 500 |
+
'point_two': point_two_id,
|
| 501 |
'resource': harbor.type.name.lower() if hasattr(harbor.type, 'name') else 'any',
|
| 502 |
+
'ratio': ratio
|
| 503 |
}
|
| 504 |
ports.append(port_info)
|
| 505 |
return ports
|
pycatan/static/css/style.css
CHANGED
|
@@ -220,6 +220,20 @@ h1 {
|
|
| 220 |
pointer-events: none;
|
| 221 |
}
|
| 222 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 223 |
/* יישובים */
|
| 224 |
.settlement {
|
| 225 |
stroke: #2c3e50;
|
|
|
|
| 220 |
pointer-events: none;
|
| 221 |
}
|
| 222 |
|
| 223 |
+
/* נמלים */
|
| 224 |
+
.harbor {
|
| 225 |
+
pointer-events: none;
|
| 226 |
+
}
|
| 227 |
+
|
| 228 |
+
.harbor circle {
|
| 229 |
+
filter: drop-shadow(2px 2px 4px rgba(0,0,0,0.4));
|
| 230 |
+
}
|
| 231 |
+
|
| 232 |
+
.harbor text {
|
| 233 |
+
pointer-events: none;
|
| 234 |
+
user-select: none;
|
| 235 |
+
}
|
| 236 |
+
|
| 237 |
/* יישובים */
|
| 238 |
.settlement {
|
| 239 |
stroke: #2c3e50;
|
pycatan/static/js/board.js
CHANGED
|
@@ -527,6 +527,128 @@ class CatanBoard {
|
|
| 527 |
this.svg.appendChild(line);
|
| 528 |
}
|
| 529 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 530 |
// Update board from game state (called when receiving updates from server)
|
| 531 |
updateFromGameState(gameState) {
|
| 532 |
console.log('Updating board from game state:', gameState);
|
|
@@ -551,6 +673,14 @@ class CatanBoard {
|
|
| 551 |
// Create vertices
|
| 552 |
this.createVertices();
|
| 553 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 554 |
// Add buildings from server data
|
| 555 |
this.updateBuildings(gameState);
|
| 556 |
this.updateRobberFromGameState(gameState);
|
|
|
|
| 527 |
this.svg.appendChild(line);
|
| 528 |
}
|
| 529 |
|
| 530 |
+
createHarbor(harbor) {
|
| 531 |
+
// Harbor is positioned on an edge between two points
|
| 532 |
+
// We'll place it at the midpoint between the two vertices
|
| 533 |
+
|
| 534 |
+
// Harbor types: 'wood', 'sheep', 'brick', 'wheat', 'ore', 'any'
|
| 535 |
+
// Harbor ratios: 2 (for specific resource) or 3 (for any resource)
|
| 536 |
+
|
| 537 |
+
const harborTypeColors = {
|
| 538 |
+
'wood': '#228B22', // Forest Green
|
| 539 |
+
'sheep': '#90EE90', // Light Green
|
| 540 |
+
'brick': '#CD5C5C', // Indian Red
|
| 541 |
+
'wheat': '#FFD700', // Gold
|
| 542 |
+
'ore': '#696969', // Dim Gray
|
| 543 |
+
'any': '#4169E1' // Royal Blue
|
| 544 |
+
};
|
| 545 |
+
|
| 546 |
+
const harborTypeIcons = {
|
| 547 |
+
'wood': '🌲',
|
| 548 |
+
'sheep': '🐑',
|
| 549 |
+
'brick': '🧱',
|
| 550 |
+
'wheat': '🌾',
|
| 551 |
+
'ore': '⛰️',
|
| 552 |
+
'any': '🏪'
|
| 553 |
+
};
|
| 554 |
+
|
| 555 |
+
// Find the two vertices for this harbor
|
| 556 |
+
const pointOne = this.getVertexByPointId(harbor.point_one);
|
| 557 |
+
const pointTwo = this.getVertexByPointId(harbor.point_two);
|
| 558 |
+
|
| 559 |
+
if (!pointOne || !pointTwo) {
|
| 560 |
+
console.warn(`Could not find vertices for harbor ${harbor.id}: points ${harbor.point_one} and ${harbor.point_two}`);
|
| 561 |
+
return;
|
| 562 |
+
}
|
| 563 |
+
|
| 564 |
+
// Calculate midpoint between the two vertices
|
| 565 |
+
const midX = (pointOne.x + pointTwo.x) / 2;
|
| 566 |
+
const midY = (pointOne.y + pointTwo.y) / 2;
|
| 567 |
+
|
| 568 |
+
// Calculate direction vector to push harbor outward from the board
|
| 569 |
+
const centerX = this.centerX;
|
| 570 |
+
const centerY = this.centerY;
|
| 571 |
+
const dx = midX - centerX;
|
| 572 |
+
const dy = midY - centerY;
|
| 573 |
+
const dist = Math.sqrt(dx * dx + dy * dy);
|
| 574 |
+
|
| 575 |
+
// Push harbor 45 pixels outward from the center
|
| 576 |
+
const offsetDist = 45;
|
| 577 |
+
const x = midX + (dx / dist) * offsetDist;
|
| 578 |
+
const y = midY + (dy / dist) * offsetDist;
|
| 579 |
+
|
| 580 |
+
// Create harbor group
|
| 581 |
+
const harborGroup = document.createElementNS('http://www.w3.org/2000/svg', 'g');
|
| 582 |
+
harborGroup.setAttribute('class', 'harbor');
|
| 583 |
+
harborGroup.setAttribute('data-harbor-id', harbor.id);
|
| 584 |
+
harborGroup.setAttribute('data-harbor-type', harbor.type);
|
| 585 |
+
harborGroup.setAttribute('data-point-one', harbor.point_one);
|
| 586 |
+
harborGroup.setAttribute('data-point-two', harbor.point_two);
|
| 587 |
+
|
| 588 |
+
// Create harbor circle background
|
| 589 |
+
const circle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');
|
| 590 |
+
circle.setAttribute('cx', x);
|
| 591 |
+
circle.setAttribute('cy', y);
|
| 592 |
+
circle.setAttribute('r', 16);
|
| 593 |
+
circle.setAttribute('fill', harborTypeColors[harbor.type] || '#4169E1');
|
| 594 |
+
circle.setAttribute('stroke', 'white');
|
| 595 |
+
circle.setAttribute('stroke-width', 2.5);
|
| 596 |
+
circle.setAttribute('opacity', '0.95');
|
| 597 |
+
|
| 598 |
+
// Create harbor icon/text
|
| 599 |
+
const text = document.createElementNS('http://www.w3.org/2000/svg', 'text');
|
| 600 |
+
text.setAttribute('x', x);
|
| 601 |
+
text.setAttribute('y', y + 5);
|
| 602 |
+
text.setAttribute('text-anchor', 'middle');
|
| 603 |
+
text.setAttribute('fill', 'white');
|
| 604 |
+
text.setAttribute('font-size', '14');
|
| 605 |
+
text.textContent = harborTypeIcons[harbor.type] || '🏪';
|
| 606 |
+
|
| 607 |
+
// Create harbor ratio text (smaller, below the circle)
|
| 608 |
+
const ratioText = document.createElementNS('http://www.w3.org/2000/svg', 'text');
|
| 609 |
+
ratioText.setAttribute('x', x);
|
| 610 |
+
ratioText.setAttribute('y', y + 26);
|
| 611 |
+
ratioText.setAttribute('text-anchor', 'middle');
|
| 612 |
+
ratioText.setAttribute('fill', 'white');
|
| 613 |
+
ratioText.setAttribute('font-size', '8');
|
| 614 |
+
ratioText.setAttribute('font-weight', 'bold');
|
| 615 |
+
ratioText.textContent = `${harbor.ratio}:1`;
|
| 616 |
+
|
| 617 |
+
// Create lines connecting harbor to both vertices
|
| 618 |
+
const line1 = document.createElementNS('http://www.w3.org/2000/svg', 'line');
|
| 619 |
+
line1.setAttribute('x1', pointOne.x);
|
| 620 |
+
line1.setAttribute('y1', pointOne.y);
|
| 621 |
+
line1.setAttribute('x2', x);
|
| 622 |
+
line1.setAttribute('y2', y);
|
| 623 |
+
line1.setAttribute('stroke', harborTypeColors[harbor.type] || '#4169E1');
|
| 624 |
+
line1.setAttribute('stroke-width', 2.5);
|
| 625 |
+
line1.setAttribute('opacity', '0.7');
|
| 626 |
+
|
| 627 |
+
const line2 = document.createElementNS('http://www.w3.org/2000/svg', 'line');
|
| 628 |
+
line2.setAttribute('x1', pointTwo.x);
|
| 629 |
+
line2.setAttribute('y1', pointTwo.y);
|
| 630 |
+
line2.setAttribute('x2', x);
|
| 631 |
+
line2.setAttribute('y2', y);
|
| 632 |
+
line2.setAttribute('stroke', harborTypeColors[harbor.type] || '#4169E1');
|
| 633 |
+
line2.setAttribute('stroke-width', 2.5);
|
| 634 |
+
line2.setAttribute('opacity', '0.7');
|
| 635 |
+
|
| 636 |
+
// Add tooltip
|
| 637 |
+
const title = document.createElementNS('http://www.w3.org/2000/svg', 'title');
|
| 638 |
+
title.textContent = `Harbor: ${harbor.type} (${harbor.ratio}:1 trade)\nPoints: ${harbor.point_one}-${harbor.point_two}`;
|
| 639 |
+
harborGroup.appendChild(title);
|
| 640 |
+
|
| 641 |
+
// Add lines first (so they appear behind the circle)
|
| 642 |
+
harborGroup.appendChild(line1);
|
| 643 |
+
harborGroup.appendChild(line2);
|
| 644 |
+
harborGroup.appendChild(circle);
|
| 645 |
+
harborGroup.appendChild(text);
|
| 646 |
+
harborGroup.appendChild(ratioText);
|
| 647 |
+
this.svg.appendChild(harborGroup);
|
| 648 |
+
|
| 649 |
+
console.log(`🏪 Created harbor: ${harbor.type} (${harbor.ratio}:1) at points ${harbor.point_one}-${harbor.point_two}`);
|
| 650 |
+
}
|
| 651 |
+
|
| 652 |
// Update board from game state (called when receiving updates from server)
|
| 653 |
updateFromGameState(gameState) {
|
| 654 |
console.log('Updating board from game state:', gameState);
|
|
|
|
| 673 |
// Create vertices
|
| 674 |
this.createVertices();
|
| 675 |
|
| 676 |
+
// Add harbors from game state (before buildings so they appear behind)
|
| 677 |
+
if (gameState.harbors && gameState.harbors.length > 0) {
|
| 678 |
+
console.log(`Creating ${gameState.harbors.length} harbors from server data`);
|
| 679 |
+
gameState.harbors.forEach(harbor => {
|
| 680 |
+
this.createHarbor(harbor);
|
| 681 |
+
});
|
| 682 |
+
}
|
| 683 |
+
|
| 684 |
// Add buildings from server data
|
| 685 |
this.updateBuildings(gameState);
|
| 686 |
this.updateRobberFromGameState(gameState);
|
pycatan/visualizations/web_visualization.py
CHANGED
|
@@ -278,6 +278,7 @@ class WebVisualization(Visualization):
|
|
| 278 |
'settlements': [],
|
| 279 |
'cities': [],
|
| 280 |
'roads': [],
|
|
|
|
| 281 |
'players': [],
|
| 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')),
|
|
@@ -294,6 +295,10 @@ class WebVisualization(Visualization):
|
|
| 294 |
if hasattr(game_state.board_state, 'tiles'):
|
| 295 |
web_state['hexes'] = self._convert_hexes(game_state.board_state.tiles)
|
| 296 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 297 |
# Find robber position
|
| 298 |
web_state['robber_position'] = self._find_robber_position(game_state.board_state)
|
| 299 |
|
|
@@ -396,6 +401,51 @@ class WebVisualization(Visualization):
|
|
| 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.
|
|
|
|
| 278 |
'settlements': [],
|
| 279 |
'cities': [],
|
| 280 |
'roads': [],
|
| 281 |
+
'harbors': [],
|
| 282 |
'players': [],
|
| 283 |
'current_player': getattr(game_state, 'current_player', 0),
|
| 284 |
'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')),
|
|
|
|
| 295 |
if hasattr(game_state.board_state, 'tiles'):
|
| 296 |
web_state['hexes'] = self._convert_hexes(game_state.board_state.tiles)
|
| 297 |
|
| 298 |
+
# Convert harbors
|
| 299 |
+
if hasattr(game_state.board_state, 'harbors'):
|
| 300 |
+
web_state['harbors'] = self._convert_harbors(game_state.board_state.harbors)
|
| 301 |
+
|
| 302 |
# Find robber position
|
| 303 |
web_state['robber_position'] = self._find_robber_position(game_state.board_state)
|
| 304 |
|
|
|
|
| 401 |
|
| 402 |
return hexes
|
| 403 |
|
| 404 |
+
def _convert_harbors(self, harbors) -> List[Dict[str, Any]]:
|
| 405 |
+
"""
|
| 406 |
+
Convert harbors to web format.
|
| 407 |
+
|
| 408 |
+
Args:
|
| 409 |
+
harbors: List of harbor dictionaries from GameState
|
| 410 |
+
|
| 411 |
+
Returns:
|
| 412 |
+
List of harbor data for web display
|
| 413 |
+
"""
|
| 414 |
+
web_harbors = []
|
| 415 |
+
|
| 416 |
+
if not harbors:
|
| 417 |
+
return web_harbors
|
| 418 |
+
|
| 419 |
+
for i, harbor in enumerate(harbors):
|
| 420 |
+
if isinstance(harbor, dict):
|
| 421 |
+
# Harbor from Game._get_ports_info (new format)
|
| 422 |
+
harbor_data = {
|
| 423 |
+
'id': i + 1,
|
| 424 |
+
'type': harbor.get('resource', 'any'), # 'wood', 'sheep', 'brick', 'wheat', 'ore', 'any'
|
| 425 |
+
'ratio': harbor.get('ratio', 3), # 2 or 3
|
| 426 |
+
'point_one': harbor.get('point_one', 0), # Point ID of first vertex
|
| 427 |
+
'point_two': harbor.get('point_two', 0), # Point ID of second vertex
|
| 428 |
+
}
|
| 429 |
+
web_harbors.append(harbor_data)
|
| 430 |
+
else:
|
| 431 |
+
# Harbor object (fallback for older code)
|
| 432 |
+
harbor_type = getattr(harbor, 'type', None)
|
| 433 |
+
if harbor_type:
|
| 434 |
+
# Convert HarborType enum to string
|
| 435 |
+
type_name = harbor_type.name.lower() if hasattr(harbor_type, 'name') else 'any'
|
| 436 |
+
ratio = 2 if type_name != 'any' else 3
|
| 437 |
+
|
| 438 |
+
harbor_data = {
|
| 439 |
+
'id': i + 1,
|
| 440 |
+
'type': type_name,
|
| 441 |
+
'ratio': ratio,
|
| 442 |
+
'point_one': 0,
|
| 443 |
+
'point_two': 0
|
| 444 |
+
}
|
| 445 |
+
web_harbors.append(harbor_data)
|
| 446 |
+
|
| 447 |
+
return web_harbors
|
| 448 |
+
|
| 449 |
def _get_points_info(self) -> List[Dict[str, Any]]:
|
| 450 |
"""
|
| 451 |
Get complete information about all points on the board.
|
temp_viz_console.py
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
# -*- coding: utf-8 -*-
|
| 3 |
+
import sys
|
| 4 |
+
import time
|
| 5 |
+
import os
|
| 6 |
+
|
| 7 |
+
log_file = r"c:\GIT_new\PyCatan_AI\logs\game_viz.log"
|
| 8 |
+
|
| 9 |
+
print("PyCatan - Game Visualization Console")
|
| 10 |
+
print("=" * 50)
|
| 11 |
+
print("This window shows real-time game state updates.")
|
| 12 |
+
print("Keep this window open while playing!")
|
| 13 |
+
print("=" * 50)
|
| 14 |
+
print(f"Reading from: {log_file}")
|
| 15 |
+
|
| 16 |
+
# Wait for file to exist
|
| 17 |
+
while not os.path.exists(log_file):
|
| 18 |
+
time.sleep(0.1)
|
| 19 |
+
|
| 20 |
+
# Tail the file
|
| 21 |
+
with open(log_file, 'r', encoding='utf-8') as f:
|
| 22 |
+
# Go to the end of file
|
| 23 |
+
# f.seek(0, 2)
|
| 24 |
+
# Actually start from beginning since we just created it
|
| 25 |
+
|
| 26 |
+
while True:
|
| 27 |
+
line = f.readline()
|
| 28 |
+
if line:
|
| 29 |
+
print(line, end='')
|
| 30 |
+
else:
|
| 31 |
+
time.sleep(0.1)
|
test_harbors_display.py
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
Quick test to verify harbors are displayed in web visualization.
|
| 3 |
+
"""
|
| 4 |
+
|
| 5 |
+
from pycatan.core.game import Game
|
| 6 |
+
from pycatan.visualizations.web_visualization import WebVisualization
|
| 7 |
+
import time
|
| 8 |
+
|
| 9 |
+
def test_harbors():
|
| 10 |
+
print("🧪 Testing Harbor Display in Web Visualization")
|
| 11 |
+
print("=" * 60)
|
| 12 |
+
|
| 13 |
+
# Create a simple game
|
| 14 |
+
print("1. Creating game with 3 players...")
|
| 15 |
+
game = Game(num_of_players=3)
|
| 16 |
+
|
| 17 |
+
# Get full game state
|
| 18 |
+
print("2. Getting game state...")
|
| 19 |
+
game_state = game.get_full_state()
|
| 20 |
+
|
| 21 |
+
# Check if harbors are in the state
|
| 22 |
+
print(f"3. Checking harbors in board_state...")
|
| 23 |
+
if hasattr(game_state.board_state, 'harbors'):
|
| 24 |
+
harbors = game_state.board_state.harbors
|
| 25 |
+
print(f" ✓ Found {len(harbors)} harbors!")
|
| 26 |
+
|
| 27 |
+
# Print first few harbors
|
| 28 |
+
for i, harbor in enumerate(harbors[:3]):
|
| 29 |
+
print(f" Harbor {i+1}: {harbor}")
|
| 30 |
+
else:
|
| 31 |
+
print(" ✗ No harbors found in board_state!")
|
| 32 |
+
return
|
| 33 |
+
|
| 34 |
+
# Create web visualization
|
| 35 |
+
print("\n4. Creating web visualization...")
|
| 36 |
+
web_viz = WebVisualization(port=5000, auto_open=True)
|
| 37 |
+
|
| 38 |
+
# Update with game state
|
| 39 |
+
print("5. Updating visualization with game state...")
|
| 40 |
+
web_viz.update_full_state(game_state)
|
| 41 |
+
|
| 42 |
+
# Check converted state
|
| 43 |
+
if web_viz.current_game_state and 'harbors' in web_viz.current_game_state:
|
| 44 |
+
converted_harbors = web_viz.current_game_state['harbors']
|
| 45 |
+
print(f" ✓ Converted {len(converted_harbors)} harbors for web display!")
|
| 46 |
+
|
| 47 |
+
# Print first few converted harbors
|
| 48 |
+
for i, harbor in enumerate(converted_harbors[:3]):
|
| 49 |
+
print(f" Harbor {i+1}: type={harbor['type']}, ratio={harbor['ratio']}, points={harbor.get('point_one')}-{harbor.get('point_two')}")
|
| 50 |
+
else:
|
| 51 |
+
print(" ✗ No harbors in converted state!")
|
| 52 |
+
return
|
| 53 |
+
|
| 54 |
+
# Start the server
|
| 55 |
+
print("\n6. Starting web server...")
|
| 56 |
+
print(" → Open http://localhost:5000 to see the game board")
|
| 57 |
+
print(" → Harbors should appear at the top of the board")
|
| 58 |
+
print(" → Press Ctrl+C to stop the server")
|
| 59 |
+
|
| 60 |
+
web_viz.start()
|
| 61 |
+
|
| 62 |
+
# Keep running
|
| 63 |
+
try:
|
| 64 |
+
while True:
|
| 65 |
+
time.sleep(1)
|
| 66 |
+
except KeyboardInterrupt:
|
| 67 |
+
print("\n\n✓ Test completed!")
|
| 68 |
+
|
| 69 |
+
if __name__ == "__main__":
|
| 70 |
+
test_harbors()
|