ট্র্যাক
/
Go
Go
/
অনুশীলনী
/
ব্ল্যাকজ্যাক
ব্ল্যাকজ্যাক

ব্ল্যাকজ্যাক

লার্নিং অনুশীলনী

ভূমিকা

অন্য ভাষাগুলোর মতো Go-তেও একটি switch স্টেটমেন্ট আছে। লম্বা if ... else if স্টেটমেন্ট লেখার একটি ছোট উপায় হলো switch স্টেটমেন্ট। একটি 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

দ্রষ্টব্য: সাধারণত ace-এর মান 1 বা 11 হতে পারে, তবে সরলতার জন্য আমরা ধরে নেব যে এর মান কেবল 11 হতে পারে।

আপনার দুটি কার্ড এবং ডিলারের কার্ডের উপর নির্ভর করে খেলার প্রথম টার্নের জন্য একটি কৌশল আছে, যেখানে আপনার কাছে নিচের বিকল্পগুলো রয়েছে:

  • স্ট্যান্ড (S)
  • হিট (H)
  • স্প্লিট (P)
  • স্বয়ংক্রিয়ভাবে জয় (W)

যদিও এটি এখনো সম্পূর্ণ সর্বোত্তম নয়, তবুও আপনি আপনার বন্ধু Alex যে কৌশলটি তৈরি করে আসছেন সেটিই অনুসরণ করবেন, যা নিচের মতো:

  • আপনার কাছে যদি এক জোড়া ace থাকে, তবে সেগুলো সবসময় স্প্লিট করতেই হবে।
  • আপনার কাছে যদি Blackjack থাকে (দুটি কার্ড যাদের যোগফল 21), আর ডিলারের কাছে ace, ফেস কার্ড (Jack/Queen/King) বা ten না থাকে, তবে আপনি স্বয়ংক্রিয়ভাবে জিতে যাবেন। ডিলারের কাছে এসবের যেকোনো একটি থাকলে আপনাকে স্ট্যান্ড করতে হবে এবং অন্য কার্ডটি খোলা হওয়ার জন্য অপেক্ষা করতে হবে।
  • আপনার কার্ড দুটির যোগফল [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টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।