From 347e01b5ee7f42cfb11066adff85326f621003bf Mon Sep 17 00:00:00 2001 From: flykhan Date: Sun, 26 Apr 2026 20:15:02 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=80=89=E4=B8=AD=E4=B8=8A=E6=B5=AE?= =?UTF-8?q?=E6=94=B9=E4=B8=BA1/3=E7=89=8C=E9=AB=98=E3=80=81=E9=9D=9E?= =?UTF-8?q?=E5=9B=9E=E5=90=88=E5=8F=AF=E7=82=B9=E5=87=BB=E6=9F=A5=E7=9C=8B?= =?UTF-8?q?=E6=89=8B=E7=89=8C=E3=80=81=E6=B8=85=E9=99=A4=E9=80=89=E4=B8=AD?= =?UTF-8?q?=E9=98=B2=E9=94=99=E4=BD=8D=E8=AF=AF=E4=B8=8A=E6=B5=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/unogame/ui/components/CardView.kt | 14 +++++----- .../java/com/unogame/ui/screens/GameScreen.kt | 26 +++++++++++++------ 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/unogame/ui/components/CardView.kt b/app/src/main/java/com/unogame/ui/components/CardView.kt index 40ada40..765891d 100644 --- a/app/src/main/java/com/unogame/ui/components/CardView.kt +++ b/app/src/main/java/com/unogame/ui/components/CardView.kt @@ -65,7 +65,7 @@ private fun ClassicCard( Box( modifier = modifier .width(60.dp).height(90.dp) - .then(if (selected) Modifier.offset(y = (-10).dp) else Modifier) + .then(if (selected) Modifier.offset(y = (-30).dp) else Modifier) .shadow(if (selected) 8.dp else 2.dp, RoundedCornerShape(10.dp)) .clip(RoundedCornerShape(10.dp)) .background( @@ -89,7 +89,7 @@ private fun ElegantCard( Box( modifier = modifier .width(60.dp).height(90.dp) - .then(if (selected) Modifier.offset(y = (-10).dp) else Modifier) + .then(if (selected) Modifier.offset(y = (-30).dp) else Modifier) .shadow(if (selected) 8.dp else 3.dp, RoundedCornerShape(14.dp)) .clip(RoundedCornerShape(14.dp)) .background(Color.White) @@ -129,7 +129,7 @@ private fun MidnightCard( Box( modifier = modifier .width(60.dp).height(90.dp) - .then(if (selected) Modifier.offset(y = (-10).dp) else Modifier) + .then(if (selected) Modifier.offset(y = (-30).dp) else Modifier) .shadow(if (selected) 12.dp else 4.dp, RoundedCornerShape(12.dp), ambientColor = glow, spotColor = glow) .clip(RoundedCornerShape(12.dp)) .background(DarkCard) @@ -160,7 +160,7 @@ private fun NeonCard( Box( modifier = modifier .width(60.dp).height(90.dp) - .then(if (selected) Modifier.offset(y = (-10).dp) else Modifier) + .then(if (selected) Modifier.offset(y = (-30).dp) else Modifier) .shadow(if (selected) 10.dp else 4.dp, RoundedCornerShape(8.dp), ambientColor = neonColor, spotColor = neonColor) .clip(RoundedCornerShape(8.dp)) .background(Color(0xFF0A0A0A)) @@ -188,7 +188,7 @@ private fun PastelCard( Box( modifier = modifier .width(60.dp).height(90.dp) - .then(if (selected) Modifier.offset(y = (-10).dp) else Modifier) + .then(if (selected) Modifier.offset(y = (-30).dp) else Modifier) .shadow(if (selected) 6.dp else 2.dp, RoundedCornerShape(16.dp)) .clip(RoundedCornerShape(16.dp)) .background( @@ -224,7 +224,7 @@ private fun ForestCard( Box( modifier = modifier .width(60.dp).height(90.dp) - .then(if (selected) Modifier.offset(y = (-10).dp) else Modifier) + .then(if (selected) Modifier.offset(y = (-30).dp) else Modifier) .shadow(if (selected) 6.dp else 2.dp, RoundedCornerShape(6.dp)) .clip(RoundedCornerShape(6.dp)) .background( @@ -249,7 +249,7 @@ private fun OceanCard( Box( modifier = modifier .width(60.dp).height(90.dp) - .then(if (selected) Modifier.offset(y = (-10).dp) else Modifier) + .then(if (selected) Modifier.offset(y = (-30).dp) else Modifier) .shadow(if (selected) 6.dp else 3.dp, RoundedCornerShape(10.dp)) .clip(RoundedCornerShape(10.dp)) .background( diff --git a/app/src/main/java/com/unogame/ui/screens/GameScreen.kt b/app/src/main/java/com/unogame/ui/screens/GameScreen.kt index 7fd842a..002ab54 100644 --- a/app/src/main/java/com/unogame/ui/screens/GameScreen.kt +++ b/app/src/main/java/com/unogame/ui/screens/GameScreen.kt @@ -49,6 +49,11 @@ fun GameScreen( val currentPlayer = gameState.currentPlayer val sortedCards = myCards.sortedWith(compareBy({ it.color.ordinal }, { it.number }, { it.type.ordinal })) + // 手牌变化后清除选中状态,避免位置错位导致的误上浮 + LaunchedEffect(myCards.size, gameState.turnNumber) { + selectedCardIndex = -1 + } + Box( modifier = Modifier .fillMaxSize() @@ -299,16 +304,21 @@ fun GameScreen( topCard = topCard, currentWildColor = gameState.currentWildColor, onCardClick = { index -> - if (!isMyTurn) return@PlayerHand val realCard = sortedCards[index] - if (realCard.type.isWild) { - selectedAutoCard = sortedCards.indexOf(realCard) - showColorPicker = true - } else if (isSevenZeroMode && realCard.type == CardType.NUMBER && realCard.number == 7 && gameState.players.size > 2) { - onPlaySeven(myCards.indexOf(realCard)) + if (isMyTurn) { + // 我的回合:打出牌 + if (realCard.type.isWild) { + selectedAutoCard = sortedCards.indexOf(realCard) + showColorPicker = true + } else if (isSevenZeroMode && realCard.type == CardType.NUMBER && realCard.number == 7 && gameState.players.size > 2) { + onPlaySeven(myCards.indexOf(realCard)) + } else { + selectedCardIndex = index + onPlayCard(myCards.indexOf(realCard)) + } } else { - selectedCardIndex = index - onPlayCard(myCards.indexOf(realCard)) + // 非我的回合:仅上浮查看,再次点击取消 + selectedCardIndex = if (selectedCardIndex == index) -1 else index } }, modifier = Modifier