fix: trump trick

This commit is contained in:
2026-06-24 14:17:21 +03:30
parent e0d6763c00
commit 500c61a409
4 changed files with 70 additions and 13 deletions
@@ -45,7 +45,7 @@ class HokmGame extends FlameGame {
double _shake = 0;
double _t = 0;
List<String> _prevTrick = const [];
bool _cutThisTrick = false; // افکتِ بریدن فقط یک‌بار در هر دست
int _bestTrumpRank = 0; // بالاترین رتبه‌ی حکمِ بازی‌شده در دستِ جاری (برای افکتِ بریدن)
int _prevHandSize = 0; // برای تشخیصِ پخشِ کارت (دستِ جدید) جهت صدای بُر زدن
bool _silent = false; // هنگام خروج از میز، دیگر صدایی پخش نشود
bool _introActive = true; // تا پایانِ نمایشِ «جستجوی حریف»
@@ -135,17 +135,19 @@ class HokmGame extends FlameGame {
}
final addedOne =
now.length == _prevTrick.length + 1 && _isPrefix(_prevTrick, now);
if (now.length <= 1) _cutThisTrick = false; // دستِ جدید ⇒ ریستِ افکتِ بریدن
if (now.length <= 1) _bestTrumpRank = 0; // دستِ جدید ⇒ ریستِ بالاترین حکم
if (addedOne) {
final card = s.trick.last;
final isCut =
s.trump != null &&
// بریدن: خالِ راهبر حکم نیست و کارتِ بازی‌شده حکم است.
final isTrump = s.trump != null &&
s.leadSuit != null &&
s.leadSuit != s.trump &&
suitName(card.card) == s.trump;
// افکتِ بریدن فقط برای اولین بریدنِ هر دست (بریدن‌های بعدی فقط صدای گذاشتن).
if (isCut && !_cutThisTrick) {
_cutThisTrick = true;
final rank = isTrump ? rankValue(card.card) : 0;
// افکتِ بریدن فقط وقتی حکمِ بازی‌شده «دست را می‌برد» (بالاترین حکم تا کنون):
// یعنی اولین بریدن یا روبریدنِ بالاتر. حکمِ پایین‌تر (بازنده) فقط صدای گذاشتن.
if (isTrump && rank > _bestTrumpRank) {
_bestTrumpRank = rank;
_shake = 1.0;
add(Lightning());
AppSounds.cut(); // بریدن با حکم (شمشیر)
@@ -273,6 +275,8 @@ class HokmGame extends FlameGame {
_turnElapsed = 0;
_beatPlayed = false;
_hbAccum = 0;
// صدای «نوبتِ شما» فقط هنگامِ بازیِ کارت (نه پخش/انتخابِ حکم).
if (s.phase == 'playing' && !_dealing) AppSounds.turn();
}
_turnElapsed += dt;