diff --git a/src/utils/array.ts b/src/utils/array.ts index c1900c9..58ed456 100644 --- a/src/utils/array.ts +++ b/src/utils/array.ts @@ -9,7 +9,29 @@ export function create2DArray( Array.from({ length: width }, (_, x) => (cell instanceof Function ? cell(x, y) : cell)), ); } - +export function* iter2DArray(grid: T[][]): Generator<[number, number, T], void, unknown> { + for (let y = 0; y < grid.length; y++) { + for (let x = 0; x < grid[y].length; x++) { + yield [x, y, grid[y][x]]; + } + } +} +export type Zip[]> = T extends [ + infer R, + ...infer S extends Iterable[], +] + ? R extends Iterable + ? [U, ...Zip] + : [] + : []; +export function* zip[]>(...its: T): Generator, void, unknown> { + const iterators = its.map((it) => it[Symbol.iterator]()); + while (true) { + const nextValues = iterators.map((it) => it.next()); + if (nextValues.some(({ done }) => done)) break; + yield nextValues.map(({ value }) => value) as any; + } +} export function get2DArrayItem( grid: T[][], first: number, diff --git a/src/utils/game-socket.ts b/src/utils/game-socket.ts index b4cbe29..48a6192 100644 --- a/src/utils/game-socket.ts +++ b/src/utils/game-socket.ts @@ -28,6 +28,10 @@ export interface UseGameSocketOptions< error?: { [P in TRequest['name']]?: (reason: string) => boolean | void; }; + pre?: { + // 只有拥有依赖关系的请求才可以有pre + [P in keyof TRelations]?: (error: boolean) => void; + }; finally?: { // 只有拥有依赖关系的请求才可以有finally [P in keyof TRelations]?: (error: boolean) => void; @@ -79,6 +83,7 @@ export function useGameSocket, TResp extends error = true; if (relations[originalPacketName]) { reqName = originalPacketName; + options.pre?.[reqName]?.(true); relationMap.delete(originalPacketName); } const errorHandler = options.error?.[originalPacketName]; @@ -99,6 +104,7 @@ export function useGameSocket, TResp extends if (set.size) continue; relationMap.delete(k); reqName = k; + options.pre?.[reqName]?.(false); break; } } diff --git a/src/views/GobangPlayPage.vue b/src/views/GobangPlayPage.vue index 3099803..1a9eda6 100644 --- a/src/views/GobangPlayPage.vue +++ b/src/views/GobangPlayPage.vue @@ -39,6 +39,8 @@ , { 'gobang-chessboard__cell--win-blink': blink?.[y][x], + 'gobang-chessboard__cell--last': + lastChess && lastChess[0] === x && lastChess[1] === y, }, ]" :style="getCellStyle(cell, x, y)" @@ -76,6 +78,7 @@