Phase 5: Dame (Queen) piece and network levels 7-8
Dame (Queen): - Moves 1-2 cells in all 8 directions (orthogonal + diagonal) - Social status 7 (highest — priority over all other pieces) - Deep burgundy color, letter "D" - Rare and powerful, forces strategic placement choices Levels: - Level 7 "La Dame Blanche": 10x10, walled arena with central fortress, 1 queen available as a logistics superweapon - Level 8 "Le Grand Reseau": 12x10, 4 productions + 4 demands, two vertical wall corridors, 2 queens, full network challenge GDD updated with Dame section and status hierarchy. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
210be72100
commit
8918140114
12 changed files with 96 additions and 3 deletions
28
Data/levels/level_07.json
Normal file
28
Data/levels/level_07.json
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
{
|
||||
"id": 7,
|
||||
"name": "La Dame Blanche",
|
||||
"description": "La Dame entre en jeu. Sa portee sur 8 directions en fait une piece logistique supreme.",
|
||||
"width": 10,
|
||||
"height": 10,
|
||||
"productions": [
|
||||
{ "col": 0, "row": 0, "name": "Scierie", "cargo": "wood" },
|
||||
{ "col": 9, "row": 0, "name": "Carriere", "cargo": "stone" }
|
||||
],
|
||||
"demands": [
|
||||
{ "col": 9, "row": 9, "name": "Chateau", "cargo": "wood", "amount": 4, "deadline": 50 },
|
||||
{ "col": 0, "row": 9, "name": "Forge Royale", "cargo": "stone", "amount": 4, "deadline": 50 }
|
||||
],
|
||||
"walls": [
|
||||
{ "col": 3, "row": 3 }, { "col": 3, "row": 4 }, { "col": 3, "row": 5 }, { "col": 3, "row": 6 },
|
||||
{ "col": 6, "row": 3 }, { "col": 6, "row": 4 }, { "col": 6, "row": 5 }, { "col": 6, "row": 6 },
|
||||
{ "col": 4, "row": 6 }, { "col": 5, "row": 6 },
|
||||
{ "col": 4, "row": 3 }, { "col": 5, "row": 3 }
|
||||
],
|
||||
"stock": [
|
||||
{ "kind": "pawn", "count": 10 },
|
||||
{ "kind": "rook", "count": 4 },
|
||||
{ "kind": "bishop", "count": 2 },
|
||||
{ "kind": "knight", "count": 2 },
|
||||
{ "kind": "queen", "count": 1 }
|
||||
]
|
||||
}
|
||||
33
Data/levels/level_08.json
Normal file
33
Data/levels/level_08.json
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
{
|
||||
"id": 8,
|
||||
"name": "Le Grand Reseau",
|
||||
"description": "Quatre productions, quatre demandes. Construisez un reseau logistique complet a travers un terrain hostile.",
|
||||
"width": 12,
|
||||
"height": 10,
|
||||
"productions": [
|
||||
{ "col": 0, "row": 0, "name": "Scierie Ouest", "cargo": "wood" },
|
||||
{ "col": 11, "row": 0, "name": "Carriere Sud", "cargo": "stone" },
|
||||
{ "col": 0, "row": 9, "name": "Scierie Nord", "cargo": "wood" },
|
||||
{ "col": 11, "row": 9, "name": "Carriere Nord", "cargo": "stone" }
|
||||
],
|
||||
"demands": [
|
||||
{ "col": 5, "row": 0, "name": "Depot Sud", "cargo": "wood", "amount": 3, "deadline": 60 },
|
||||
{ "col": 6, "row": 9, "name": "Depot Nord", "cargo": "stone", "amount": 3, "deadline": 60 },
|
||||
{ "col": 5, "row": 5, "name": "Forge Centrale", "cargo": "stone", "amount": 4, "deadline": 60 },
|
||||
{ "col": 6, "row": 4, "name": "Chantier Central", "cargo": "wood", "amount": 4, "deadline": 60 }
|
||||
],
|
||||
"walls": [
|
||||
{ "col": 3, "row": 2 }, { "col": 3, "row": 3 }, { "col": 3, "row": 4 },
|
||||
{ "col": 3, "row": 5 }, { "col": 3, "row": 6 }, { "col": 3, "row": 7 },
|
||||
{ "col": 8, "row": 2 }, { "col": 8, "row": 3 }, { "col": 8, "row": 4 },
|
||||
{ "col": 8, "row": 5 }, { "col": 8, "row": 6 }, { "col": 8, "row": 7 },
|
||||
{ "col": 4, "row": 4 }, { "col": 7, "row": 5 }
|
||||
],
|
||||
"stock": [
|
||||
{ "kind": "pawn", "count": 16 },
|
||||
{ "kind": "rook", "count": 6 },
|
||||
{ "kind": "bishop", "count": 3 },
|
||||
{ "kind": "knight", "count": 4 },
|
||||
{ "kind": "queen", "count": 2 }
|
||||
]
|
||||
}
|
||||
|
|
@ -46,7 +46,7 @@ public partial class Main : Node2D
|
|||
private bool _running;
|
||||
private bool _panning;
|
||||
|
||||
private static readonly string[] LevelFiles = ["level_01.json", "level_02.json", "level_03.json", "level_04.json", "level_05.json", "level_06.json"];
|
||||
private static readonly string[] LevelFiles = ["level_01.json", "level_02.json", "level_03.json", "level_04.json", "level_05.json", "level_06.json", "level_07.json", "level_08.json"];
|
||||
|
||||
private const float SidePanelWidth = 280f;
|
||||
private const float ControlBarHeight = 48f;
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ public partial class PieceView : Node2D
|
|||
private static readonly Color RookColor = new("#3D6B8E"); // deep teal
|
||||
private static readonly Color BishopColor = new("#8E5A6B"); // dusty rose
|
||||
private static readonly Color KnightColor = new("#8E7A3D"); // burnt sienna
|
||||
private static readonly Color QueenColor = new("#8E3D5A"); // deep burgundy
|
||||
private static readonly Color WoodCargoColor = new("#A67C32");
|
||||
private static readonly Color StoneCargoColor = new("#7A7A7A");
|
||||
private static readonly Color ShadowColor = new Color(0, 0, 0, 0.18f);
|
||||
|
|
@ -77,6 +78,7 @@ public partial class PieceView : Node2D
|
|||
PieceKind.Rook => "T",
|
||||
PieceKind.Bishop => "F",
|
||||
PieceKind.Knight => "C",
|
||||
PieceKind.Queen => "D",
|
||||
_ => "?"
|
||||
},
|
||||
HorizontalAlignment = HorizontalAlignment.Center,
|
||||
|
|
@ -113,6 +115,7 @@ public partial class PieceView : Node2D
|
|||
PieceKind.Rook => RookColor,
|
||||
PieceKind.Bishop => BishopColor,
|
||||
PieceKind.Knight => KnightColor,
|
||||
PieceKind.Queen => QueenColor,
|
||||
_ => Colors.White
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -66,6 +66,7 @@ public partial class DetailPanel : PanelContainer
|
|||
PieceKind.Rook => "Tour II",
|
||||
PieceKind.Bishop => "Fou II",
|
||||
PieceKind.Knight => "Cavalier",
|
||||
PieceKind.Queen => "Dame",
|
||||
_ => piece.Kind.ToString()
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,9 @@ public partial class LevelSelectScreen : Control
|
|||
("Le Col", "Franchissez le mur et gerez deux types de cargaison."),
|
||||
("Le Carrefour", "Deux productions, deux demandes, et un carrefour au centre."),
|
||||
("Le Labyrinthe", "Un couloir etroit serpente a travers les murs."),
|
||||
("Trois Royaumes", "Trois productions, trois demandes. Gerez un reseau complet.")
|
||||
("Trois Royaumes", "Trois productions, trois demandes. Gerez un reseau complet."),
|
||||
("La Dame Blanche", "La Dame entre en jeu. Portee supreme sur 8 directions."),
|
||||
("Le Grand Reseau", "Quatre productions, quatre demandes. Reseau complet.")
|
||||
];
|
||||
|
||||
public override void _Ready()
|
||||
|
|
|
|||
|
|
@ -154,6 +154,7 @@ public partial class PieceStockPanel : VBoxContainer
|
|||
PieceKind.Rook => "Tour II",
|
||||
PieceKind.Bishop => "Fou II",
|
||||
PieceKind.Knight => "Cavalier",
|
||||
PieceKind.Queen => "Dame",
|
||||
_ => kind.ToString()
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@ public static class LevelLoader
|
|||
"rook" => PieceKind.Rook,
|
||||
"bishop" => PieceKind.Bishop,
|
||||
"knight" => PieceKind.Knight,
|
||||
"queen" => PieceKind.Queen,
|
||||
_ => throw new JsonException($"Unknown piece kind: '{kind}'")
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -5,5 +5,6 @@ public enum PieceKind
|
|||
Pawn,
|
||||
Rook,
|
||||
Bishop,
|
||||
Knight
|
||||
Knight,
|
||||
Queen
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ public static class PieceRules
|
|||
PieceKind.Rook => 5,
|
||||
PieceKind.Bishop => 3,
|
||||
PieceKind.Knight => 3,
|
||||
PieceKind.Queen => 7,
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(kind))
|
||||
};
|
||||
|
||||
|
|
@ -17,6 +18,7 @@ public static class PieceRules
|
|||
PieceKind.Rook => 2,
|
||||
PieceKind.Bishop => 2,
|
||||
PieceKind.Knight => 0, // Knight uses L-shape, not range
|
||||
PieceKind.Queen => 2,
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(kind))
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ public static class MoveValidator
|
|||
{
|
||||
private static readonly (int dc, int dr)[] OrthogonalDirs = [(0, 1), (0, -1), (1, 0), (-1, 0)];
|
||||
private static readonly (int dc, int dr)[] DiagonalDirs = [(1, 1), (1, -1), (-1, 1), (-1, -1)];
|
||||
private static readonly (int dc, int dr)[] AllDirs = [(0, 1), (0, -1), (1, 0), (-1, 0), (1, 1), (1, -1), (-1, 1), (-1, -1)];
|
||||
private static readonly (int dc, int dr)[] KnightOffsets =
|
||||
[
|
||||
(1, 2), (2, 1), (2, -1), (1, -2),
|
||||
|
|
@ -23,6 +24,7 @@ public static class MoveValidator
|
|||
PieceKind.Rook => GetSlidingMoves(start, OrthogonalDirs, 2, board),
|
||||
PieceKind.Bishop => GetSlidingMoves(start, DiagonalDirs, 2, board),
|
||||
PieceKind.Knight => GetKnightMoves(start, board),
|
||||
PieceKind.Queen => GetSlidingMoves(start, AllDirs, 2, board),
|
||||
_ => []
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -145,6 +145,24 @@ C'est tout. Pas de programmation, pas de route multi-etapes. La piece fait l'all
|
|||
- **Saute par-dessus** les murs et les autres pieces
|
||||
- Statut social : **3**
|
||||
|
||||
#### Dame
|
||||
|
||||
```
|
||||
X X X
|
||||
X X X
|
||||
X X X
|
||||
X X X [Dame] X X X
|
||||
X X X
|
||||
X X X
|
||||
X X X
|
||||
```
|
||||
|
||||
- Se deplace de **1 ou 2 cases** dans les **8 directions** (horizontal, vertical et diagonal)
|
||||
- Combine les mouvements de la Tour et du Fou
|
||||
- Ne peut pas traverser les murs ni les autres pieces
|
||||
- Statut social : **7** (le plus eleve — prioritaire sur toutes les autres pieces)
|
||||
- Piece la plus puissante mais rare — force des choix strategiques
|
||||
|
||||
> A statut egal, la piece de **niveau le plus eleve** est consideree superieure (ex: Tour II > Tour I, Fou III > Cavalier II). En cas d'egalite parfaite, le departage se fait par **direction en sens horaire** depuis la piece qui donne (voir 4.3).
|
||||
|
||||
### 3.3 Occupation et collision
|
||||
|
|
@ -188,6 +206,7 @@ Quand plusieurs transferts sont possibles au meme point, la priorite determine l
|
|||
|
||||
```
|
||||
Hierarchie de statut social (proto) :
|
||||
Dame 7
|
||||
Tour 5
|
||||
Fou 3
|
||||
Cavalier 3
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue