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 |