2013年01月25日

DPC-100プログラム・ボールキャッチゲーム

 この記事も含めて、まとめはこちらLink


 DPC-100のプログラムをまた制作。前回はiPhoneのジャイロセンサーを使ったものだったけど、今回はタッチパネルを使ったものを。
 タイトルとしては「ボールキャッチゲーム」と名付けてみた。ボールを受け止めるごとにスコアが入るという簡単なルール。
 本当は最初、サッカーのゴールキーパーをイメージして作っていたけど、「受け止めてスコアが入ったら、逆やん」と思ったのでこのタイトルは没にしたw

ボールキャッチゲーム
110 STRING BAR
130 SC=0
140 WHILE 1
150 BX=6
160 I=0
170 WHILE I<4
180 CH=(1&I^1)*'.'+(1&I)*' '
190 GOSUB SUB
200 WAIT(0.3,0)
210 I+=1
220 WEND
230 TX=5
240 I=0
250 WHILE I<2
260 CH=(1&I^1)*'o'+(1&I)*'O'
270 CS=RANDOM()*2
280 CS=CS*2-1
290 J=0
300 WHILE J<3
310 BX+=CS
320 GOSUB SUB
330 IF (TX>3)&(TOUCH(-1,0)==1) THEN TX=CLAMP((TOUCH(0,0)+480)/250,0,2)*6
340 WAIT(0.2,0)
350 J+=1
360 WEND
370 I+=1
380 WEND
390 IF BX!=TX THEN BREAK
400 CH='#'
410 SC+=1
420 GOSUB SUB
430 WAIT(1.0,0)
450 WEND
460 CH='X'
470 GOSUB SUB
480 WAIT(1.0,0)
490 END
500 SUB:
510 BAR=FILLSTR(0,13,' ')
520 BAR=SETCHAR(BX,CH,BAR)
530 PRINTF("%s%d",BAR,SC)
540 RETURN

20130125-01.jpg

 プログラムを起動した所。
 中央で点滅してるボールが飛んでくるので、タッチパネルを押して受け止める。

20130125-02.jpg

 ボールは直線またはカーブを描きながら、液晶画面の(1)〜(3)いずれかの位置に来るので、iPhone画面(ポケコンのキーに関係無く)で該当する位置をタップする。
 タップは「押しっぱなし」の方がいい。

20130125-03.jpg

 上手くキャッチすれば1点加算。ミスすれば即ゲームオーバーで、そこまでのスコアを競う。

プログラム解説

 変数としては、
SC:スコア
BX:ボールのX座標
CS:ボールの方向
TX:タッチした位置
CH:表示するキャラクター
BAR:表示用
I:ループ用
J:ループ用

 大筋の処理は、先日書いた地底探検ゲームLinkを基本にしている。
 ボールが飛んで来る間にタップの位置も受け付けていて、到達した時、位置が同じならスコア加算、違えばゲームオーバー。

 タッチパネルを検出する「TOUCH()」は、X座標の場合-480〜480の範囲960ピクセルなので、480足して250で割ると、250ピクセルごとに0、1、2と整数値になる。
 タッチの座標を入れる変数TXは、最初まだ入力されてない事を示す5を入れている。その辺の判断と計算をしているのが330行。

本当にやりたかった事

 このゲーム、いつまでもボールのスピード変わらず延々続くだけで変化が無いので、スコアが上がるごとにスピードアップする処理を追加するには、リストに次のものを追加と変更する。
追加
120 REAL BW=0.2
440 BW=CLAMP(BW-0.01,0,1)

変更
340 WAIT(0.2,0) → WAIT(BW,0)
 最初からこれを入れない理由は、ここまでやると、実行時にアプリが落ちるw
 どうも現行バージョン1.0.0では、変数やメモリに関する処理が不安定らしいのでできなかった。次のバージョンアップで恐らく可能になると思うので、ここまで書いておいた。

(2013/01/26 追記)
 修正版を作成。
DPC-100のバージョンアップとプログラム改良

 結局、バージョンアップを待たなくても、変数の工夫で何とかできたみたい。



タグ:DPC-100 iPhone

posted by 司隆 at 10:50 | Comment(0) | Computer
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

×

この広告は180日以上新しい記事の投稿がないブログに表示されております。