300 – Official Trailer [HD]
映画『300』(2007)
スパルタ軍300人と、ペルシャ軍10万人の戦いです。ペルシャはゾウとか連れてきますが、スパルタの300人は槍と盾で応戦します。とにかくスパルタンが強いです。体罰のスパルタ学習は嫌ですが、とにかく頭を追い込んでフル回転させて、というスパルタ学習は自分に向いてると思います。
今回も、BASICやります。今回はGOSUB命令を使って、ダンジョンにモンスターを出現させます。
書式) GOSUB 行番号またはラベル名
行番号は修正する度に変わるので、ラベル名にします。monsterというラベルにしました。
monster:
monster_exists = INT(RND * 10)
if monster_exists = 1 then
locate 9,1
print "モンスターが現れた"
end if
return
移動してると時々モンスターが現れるようになりました。
モンスターが現れたという表示だけではつまらないので、ヒットポイントを作って、モンスターからダメージを受けるように修正します。
ヒットポイントの変数名はhpにしました。
hp = 100
サブルーチンの方はヒットポイントを10引く処理を追加します。
monster:
monster_exists = INT(RND * 10)
if monster_exists = 1 then
locate 9,1
print "モンスターが現れた"
hp = hp - 10
end if
return
あと、ヒットポイントが表示されていないと、ダメージを受けていることが分からないので、もう一つサブルーチンを追加します。
status_disp: locate 2,20 print "HP: " & hp return
全ソースです。
takk@ubu16:~/basictest$ cat test.bas | nl -ba -i10 -v10
10 '$lang: "qb"
20
30 hp = 100
40
50 dim map$(30)
60 ' 1 2 3
70 ' 12345678901234567890123456789012345
80 map$(1) = "###################################"
90 map$(2) = "###################################"
100 map$(3) = "###################################"
110 map$(4) = "#######S# # ## ############"
120 map$(5) = "####### ### #### ## ## # #######"
130 map$(6) = "####### # # ## #G## #######"
140 map$(7) = "####### # #### ### ### #### #######"
150 map$(8) = "####### # # #######"
160 map$(9) = "###################################"
170 map$(10) = "###################################"
180 map$(11) = "###################################"
190
200 x = 8
210 y = 4
220
230 while 1
240 cls
250
260 color 2,1 'green on blue
270 for yy = y-3 to y+3
280 print mid$(map$(yy),x-7,15)
290 next
300
310 color 5 'red
320 locate 4,8
330 print "*"
340
350 color 7,0 'white on black
360
370 gosub monster
380 gosub status_disp
390
400 do
410 let k$ = INKEY$
420 loop until k$ <> ""
430
440 select case k$
450 case "j"
460 ck = y + 1
470 if mid$(map$(ck),x,1) <> "#" and ck <= 8 then y = ck
480 case "k"
490 ck = y - 1
500 if mid$(map$(ck),x,1) <> "#" and ck >= 4 then y = ck
510 case "h"
520 ck = x - 1
530 if mid$(map$(y),ck,1) <> "#" and ck >= 8 then x = ck
540 case "l"
550 ck = x + 1
560 if mid$(map$(y),ck,1) <> "#" and ck <= 28 then x = ck
570 end select
580
590 wend
600
610 status_disp:
620 locate 2,20
630 print "HP: " & hp
640 return
650
660 monster:
670 monster_exists = INT(RND * 10)
680
690 if monster_exists = 1 then
700 locate 9,1
710 print "モンスターが現れた"
720 hp = hp - 10
730 end if
740
750 return
760
takk@ubu16:~/basictest$
モンスターに遭遇すると、ヒットポイントが減ります。

コメント