Spaces:
Configuration error
Configuration error
File size: 5,439 Bytes
c903325 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | // ื ืชืื ื ืืืฉืืง - ืืืืืืงื GAMEDATA (ืืจืืจืช ืืืื ืืืฉืจ ืืื ืืืืืจ ืืฉืจืช)
const GAMEDATA = {
// ืืฉืืฉืื (19 ืืฉืืฉืื ืืจืืช ืงืืฉื ืจืืืื)
hexes: [
// ืฉืืจื ืขืืืื ื (3 ืืฉืืฉืื)
{ id: 1, q: 0, r: -2, type: 'wood', number: 11, robber: false },
{ id: 2, q: 1, r: -2, type: 'sheep', number: 12, robber: false },
{ id: 3, q: 2, r: -2, type: 'wheat', number: 9, robber: false },
// ืฉืืจื ืฉื ืืื (4 ืืฉืืฉืื)
{ id: 4, q: -1, r: -1, type: 'brick', number: 4, robber: false },
{ id: 5, q: 0, r: -1, type: 'ore', number: 6, robber: false },
{ id: 6, q: 1, r: -1, type: 'sheep', number: 5, robber: false },
{ id: 7, q: 2, r: -1, type: 'wheat', number: 10, robber: false },
// ืฉืืจื ืืืฆืขืืช (5 ืืฉืืฉืื)
{ id: 8, q: -2, r: 0, type: 'wood', number: 3, robber: false },
{ id: 9, q: -1, r: 0, type: 'brick', number: 11, robber: false },
{ id: 10, q: 0, r: 0, type: 'desert', number: null, robber: true },
{ id: 11, q: 1, r: 0, type: 'wheat', number: 4, robber: false },
{ id: 12, q: 2, r: 0, type: 'ore', number: 8, robber: false },
// ืฉืืจื ืจืืืขืืช (4 ืืฉืืฉืื)
{ id: 13, q: -2, r: 1, type: 'ore', number: 8, robber: false },
{ id: 14, q: -1, r: 1, type: 'sheep', number: 10, robber: false },
{ id: 15, q: 0, r: 1, type: 'wood', number: 9, robber: false },
{ id: 16, q: 1, r: 1, type: 'brick', number: 3, robber: false },
// ืฉืืจื ืชืืชืื ื (3 ืืฉืืฉืื)
{ id: 17, q: -2, r: 2, type: 'wheat', number: 2, robber: false },
{ id: 18, q: -1, r: 2, type: 'sheep', number: 5, robber: false },
{ id: 19, q: 0, r: 2, type: 'ore', number: 6, robber: false }
],
// ืืืฉืืืื - ืืชืืืืื ืจืืงืื
settlements: [],
// ืขืจืื - ืืชืืืืื ืจืืงืืช
cities: [],
// ืืจืืื - ืืชืืืืื ืจืืงืืช
roads: [],
// ืืืงืื ืืฉืืื ืื ืืืื
robberPosition: 10,
// ืฉืืงื ืื (ืชืืกืฃ ืืืฉ)
players: [
{ id: 0, name: 'ืฉืืงื 1', victory_points: 2, total_cards: 5 },
{ id: 1, name: 'ืฉืืงื 2', victory_points: 3, total_cards: 7 },
{ id: 2, name: 'ืฉืืงื 3', victory_points: 1, total_cards: 4 },
{ id: 3, name: 'ืฉืืงื 4', victory_points: 2, total_cards: 6 }
],
// ืืืืข ื ืืืื ืขื ืืืฉืืง
current_player: 0,
current_phase: 'ACTION',
dice_result: [3, 4]
};
// ืืืคืื ืกืืื ืืฉืืืื ืืงืืฆื ืืชืืื ืืช
const RESOURCE_FILES = {
'wood': 'Forest.png',
'brick': 'Hills.png',
'sheep': 'Pasture.png',
'wheat': 'Fields.png',
'ore': 'Mountains.png',
'desert': 'Desert.png'
};
// ืืืคืื ืชืืื ืืช Tile ื-Hex ืืคืืจืื ืฉืื ื
function tileToHex(tile) {
const tileTypeMap = {
'FOREST': 'wood',
'HILLS': 'brick',
'PASTURE': 'sheep',
'FIELDS': 'wheat',
'MOUNTAINS': 'ore',
'DESERT': 'desert'
};
return {
id: tile.id || tile.position,
q: tile.position ? tile.position[0] : 0,
r: tile.position ? tile.position[1] : 0,
type: tileTypeMap[tile.type] || 'desert',
number: tile.token,
robber: tile.has_robber || false
};
}
// ืืืจืช GameState ืPyCatan ืืคืืจืื ืฉืื ื
function convertGameState(pyGameState) {
const converted = {
hexes: [],
settlements: [],
cities: [],
roads: [],
players: [],
robberPosition: null,
current_player: pyGameState.current_player || 0,
current_phase: pyGameState.current_phase || 'ACTION',
dice_result: pyGameState.dice_result || null
};
// ืืืจ ืืฉืืฉืื
if (pyGameState.board && pyGameState.board.tiles) {
converted.hexes = pyGameState.board.tiles.map((tile, index) => tileToHex({
...tile,
id: index + 1
}));
}
// ืืืจ ืฉืืงื ืื
if (pyGameState.players) {
converted.players = pyGameState.players.map((player, index) => ({
id: index,
name: player.name || `ืฉืืงื ${index + 1}`,
victory_points: player.victory_points || 0,
total_cards: (player.cards && player.cards.length) || 0
}));
}
// ืืืจ ืืื ืื
if (pyGameState.buildings) {
pyGameState.buildings.forEach(building => {
if (building.type === 'settlement') {
converted.settlements.push({
id: building.id,
vertex: building.point_id,
player: building.player + 1
});
} else if (building.type === 'city') {
converted.cities.push({
id: building.id,
vertex: building.point_id,
player: building.player + 1
});
}
});
}
// ืืืจ ืืจืืื
if (pyGameState.roads) {
converted.roads = pyGameState.roads.map((road, index) => ({
id: index + 1,
from: road.start_point_id,
to: road.end_point_id,
player: road.player + 1
}));
}
return converted;
} |