■説明
Gに玉を入れるゲームです。
ボールのスタート位置を決め、玉を打ちます。
玉がGに入ると面クリアです。
反射板の斜面に当たると玉の進む方向が変わります。
外壁や進行方向に垂直な面に当たるとダメです。
全部で13面あります。
失敗すると、その面からやり直しです。
■操作
移動:← →
玉を打つ:スペースキー
■変数
A 面作成WORK
B 面作成WORK
D INKEYによる増減
I FOR
J FOR
K INKEY
M 面数-1
P 玉の移動増減X
Q 玉の移動増減Y
W WAIT
X 玉位置X座標
Y 玉位置Y座標
■プログラム
10 初期設定
20 初期設定
30-40 面描写
50-60 左右移動・スタート位置決定
70 玉消し
80-90 跳ね返り処理
100 クリア処理
110 玉表示
120 リトライ処理
■改造
容量が残り8Byteです。
大きく改造したい場合は、面のデータを少なくするのがいいかと思います。
一つの面のデータは5個です。
例えば、1面のデータは[0]~[4]に入っています。
オリジナルの面も作成できます。
面のデータは圧縮されています。
[0]には1面の1行目のデータが含まれています。
作成していた時の資料画像を貼りました。
画像の右のように3bitで一つを表しています。
[0]のような変数は2byte使っていますので[0]だけで16bitあり、一つの変数に入る情報は
3bitで一つになることを考えると5個(15bitを使い1bit余る)入ります。
1行目は数字に直すと4・5・6・0・5となりますが、これを10進数にするには
4+5*8+6*64+0*512+5*4096=20908
として、20908が1行目のデータになります。
同様に5行作成すれば1面分になります。
面の描写時にこの逆の計算をして表示しています。
30行の以下の部分(3bitずつ分解してキャラクターコードに置き換えている)
A=[I+M*5]>>(J*3)&7:B=(A>3)*(A+152)+(A=3)*26+(A=2)*25+(A=1)+!A*32
10 CLV:LET[0],20908,0,28928,0,0,12483,8194,12291,8194,12291,164,128,128,20528,8194,23276,0,64,1048,9243,20612,132,134,0,8320,20868,28934,520,31207,20284,12418,0,0,130,131,20676,584,28676,584,30830 20 W=60:LET[40],14043,0,9362,0,14043,12482,8323,12482,8323,12482,196,12699,28932,20676,8596,12442,9368,14019,9346,13955,20780,31216,23598,31222,20284 30 @S:CLS:X=1:Y=8:P=0:Q=-1:?CHR$(6,6,6,6,6,6,6):COPY#920,#900,192:FORI=0TO4:FORJ=0TO4:LCJ+1,I+1:A=[I+M*5]>>(J*3)&7:B=(A>3)*(A+152)+(A=3)*26+(A=2)*25+(A=1)+!A*32:?CHR$(B):NEXT:NEXT 40 LC3,0:?"G":LC8,1:?"STAGE:";M+1 50 @A:LCX,7:?CHR$(226):LCX,8:?CHR$(233):K=INKEY():D=(K=29)-(K=28):IFK=32Y=6:GOTO@CELSEIFDLCX,7:?" ":LCX,8:?" ":X=(X+D+4)%5+1 60 GOTO@A 70 @B:LCX,Y:?" " 80 @C:X=X+P:Y=Y+Q:Z=SCR(X,Y):C=(Z=32):IFZ=157&&(P=1||Q=-1)||Z=158&&(P=-1||Q=1)||Z=26R=P:P=Q:Q=R:C=1 90 IFZ=156&&P+Q=-1||Z=159&&P+Q=1||Z=25R=P:P=-Q:Q=-R:C=1 100 IFZ=71?"CLEAR!":WAITW:M=M+1:IFM<13GOTO@SELSE?"ALL CLEAR":END 110 LCX,Y:?CHR$(233):WAITW/5:IFCGOTO@B 120 LCX,Y:?CHR$(244):?"RETRY":WAITW:GOTO@S
ゴールから逆にたどっていくのが必勝法だ!と思いきや、この技が通じない! 一度反射した板が消えるというところがおどろきでした。このアイデアひとつでグッと面白さが上がりますね。