ニャオニャオ21世紀

レトロゲーム(MSX、PCエンジン、ファミコン、メガドライブセガサターン)と、MSXのゲーム開発と、最新ゲーム(PS4、SWITCH)、身体(身体意識など)、ライフハック、電子工作ほか雑記を綴っています

迷路で敵を徘徊させる2 MSX BASIC基礎その19 続き




スポンサーリンク



スポンサーリンク


前回の敵の徘徊のプログラムを見直して、

書き直してみました^^

短くなったし、速くなったかな(*´∀`*)

結構、無駄を省きました。

御覧ください^^ 

 

 


5 'TIME=0
10 COLOR15,1,1:SCREEN2:SCREEN1,2:COLOR15,1,1:WIDTH32:DEFINTA-Z:KEYOFF
20 DEFUSR=&H7E:A=USR(0)
30 KEY1,"SCREEN1"+CHR$(13)
40 'EN,EK,EX(),EY(),EM()
44 EN=0:EK=3:DIMEX(4),EY(4),EM(4),HK(4),EO(4),IX(5),IY(5)
45 X=160:Y=128:H=0
46 EX(0)=160:EY(0)=8:EX(1)=96:EY(1)=32:EX(2)=144:EY(2)=160:EX(3)=96:EY(3)=104
47 EM(0)=8:EM(1)=8:EM(2)=8:EM(3)=8:
48 IX(0)=0:IX(1)=0:IX(2)=8:IX(3)=0:IX(4)=-8:IY(0)=0:IY(1)=-8:IY(2)=0:IY(3)=8:IY(4)=0
49 IF GO=1 THEN GO=0:GOTO500
50 'MOJI TEIGI
51 N=33
52 FOR J=0 TO 63
53 FOR I=0 TO 7
54 VPOKE &H800+N*8+I,VPEEK(N*8+I)
55 VPOKE &H1000+N*8+I,VPEEK(N*8+I)
56 'COLOR TEIGI
57 VPOKE &H2000+N*8+I,&HF1
58 VPOKE &H2800+N*8+I,&HF1
59 VPOKE &H3000+N*8+I,&HF1
60 NEXT
61 N=N+1
62 NEXT
63 LOCATE10,10:PRINT"PLEASE WAIT!"
70 'SPRITE TEIGI
75 RESTORE 2000
77 FOR J=0 TO 9
80 S$=""
90 FOR I=0 TO31
100 READ DT$:
110 S$=S$+CHR$(VAL("&H"+DT$))
120 NEXT
130 SPRITE$(J)=S$
140 NEXT
160 'BLOCK TEIGI
170 M=ASC("a")
175 RESTORE 4000
178 FOR J=0 TO 10
180 FOR I=0 TO 7
190 READ BG$
200 VPOKE M*8+I,VAL("&H"+BG$)
210 VPOKE &H800+M*8+I,VAL("&H"+BG$)
220 VPOKE &H1000+M*8+I,VAL("&H"+BG$)
222 NEXT
225 M=M+1
230 NEXT
234 M=ASC("a")
235 RESTORE 5000
236 FOR J=0 TO 10
240 FOR I=0 TO 7
250 READ CR$
260 VPOKE &H2000+M*8+I,VAL("&H"+CR$)
270 VPOKE &H2800+M*8+I,VAL("&H"+CR$)
280 VPOKE &H3000+M*8+I,VAL("&H"+CR$)
283 NEXT
285 M=M+1
290 NEXT
490 'MAP
500 LOCATE 0,0:PRINT "caaaaaaaaaaaaaaaaaaaaaaaaaaaaaad"
510 LOCATE 0,1:PRINT "bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxb"
520 LOCATE 0,2:PRINT "bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxb"
530 LOCATE 0,3:PRINT "bxxjxxcaaaaaaaixxhaaaaaaaaaaixxb"
540 LOCATE 0,4:PRINT "bxxbxxbxxxxxxxxxxxxxxxxxxxxxxxxb"
550 LOCATE 0,5:PRINT "bxxbxxbxxxxxxxxxxxxxxxxxxxxxxxxb"
560 LOCATE 0,6:PRINT "bxxkxxeaaaaaaadxxcaaaaaaaaaaixxb"
570 LOCATE 0,7:PRINT "bxxxxxxxxxxxxxbxxbxxxxxxxxxxxxxb"
580 LOCATE 0,8:PRINT "bxxxxxxxxxxxxxbxxbxxxxxxxxxxxxxb"
590 LOCATE 0,9:PRINT "bxxcaaaaaaadxxbxxbxxcadxxhaadxxb"
600 LOCATE 0,10:PRINT"bxxbxxxxxxxbxxbxxbxxbxbxxxxxbxxb"
610 LOCATE 0,11:PRINT"bxxbxxxxxxxbxxbxxbxxbxbxxxxxbxxb"
620 LOCATE 0,12:PRINT"bxxeaaaaaaafxxbxxbxxeafxxhaafxxb"
630 LOCATE 0,13:PRINT"bxxxxxxxxxxxxxbxxbxxxxxxxxxxxxxb"
640 LOCATE 0,14:PRINT"bxxxxxxxxxxxxxbxxbxxxxxxxxxxxxxb"
650 LOCATE 0,15:PRINT"bxxcaadxxcaaaafxxeaaaaaaaixxjxxb"
660 LOCATE 0,16:PRINT"bxxbxxbxxbxxxxxxxxxxxxxxxxxxbxxb"
670 LOCATE 0,17:PRINT"bxxbxxbxxbxxxxxxxxxxxxxxxxxxbxxb"
680 LOCATE 0,18:PRINT"bxxeaafxxkxxhaaaaaaixxhaaaaafxxb"
690 LOCATE 0,19:PRINT"bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxb"
700 LOCATE 0,20:PRINT"bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxb"
710 LOCATE 0,21:PRINT"eaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaf"
890 'BGM WARIKOMI
900 RESTORE 21000
910 GOSUB 1860
920 ON INTERVAL=80 GOSUB 1860
930 INTERVAL ON
995 'MAIN LOOP
996 'PLAYER
998 M2=ASC("k")
999 H=4
1000 S=STICK(0) OR STICK(1)
1001 'A=TIME
1005 'PLAYER
1010 TX=X:TY=Y
1020 IF S=1 THEN Y=Y-8:H=(H+1)MOD 2
1040 IF S=3 THEN X=X+8:H=( (H+1)MOD 2)+2
1060 IF S=5 THEN Y=Y+8:H=( (H+1)MOD 2)+4
1080 IF S=7 THEN X=X-8:H=( (H+1)MOD 2)+6
1100 A$=CHR$(VPEEK(&H1800+(X\8)+(Y\8)*32))
1110 B$=CHR$(VPEEK(&H1800+(X\8)+1+(Y\8)*32))
1120 C$=CHR$(VPEEK(&H1800+(X\8)+(Y\8+1)*32))
1130 D$=CHR$(VPEEK(&H1800+(X\8)+1+(Y\8+1)*32))
1140 IF ASC(A$)<=M2 THEN X=TX:Y=TY
1150 IF ASC(B$)<=M2 THEN X=TX:Y=TY
1160 IF ASC(C$)<=M2 THEN X=TX:Y=TY
1170 IF ASC(D$)<=M2 THEN X=TX:Y=TY
1210 'ENEMY
1235 EH=0:A=RND(-TIME):ES=0
1240 AE$="#":BE$="#":CE$="#":DE$="#":HK(0)=0:HK(1)=0:HK(2)=0:HK(3)=0
1245 'UP
1246 V1=&H1800+EX(EN)\8+((EY(EN)-8)\8)*32
1249 IF VPEEK(V1)>M2 THEN IF VPEEK(V1+1)>M2 THEN ES=1:IF EO(EN)<>3 THEN HK(EH)=1:EH=EH+1
1250 'RIGHT
1251 V2=&H1800+(EX(EN)+8)\8+1+(EY(EN)\8)*32
1254 IF VPEEK(V2)>M2 THEN IF VPEEK(V2+32)>M2 THEN ES=2:IF EO(EN)<>4 THEN HK(EH)=2:EH=EH+1
1260 'DOWN
1261 V3=&H1800+EX(EN)\8+((EY(EN)+8)\8+1)*32
1264 IF VPEEK(V3)>M2 THEN IF VPEEK(V3+1)>M2 THEN ES=3:IF EO(EN)<>1 THEN HK(EH)=3:EH=EH+1
1270 'LEFT
1271 V4=&H1800+(EX(EN)-8)\8+(EY(EN)\8)*32
1274 IF VPEEK(V4)>M2 THEN IF VPEEK(V4+32)>M2 THEN ES=4:IF EO(EN)<>2 THEN HK(EH)=4:EH=EH+1
1290 IF EH=0 THEN HK(0)=ES ELSE ER=RND(1)*EH
1310 EO(EN)=HK(ER)
1314 EX(EN)=EX(EN)+IX(HK(ER)):EY(EN)=EY(EN)+IY(HK(ER))
1322 'ATARI HANTEI
1325 GOSUB1680
1327 'GAME OVER HANTEI
1330 IF GO=1 THEN GOTO1820
1332 'SPRITE HYOUJI
1333 PUT SPRITE 0,(X ,Y-1),11,H
1335 PUT SPRITE EN+1,(EX(EN),EY(EN)-1),13,8
1340 EN=EN+1:IF EN>EK-1 THEN EN=0
1345 'B=TIME
1346 'C=B-A
1347 'LOCATE0,0:PRINT C;"/60S"
1350 GOTO1000
1680 'PLAYER ATARI HANTEI
1690 ED=99
1700 FOR I=0 TO EK-1
1710 IF ABS(X-EX(I))<16 AND ABS(Y-EY(I))<16 THEN ED=I
1720 NEXT
1730 IF ED=99 THEN RETURN
1740 X=TX:Y=TY
1747 'PLAYER OUT SPRITE
1750 PUT SPRITE 0,(X,Y-1),8,9
1760 'WAIT
1770 FOR I=0 TO 25
1775 BEEP
1780 NEXT
1790 GO=1
1800 RETURN
1810 'GAME OVER
1820 LOCATE 11,10:PRINT"GAME OVER"
1830 LOCATE 10,12:PRINT"PUSH RETURN"
1840 IF INKEY$<>CHR$(13) GOTO1840
1850 GOTO45
1855 'BGM
1860 IF PEEK(&HFB40)<>0 THEN RETURN
1870 READ U$
1880 IF U$="##" THEN RESTORE 21000:READ U$
1890 'PLAY"O5"+U$
1900 RETURN
1995 'SPRITE UP0 DATA
2000 DATA 0F,1F,3F,7F,7F,7F,7F,7F,3F,1F,0F,30,03,01,1C,1C
2010 DATA F0,F8,FC,FE,FE,FE,FE,FE,FC,F8,F0,0C,CC,C0,38,00
2015 'SPRITE UP1 DATA
2020 DATA 0F,1F,3F,7F,7F,7F,7F,7F,3F,1F,0F,18,1B,03,1C,00
2030 DATA F0,F8,FC,FE,FE,FE,FE,FE,FC,F8,F0,0C,C0,B8,38,38
2035 'SPRITE RIGHT2 DATA
2040 DATA 0F,1F,3D,7D,7F,7F,7F,7F,3F,1F,0F,00,03,19,04,0E
2050 DATA F0,F8,F0,E0,C0,80,00,00,80,E0,F0,0C,CC,C0,30,38
2055 'SPRITE RIGHT3 DATA
2060 DATA 0F,1F,3F,7F,7F,7F,7E,7F,3F,1F,0F,00,1B,19,03,03
2070 DATA E0,F0,B8,B8,FC,FC,FC,00,F8,F0,E0,00,D8,C0,60,60
2075 'SPRITE DOWN4 DATA
2080 DATA 0F,1F,3B,7B,7B,7F,7F,77,38,1F,0F,30,03,1D,1E,1C
2090 DATA F0,F8,DC,DE,DE,FE,FE,EE,1C,F8,F0,0C,CC,C0,38,00
2095 'SPRITE DOWN5 DATA
2100 DATA 0F,1F,3B,7B,7F,7F,7B,7B,3C,1F,0F,18,1B,03,1C,00
2110 DATA F0,F8,DC,DE,FE,FE,DE,DE,3C,F8,F0,0C,C0,B8,78,38
2115 'SPRITE LEFT6 DATA
2120 DATA 0F,1F,0F,07,03,01,00,00,01,07,0F,30,33,03,0C,1C
2130 DATA F0,F8,BC,BE,FE,FE,FE,FE,FC,F8,F0,00,C0,98,20,70
2135 'SPRITE LEFT7 DATA
2140 DATA 07,0F,1D,1D,3F,3F,3F,00,1F,0F,07,00,1B,03,06,06
2150 DATA F0,F8,FC,FE,FE,FE,7E,FE,FC,F8,F0,00,D8,98,C0,C0
3275 'SPRITE SLIME DATA
3280 DATA 3F,7F,FF,FF,FF,CF,F3,FF,EB,E3,FF,FF,FF,FF,FF,ED
3290 DATA FC,FE,FF,FF,E7,DB,FF,C7,D7,C7,FF,FF,FF,FF,FF,B7
3300 'SPRITE DAMAGE
3310 DATA 00,01,21,11,09,04,00,78,00,04,09,11,21,01,00,00
3320 DATA 00,00,08,10,20,40,00,3C,00,40,20,10,08,00,00,00
3990 'YUKA
4000 'DATAE7,E7,E7,00,7E,7E,7E,00
4010 DATAFF,FF,00,00,00,00,FF,FF
4020 DATAC3,C3,C3,C3,C3,C3,C3,C3
4030 DATA0F,1F,38,70,E0,C0,C1,C3
4040 DATAF0,F8,1C,0E,07,03,83,C3
4050 DATAC3,C1,C0,E0,70,38,1F,0F
4060 DATAC3,83,03,07,0E,1C,F8,F0
4070 DATAC3,83,03,07,0E,1C,F8,F0
4080 DATA7F,FF,E0,C0,C0,E0,FF,7F
4090 DATAFE,FF,07,03,03,07,FF,FE
4100 DATA7E,FF,E7,C3,C3,C3,C3,C3
4110 DATAC3,C3,C3,C3,C3,E7,FF,7E
4990 'COLOR
5000 DATAF1,51,41,41,41,41,51,41
5010 DATA41,41,41,41,41,41,41,41
5020 DATAF1,51,41,41,41,41,41,41
5030 DATAF1,51,41,41,41,41,41,41
5040 DATA41,41,41,41,41,41,51,41
5050 DATA41,41,41,41,41,41,51,41
5060 DATA41,41,41,41,41,41,41,41
5070 DATAF1,51,41,41,41,41,51,41
5080 DATAF1,51,41,41,41,41,51,41
5090 DATAF1,51,41,41,41,41,41,41
5100 DATA41,41,41,41,41,41,51,41
20990 'MUSIC DATA
21000 DATAG4E8E4F8E8D8C8
21010 DATAG4E8E8D4R4
21020 DATAE8E8G8G8A8A8R8A8
21030 DATAO6C4O5E8E8G4R4
21040 DATAGE8E8F8E8D8C8
21050 DATAGE8E8D4R4
21060 DATAGE8E8A4G8G8
21070 DATAA8A8B8B8O6C4O5R4
21080 DATA##

 

 

前回のプログラムをまとめただけですが...

(ON ~ GOTO ~ をナシにしました(*´ω`*))

 以下、変更箇所を抜き出してみました。

 

 


44 EN=0:EK=3:DIMEX(4),EY(4),EM(4),HK(4),EO(4),IX(5),IY(5)
~
48 IX(0)=0:IX(1)=0:IX(2)=8:IX(3)=0:IX(4)=-8:IY(0)=0:IY(1)=-8:IY(2)=0:IY(3)=8:IY(4)=0
~
1210 'ENEMY
1235 EH=0:A=RND(-TIME):ES=0
1240 AE$="#":BE$="#":CE$="#":DE$="#":HK(0)=0:HK(1)=0:HK(2)=0:HK(3)=0
1245 'UP
1246 V1=&H1800+EX(EN)\8+((EY(EN)-8)\8)*32
1249 IF VPEEK(V1)>M2 THEN IF VPEEK(V1+1)>M2 THEN ES=1:IF EO(EN)<>3 THEN HK(EH)=1:EH=EH+1
1250 'RIGHT
1251 V2=&H1800+(EX(EN)+8)\8+1+(EY(EN)\8)*32
1254 IF VPEEK(V2)>M2 THEN IF VPEEK(V2+32)>M2 THEN ES=2:IF EO(EN)<>4 THEN HK(EH)=2:EH=EH+1
1260 'DOWN
1261 V3=&H1800+EX(EN)\8+((EY(EN)+8)\8+1)*32
1264 IF VPEEK(V3)>M2 THEN IF VPEEK(V3+1)>M2 THEN ES=3:IF EO(EN)<>1 THEN HK(EH)=3:EH=EH+1
1270 'LEFT
1271 V4=&H1800+(EX(EN)-8)\8+(EY(EN)\8)*32
1274 IF VPEEK(V4)>M2 THEN IF VPEEK(V4+32)>M2 THEN ES=4:IF EO(EN)<>2 THEN HK(EH)=4:EH=EH+1
1290 IF EH=0 THEN HK(0)=ES ELSE ER=RND(1)*EH
1310 EO(EN)=HK(ER)
1314 EX(EN)=EX(EN)+IX(HK(ER)):EY(EN)=EY(EN)+IY(HK(ER))

https://msxpen.com/codes/-M9euGFc0lE6Emp4o7DK

(クリックでプレイできます)

 

前回のムダの多いプログラムも

書いておきます。

 


1210 'ENEMY
1220 UX(EN)=EX(EN):UY(EN)=EY(EN)
1235 EH=0:EI=0:A=RND(-TIME):ES=0
1240 AE$="#":BE$="#":CE$="#":DE$="#":HK(0)=0:HK(1)=0:HK(2)=0:HK(3)=0
1245 'UP
1246 EY(EN)=EY(EN)-8
1247 AE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+(EY(EN)\8)*32))
1248 BE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+1+(EY(EN)\8)*32))
1249 IF ASC(AE$)>M2 THEN IF ASC(BE$)>M2 THEN ES=1:IF EO(EN)<>3 THEN EH=EH+1:HK(EI)=1:EI=EI+1
1250 'RIGHT
1251 EX(EN)=UX(EN):EY(EN)=UY(EN):EX(EN)=EX(EN)+8
1252 BE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+1+(EY(EN)\8)*32))
1253 DE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+1+(EY(EN)\8+1)*32))
1254 IF ASC(BE$)>M2 THEN IF ASC(DE$)>M2 THEN ES=2:IF EO(EN)<>4 THEN EH=EH+2:HK(EI)=2:EI=EI+1
1260 'DOWN
1261 EX(EN)=UX(EN):EY(EN)=UY(EN):EY(EN)=EY(EN)+8
1262 CE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+(EY(EN)\8+1)*32))
1263 DE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+1+(EY(EN)\8+1)*32))
1264 IF ASC(CE$)>M2 THEN IF ASC(DE$)>M2 THEN ES=3:IF EO(EN)<>1 THEN EH=EH+4:HK(EI)=3:EI=EI+1
1270 'LEFT
1271 EX(EN)=UX(EN):EY(EN)=UY(EN):EX(EN)=EX(EN)-8
1272 CE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+(EY(EN)\8+1)*32))
1273 AE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+(EY(EN)\8)*32))
1274 IF ASC(CE$)>M2 THEN IF ASC(AE$)>M2 THEN ES=4:IF EO(EN)<>2 THEN EH=EH+8:HK(EI)=4
1275 EX(EN)=UX(EN):EY(EN)=UY(EN)
1280 ON EH GOTO 1314,1315,1310,1316,1310,1310,1311,1317,1310,1310,1311,1310,1311,1311,1312
1290 ON ES GOTO 1314,1315,1316,1317
1300 GOTO 1325
1310 ER=RND(1)*2:EO(EN)=HK(ER):ON HK(ER) GOTO 1314,1315,1316,1317
1311 ER=RND(1)*3:EO(EN)=HK(ER):ON HK(ER) GOTO 1314,1315,1316,1317
1312 ER=RND(1)*4:EO(EN)=HK(ER):ON HK(ER) GOTO 1314,1315,1316,1317
1314 EO(EN)=1:EY(EN)=EY(EN)-8:GOTO1325
1315 EO(EN)=2:EX(EN)=EX(EN)+8:GOTO1325
1316 EO(EN)=3:EY(EN)=EY(EN)+8:GOTO1325
1317 EO(EN)=4:EX(EN)=EX(EN)-8:GOTO1325   

 

興味がある方は、見比べてみてください〜。

基本的に、やっていることはそれほど変わらないので。

 

では〜。


「ニャオニャオ21世紀は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。」

当サイトは第三者配信の広告サービス「Google Adsense グーグルアドセンス」を利用しています。 広告配信事業者は、ユーザーの興味に応じた広告を表示するためにCookie(クッキー)を使用することがあります。 Cookie(クッキー)を無効にする設定およびGoogleアドセンスに関する詳細は「広告 – ポリシーと規約 – Google」をご覧ください