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

レーダー法サンプル2

内容

サンプルプログラム4の逆正接テーブルをコンパクトにしたものです。
MSX1(RAM ?KB)で動作します。

逆正接テーブルは、1マスの大きさはサンプルプログラム4のものと同じ(16×16ドット)ですが、マスの数は全16×12マスと少なくなっています(サンプルプログラム4では全31×23マス)(SCREEN 1使用)。

カーソルキーで自機の移動、スペースキーを押しながらカーソルキーで敵の移動が出来ます。

プログラムリスト

※プログラムの実行にあたっては、table2.lzh中の "TABLSP5.BAS" を御利用下さい。
1 'SAVE"TABLSP5.BAS
2 'SAVE"TABLSP5.ASC",A
1000 'テーブルか サンプル5
1010 ' レーダーほう(2)(メモリ せつやくがた)
1020 ' for MSX
1030 DEFINT A-Z:DIM TX(8),TY(8),SN!(31),CS!(31),RT(15,11),HX(1),HY(1)
1040 SCREEN1,1,0:WIDTH30:COLOR15,4,3:KEY OFF:CLS
1050 RESTORE1270:FOR PN=0TO2:A$="":FOR I=0TO7:READ B$:A$=A$+CHR$(VAL("
&B"+B$)):NEXT:SPRITE$(PN)=A$:NEXT'スプライト パターンの じゅんび
1060 RESTORE1540:FOR ST=0TO8:READ TX(ST),TY(ST):NEXT'キー へんかん テー
ブルの じゅんび
1070 GS=2:FOR AG=0TO31:SN!(AG)=GS*SIN(2*3.141592#/32*AG):CS!(AG)=GS
*COS(2*3.141592#/32*AG):NEXT'SIN/COS テーブルの じゅんび
1080 'ATN テーブルの じゅんび
1090 FOR Y=1TO11:RT(0,Y)=8:RT(Y,Y)=4:NEXT:FOR X=1TO15:RT(X,0)=0:NEXT:R
T(0,0)=8
1100 FOR X=2TO11:FOR Y=1TO X-1:I=31AND(5.09295*ATN(Y/X)):RT(X,Y)=I:RT
(Y,X)=8-I:NEXT:NEXT:FOR X=12TO15:FOR Y=1TO11:RT(X,Y)=31AND(5.09295*AT
N(Y/X)):NEXT:NEXT
1110 'ざひょう および がめんの しょきか
1120 HX(0)=120:HY(0)=151:HX(1)=120:HY(1)=23
1130 PRINT" カーソルキーで プレイヤー いどう。":PRINT" SPACE キー + カ
ーソルキーで てき いどう。":PRINT" [CTRL]+[STOP]で しゅうりょう。"
1140 'LOOP
1150 FOR L1=0TO2480STEP0
1160  DX=(HX(0)-HX(1)+8)/16:DY=(HY(0)-HY(1)+8)/16:AG=RT(ABS(DX),ABS(DY
)):IF DX<0 THEN IF DY<0 THEN AG=16+AG ELSE AG=16-AG ELSE IF DY<0 THEN 
AG=31AND(-AG)
1170  GX!=HX(1):GY!=HY(1):LOCATE1,22:PRINT USING"ANGLE:## (やく ###ど)
";AG,360/32*AG
1180  FOR L2=0TO1:TIME=0:L2=0
1190   PUT SPRITE0,(HX(0),HY(0)),15,0:PUT SPRITE1,(HX(1),HY(1)),13,1:P
UT SPRITE2,(GX!,GY!),10,2
1200   ST=STICK(0):TR=-STRIG(0)
1210   HX(TR)=HX(TR)+TX(ST):IF HX(TR)<0 OR HX(TR)>240 THEN HX(TR)=HX(T
R)-TX(ST)
1220   HY(TR)=HY(TR)+TY(ST):IF HY(TR)<-1 OR HY(TR)>175 THEN HY(TR)=HY(
TR)-TY(ST)
1230   GX!=GX!+CS!(AG):GY!=GY!+SN!(AG):IF GX!<0 OR GX!>240 OR GY!<-16 
OR GY!>190 THEN L2=1
1240   FOR WT=-32768!TO-32766:WT=TIME-32768!:NEXT
1250  NEXT
1260 NEXT'LOOP おわり
1270 'SPRITE DATA(PLAYER)
1280 DATA 00011000
1290 DATA 00011000
1300 DATA 10100101
1310 DATA 10100101
1320 DATA 10111101
1330 DATA 11111111
1340 DATA 11111111
1350 DATA 10111101
1360 'SPRITE DATA(ENEMY)
1370 DATA 10000001
1380 DATA 01011010
1390 DATA 00111100
1400 DATA 01100110
1410 DATA 01100110
1420 DATA 00111100
1430 DATA 01011010
1440 DATA 10000001
1450 'SPRITE DATA(GUN)
1460 DATA 00111100
1470 DATA 01011110
1480 DATA 11111111
1490 DATA 10111111
1500 DATA 10111111
1510 DATA 10111111
1520 DATA 01111110
1530 DATA 00111100
1540 'キー へんかん テーブル データ
1550 DATA 0,0,0,-4,3,-3,4,0,3,3,0,4,-3,3,-4,0,-3,-3

主な変数

RT(,) 逆正接テーブル
サンプルプログラム4とサイズが異なることに注目
その他はサンプルプログラム4と同じ。

プログラム解説

ポイント

このサンプルのポイントは1160行。 サンプルプログラム4に比べて、逆正接テーブル(配列)が約4分の1の大きさでイケています。
…ただ、BASIC では、サンプルプログラム4の方法に比べると、かなり処理が増えてしまったかもしれません。 機械語や C 言語ならあまり差はないと思うのですが…。 まぁ、こういうやり方もあるんじゃないかなという提案だけしておきます(^^;)。
戻る

MSXの適当手帳 MSX駅 西山駅