fix: boop

This commit is contained in:
hypercross 2026-04-04 22:27:17 +08:00
parent b9105efd03
commit bd2988902a
1 changed files with 7 additions and 8 deletions

View File

@ -34,7 +34,7 @@ async function place(game: BoopGame, row: number, col: number, player: PlayerTyp
const partId = part.id; const partId = part.id;
game.produce(state => { await game.produceAsync(state => {
// 将棋子从supply移动到棋盘 // 将棋子从supply移动到棋盘
const part = state.pieces[partId]; const part = state.pieces[partId];
moveToRegion(part, state.regions[player], state.regions.board, [row, col]); moveToRegion(part, state.regions[player], state.regions.board, [row, col]);
@ -50,7 +50,7 @@ const placeCommand = registry.register( 'place <row:number> <col:number> <player
async function boop(game: BoopGame, row: number, col: number, type: PieceType) { async function boop(game: BoopGame, row: number, col: number, type: PieceType) {
const booped: string[] = []; const booped: string[] = [];
game.produce(state => { await game.produceAsync(state => {
// 按照远离放置位置的方向推动 // 按照远离放置位置的方向推动
for (const [dr, dc] of getNeighborPositions()) { for (const [dr, dc] of getNeighborPositions()) {
const nr = row + dr; const nr = row + dr;
@ -133,16 +133,14 @@ async function checkGraduates(game: BoopGame){
} }
} }
game.produce(state => { await game.produceAsync(state => {
// 预先收集所有可用的猫(在盒子里的)
for(const partId of toUpgrade){ for(const partId of toUpgrade){
const part = state.pieces[partId]; const part = state.pieces[partId];
const [row, col] = part.position; const [row, col] = part.position;
const player = part.player; const player = part.player;
moveToRegion(part, state.regions.board, null); moveToRegion(part, state.regions.board, null);
// 使用下一个可用的猫 const newPart = findPartInRegion(state, '', 'cat', player);
const newPart = findPartInRegion(state, '', 'kitten', player);
moveToRegion(newPart || part, null, state.regions[player], [row, col]); moveToRegion(newPart || part, null, state.regions[player], [row, col]);
} }
}); });
@ -155,7 +153,7 @@ async function setup(game: BoopGame) {
const turnOutput = await turnCommand(game, currentPlayer); const turnOutput = await turnCommand(game, currentPlayer);
if (!turnOutput.success) throw new Error(turnOutput.error); if (!turnOutput.success) throw new Error(turnOutput.error);
game.produce(state => { await game.produceAsync(state => {
state.winner = turnOutput.result.winner; state.winner = turnOutput.result.winner;
if (!state.winner) { if (!state.winner) {
state.currentPlayer = state.currentPlayer === 'white' ? 'black' : 'white'; state.currentPlayer = state.currentPlayer === 'white' ? 'black' : 'white';
@ -197,7 +195,7 @@ async function checkFullBoard(game: BoopGame, turnPlayer: PlayerType){
} }
); );
game.produce(state => { await game.produceAsync(state => {
const part = state.pieces[partId]; const part = state.pieces[partId];
moveToRegion(part, state.regions.board, null); moveToRegion(part, state.regions.board, null);
const cat = findPartInRegion(state, '', 'cat'); const cat = findPartInRegion(state, '', 'cat');
@ -238,6 +236,7 @@ async function turn(game: BoopGame, turnPlayer: PlayerType) {
if(winner.success) return { winner: winner.result as WinnerType }; if(winner.success) return { winner: winner.result as WinnerType };
await checkGraduatesCommand(game); await checkGraduatesCommand(game);
await checkFullBoard(game, turnPlayer);
return { winner: null }; return { winner: null };
} }
const turnCommand = registry.register('turn <player>', turn); const turnCommand = registry.register('turn <player>', turn);