HSP3 ゲームのプログラミング
 ポーカー・ゲーム制作 前へ 目次へ 次へ 

(3) 賭点の入力

 カードが5枚ずつ配布された後、プレイヤーは配布されたカードを見て賭点を入力する。
 配置オブジェクトの入力ボックスを用意して、点数をキーボードから入力する方法もあるが、マウスだけで操作できるように作成したい。配置オブジェクトのボタンを用意して、クリックするごとに賭点が加算(減算)させる方法が考えられる。ボタンはカブ・ゲームでも使用したので、ここでは表示した文字をクリックして賭点が加算(減算)するように作成していく。

○ クリック領域等の表示(描画)

 メッセージ領域(0, 250)〜(319, 279)を背景色(緑色(0, 100, 0))で消去してから、図のように「賭点を入力して下さい。」と白色(0, 0, 0)で表示する。

    color 0, 100, 0 : boxf 0, 250                ;メッセージ領域消去
    font "MS Pゴシック", 16 : color 255, 255, 255
    pos 5, 255 : mes "賭点を入力して下さい。"    ;メッセージ表示

 続いて、クリックする場所として[+10]、[-10]、[決定]を表示する。まず、灰色(128, 128, 128)で塗りつぶしの四角形をboxf命令で描画してから"+10"、"-10"、"決定"の文字を表示する。逆にすると文字が見えなくなるので注意すること。


○ クリックの入力待ちと賭点計算

 メッセージを表示した後、[+10]または[-10]がクリックされるのを待つ。クリックの入力はstick命令で受け取る。[+10]がクリックされたに賭点に10を加算し、[-10]がクリックされたに賭点に10を減算して、ゲーム領域を表示する。[決定]がクリックされるまで待ち続ける。
 左クリックされたとき、stick命令で得られる値は255である。このときのクリックされた座標はシステム変数mousexとmouseyに格納されているので、灰色の四角形の中かどうかを判定する。

    ;賭点決定待ち
    repeat
        stick kk
        if kk = 256 & mousey >= 255 & mousey <= 274 {    ;左クリック
            if mousex >= 180 & mousex <= 215 : kake += 10          ;賭点加算
            if mousex >= 220 & mousex <= 255 : kake -= 10          ;賭点減算
            if mousex >= 260 & mousex <= 305 & kake ! 0 : break    ;賭点決定
            kake = limit(kake, 0, tokuten)    ;賭点の制限
            gosub *gf_disp    ;ゲーム領域表示
        }
        await 100
    loop
 repeat〜loopによる永久ループで[決定]ボタンがクリックされるまで待ち続ける。
 [+10]、[-10]、[決定]の3カ所のy座標の範囲は同じなので、左クリックと同時にif文で判定している。
 次の3つのif文ではx座標の範囲を判定して、賭点の計算と決定の処理をしている。
 limit命令(関数)で賭点が負数または得点を超えないように制限している。



課題(poker62.hsp)
 賭点の入力と決定の処理を追加する。


(リスト)



(4) 交換カード入力

 賭点を決定した後、交換するカードを選択して決定する。交換するカードはクリックで選択する。選択したカードがわかるように目印を付ける必要がある。ここでは、図のようにカードの上に「交換」の文字を表示することにする。
 通常は灰色で表示しておき、クリックで選択されたら黒色で表示する。クリックするごとに灰色(非選択)と黒色(選択)を繰り返す。

 交換するカードか判定するため、配列chgを用意する。-1で交換しない、1で交換する。最初は、-1で初期化する。

   dim chg, 10    ;交換用フラグ
;ゲーム初期設定 -----
    … …
    foreach crd
        crd(cnt) = -1    ;配布カード初期化
        chg(cnt) = -1    ;交換用フラグ初期化
    loop

 「交換」の文字の表示処理は、ゲーム領域表示のサブルーチンgf_dispの中に追加する。

   ;交換マーク表示
    font "MS ゴシック", 10
    foreach chg
        pos ptx(cnt) + 10, pty(cnt) - 15
        if chg(cnt) = 1 : color 0, 0, 0 : else : color 100, 100, 100
        mes "交換"
    loop


○ 交換のメッセージ表示

 賭点入力と同じように、交換のメッセージ「交換するカードをクリックして下さい。」と[決定]を表示する。

    color 0, 100, 0 : boxf 0, 250        ;メッセージ領域消去
    font "MS Pゴシック", 16 : color 255, 255, 255
    pos 5, 255 : mes "交換するカードをクリックして下さい。"
    color 128, 128, 128
    boxf 260, 255, 305, 274
    font "MS Pゴシック", 16, 1 : color 0, 0, 0
    pos 265, 257 : mes "決定"

○ クリックの入力待ち

 賭点入力と同じように、repeat〜loopによる永久ループで[決定]ボタンがクリックされるまで待ち続ける。

    ;交換カード決定待ち
    repeat
        stick kk
        if kk = 256 & mousey >= pty(0) & mousey <= pty(0) + 55 {    ;カードクリック
            repeat 5
                if mousex >= ptx(cnt) & mousex <= ptx(cnt) + 40 {
                    chg(cnt) = -chg(cnt)
                    gosub *gf_disp    ;ゲーム領域表示
                }
            loop
        }
        if kk = 256 & mousex >= 260 & mousex <= 305 & mousey >= 255 & mousey <= 274 : break    ;[決定]
        await 100
    loop

 ここまでの処理を追加して、動作を確認する。実行して、賭点を決定した後、「交換するカードをクリックして下さい。」と表示されたらプレイヤーの5枚のカードをクリックして、「交換」の文字が変化するか確認する。

○ カード交換

 交換するカードを選択して、[決定]をクリックした後、選択したカードを交換する処理を追加する。交換するカードの情報は配列chg(0)〜chg(4)に格納されている。値が-1であれば交換する。
 交換するとき、元のカードを消去し、その場所にアニメーションで新しいカードを配布する。

    ;カード交換
    color 0, 100, 0 : boxf 0, 250  ;メッセージ領域消去
    repeat 5    ;cnt=0,1,2,3,4
        if chg(cnt) = 1 {
            crd(cnt) = -1          ;交換カードを消去
            gosub *gf_disp         ;ゲーム領域表示
            nn = cnt               ;移動先設定
            gosub *card_move       ;カード移動アニメーション
            crd(cnt) = card(cnum)  ;交換カードを配布
            cnum++                 ;インデックス加算
            gosub *gf_disp         ;ゲーム領域表示
        }
    loop



課題(poker63.hsp)
 交換するカード選択とカード交換の処理を追加する。


(リスト)


 ポーカー・ゲーム制作 前へ 目次へ 次へ 
2007 © Hiroshi Masuda 

 

 

inserted by FC2 system