自分がプチコンで作った、ニコニコ動画アップ作品や、1画面プログラムなどをQRコードとプログラムリスト付きで公開します。
プチコン3号ではコンソール画面のフォントサイズを4倍にすることができます。その場合ソースコード表示画面でもフォントサイズが4倍になります。 その場合標準の1画面よりも文字数が少なくなります。その画面内に収まるように制限を設けてプログラミングするのが1/4画面プログラム(通称QSP:Quarter Screen Program)になります。
タッチパネルで自機を操作します。
上からランダムの方向に飛んでくるタマを何秒避け続けられるか?
1秒毎にタマの数が増えていきます。
QSPという制限では弾幕を作るのにスプライトを使用していてはプログラムの文字数が多くなってしまうため、とても画面内に収めることはできません。
スプライト定義とスプライト移動の両方の命令が必要になるためです。
このプログラムではグラフィックで弾幕を表示することでコードの短縮化と、当たり判定の単純化を実現しています。
当たり判定は、自機の場所が弾幕として色が塗られているがをGSPOIT命令で参照するだけで実現できます。
また、自機の移動はタッチパネルで行っています。ボタンやスライドパッドによる移動では自機が画面外へ行かないように制御する必要がありますが、タッチされた場所に自機を移動させることで画面外判定そのものの省略を行っています。
時間ごとに弾幕に対してループする回数を増やすことで、ほぼ無限に弾幕を増やすことができます。
また、弾幕の発生位置はプレイヤーのX座標と同じくなっております。こうすることで弾幕の発生時の設定コードを省略しています。
このように、適度にコードやロジックの省略を工夫して行うことにより。
QSPという非常に制限が多い状態でも、弾幕回避ゲームというゲームらしいゲームを実現することができます。
ACLS XSCREEN 2 O=9999 ’敵弾の最大数(テキトー) ’敵弾 DIM X[0] ’X座標 DIM Y[0] ’Y座標 DIM V[0] ’進む角度(ラジアン) ’自機 SPSET 0,3311 @M ’ここからメインループ TOUCH OUT J,O,P ’タッチされた座標を取得 GCLS ’敵弾 FOR I=0 TO M N=V[I] IF !N THEN’弾リセット X[I]=O ’プレイヤーと同じX位置 Y[I]=0 ’画面上端 V[I]=RNDF()*3 ’方向を0~180度 ELSE ’弾移動 INC X[I],COS(N)*3 INC Y[I],SIN(N)*3 GPUTCHAR X[I],Y[I],"●" ’弾表示 V[I]=N*(Y[I]<240)*(ABS(X[I])<400)’画面外に出たらリセット ENDIF NEXT ’自機 SPOFS 0,O,P ’タッチされた場所に移動 ’時間カウント W=W+1 M=W/60 OR 0 ’スコア表示 CLS ? M VSYNC ’当たり判定 IF!GSPOIT(O,P)THEN GOTO @M ’自機の場所に色がなかったら続ける ’接触していたらゲームオーバー(プログラム終了)