HSP3 ゲームのプログラミング | |
迷路・ゲーム制作 |
(3) 経過時間表示
時間をかければアイテムをすべて取ってゴールすることができる。時間か移動回数など何か制限が必要である。ここでは、時間制限を設けることにする。まず、経過時間を表示する処理を追加する。
(maze16.hsp)
経過時間を表示する。
;maze16.hsp << 省略 >> px = 1 : py = 1 ;スタート座標 px1 = 1 : py1 = 1 ;足跡格納用 ;ゲームメイン tt1 = gettime(4) * 3600 + gettime(5) * 60 + gettime(6) ;開始時間 repeat ;足跡消去 color 255, 255, 255 boxf px1 * bsize + 1, py1 * bsize + 1, px1 * bsize + bsize - 1, py1 * bsize + bsize - 1 ;キー入力 stick kk, 15 if kk = 1 & maze(px - 1, py) = 0 : px-- ;左(西) if kk = 2 & maze(px, py - 1) = 0 : py-- ;上(北) if kk = 4 & maze(px + 1, py) = 0 : px++ ;右(東) if kk = 8 & maze(px, py + 1) = 0 : py++ ;下(南) if kk = 128 : end ;[Esc] ;アイテムチェック foreach ptx if ptx(cnt) = px & pty(cnt) = py { ;座標チェック tokuten += 100 ;得点加算 gosub *tokuten_disp ;得点表示 ptx(cnt) = 0 : pty(cnt) = 0 ;アイテム座標消去 break } loop ;プレイヤー表示 color 255, 0, 0 circle px * bsize + 1, py * bsize + 1, px * bsize + bsize, py * bsize + bsize px1 = px : py1 = py ;一つ前 if px = bx - 2 & py = by - 2 { ;ゴール確認 wa = 0 ;合計用 foreach ptx wa += ptx(cnt) ;x座標の合計 loop if wa = 0 : break ;ゴールOK } tt2 = gettime(4) * 3600 + gettime(5) * 60 + gettime(6) - tt1 ;経過時間計算 gosub *jikan_disp ;経過時間表示 await 100 loop dialog "もう一度しますか。", 2, "迷路・ゲーム" if stat = 6 :goto *start stop ;経過時間表示 ----- *jikan_disp ty = 100 color 200, 200, 255 boxf winx1 + 1, ty, winx1 + 150, ty + 20 color 0, 0, 0 pos winx1 + 5, ty : mes strf("経過時間:%04d", tt2) return ;得点表示 ----- *tokuten_disp << 省略 >> return ;迷路作成(棒倒し法) ----- *maze_make << 省略 >> return
時間の情報を取り出すにはgettime関数を利用する。引数が4で現在の時間、5で現在の分、6で現在の秒のデータが得られる。変数tt1には開始時間の午前0時からの秒数、変数tt2にはゲーム開始からの秒数が格納される。
(maze66.hsp)
ゲーム開始から180秒でゲームオーバーになるようにする。
・経過時間表示の呼び出し(gosub *jikan_disp)の後、変数tt2を調べる。wa=-1としているのは、ゴールしたとき(コメント「ゴールOK」)、アイテムをすべて取っているのでwa=0でループを抜け出すので、同じ変数waを使って別の値(ここでは-1)を格納してからbreak命令でループを抜け出すようにしている。したがって、ゲーム再開の確認部分も次のように変更する必要がある。
if tt2 >= 180 : wa = -1 : break ;180秒超え、GameOver
if wa = 0 {
dialog "もう一度しますか。", 2, "迷路・ゲーム"
if stat = 6 : goto *start
}
if wa = -1 {
dialog "ゲームオーバーです。もう一度しますか。", 2, "迷路・ゲーム"
if stat = 6 : tokuten = 0 : goto *start
}
(maze67.hsp)
ゴールしたとき、残り時間(秒)の10倍を得点に加算する。また、1マス進むごとに1ずつ減点していく。
・残り時間は、180秒から経過時間(秒)を減算すれば求まる。
・移動は「キー入力」で処理している。次のように処理する。
if kk = 1 & maze(px - 1, py) = 0 : px-- : tokuten -= 1 : gosub *tokuten_disp ;左(西)
◎ その他
迷路・ゲームの制作は一応終了とするが、いろいろなルールを考えて、追加してみよう。
・アイテムと同じように「障害」を配置して、この「障害」を通過すると100点減点にする。
「障害」を通過するとその「障害」は → 消える。 → 消えない。
・移動する「障害」を配置する。移動する「障害」は迷路探索の処理を使い、自身をスタート、プレイヤーをゴールとして探索する。
迷路・ゲーム制作 | |
2007 © Hiroshi Masuda |