@@ -428,15 +428,9 @@ export function useGameState(
428428 // 走棋逻辑
429429 // ============================================================
430430 const possibleMoves = computed < Move [ ] > ( ( ) => {
431- if ( ! canInteract . value || ! selectedSquare . value ) return [ ]
432- const { row, col } = selectedSquare . value
433- const enPassantTarget = getEnPassantTarget ( lastMove . value )
434- return getLegalMoves ( board . value , row , col , { lastMove : lastMove . value , enPassantTarget } )
435- } )
436-
437- // premove 期间选中棋子的合法走法
438- const premovePossibleMoves = computed < Move [ ] > ( ( ) => {
439- if ( ! canPremove . value || ! selectedSquare . value ) return [ ]
431+ if ( ! selectedSquare . value ) return [ ]
432+ // 允许正常交互模式 或 premove 模式下计算合法走法
433+ if ( ! canInteract . value && ! canPremove . value ) return [ ]
440434 const { row, col } = selectedSquare . value
441435 const enPassantTarget = getEnPassantTarget ( lastMove . value )
442436 return getLegalMoves ( board . value , row , col , { lastMove : lastMove . value , enPassantTarget } )
@@ -446,15 +440,11 @@ export function useGameState(
446440 new Set ( possibleMoves . value . map ( ( move ) => `${ move . row } -${ move . col } ` ) ) ,
447441 )
448442
449- const premoveHighlightedPositions = computed ( ( ) =>
450- new Set ( premovePossibleMoves . value . map ( ( move ) => `${ move . row } -${ move . col } ` ) ) ,
451- )
452-
453443 const canMoveTo = ( row : number , col : number ) : boolean =>
454444 highlightedPositions . value . has ( `${ row } -${ col } ` )
455445
456446 const canPremoveTo = ( row : number , col : number ) : boolean =>
457- premoveHighlightedPositions . value . has ( `${ row } -${ col } ` )
447+ highlightedPositions . value . has ( `${ row } -${ col } ` )
458448
459449 const isSelectedSquare = ( row : number , col : number ) : boolean =>
460450 selectedSquare . value ?. row === row && selectedSquare . value ?. col === col
@@ -752,6 +742,13 @@ export function useGameState(
752742 // ============================================================
753743 const handleMouseDown = ( row : number , col : number , event : MouseEvent ) => {
754744 if ( event . button !== 0 ) return
745+
746+ // premove 模式下允许点击交互(但不支持拖拽)
747+ if ( canPremove . value ) {
748+ handleSquareClick ( row , col )
749+ return
750+ }
751+
755752 if ( ! canInteract . value ) return
756753
757754 const piece = board . value [ row ] ?. [ col ]
@@ -1117,7 +1114,12 @@ export function useGameState(
11171114 cancelAIMove ( )
11181115 isAIThinking . value = true
11191116
1120- // 使用 setTimeout 让 UI 先更新,避免阻塞渲染
1117+ // 模拟 AI 思考延迟(让棋钟有时间走动)
1118+ // 基础延迟 500ms + 根据难度随机追加 0~difficulty*500ms
1119+ const baseDelay = 500
1120+ const randomExtra = Math . random ( ) * ( 6 - aiDifficulty . value ) * 500
1121+ const thinkDelay = baseDelay + randomExtra
1122+
11211123 aiMoveTimer = window . setTimeout ( ( ) => {
11221124 aiMoveTimer = null
11231125 if ( isGameOver . value ) {
@@ -1149,7 +1151,7 @@ export function useGameState(
11491151 } )
11501152 }
11511153 }
1152- } , 300 )
1154+ } , thinkDelay )
11531155 }
11541156
11551157 const checkAndTriggerAI = ( ) => {
@@ -1224,6 +1226,7 @@ export function useGameState(
12241226 gameStatusMessage,
12251227 isGameOver,
12261228 canInteract,
1229+ canPremove,
12271230 isAITurn,
12281231
12291232 // 走棋
0 commit comments