プチコンゲーム JUMPING ISLAND

JUMPING ISLAND

【mkII専用】 2012年5月6日 公開

2012年5月9日 追記


 全9面の縦スクロールジャンプアクションゲームです。リスト短縮をフルに行いプログラムリストとデータ込みで1.9KB(56行)のサイズに収めました。

 難易度向上版となるJUMPING ISLAND MANIAXもできました。(2012/9/30追記)

MEM$="0"*45LOAD "MEM:OCHAJIHS"
FOR I=1TO 9H$(I)=MID$(MEM$,I*5-5,5)NEXT
@ST
ACLS:BGMPLAY 26PNLTYPE "KYA"W=0
@RT
GPAGE 0,2,0GFILL 0,2,255,5,6
GFILL 0,6,255,15,223
FOR I=0TO 255
GPSET I,723%(I%5+4),15
GPSET I,I%3*2+10,229
GPSET I,10-17%(I%4+1),234NEXT
GPAGE 0,0,0FOR I=0TO 19
GCOPY 2,0,6,255,15,0,I*10,0:NEXT
FOR I=W TO 1COLOR MAINCNTL%16
LOCATE 9,8?"JUMPING ISLAND":COLOR 1
?" "*135"STAGE SELECT (1-9)?"" "*141"SAVE[X] END[L]+[R]
B=BUTTON()IF B==768THEN ACLS:BGMSTOP:END
IF B==64THEN MEM$=""FOR J=1TO 9MEM$=MEM$+H$(J)NEXT:SAVE "MEM:OCHAJIHS"
K=VAL(INKEY$())WAIT 5I=K:Y=K
NEXT:PNLTYPE "OFF"CLS:TALK "@E7@S9イッ_ク'ゾオ--!"WAIT 60
SPSET 0,108,0,0,0,0
SPSET 1,200,1,0,0,0
SPHOME 0,8,8SPHOME 1,8,8
GPAGE 1,1,1COLOR 13
GLINE 0,96,255,96,2
GLINE 128,0,128,191,2
GPAGE 0,0,0SPANIM 0,4,8
X=K/11M=120N=90S=0T=0F=0H=0L=0W=0Z=0B=0E=0
BGMPLAY K+6FOR I=0TO 959
X=(X*479232+I)%4096/4096R=0OR X*240
IF!F*!(R%6)THEN H=30-K:U=(R%5+3)*(14-K)V=R
Q=(I>854)*9-!(I%4)*2H=H-1F=H>0
GCOPY 0,0,0,255,191,0,2,0
GCOPY 2,0,4+Q,255,5+Q,0,0,0
IF F*(I<855)THEN GCOPY 2,0,6+H%5*2,U,7+H%5*2,V,0,0
D=GSPOIT(M-8,N)+GSPOIT(M-8,N+9)+GSPOIT(M+8,N)+GSPOIT(M+8,N+9)
IF !L*(D<200)THEN BEEP 6M=999I=M
SPSCALE 0,100+L*0.8
SPSCALE 1,100-L/3E=999-E
SPOFS 1,M+E,N+4SPOFS 0,M,N-L
P=T:T=TCHST/45A=B:B=BUTTON()C=B%16B=16AND B
M=M+!C*T*(TCHX-128)+!T*((C-C%4+2)%6-2)
N=N+!C*T*(TCHY-96)+!T*((C%4*4+2)%6-2)
S=S+!L*(0OR (201-N)/10)S$=RIGHT$("0000"+STR$(S),5)
IF!L*((P-T)*!T+(A-B)*B)THEN G=10BEEP 8L=G
IF L THEN G=G-0.5L=L+G
LOCATE 0,0?"STAGE "K" HI "H$(K)" SC "S$
O=M>300VSYNC 2NEXT
TALK "@E9@S9"+MID$("ヤッタネ!ウワアア-",O*5,5)WAIT O*60BGMPLAY O+5
LOCATE 14,12?MID$("CLEARMISS!",O*5,5)
IF S$*!O>H$(K)THEN Z=1H$(K)=S$
COLOR 1WAIT 30?" "*227"PUSH [L] or [R] or [START]
FOR B=1TO 256B=BUTTON()WAIT 5COLOR MAINCNTL%16
IF!O*(K-Y)==8THEN LOCATE 8,5?"Congratulations !"" "*115"Thank you !
IF Z THEN LOCATE 12,16?"HI-SCORE!
NEXT:IF B>1024THEN @ST ELSE W=2K=K+!O*(K<9)GOTO @RT

QRコード(ファイル名:OCHAJUMP)
QRコード

《 遊び方 》

 タイトル画面でステージ(ステージ1〜ステージ9)が選択できます。プチコンのキーボードで選択してください。また、この画面で[X]ボタンを押すとハイスコアをセーブできます。(ファイル名 MEM:OCHAJPHS)

 ステージ選択をしたらゲームスタートです。このゲームでは下画面をアナログコントローラのように使用します。下画面の上の方をタッチすると上画面のキャラが上の方に進みますが、アナログコントローラと同様にその速度は下画面の中心からの距離によって変わります。なお、下画面には上下左右のガイド線のみ表示しています。また、十字ボタンで上下左右に移動もできます。
 タッチした画面から手を離すとジャンプできます。また、[A]ボタンでジャンプもできます。ジャンプ中も上下左右に移動できるのでこれを上手く使えばジャンプの方向と飛距離は自由に調整できます。
 島を足場にして向こう岸にたどり着けばステージクリアになります。海上に落ちたり、画面外に着地してしまうとミスになります。
 クリアの時、[L]もしくは[R]を押すと次のステージに進めます。ミスの時は[L]もしくは[R]で同じステージをやり直しができます。また、この画面の時に[START]でタイトル画面に戻ります。

 なお、このゲームはステージごとにスコアはリセットされるため続けて次のステージをプレイしてもスコアの持ち越しは無くそのステージ内のスコアのみになっています。したがって、ハイスコアもステージごとに保存しています。


操作方法 一覧表
タイトル画面キーボード[1]〜[9] ・・・ ステージ選択
[X]ボタン ・・・ セーブ   [L]+[R]ボタン ・・・ ゲームの終了
プレイ中下画面タッチ ・・・・ キャラの移動、離せばジャンプ
十字ボタン ・・・ キャラの移動  [A]ボタン ・・・ ジャンプ
クリアもしくはミス時[START]ボタン ・・・・・・ タイトル画面に戻る
[L]もしくは[R]ボタン ・・・・ ミス時は同じステージのやり直し、クリア時は次のステージに進む


《 ハイスコアを狙おう 》

 このゲームは操作に慣れないとやや難しいですが、操作に慣れさえすれば全9面をクリアするのはそれほど難しくありません。そうなると次はハイスコア狙いです。このゲームではスコアは地面にいるとき(Z座標が0のとき)のみ加算されるためジャンプ中はスコアが増えません。したがって、できるだけジャンプ回数を減らすことが高スコアに繋がります。
 また、このゲームでは狭い間隔(8ドット以下)の隙間はジャンプしなくても走り抜けることができます。これを活用すればジャンプ回数を減らすことが可能になります。クリアするためのルートはたくさんあるのですが、高スコアが狙えるルートを探し出すこともこのゲームの醍醐味といえます。(当たり判定はキャラの下半身となる9x16ドットの矩形部分が1カ所でも地面に付いていればセーフになっているため結構広い間隔でもうまく操作すれば通れることがあります)

 このゲームでは下画面の中央真下をタッチする(もしくは十字ボタンの下を押す)ことによってスクロール速度に合わせてその場所に静止することが可能になっています。勢いが付きすぎた時のブレーキとしても活用しますのでこの基本テクニックはぜひ覚えておいてください。これを応用して斜め後ろ移動を行うことでスクロール速度に合わせた左右移動ができるようにもなります。
 そして、ジャンプ中に上を押す(もしくは十字ボタンの上を押す)ことで飛距離が長くなりますが、離した次のフレームに下画面の中央真上をギリギリをタッチすることで最大の飛距離を得ることができます。数ドット単位で届かないときは画面スレスレをタッチすれば届く場合があります。この大ジャンプを行った時には逆に行きすぎることが多いので上記のブレーキを活用しましょう。
 ジャンプ中に下画面中央真下をタッチすることでブレーキをかけたジャンプもできます。これを活用すれば狙った場所に着地ができるのでハイスコア狙いの場合は必須のテクニックといえます。
 あと画面の上方向の場所(Y座標が小さい場所)の方がスコアがたくさん加算されるためマップを覚えて島が画面内に出てくる前に先読みしてジャンプして画面内に出てくると同時に着地をすればかなりの高スコアを狙えます。

 これらのテクニックを駆使すればステージ1は10000点を越えることが可能です。(自己最高は10876点)
 ちなみにミスをした場合にはいくら高スコアでもハイスコアには認定されませんので注意してください。向こう岸にたどり着いた後はスコアを稼ぎ放題(早くたどり着けば1000点以上のボーナスを得ることができる)となるわけですが、「CLEAR」を表示前に画面外に出てしまうとミスになるため大量ボーナスを狙う場合は注意してください。

 このゲームではタッチパネルの操作を前提に作られているためタッチパネルでの操作を推奨しています。十字ボタンを使って操作してもクリアすることは可能ですが、ハイスコア狙いならば1ドット単位の微調整が容易で360度自由な方向に自在な距離ジャンプできるタッチパネルでの操作の方が有利になります。

《 改造について 》

 このプログラムはリスト短縮をしまくっているので解析は困難でしょう。当初は1画面プログラムとして作る予定だったので1画面レベルのリスト短縮を行っています。サブルーチン化も行ってないためリストそのものもすごく見づらいです。
 というわけで、改造のためのヒントを書いておきます。

 ステージデータを変えたいと考えている人もいるでしょうがこれはかなり困難です。というのもこのゲームでは演算によってステージデータを求めているからです。
 ステージデータを変えたいという人は29行のX=K/11119〜4095の値にすれば変えることができます。ただし、どのようなステージになるかは運次第ですし、クリア可能なステージになる保証はありません。

 このようにステージデータを演算で求めることで大幅なリスト短縮が可能になっています。このゲームではキャラ単位ではなくドット単位でステージが構成されており横幅255ドット、960フレーム分となっています。横255ドットを1バイトに圧縮ができたとしても1ステージあたり960バイトになり9ステージ分のデータを1バイト1文字で表現してもステージデータだけでこのプログラムリスト全体の5倍のサイズになってしまいます。
 よって、コース改変が難しい(コース改変そのものは簡単だけど自分の思ったようなコースにするのは難しい)にも関わらずこのように演算で求めている意味は分かるでしょう。

 すごいプレイをした場合にはそのプレイの様子を記録したり再生したりしたいと考える人もいることでしょう。リプレイ記録、再生についてはこちらのページにリプレイデータの記録、再生方法の具体例としてこの「JUMPING ISLAND」を挙げて書いているのでそれを参考にしてください。
 下記にリプレイ記録の実際の搭載例として「JUMPING ISLAND(リプレイ対応テストバージョン)」を用意したのでそれも合わせて参考にしてみてください。

 このプログラムは少しでもリスト短縮をするために余分な要素は一切入れていません。とはいえ、1画面プログラムではないため行数には余裕があるのでホームメニューから普通にプレイできるようにしましたし、ハイスコア保存機能を必要だろうと思って付けました。あと1画面では確実に搭載を見送るであろう必要最小限の装飾はTALKによる一部音声の出力もあると良いと思って付けておきました。
 全9面をクリアした人向けにエンディング的な要素も入れようと思いましたが、「おめでとうメッセージ」を入れているだけに止まっています。ちなみにこのメッセージはステージ1から順番にタイトル画面に戻らずにステージ9までクリアすれば見ることができます。もっとも、リストを見たらメッセージ内容はもろに分かってしまいますが・・・。(1ステージ30秒なので5分あれば見れますので良かったらチャレンジしてみてください)
 何か改良したい点や不満点などがあれば適当に付け足してください。

 あと変数表も用意しましたので改造の際の参考にしてください。

変数表
A前フレームの[A]ボタンの状態
B[A]ボタンの状態
C十字ボタンの状態
D当たり判定
E自キャラ陰表示
Fマップ空白フラグ
GZ座標移動量
H島の縦サイズ
I、Jループカウンタ
Kステージ
L自キャラ Z座標
M自キャラ X座標
N自キャラ Y座標
Oミスフラグ
P前フレームのタッチ状態
Qマップの背景パターン選択
Rステージの状態
Sスコア
Tタッチ状態
U島の横サイズ
V島のX座標
Wリトライフラグ
Xステージデータ初期値
Y開始時ステージ
Zハイスコアフラグ
S$スコア(表示用)
H$()ハイスコア

《 プレイ動画 》



《 「JUMPING ISLAND」(リプレイ対応テストバージョン) 》

QRコード(ファイル名:OCHAJIRP)

 上記「JUMPING ISLAND」の改造例の1つとしてリプレイデータの記録、再生機能を付け加えたものです。あくまで改造例であるため機能を付け加えた部分に関しては処理の最適化は行っていません。
 それ以外は標準のものと同一となっています。(標準でこの機能を実装しても良かったけど長くなるのが嫌なので断念した)

 標準でリプレイデータ記録モードになっています。1回プレイするごとに上書きされている(BREAKしてもその時点まで記録される)ために必要ならばタイトル画面から[Y]ボタンでリプレイデータをセーブしてください。ロードは[B]でできます。
 再生モードにするためには[START]ボタンを押しながら1〜9のいずれかのキーを押してください。どのキーを押してもステージデータが記録されているステージが開始します。再生モード時には画面左上に「PLAY」と表示されています。再生が終了した場合は、[L]もしくは[R]で同じものを何度でも再生できます。標準モード(記録モード)に戻るためには再生終了後に[START]ボタンを押してタイトル画面に戻ってください。
 必要最小限の実装しかしていないため各ステージごとにリプレイデータを記録したり、ハイスコアが出たら上書き防止のため自動的にGRP上のハイスコア用の領域にリプレイデータを記録するなどの改造をするのもいいかもしれません。

 私の5/9時点のステージ1のハイスコアの10879点、ステージ9のハイスコアの8410点を出したときのリプレイデータを公開しますので良かったらロードして再生してみてください。リプレイデータのロード画面でそれぞれ「OCHAJI1」「OCHAJI9」を入力すればロードできます。

QRコード(ファイル名:OCHAJI1)

QRコード(ファイル名:OCHAJI9)

リプレイデータはタッチパネルで操作時には概ねQR4枚、ボタン操作時には概ねQR2枚になります。
リプレイデータを初期化するためにはホームメニューに戻るかGPAGE 0,3,0:GCLSとしてください。


RETURN/RETURN *MAIN

inserted by FC2 system