トラック
/
Go
Go
/
演習
/
ブラックジャック
ブラックジャック

ブラックジャック

学習演習

はじめに

他の言語と同じく、Goにもswitch文が用意されています。 switch文を使うと、長いif ... else if文を短く書けます。 switch文を作るには、まずキーワードswitchを使い、その後に値または式を書きます。 次に、それぞれの条件をキーワードcaseで宣言します。 また、それまでのどのcase条件にも一致しなかったときに実行されるdefaultケースを宣言することもできます:

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
}

説明

この演習では、ブラックジャックのゲームの最初のターンをシミュレートします。

2枚のカードを受け取り、ディーラーの表向きのカードを見ることができます。 すべてのカードは、"ace"や"king"、"three"、"two"などの文字列で表されます。 各カードの数値は次のとおりです。

card value card value
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 other 0

注意:一般に、aceは1または11の値を取ることができますが、簡単のため、ここでは11の値だけを取るものとします。

手持ちの2枚のカードとディーラーのカードに応じて、ゲームの最初のターンには戦略があり、次の選択肢から選びます。

  • スタンド(S)
  • ヒット(H)
  • スプリット(P)
  • 自動的に勝利(W)

まだ最適とは言えませんが、ここでは友人のAlexが開発してきた戦略に従います。その戦略は次のとおりです。

  • aceのペアを持っている場合は、必ずスプリットします。
  • ブラックジャック(2枚のカードの合計が21になる場合)で、ディーラーがace、絵札(Jack/Queen/King)、tenのいずれも持っていない場合は、自動的に勝利します。 ディーラーがこれらのカードのいずれかを持っている場合は、スタンドして、もう1枚のカードが公開されるのを待たなければなりません。
  • カードの合計が[17, 20]の範囲にある場合は、必ずスタンドします。
  • カードの合計が[12, 16]の範囲にある場合は、ディーラーが7以上でない限り必ずスタンドします。ディーラーが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に登録すれば、35個のコンセプト167個の演習、そして本物の人間によるメンタリングとともに、Goを学んでマスターできます。すべて無料です。