HSP3 ゲームのプログラミング | |
ラケット・ゲーム制作 |
(3) 得点・手持ちボールの処理
得点加算、手持ちボールなどの処理を追加し、その情報を情報領域に表示する。
タイトル(ラケット・ゲーム) ゲーム領域
・8ドット単位で幅60(60×8=480ドット)とする。
・ボールサイズは2×2、ラケットは4×1とする。
・一度打ち返すと10ポイントとする。情報領域
・幅は640-480=160
・ゲームタイトル表示
・得点表示
・残りボール表示
追加・修正する処理を示す。
○ タイトルバー
タイトルバーにゲームのタイトルを表示する。命令はtitleで次のようにする。
title "ラケット・ゲーム"
○ 得点の処理
得点は変数tokutenに格納することにする。初期値として0を格納する。ボールとラケットの衝突判定で衝突と判定されたとき、得点を加算する。得点加算後、情報領域に得点を表示する。情報領域への表示はほかにもあるので、サブルーチンとする。
tokuten = 0 ;得点初期化
if abs(x0 - x1 - 1) <= 2 & y0 + 2 = y1 { ;衝突判定
dy0 = -dy0 ;方向反転
tokuten = tokuten + 10 ;得点加算
gosub *joho ;情報領域表示
}
○ 残りボール等の処理
3個のボールを手持ちのボールとして、3回の失敗でゲームオーバーとする。ボールの個数は変数ballに格納することにする。失敗の判定は、ボールが下壁に衝突したときである。
残りボールを表示する方法として、数字で表示する方法とボールを表示する方法がある。ここでは、残りの個数分のボールを表示する方法でプログラムする。
ball = 2 ;残りボール
if y0 >= winy { ;下壁衝突
ball-- ;ボール減
break ;ループを抜ける
}
ループを抜けた後、「もう一度しますか。」のダイアログが表示される。残りボールがある間はダイアログを表示せずに次のボールでゲームが再開するようにする必要がある。
if ball >= 0 { ;残りボールあり
gosub *joho ;情報領域表示
goto *start ;ゲームスタート
}
「もう一度しますか。」のダイアログが表示され[はい]をクリックした後、ゲームを新しく再開する。ただし、ラベル*startにジャンプするのではなく、得点と残りボールを初期化する部分に戻る必要があるので、ラベル*restartを適切な場所に追加する。
dialog "もう一度しますか。", 2
if stat = 6 : goto *restart
○ 情報領域表示の処理
サブルーチンjohoとして作成する。
*joho
color 0, 0, 128 ;青色
boxf 60 * mm , 0 ;情報表示領域消去
;タイトル
color 255, 128, 128
pos 61 * mm, 0
mes "ラケット・ゲーム"
;得点
color 128, 192, 255
pos 62 * mm, 3 * mm
mes strf("得点 = %06d", tokuten)
;残りボール
repeat ball
pos (62 + cnt * 3) * mm, 56 * mm
gcopy 1, 0, 0
loop
return
表示される文字が弱いので、次の命令を初期設定に追加して太くする。
font "MS ゴシック", 18, 1 ;フォント設定
(racket92.hsp)
サンプルで示した処理を前の課題(racket91.hsp)に追加・修正せよ。
ラケット・ゲーム制作 | |
2007 © Hiroshi Masuda |