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$
モンスターに遭遇すると、ヒットポイントが減ります。
コメント