1. ゲーム説明
- JとQとKの3枚のカードがあります
- ランダムに伏せられていますので1枚を選びます
- Kを引かないことがゲームの目的です(No More King)
- Kの場所を推理して123のキーを押すと、カードがオープンされます
- Kを引かずに何回続けられるか⁉️
- 10回連続できればかなりすごいです。その場合の確率は(1/3)^10≒1.7%
(自分の最高記録は13回です) - このゲームは当方が発案したものです
ゲーム開始画面。?が伏せられたカードです。番号のキーを押して下さい
1番のカードを選んでオープン‼️Jackなのでセーフ。右下の数字はスコアです。なにかキーを押して次へ進みます
次は2番のカードを選びましたが、Kingでしたのでドボンです。ゲームオーバー泣
2. ソースコード ※fx-5800P BASIC用です
注意: ソースは可読性UPのため字下げして//でコメントを書いていますが、いずれもCASIO BASICではエラーになりますので、実際にご利用される際には除去して下さい。
- 配列(DimZ)を使わず行列(Mat)を使用しましたので、GetKeyのキーコードだけ差し替えればfx-9750GIIIやfx-CG50などでも動作可能だと思います(試していません)
- プログラムで使用する変数
- Mat A[2,3]: [1,1-3]は札の管理。[2,1-3]は置き場の管理に使っています
- X:札の乱数を格納 Y:札置き場の乱数を格納
- K:キー入力判定用 L:入力されたキー値を格納
- S:スコアの格納
- I:ループ制御用
0→S // スコア。Kingを引かなかった回数
While 1 // メイン(無限ループ)
[[0,0,0][0,0,0]]→Mat A // 行列A確保。[1,1-3]は札管理。[2,1−3]は置き場管理
Do // 場札の取り出しと格納
RanInt#(1,3)→X // 手札乱数発生(1:J,2:Q,3:K)
If Mat A[1,X]=0:Then // 手札未使用(=0)なら使用済にする。使用済なら再Loop
X→Mat A[1,X]
Do
RanInt#(1,3)→Y // 場所の乱数発生
If Mat A[2,Y]=0:Then // 空き地なら札を格納、Loopを抜ける
X→Mat A[2,Y]:Break:IfEnd
LpWhile 1
IfEnd
LpWhile (Mat A[1,1]=0 Or Mat A[1,2]=0 Or Mat A[1,3]=0) // 全札配り終わるまでLoop
Locate 1,1,"<NO MORE KING> "
Locate 1,2,"[?] [?] [?] "
Locate 1,3," 1 2 3 " // スペース1個、3個、3個、6個
Locate 1,4," ( )" // スペース12個
Locate 14,4,S
Do:Getkey→K:LpWhile K<35 Or K>37 // BET待ち。1,2,3キーのみ有効
K-34→L // キー値(1,2,3)をLに格納
Locate L*2+(L-1)*2,4,"=" // 押したキー番号にマーキング
For 1→I To 3 // 場札をすべてめくる
Mat A[2,I]=1⇒Locate I*2+(I-1)*2,2,"J"
Mat A[2,I]=2⇒Locate I*2+(I-1)*2,2,"Q"
Mat A[2,I]=3⇒Locate I*2+(I-1)*2,2,"K"
Next
Locate 1,3," 1 2 3 ▶r∠θ" // ▶Eを表示 スペース1個、3個、3個、4個
Locate 16,3,"E"
If Mat A[2,L]=3:Then // King引き。ドボンでBreak
Locate L*2-1+(L-1)*2,4,"x=x" // 座標を算出してドボンマーク"x=x"表示
Locate 1,1,"<U ARE THE KING>"
Break
Else
S+1→S // JackまたはQueenならスコア+1
Locate 14,4,S
IfEnd
Do:Getkey→K:LpWhile Not(K) // ポーズ。キー押せば継続
WhileEnd
Locate 12,2,">BYE<"