福野泰介の一日一創 - create every day

たった1022byteでインベーダー風「IchigoVaders」アルゴリズムで削れ!プログラム圧縮テクニックその3

2018/03/24
#IchigoJam #KidsIT 

その筋屋さん、パックマン風に続く、インベーダー風「いちごベーダー」を発表!
改造&投稿してとご連絡いただいたので、解析&プログラム容量削減し、PCG定義を含めて1KB化、成功。
IchigoVaders in 1022byte only on IchigoJam BASIC!


「IchigoVaders」IchigoJam起動から実行、改造してチートクリア、試しに侵略されてみる動画


PCGの8x8でつくられたアニメーションするインベーダーさん達がかわいい!

ダイエットしたプログラムはこちら、1022byte、2byte空きで収まりました。

1 POKE#700,24,60,126,219,~0,24,36,219,24,60,126,219,~0,60,195,102,0,165,189,~0,219,~0,36,231,0,195,60,126,219,~0,165,189,0,60,126,153,~0,102,219,0,0,60,126,153,~0,195,102,0,0,16,56,~1,~1,~1,~1,0 2 CLV:Z=49:C=Z:H=1:M=2:G=31:B=28:FORL=0TOC:[L]=L%10*2+5+(L/10+4)<<5+(L/10+1)&~1<<10:NEXT:CLS:FORL=0TO3:LCL*7+4,17:?CHR$(159,1,158,B,B,B,G,1,131,1):NEXT 3 IFC<0C=Z:O=!O:V=D:IFDH=-H:D=0 4 X=[C]&G:Y=[C]>>5&G:LCX,Y:?CHR$(0);:X=X+H*!V:Y=Y+V:LCX,Y:?CHR$(224+[C]>>10+O);:[C]=X+Y<<5+[C]&7168:IFS>50IF!UT=[RND(Z+1)]:U=T&G:W=T>>5&G+1ELSELCU,W:IFSCR()=242?CHR$(0); 5 IFUW=W+1:LCU,W:T=!SCR():U=U*T*(W<21):?CHR$(242*!!U);:Y=W*!T 6 D=D|!(X%30)*!V:IFY=20LCM,Y:?"*":?"GAME OVER!!":ENDELSEIF!JI=M:J=BTN(32)*20ELSELCI,J:?CHR$(0);:J=J-1:IFJ=1J=0ELSELCI,J:IFSCR()GSB8ELSE?"|"; 7 N=BTN(29)*(M<30)-BTN(B)*(M>1):LCM,20:?CHR$(0);:M=M+N:LCM,20:?CHR$(230);:C=C-1:GOTO3 8 ?"*";:T=0:FORA=0TOZ:IF[A]&G=IIF[A]>>5&G=JS=S+30-[A]>>10*5:FORL=ATOZ:[L]=[L+1]:NEXT:T=A+1:A=Z 9 NEXT:J=0:?CHR$(B,0):LC0,0:?"SCORE ";S:IFZ|!TZ=Z-!!T:C=C-(C>T-1)*!!T:RTN

IchigoVaders 解説
プログラム

変数
キャラクター

プログラム容量削減テクニック
- 16bitの配列に、下位からX座標5bit、Y座標5bit、敵キャラ種別3bitで収める
- メモリに書き込む値、246-255は、ビット反転演算子を使った ~9-~0 を使って1byte削減
- IF文で終わらない行は、次の行と連結可能
- IF文を論理式に変換して短縮
- /2*2 を &~1 と同じ値になる計算式に変換し1byte短縮

links
- MSXユーザーのためのIchigoJam入門 - MSX Advent Calendar 2015 - その1
- 1KBでパックマン風ゲーム! IchigoJam BASIC プログラム解説と容量削減テクニック - その1
- たった1022byteでインベーダー風「IchigoVaders」アルゴリズムで削れ!プログラム圧縮テクニックその3

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY 福野泰介 - Taisuke Fukuno / @taisukef / アイコン画像 / プロフィール画像