// توابع کمکیِ خالصِ کدِ کوتاهِ کارت‌ها (مثل "AS", "10H", "KD"). // بدون وابستگی به Flame/Flutter تا قابل‌تست و بازاستفاده باشد. /// نسبت ابعاد تصویرِ کارت (۵۰۰×۷۲۶ منبع). const double kCardRatio = 726 / 500; /// نام کاملِ خال از روی آخرین حرفِ کد: S/H/D/C. String suitName(String code) { switch (code[code.length - 1]) { case 'H': return 'hearts'; case 'D': return 'diamonds'; case 'C': return 'clubs'; default: return 'spades'; } } /// رتبه‌ی عددی کارت (۲..۱۰ معمولی، J=11، Q=12، K=13، A=14). int rankValue(String code) { switch (code.substring(0, code.length - 1)) { case 'A': return 14; case 'K': return 13; case 'Q': return 12; case 'J': return 11; default: return int.tryParse(code.substring(0, code.length - 1)) ?? 0; } } // ترتیب خال‌ها برای چیدنِ دست (سیاه/قرمز متناوب تا تفکیک بصری راحت‌تر باشد). const _suitOrder = {'S': 0, 'H': 1, 'C': 2, 'D': 3}; /// مقایسه برای مرتب‌سازی کارت‌های دست: ابتدا خال، سپس رتبه. int compareCards(String a, String b) { final sa = _suitOrder[a[a.length - 1]] ?? 0; final sb = _suitOrder[b[b.length - 1]] ?? 0; if (sa != sb) return sa - sb; return rankValue(a) - rankValue(b); }