1. Concept Paragraph
MazeBound is a deterministic, turn-based grid navigation challenge where two explorers compete to reach the Beacon Core hidden within a labyrinthine maze. Both start from opposite corners and must navigate through maze pathways by issuing precise movement and scanning commands. Each player sees only tiles within their visibility radius, and partial knowledge of the maze is revealed as they explore. Decision-making centers on exploration efficiency and path optimization rather than combat or negotiation.
This design has no relation to any negotiation, trading, or resource–bargaining example. Instead, it is a purely spatial exploration competition built from scratch.
2. Roles and Win Condition
-
Roles:
- Player A (Explorer Alpha): Starts in the northwest corner
(0, 0). - Player B (Explorer Beta): Starts in the southeast corner
(N-1, N-1).
- Player A (Explorer Alpha): Starts in the northwest corner
-
Objectives:
- Each player tries to reach the Beacon Core tile before the opponent.
-
Win Condition:
- A player wins immediately upon entering the Beacon Core’s coordinate.
- If both reach it on the same turn (deterministically impossible due to alternating turns), the earlier arrival wins.
- If the turn limit is reached and no one has reached the goal, the winner is the explorer closest (by Manhattan distance) to the Beacon Core.
- If both are equidistant, the result is a draw.
3. Turn Structure and Determinism
- The game proceeds in strict alternate turns, starting with Player A.
- On each turn, a single discrete action is taken by the active player.
- A global turn counter increments after both players have completed their respective turns.
- Reproducibility: Maze layout and Beacon location are generated using a fixed random seed at
reset(seed). - Turn Limit: 40 turns (20 per player). The game ends when either:
- The Beacon Core is reached, or
- The turn limit is exhausted.
4. Action Grammar (Machine-Parseable)
Each player issues a deterministic command encoded as a token or tagged instruction.
Allowed Actions
| Action | Format | Meaning |
|---|---|---|
| Move | MOVE:<direction> |
Move one cell if no wall in that direction. Directions: N, S, E, W. |
| Scan | SCAN |
Reveal the layout of adjacent cells within visibility radius (does not move). |
| Pass | PASS |
Skip turn voluntarily. |
Regular Expression Patterns
MOVE:(N|S|E|W)SCANPASS
Examples
| Type | Example | Valid? | Reason |
|---|---|---|---|
| Valid | MOVE:N |
✅ | Proper MOVE token. |
| Invalid | MOVE:NORTH |
❌ | Invalid direction token; must be N/S/E/W. |
| Valid | SCAN |
✅ | Correct command. |
| Invalid | SCAN:W |
❌ | Must not specify an argument. |
| Valid | PASS |
✅ | Legal pass action. |
| Invalid | REST |
❌ | Token not in action grammar. |
5. Game State Schema
Example runtime game_state (prettified JSON):
{
"maze_size": 7,
"turn_number": 3,
"turn_limit": 40,
"seed": 12345,
"beacon_coord": [3, 3],
"maze_layout": [
[" ", "#", " ", " ", " ", "#", " "],
[" ", " ", "#", "#", " ", " ", " "],
["#", " ", " ", " ", "#", " ", "#"],
[" ", "#", " ", "B", " ", "#", " "],
[" ", " ", "#", " ", " ", " ", " "],
["#", " ", " ", "#", "#", " ", "#"],
[" ", " ", "#", " ", " ", " ", " "]
],
"players": {
"A": {
"name": "Explorer Alpha",
"position": [0, 0],
"visible_cells": [[0,0],[0,1],[1,0]],
"discovered_map": {},
"distance_to_beacon": 6,
"last_action": "MOVE:E"
},
"B": {
"name": "Explorer Beta",
"position": [6, 6],
"visible_cells": [[6,6],[5,6],[6,5]],
"discovered_map": {},
"distance_to_beacon": 6,
"last_action": "SCAN"
}
},
"history": [
{"turn":1,"player":"A","action":"MOVE:E"},
{"turn":1,"player":"B","action":"SCAN"},
{"turn":2,"player":"A","action":"MOVE:S"}
],
"winner": null,
"terminated": false,
"termination_reason": ""
}
6. Initialization Rules
maze_layoutandbeacon_coordgenerated from a fixed seed to ensure reproducibility.- Maze contains open cells
" "and blocked cells"#". - Both players begin with visibility radius = 1.
distance_to_beaconcomputed via Manhattan distance.- The initial observation to each player includes:
- Maze size,
- Their visible section,
- Their current coordinates,
- Turn/round count.
7. Validation and Error Handling
An action is invalid if:
| Condition | Handling Reason |
|---|---|
| Does not match regex grammar | "UnrecognizedActionFormat" |
| MOVE attempts to go into wall | "BlockedByWall" |
| MOVE attempts to exit outer boundary | "OutOfBounds" |
| Player acts out of turn | "NotYourTurn" |
Any other malformed content (including missing \boxed{}) |
"MalformedInput" |
set_invalid_move will record the offending action and reason, skip movement effect, and mark that player's turn as consumed.
When parsing input, the text inside \boxed{} is extracted via _extract_answer_content(action) and matched against grammar.
8. Terminal Conditions and Scoring
Terminal Checks (in order executed after each action):
- Beacon Reached: If active player's
position == beacon_coord, set:terminated = Truewinner = active_playertermination_reason = "BeaconCaptured"
- Turn Limit Reached:
Ifturn_number >= turn_limit:- Compute Manhattan distances.
- Player with smaller distance wins (
termination_reason = "TimeExpired"). - Equal distance =
"Draw";winner=null; terminated=true.
Scoring:
- Winner earns
score = 1 - Loser earns
score = 0 - Both =
0.5if draw
9. Player Prompt Specification
Prompt Outline
Each player's prompt presents their current status and available actions.
-
Header Identity:
“You are an explorer in MazeBound, a turn-based labyrinth navigation game. Your goal is to reach the Beacon Core before your opponent.” -
Current Info:
- Your coordinates and visible surrounding cells.
- Number of turns remaining.
- History of your previous actions.
-
Allowed Actions:
MOVE:N,MOVE:S,MOVE:E,MOVE:WSCANPASS
-
Rules Summary:
- Movement blocked by walls or edges.
SCANreveals nearby cells.- Game ends when anyone reaches Beacon Core or turn limit hits.
- Use
\boxed{}to provide your exact action.
Example Turn Prompts
Example valid response:
From what I can see, east looks clear. I'll move there.
\boxed{MOVE:E}
Example invalid response:
I think I’ll go north quickly!
(Missing box and token structure)
_extract_answer_content
A helper will extract the plain text string inside \boxed{...} so the system sees "MOVE:E", "SCAN", etc., for validation and processing.
10. API Mapping Plan
reset(seed=None)
- Initialize maze, beacon, players, visibility, and history.
- Store seed for future reproducibility.
- Return the initial observation for Player A.
step(player_id, action)
- Extract content from
\boxed{}. - Validate the action; if invalid →
set_invalid_move. - If valid, update player’s position or visibility:
- For
MOVE, update coordinates. - For
SCAN, updatevisible_cells. - For
PASS, do nothing but advance turn.
- For
- Append entry to
history. - Check terminal conditions.
- Return new
game_stateslice and observation for next player.
_generate_player_prompt(player_id)
- Construct textual prompt as in Section 9.
- Use
game_stateto render visible environment and turn status. - Return prompt string for the chosen player.
11. Copy-Check Against the Example
- Theme and Entities: Maze exploration with explorers and a beacon — completely distinct from any negotiation or trading example.
- Objective: Spatial navigation victory, no discussion or offers.
- Resources: Maze grid and visibility cells — not items, money, or agreements.
- Game State Keys:
maze_layout,beacon_coord,visible_cells, etc., are newly invented for this domain. - Prompt Text: Refers strictly to navigating a labyrinth, not negotiation.
- Conclusion: All systems, terms, and gameplay goals are original to the MazeBound design and unrelated to any example.
End of Design Document