上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--.--.-- -- l スポンサー広告 l top
前回試してみた3D→2D演算の応用で、懐かしゲーム「走れSKYLINE」を再現してみました。



このゲームは私はPLAYしたことはないのですが、昔PC8001用で発表されて結構話題になり、ほかの機種にも移植されていたゲームで印象には残っています。今回Youtubeで確認してできるだけ似たものを作ってみました。
動作は動画でご覧ください。



余談ですが、YOUTUBEで検索すると、昔のゲームがいっぱい出てきて実に懐かしい限りです。
1500円のマシンで雰囲気レベルとはいえ再現できるとは実に良い時代になったものです。

まずはC言語によるマシン後ルーチン。オブジェクト256Byteに収まるようにかなり絞り込みんだつもりです。
ここで画面クリア、道路の描画、そして道路データのスクロールをやっています。

#include
#define VRAM_ADR 0x900
#define WORK_ADR 0x800

uint16_t stars(uint16_t c, uint8_t* m_p, uint8_t* f_p)
{
int16_t i,j,x,y,z,w,x0,x1;
//********** 実アドレスゲット *********
int16_t* w_p = m_p + WORK_ADR;
uint8_t* v_p = m_p + VRAM_ADR;
//********** 画面クリア *********
for (i=32;i<756;i++) {
v_p[i] = 0x80;
}
//********** 道路表示 *********
for (i=0;i<32;i++) {
x=w_p[i]+w_p[41];j=i+2;
x=(((j)*x)>>5)+32;
y=( (j*j)>>5)+9+(i*(w_p[40]&0x07)>>5);
w= (y/2)*32;
x1=x; x0=0;
if ( (i&1)==1 ) {x0=x; x1=63;}
for(j=x0;j z=w+(j/2);
if (z<756) {
v_p[z] |= (1<<( (j&1)+((y&1)<<1) )) ;
}
};
}
//********** スクロール*********
for (i=0;i<32;i+=2) {
w_p[32-i]=w_p[30-i];
w_p[31-i]=w_p[29-i];
}
return 0;
}


これで生成されるihigojam用のPOKE文は以下の通りです。

1 poke#700,247,181,144,32,0,1,8,24,146,34,53,76,18,1,1,144,139,24,10,25,128,32,24,112,1,51,147,66,250,209,0,35,88,0,128,37,8,24,45,1,64,25,4,136,45
2 poke#72d,72,8,90,32,24,133,36,36,1,15,91,7,36,154,28,39,64,0,4,22,28,0,20,95,67,80,67,114,67,127,17,82,17,9,55,191,24,63,4,63,12,62,4,54,20
3 poke#75a,64,17,118,16,32,48,118,5,0,4,54,12,1,36,0,12,0,150,0,34,35,66,1,208,2,28,63,32,39,64,127,0,20,4,5,4,36,20,45,20,172,66,25,218,229
4 poke#787,15,44,25,0,157,100,16,44,25,21,77,36,4,36,20,172,66,11,220,1,158,1,37,52,25,22,28,46,64,180,70,188,68,102,70,181,64,38,120,53,67,37,112,1,50
5 poke#7b4,18,4,18,12,223,231,1,51,32,43,175,209,10,72,11,74,11,24,137,24,26,136,154,128,154,30,18,136,4,59,218,128,139,66,247,209,0,32,254,188,2,188,8,71,244
6 poke#7e1,11,0,0,82,8,0,0,243,2,0,0,60,8,0,0,252,7,0,0


そしてメインプログラム。道路データの生成、キー操作、自車描画、背景ビル描画をやっています。
キー操作は左右キーがハンドル上下キーがアクセル・ブレーキになっています。

これでほぼ1KBです。
完成ゲームとして公開する意図はないのでゲームとしての判定などは入れていません。
起動時の表示などを省けばメモリに余裕ができますので、ゲームとしての衝突判定やスコア計算、
もしかしたら他車の追加などもできると思います。


「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">




10 'hashire skyline
20 CLV:CLS
30 FORI=0TO5
40 LC10,5:?"Welcome to"
50 LC5,7:?" ":WAIT20
60 LC5,7:?"Racing Sports turbo":WAIT20
65 NEXT
70 CLS:[40]=0:Z=5:C=0:W=0:F=10:T=60:L=0
80 P=-16:R=RND(5)*2+10:V=0
90 FORI=0TO15:[I*2]=P:[I*2+1]=[I*2]+32:NEXT
100 A=USR(#700,0):GOSUB250:WAIT 100
110 K=INKEY()
120 P=P+V:Z=Z-V:IF P<-16ORP>16 P=P-V
130 R=R-1:IF R<0 R=RND(5)*2+5:V=RND(3)-1
140 IF Z<0 Z=0
150 IF Z>10 Z=10
160 IF K=29 AND C>-16:C=C-2:W=1
170 IF K=28 AND C<16:C=C+2:W=-1
180 IF K=31 AND F<0 AND F>-10 F=F-1
190 IF K=30 AND F<-1 F=F+1
200 [0] =P:[1]=P+32:[41]=C
210 A=USR(#700,0)
220 [40]=([40]+1)&7
230 GOSUB 250
240 GOTO 110
250 LCZ/2+5,2:?" # # # ";
280 LCZ/2+5,3:?" # # # # ## # ";
290 LC14+W,20:?" ";CHR$(#9F);CHR$(#8F);CHR$(#8F);CHR$(#9E);" ";
300 LC14+W,21:?" ";CHR$(#9A);CHR$(#9B);CHR$(#9A);CHR$(#9B);" ";
310 G=ABS(F):WAIT G*2
320 IF F>=0 F=F-1
330 BEEPG*10+50,3:L=L+G
340 LC0,0:?(10-G)*25;"km ";T;" ";L;" ";
350 RTN


それではまたです。
2016.06.25 Sat l ICHIGOJAM l コメント (0) l top

コメント

コメントの投稿












上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。