fix: boop
This commit is contained in:
parent
b9105efd03
commit
bd2988902a
|
|
@ -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);
|
||||||
Loading…
Reference in New Issue