بلاك جاك

بلاك جاك

تمرين تعلّمي

مقدمة

مثل لغات البرمجة الأخرى، توفّر Go أيضًا جملة switch. جمل switch أسلوب أقصر لكتابة سلاسل if ... else if الطويلة. لإنشاء جملة switch، نبدأ باستخدام الكلمة المفتاحية switch متبوعة بقيمة أو تعبير. ثم نُعلن كل شرط من الشروط باستخدام الكلمة المفتاحية case. يمكننا أيضًا إعلان حالة default، تُنفَّذ عندما لا يتحقق أيٌّ من شروط case السابقة:

operatingSystem := "windows"

switch operatingSystem {
case "windows":
    // do something if the operating system is windows
case "linux":
    // do something if the operating system is linux
case "macos":
    // do something if the operating system is macos
default:
    // do something if the operating system is none of the above
} 

من الأمور المثيرة للاهتمام في جمل switch أن القيمة بعد الكلمة المفتاحية switch يمكن حذفها، ويمكننا حينها وضع شروط منطقية لكل case:

age := 21

switch {
case age > 20 && age < 30:
    // do something if age is between 20 and 30
case age == 10:
    // do something if age is equal to 10
default:
    // do something else for every other case
}

التعليمات

في هذا التمرين سنحاكي الجولة الأولى من لعبة Blackjack.

ستتلقى ورقتين وستتمكن من رؤية ورقة الموزّع المكشوفة. تُمثَّل جميع الأوراق باستخدام سلسلة نصية مثل "ace" و"king" و"three" و"two" وغيرها. وقيمة كل ورقة كما يلي:

الورقة القيمة الورقة القيمة
ace 11 eight 8
two 2 nine 9
three 3 ten 10
four 4 jack 10
five 5 queen 10
six 6 king 10
seven 7 أخرى 0

ملاحظة: عادةً يمكن أن تأخذ أوراق الآس القيمة 1 أو 11، ولكن للتبسيط سنفترض أنها تأخذ القيمة 11 فقط.

بناءً على ورقتيك وورقة الموزّع، توجد استراتيجية للجولة الأولى من اللعبة، لديك فيها الخيارات التالية:

  • التوقف (S)
  • السحب (H)
  • الانقسام (P)
  • الفوز تلقائيًا (W)

وعلى الرغم من أنها ليست مثالية بعد، ستتبع الاستراتيجية التي كان صديقك Alex يطوّرها، وهي كالتالي:

  • إذا كان لديك زوج من الآس، فيجب أن تقسّمه دائمًا.
  • إذا كان لديك Blackjack (ورقتان مجموعهما 21)، ولم يكن لدى الموزّع آس ولا ورقة وجه (Jack/Queen/King) ولا عشرة، فإنك تفوز تلقائيًا. أما إذا كان لدى الموزّع أي من تلك الأوراق، فسيكون عليك أن تتوقف وتنتظر كشف الورقة الأخرى.
  • إذا كان مجموع ورقتيك ضمن المدى [17، 20]، فيجب أن تتوقف دائمًا.
  • إذا كان مجموع ورقتيك ضمن المدى [12، 16]، فيجب أن تتوقف دائمًا إلا إذا كان لدى الموزّع 7 أو أعلى، وفي هذه الحالة يجب أن تسحب دائمًا.
  • إذا كان مجموع ورقتيك 11 أو أقل، فيجب أن تسحب دائمًا.

1. احسب قيمة أي ورقة

نفّذ دالة لحساب القيمة العددية لورقة:

value := ParseCard("ace")
fmt.Println(value)
// Output: 11

2. نفّذ منطق القرار في الجولة الأولى

اكتب دالة تنفّذ منطق القرار كما هو موضح أعلاه:

func FirstTurn(card1, card2, dealerCard string) string

إليك بعض الأمثلة على النتائج المتوقعة:

FirstTurn("ace", "ace", "jack") == "P"
FirstTurn("ace", "king", "ace") == "S"
FirstTurn("five", "queen", "ace") == "H"
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Go Exercism

مستعد لبدء بلاك جاك؟

سجّل في Exercism لتتعلّم وتتقن Go عبر 35 مفهومًا167 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.