Spaces:
Configuration error
Configuration error
| // ื ืชืื ื ืืืฉืืง - ืืืืืืงื 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; | |
| } |