@@ -34,71 +34,60 @@ export function useBoardDisplay() {
3434 }
3535
3636 // --- Overlay 纹理:用于高亮选中格子、合法走法、premove、上一步移动 ---
37- const getOverlayTexture = (
38- board : Board ,
39- selectedSquare : { row : number ; col : number } | null ,
40- possibleMoves : { row : number ; col : number } [ ] ,
41- isDragging : boolean ,
42- hoverSquare : { row : number ; col : number } | null ,
43- row : number ,
44- col : number ,
45- premove ?: { from : { row : number ; col : number } ; to : { row : number ; col : number } } | null ,
46- lastMove ?: { from : { row : number ; col : number } ; to : { row : number ; col : number } } | null ,
47- canPremove ?: boolean ,
48- ) : string | null => {
49- // 上一步移动的高亮(起始格和目标格),优先于其他高亮
50- if ( lastMove ) {
51- if (
52- ( lastMove . from . row === row && lastMove . from . col === col ) ||
53- ( lastMove . to . row === row && lastMove . to . col === col )
54- ) {
55- return boardMoveHover
56- }
57- }
58-
59- // Premove 高亮 - 目标格
60- if ( premove && premove . to . row === row && premove . to . col === col ) {
61- return boardPremoveHighlighted
62- }
63-
64- // Premove 高亮 - 起始格
65- if ( premove && premove . from . row === row && premove . from . col === col ) {
66- return canPremove
67- ? boardPremoveHover
68- : boardMoveHover
37+ const getOverlayTexture = (
38+ board : Board ,
39+ selectedSquare : { row : number ; col : number } | null ,
40+ possibleMoves : { row : number ; col : number } [ ] ,
41+ isDragging : boolean ,
42+ hoverSquare : { row : number ; col : number } | null ,
43+ row : number ,
44+ col : number ,
45+ premove ?: { from : { row : number ; col : number } ; to : { row : number ; col : number } } | null ,
46+ lastMove ?: { from : { row : number ; col : number } ; to : { row : number ; col : number } } | null ,
47+ canPremove ?: boolean ,
48+ ) : string | null => {
49+ const move = possibleMoves . find (
50+ ( candidate ) => candidate . row === row && candidate . col === col ,
51+ )
52+ const targetPiece = board [ row ] ?. [ col ] ?? null
53+ const isCapture = move !== undefined && targetPiece !== null
54+
55+ if ( isCapture ) {
56+ if ( hoverSquare ?. row === row && hoverSquare ?. col === col ) {
57+ return canPremove ? boardPremoveHover : boardMoveHover
6958 }
59+ return canPremove ? boardPremoveCapture : boardMoveCapture
60+ }
7061
71- // 当前选中格高亮(premove 模式下使用 premove 版纹理)
72- if ( selectedSquare ?. row === row && selectedSquare ?. col === col ) {
73- return canPremove
74- ? boardPremoveHover
75- : boardMoveHover
76- }
62+ if ( premove && premove . to . row === row && premove . to . col === col ) {
63+ return boardPremoveHighlighted
64+ }
7765
78- const move = possibleMoves . find (
79- ( candidate ) => candidate . row === row && candidate . col === col ,
80- )
66+ if ( premove && premove . from . row === row && premove . from . col === col ) {
67+ return canPremove ? boardPremoveHover : boardMoveHover
68+ }
8169
82- if ( move ) {
83- if ( hoverSquare ?. row === row && hoverSquare ?. col === col ) {
84- return canPremove
85- ? boardPremoveHover
86- : boardMoveHover
87- }
70+ if ( selectedSquare ?. row === row && selectedSquare ?. col === col ) {
71+ return canPremove ? boardPremoveHover : boardMoveHover
72+ }
8873
89- const targetPiece = board [ row ] ?. [ col ] ?? null
90- if ( targetPiece !== null ) {
91- return canPremove
92- ? boardPremoveCapture
93- : boardMoveCapture
94- }
95- return canPremove
96- ? boardPremovePlaceable
97- : boardMovePlaceable
74+ if ( move ) {
75+ if ( hoverSquare ?. row === row && hoverSquare ?. col === col ) {
76+ return canPremove ? boardPremoveHover : boardMoveHover
9877 }
78+ return canPremove ? boardPremovePlaceable : boardMovePlaceable
79+ }
9980
100- return null
81+ if ( lastMove ) {
82+ if (
83+ ( lastMove . from . row === row && lastMove . from . col === col ) ||
84+ ( lastMove . to . row === row && lastMove . to . col === col )
85+ ) {
86+ return boardMoveHover
87+ }
10188 }
89+ return null
90+ }
10291
10392 // --- 棋子图片 ---
10493 const getPieceImage = (
0 commit comments