照準ゲーム開発、危険地域を追加002



'8 2 4 6でサイトを上下左右して
'0 でレーザー発射
'短時間で100点以上になることを目指すゲーム
'危険地域を追加
'
'変数
'i j サイトの座標、
'k l ターゲットの座標、m n ターゲットの進行方向と歩数
'o1,o2 危険場所の座標
's スコア
'b ループした回数

'************メインルーチン ここから*******
Randomize
Public i,j,k,l,m,n,s,b,o1,o2 'サブルーチンをつかう場合は変数を宣言する
gbackcolor=0
gscreen (800,600)
i=int(rnd(1)*700)-350'サイトの最初の位置X軸
j=int(rnd(1)*500)-250'サイトの最初の位置Y軸
o1=100'危険地域の最初の位置X軸
o2=100'危険地域の最初の位置Y軸
s=50'スコアの初期値

do '一番
m=int(rnd(1)*5)'乱数でターゲットの移動方向を発生
n=int(rnd(1)*20)'乱数でターゲットの移動歩数を発生
a=0
do while a<n 'n歩、ターゲットを移動させる
Call syoujyun_idou 'サイト移動、キー入力判断
Call mokuhyou_idou 'ターゲット移動、乱数による
Call kiken_idou
Call kiken_handan '危険地域との位置関係判断
line(0,0)-(800,600),0,bf'画面を黒で塗りつぶす
Call syoujyun_egaku 'サイトを描く
Call mokuhyou_egaku 'ターゲットを描く
call kiken_egaku '危険地域を描く
Call moji_egaku '文字を描く
'終了判断
If s<0 Then
call gameover
ElseIf s>100 Then
call omedetou
Else
End If
sleep(100)
a=a+1
b=b+1
loop
loop '一番
End
'************メインルーチン ここまで**********

'***************以下、サブルーチン*************
Sub syoujyun_idou 'サイト移動、キー入力判断
a$=inkey$
if a$="8" then ' 二番
j=j-6
else ' 二番
if a$="6" then' 三番
i=i+6
else ' 三番
if a$="4" then ' 四番
i=i-6
else ' 四番
if a$="2" then ' 五番
j=j+6
else ' 五番
if a$="0" then'六番
Call utta'打った場合のサブルーチンに行く
else'六番
end if'六番
end if ' 五番
end if ' 四番
end if ' 三番
end if ' 二番
End sub

Sub mokuhyou_idou 'ターゲット移動
if m=1 then ' 二番
l=l-3
else ' 二番
if m=2 then' 三番
k=k+3
else ' 三番
if m=3 then ' 四番
k=k-3
else ' 四番
if m=4 then '  五番
l=l+3
else '  五番
end if '  五番
end if ' 四番
end if ' 三番
end if ' 二番
End sub

Sub kiken_idou '危険地域の移動
dio1=i-o1'X軸方向のサイトと危険地域の位置の差
djo2=j-o2'Y軸方向のサイトと危険地域の位置の差

if abs(dio1)-abs(djo2)=<0 and djo2<0 then ' 二番
o2=o2-1
else ' 二番
if abs(dio1)-abs(djo2)>0 and dio1>0 then' 三番
o1=o1+1
else ' 三番
if abs(dio1)-abs(djo2)>0 and dio1<0 then ' 四番
o1=o1-1
else ' 四番
if abs(dio1)-abs(djo2)=<0 and djo2>0 then '  五番
o2=o2+1
else '  五番
end if '  五番
end if ' 四番
end if ' 三番
end if ' 二番
End sub


Sub syoujyun_egaku 'サイトを描く
line(400+i-20,300+j-20)-(400+i+20,300+j+20),10,b
line(400+i-40,300+j)-(400+i+40,300+j),10,
line(400+i,300+j-40)-(400+i,300+j+40),10,
End sub

Sub mokuhyou_egaku 'ターゲットを描く
circle(400+k,300+l),10,12,,,,f
End sub

Sub kiken_egaku '危険地域を描く
circle(400+o1,300+o2),100,13,,,,
End sub

Sub moji_egaku'文字を書く
gFontSize = 10
BackColor = "black"
ForeColor = "white"
GLocate (80,10)'文字の位置を決める
GPrint "Score"
GLocate (150,10)'文字の位置を決める
GPrint s
GLocate (80,30)'文字の位置を決める
GPrint "loops"
GLocate (150,30)'文字の位置を決める
GPrint b
End sub

Sub utta'打った場合のあたり、はずれ判断
dx=abs(i-k)'サイトとターゲットのx軸方向の距離(絶対値)
dy=abs(j-l)'サイトとターゲットのy軸方向の距離(絶対値)
If (dx<20) and (dy<20) Then
Print "あたり"
circle(400+i,300+j),100,12,,,,f
s=s+5'スコアを増やす
Else
Print "はずれ"
line(400+i-20,300+j-20)-(400+i+20,300+j+20),10,bf
s=s-1'スコアを減らす
End If
sleep(50)
End sub

Sub kiken_handan'危険地域とのあたり、はずれ判断
od=((i-o1)^2+(j-o2)^2)^(1/2)'サイトと危険地域との直線距離
If od<100 Then
Print "危険"
circle(400+o1,300+o2),100,13,,,,f
s=s-1'スコアを減らす
Else
End If
sleep(50)
End sub

Sub gameover'ゲームオーバーの時のサブルーチン
gFontSize = 20
BackColor = "red"
ForeColor = "white"
GLocate (400,300)'文字の位置を決める
GPrint "Enagy empty GAME OVER"
end
End sub

sub omedetou'勝った時のサブルーチン
gFontSize = 20
BackColor = "blue"
ForeColor = "white"
GLocate (400,300)'文字の位置を決める
GPrint "Congratulations!"
end
End sub



鋼雷kefi>TBasicメニュー に戻る


kefi_pallhkari

最終更新日:2015,3,3