ブラックジャックのゲームをシミュレートするプログラムを書いており、スイッチを使用してメニューを移動しています。うまく機能していますが、スイッチを拡張して複数のケースを含めることができるかどうか疑問に思っています。たとえば、各プレーヤーには多くの結果があります。たとえば、ブラックジャック、ブラックジャック対ブラックジャック、プレーヤー バストとディーラーはバストしない、ディーラー バストはするがプレーヤーはバストしない、プレーヤーとディーラーの両方がバストする、ダブル ダウンとバストなど。または、if/else-if を複数の条件でスタックする必要がありますか?
3 に答える
@LeoCorreaの回答へのコメントから外れると、条件はブール値のようです。
多分次のようなものを試してください:
final int PLAYER_BUST = 1 << 0;
final int DEALER_BUST = 1 << 1;
// ...
int total = 0;
total |= player.bust ? PLAYER_BUST : 0;
total |= dealer.bust ? DEALER_BUST : 0;
switch(total) {
case 0:
// neither player nor dealer has bust
break;
case PLAYER_BUST:
// just player bust, so dealer wins
break;
case DEALER_BUST:
// just dealer bust, so player wins
break;
case PLAYER_BUST | DEALER_BUST:
// both have bust
break;
}
は1 << x
2^x で、|
はビットごとの OR です。私の例は n = 2 の場合ですが、n は任意の適切な数にすることができます。
これは、PHP がエラー レベルをエンコードする方法に似ています。ほとんどのレベルが 2 の累乗で表されていることに注意してください (2 進法では「1」の数字は 1 つだけです)。
これらのレベルで使用|
して、n 個のブール値を組み合わせた結果を取得します。int の各ビットはtotal
、条件の 1 つを表します。
n 個のブール値を組み合わせた結果は 2^n 個あるため、各結果を n ビットの整数と一致させることができます。n ブール値をオンにすることはできませんが、幸いなことに、n ブール値を表すswitch
この整数を使用できます。total
残念ながら、switch
Java では複数の変数を使用することはできません。@irrelephant が提案したビットマスクとは別に、評価を再考してみることができます。
私はブラックジャックに完全に精通しているわけではありませんが、player.busted
フィールドや同様のフィールドを設定する代わりに、プレイヤーのスコアを に設定するだけでよいと思います-1
(または、スコア 30 がスコア 25 よりも悪い場合は、 に設定できます-score
) 。次に、スコアを比較します。
PSの代わりに
if (player.bust == false && dealer.bust == true)
あなたはただ入力することができます
if (!player.bust && dealer.bust)
入力の手間が大幅に減り、読みやすくなります。
あなたがそれを指定していないので、あなたが話している言語についてはわかりませんが、Rubyではcaseステートメント(switchステートメントのように機能します)
次のようなことができます
case [A, B]
when [true, true] then ...
when [false, true] then ...
複数の条件で同じ出力を出力することもできます
case condition
when ("a" and "b")
# do something
when "c"
# do something
end
あなたの質問は非常に漠然としています。使用している言語により具体的にすることを検討する必要があると思います。