テーブル化サンプルプログラム6

レーダー法サンプル3(おまけ)

内容

某シューティングゲームの1シーンを再現します。 再現といっても、まぁ雰囲気程度のものですが。

カーソルキーで自機(黄色い飛行機)を移動させることができます。 ただし、当たり判定はありません。 終了するには、[CTRL]キーを押しながら[STOP]キーを押してください。

プログラムリスト

※プログラムの実行にあたっては、table2.lzh中の "TABLSP6.BAS" を御利用下さい。
1 'SAVE"TABLSP6.BAS
2 'SAVE"TABLSP6.ASC",A
1000 'テーブルか サンプル6
1010 ' レーダーほう(3)(メモリ せつやくがた、しかも 256 かいち
ょう、しかも かくさんだん)
1020 ' for MSX2(VRAM 64K)
1030 DEFINT A-Z:DIM TX(8),TY(8),SN!(255),CS!(255),RT(31,39),
HX(1),HY(1),GX!(14),GY!(14)
1050 SCREEN5,1,0:OPEN"GRP:"AS#1:COLOR15,0,1:CLS
1060 RESTORE1270:FOR PN=0TO2:A$="":FOR I=0TO7:READ B$:A$=A$+
CHR$(VAL("&B"+B$)):NEXT:SPRITE$(PN)=A$:NEXT'スプライト パター
ンの じゅんび
1070 RESTORE1540:FOR ST=0TO8:READ TX(ST),TY(ST):NEXT'キー へ
んかん テーブルの じゅんび
1080 GS=4:FOR AG=0TO255:SN!(AG)=GS*SIN(2*3.14159/256*AG):
CS!(AG)=GS*COS(2*3.14159/256*AG):NEXT'SIN/COS テーブルの 
じゅんび(256 かいちょう)
1090 'ATN テーブルの じゅんび
1100 FOR X=1TO31:RT(X,0)=0:RT(X,X)=32:NEXT:FOR Y=1TO39:RT(0,
Y)=64:NEXT:RT(0,0)=64
1110 FOR Y=2TO31:FOR X=1TO Y-1:I=255AND(40.7436*ATN(Y/X)):R
T(X,Y)=I:RT(Y,X)=64-I:NEXT:NEXT:FOR Y=32TO39:FOR X=1TO31:RT(
X,Y)=255AND(40.7436*ATN(Y/X)):NEXT:NEXT
1120 'ざひょう および がめんの しょきか
1130 HX(0)=120:HY(0)=127:HX(1)=120:HY(1)=1:MC=192
1140 LINE(0,0)-(67,211),1,BF:LINE(68,0)-(187,159),14,BF:LINE
(188,0)-(255,211),1,BF:PSET(0,160),0,PSET:PRINT#1," カーソル
キーで プレイヤー いどう。":PRINT#1," [CTRL]+[STOP]で しゅう
りょう。":BEEP
1150 'LOOP
1160 FOR L1=0TO2480STEP0
1170  DX=(HX(0)-HX(1)+2)/4:DY=(HY(0)-HY(1)+2)/4:AG=RT(ABS(DX
),ABS(DY)):IF DX<0 THEN IF DY<0 THEN AG=128+AG ELSE AG=128-A
G ELSE IF DY<0 THEN AG=255AND(-AG)
1175  FOR GN=0TO14:GX!(GN)=HX(1):GY!(GN)=HY(1):NEXT:PSET(8,1
92),0,PSET:PRINT#1,USING"ANGLE:### (やく ### ど)";AG,360/256
*AG
1180  FOR L2=0TO15:TIME=0:L2=0
1190   PUT SPRITE0,(HX(0),HY(0)),10,0:PUT SPRITE1,(HX(1),HY(
1)),15,1:FOR GN=0TO14:PUT SPRITE2+GN,(GX!(GN),GY!(GN)),11,2:
NEXT
1200   ST=STICK(0)
1210   HX(0)=HX(0)+TX(ST):IF HX(0)<68 OR HX(0)>172 THEN HX(0
)=HX(0)-TX(ST)
1220   HY(0)=HY(0)+TY(ST):IF HY(0)<-1 OR HY(0)>143 THEN HY(0
)=HY(0)-TY(ST)
1225   HY(1)=65+16*SN!(MC):MC=255AND(MC+2)
1230   FOR GN=0TO14
1235    GX!(GN)=GX!(GN)+CS!(255AND(AG-56+GN*8)):GY!(GN)=GY!
(GN)+SN!(255AND(AG-56+GN*8)):IF GX!(GN)<62 OR GX!(GN)>178 O
R GY!(GN)<-7 OR GY!(GN)>149 THEN GY!(GN)=217:L2=L2+1
1236   NEXT
1240   FOR WT=-32768!TO-32760:WT=TIME-32768!:NEXT
1250  NEXT
1260 NEXT'LOOP おわり
1270 'SPRITE DATA(PLAYER)
1280 DATA 01100110
1290 DATA 11111111
1300 DATA 11111111
1310 DATA 01111110
1320 DATA 00100100
1330 DATA 00100100
1340 DATA 01111110
1350 DATA 01111110
1360 'SPRITE DATA(ENEMY)
1370 DATA 00111100
1380 DATA 01000010
1390 DATA 10111101
1400 DATA 10111101
1410 DATA 10111101
1420 DATA 10111101
1430 DATA 01000010
1440 DATA 00111100
1450 'SPRITE DATA(GUN)
1460 DATA 00000000
1470 DATA 00000000
1480 DATA 00000000
1490 DATA 00011000
1500 DATA 00011000
1510 DATA 00000000
1520 DATA 00000000
1530 DATA 00000000
1540 'キー へんかん テーブル
1550 DATA 0,0,0,-4,3,-3,4,0,3,3,0,4,-3,3,-4,0,-3,-3

主な変数

TX()、TY() キー変換テーブル
SN!() sin テーブル
CS!() cos テーブル
RT(,) 逆正接テーブル
HX(n)、HY(n) 自機(敵)の座標(n=0:自機、n=1:敵)
GX!(m)、GY!(m) 敵弾 m の座標
拡散弾の各弾に0〜14の番号を割り当てている
GS 敵弾の速さ
L1、L2 ループカウンタ
(無限ループ実現のためのダミー変数)
MC 敵弾発射部分の y 座標の計算に使用
ST カーソルキーの入力方向(0〜8)
GN 敵弾番号
WT 速度調整用

戻る

MSXの適当手帳 MSX駅 西山駅