2013年05月06日

DPC-100プログラム・Sound Balancer

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


 ずっと仕事が忙しくて余裕が無かったが、久し振りに、iPhoneのポケコンアプリ、DPC-100用のプログラムを作った。
 今回は、モチーフにしたゲームがある。2006年に任天堂から発売された、ゲームボーイアドバンス用ソフト。

Soundvoyager
(リンク先はサウンドが鳴るので注意)

 シンプルでゲームの原点をテーマに作られた、bit Generationsシリーズの一つで、Soundvoyagerは、音を頼りにするゲーム。
 ヘッドホン必須で、左右の音のバランスで位置をつかんで攻略していくという、実験的な試みだった。

 こう言う、思い切った試みは好きなので、私も音を頼りにするゲームをDPC-100で作ってみた。
 タイトルもこれをモチーフとして「Sound Balancer」とでも。

20130506-01.jpg

 起動画面。

 ゲームの内容を簡単に言うと、「iPhone本体を傾けて水平器を動かし、見えないターゲットに合わせるゲーム」。
 ターゲットは左右に勝手に動いたり停止するが、位置は自分との差を「音」でつかむしかない。
 音が高くなると「ターゲットが右に移動した」というサインなので、本体を右に傾ける。低いと左に傾ける。

20130506-02.jpg20130506-03.jpg

 ターゲットと自分の位置が合わないとエネルギーが減っていき、0になるとゲームオーバー。そこまでのタイムを競う。

プログラムリストと解説

Sound Balancer
110 SCHVOLUME(0,15)
120 TX=0
130 EG=500
140 GOSUB LSET
150 I=0
160 TM=0
170 // ** MAIN LOOP **
180 WHILE EG>0
190 GOSUB CALC
200 GOSUB CHARA
210 GOSUB SOUND
220 WAIT(0.1,0)
230 I-=1
240 IF I<TE GOSUB LSET
250 TM+=1
260 WEND
270 // ** OVER **
280 SCHSTATE(0,0)
290 PRINTF("TIME:%d",TM/10)
300 EXIT(0)
310 // ** SUB **
320 @LSET
330 I=RANDOM()*5+3
340 I*=10
350 TE=CLAMP(TM/12-50,-100,0)
360 TH=RANDOM()*2
370 TH=TH*2-1
380 RETURN
390 @CALC
400 HX=CLAMP(ACCEL(1)*200,-100,100)
410 TX+=TH*CLAMP(I,0,1)
420 TH*=(TX>-99)*2-1
430 TH*=(TX<99)*2-1
440 RETURN
450 @CHARA
460 STRING BAR
470 BAR=FILLSTR(0,7,32)
480 CP=(100-HX)*6/200
490 BAR=SETCHAR(CP,124,BAR)
500 PRINTF("%4d%c%s%c%3d",TM/10,237,BAR,238,EG)
510 FREE CP
520 FREE BAR
530 RETURN
540 @SOUND
550 XS=(HX-TX)/3
560 XS=CLAMP(XS/1.5,-20,20)
570 EG-=CLAMP(ABS(XS),0,1)
580 SCHNOTE(0,XS+60)
590 FREE XS
600 SO=CLAMP(ABS(TM%10),0,1)
610 SO^=1
620 SCHSTATE(0,SO)
630 FREE SO
640 RETURN

 変数は、
EG:エネルギー
TM:経過時間
I:ループ用
TE:ループ終了値
TX:ターゲットの位置
TH:ターゲットの移動方向(-1 or 1)
HX:自分の位置
CP:自分の位置(表示用)
BAR:表示用
XS:自分とターゲットの差
SO:サウンドON/OFF(0 or 1)

 サブルーチンは、
@LSET:ターゲットの移動量、方向設定
@CALC:自分とターゲットの位置計算
@CHARA:表示用
@SOUND:サウンド用

 ターゲットの動きは、
「一定時間停止→左右の方向(ランダム)に一定数移動→停止→再び移動」
 を繰り返す。停止時間はプレイ時間に応じて短くなり、1分ほどで全く停止しなくなる。
 この動作のために、ループIを30〜80(ランダム)に設定して-50(最小)まで減少、Iが正の数値の時に動いて、負の時は動かない処理にしている。

 と共に、ターゲットは-100〜100の数値を動き続けるが、最大か最小まで行ったら方向転換のため、THの数値(1 or -1)を反転する。
 その辺を全部論理式にしたのが@LSETと@CALC内の処理。

 サウンドは、タイムが10カウント目の時だけ鳴るようにしたかったので、SOという変数を用意して、SCHSTATE()命令に使っている。

 ターゲットの移動時間とエネルギーが減る感度によって、プレイして面白いか変わると思い、かなり調整してみたけど、まだまだ足りないかも。



タグ:DPC-100 iPhone

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

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

×

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