2013年01月27日

DPC-100プログラム・フライトシューティングゲーム

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


 iPhoneのポケコンアプリ、DPC-100で次なるゲームを作ってみたが、何と3Dフライトシューティングという、大それた事をやってみた。
 あくまで、それらしく見えるものを。

20130127-01.jpg

 起動した画面。
 左端に高度をメーターで、敵が画面外にいる時は、矢印でその方向を表示している。
 ここで本体を傾けて操作、手前と逆で上下、左右に傾けると左右に移動。

20130127-02.jpg

 敵が画面内に入って表示された所。ショボい形なのはご愛敬。

20130127-03.jpg

 敵が照準に合うとマークが変化するので、画面タップでミサイル発射。当たるとスコアが1点加算。

 でもこのリストでは、敵が動かない、ゲームオーバーも無くてただ続けるのみになっている。
 動かさなくてもそこそこ楽しめのと、後述する不具合があったので。

プログラムリストと解説

フライトシューティングゲーム
110 SP=400
120 X=4000
130 SC=0
140 GOSUB TSUB
160 WHILE 1
170 GOSUB SSUB
180 X=CLAMP(X+CLAMP(ACCEL(1)*30,-1,1),0,19*SP)
190 Y=CLAMP(Y-CLAMP((ACCEL(0)+0.3)*10,-1,1),0,6*SP)
200 IF (X/SP==TX)&(Y/SP==TY) THEN CH='*' ELSE CH='+'
210 IF (TOUCH(-1,0)==0)|(CH=='+') GOTO LOOP
220 I=0
230 WHILE I<25
240 CH=(1&I^1)*'*'+(1&I)*'X'
250 GOSUB SSUB
260 WAIT(0.05,0)
270 I+=1
280 WEND
290 FREE I
300 SC+=1
310 GOSUB TSUB
320 LOOP:
330 WEND
370 TSUB:
380 TX=RANDOM()*20
390 TY=RANDOM()*7
400 RETURN
410 SSUB:
420 STRING BAR
430 BAR=FILLSTR(0,13,' ')
440 IF ABS(X/SP-TX)>5 THEN BAR=SETCHAR(1,CLAMP(X/SP-TX,0,1)+237,BAR)
450 IF Y/SP-TY!=0 THEN BAR=SETCHAR(0,CLAMP(Y/SP-TY,0,1)+234,BAR)
460 IF (Y/SP==TY)&(ABS(X/SP-TX)<6) THEN BAR=SETCHAR(X/SP-TX+7,141,BAR)
470 BAR=SETCHAR(7,CH,BAR)
480 PRINTF("%c%s%d",Y/SP+133,BAR,SC)
490 FREE BAR
500 RETURN
 変数としては、
X:自機のX座標
Y:自機のY座標
TX:敵のX座標
TY:敵のY座標
SP:自機の移動倍率
SC:スコア
CH:表示するキャラクター
BAR:表示用
I:ループ用

 サブルーチンとしては、
TSUB:敵位置設定ルーチン
SSUB:画面表示ルーチン

 操縦桿のように、傾けていると空中を少しずつ移動する動きにするため、自機のX,Y座標を大きく取って、表示時や座標の確認時はそれを短縮するようにしている。
 その倍率をSPに入れているので、もっと自機を早く移動したい場合はSPの数値を変えればいい。

 それを計算する230行と240行、
180   X=CLAMP(X+CLAMP(ACCEL(1)*30,-1,1),0,19*SP)
190 Y=CLAMP(Y-CLAMP((ACCEL(0)+0.3)*10,-1,1),0,6*SP)

 本体の傾きを検出する命令「ACCEL」を、Xの*30、Yの*10が、どれだけ傾けたら動き出すかの感度。Yの+0.3は傾きの基準、ニュートラル位置で、これが無いと本体を水平にしないとニュートラルにならない。
 自分で試してこのくらいという数値を入れたが、これを変えれば傾きを調整できる。

本当にやりたい事

 前述したように、このリストではゲームオーバーが無く、延々打ち続けるのみなので、60秒の時間制限を付けて、そのスコアを競うようにするには、次のものを追加・変更する。
 これにすると、ゲーム中の画面には時間が出て、時間切れになったらスコアが出て終了という流れ。
追加
150 ST=SYSCLOCK()
340 PRINTF("SCORE:%d0",SC)
350 WAIT(2.0,0)
360 EXIT(0)

変更
160 WHILE 1
  ↓
160 WHILE SYSCLOCK()-ST<60

480 PRINTF("%c%s%d",Y/SP+133,BAR,SC)
  ↓
480 PRINTF("%c%s%d",Y/SP+133,BAR,60+ST-SYSCLOCK())
 が、これも以前と同じく、ここまでやると起動時にアプリが落ちる(泣)。
 リストでわざわざGOTOやGOSUBで飛ばしまくっているのは、この時間設定を設けたかったから。
 いろいろと試行錯誤したけど、現バージョンでは無理のようで、ここだけ分けて掲載。


(2013/01/29 追記)
 リストでフラグ用変数を無くしてサブルーチンを変更。そのため、大幅な修正。
 でもやってる事は同じ。タイムを追加したら落ちる所も(泣)。



タグ:DPC-100 iPhone

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

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

×

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