47 lines
1.5 KiB
Dart
47 lines
1.5 KiB
Dart
// توابع کمکیِ خالصِ کدِ کوتاهِ کارتها (مثل "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);
|
|
}
|