Microsoft Small Basic

Program Listing: FXR370
GraphicsWindow.Title="陰謀ダーゲーム0.06 2012.1.23"'…ウィンドウタイトル
GraphicsWindow.BackgroundColor="Black"'…バックが黒
GraphicsWindow.FontSize=18
'
gw=GraphicsWindow.Width'…ウィンドウの幅:gw
gh=GraphicsWindow.Height'…ウィンドウの高さ:gh
'
'ラケットゲーム用
score=0
hiscore=0
'wait=7
kihonten=10
bairitu=0
stage=0
'
Hajimari: '始まりの標識
GraphicsWindow.Clear() 'ウィンドウのクリアー
GraphicsWindow.DrawText(gw/2-30,gh-80,"Stage."+stage)
'
'ラケットゲーム用初期設定↓
scorekaunto()
'wait=wait-1
bairitu=bairitu+1
stage=stage+1
x=Math.GetRandomNumber(gw-16)
y=0
deltaX=.02
deltaY=.02
tenjyou=0
tenjyouatumi=gh/10
'
'インボーダー、自機用初期設定↓
ix=0'…インボーダーのX座標(初期値)
iMissyleX0=gw/4'インボーダーのミサイルの発射開始される初期位置(X座標)
iMissyleX=iMissyleX0'インボーダーのミサイルのX座標をiMissyleX0とする
iMissyleY=0'インボーダーのミサイルのY座標を0とする
iMdy=0.03 'インボーダーのミサイルのスピード調整用
MyMissileY=gh'…自機ミサイルの初期Y座標
MMdy=.03 '自機ミサイルの飛行スピード(調整用)
Idx=0.005 'インボーダーの移動スピード(調整用)
'
UchuuHyouji()'…宇宙表示サブに飛ぶ
'
'自機のグラフィック
GraphicsWindow.BrushColor="Cyan"'…塗り色:青緑
rbody=Shapes.AddRectangle(22,22)'…ロケットのボディの形
rtop=Shapes.AddTriangle(0,20,8,0,16,20)'…ロケットのトップの形
rwing=Shapes.AddTriangle(0,20,25,0,50,20)'…ロケットの翼の形
rpit=Shapes.AddEllipse(8,15)'…ロケットのコックピットの形
MyMissile=Shapes.AddRectangle(10,20)'…自機ミサイルの形
'
'インボーダーのグラフィック
GraphicsWindow.BrushColor="Chocolate"
iwing=Shapes.AddTriangle(0,0,20,20,40,0)'…インボーダーの翼の形
ibody=Shapes.AddEllipse(30,16)'…インボーダーのボディの形
itop=Shapes.AddTriangle(0,0,4,20,8,0)'…インボーダーの先の形
iMissyle=Shapes.AddRectangle(8,20)
'
'インボーダー爆発のグラフィック用↓
GraphicsWindow.BrushColor="Yellow" '塗り色を黄色に
ibakuhatu1=Shapes.AddEllipse(50,50) '直径50の円
GraphicsWindow.BrushColor="Red" '塗り色を赤色に
ibakuhatu2=Shapes.AddEllipse(50,50) '直径50の円
GraphicsWindow.BrushColor="Orange" '塗り色をオレンジ色に
ibakuhatu3=Shapes.AddEllipse(50,50) '直径50の円
'
'ラケットゲームグラフィック用
GraphicsWindow.BrushColor="Gold"
ball=Shapes.AddEllipse(16,16)
'
'初期画面で左上に図形が集中するのを避けるための処理↓
OnMouseMove()
MymissyleShokika() 'マイミサイルを画面の外に待機させる
iMissyleShokika() 'インボーダーのミサイルを画面の外に待機させる
Shapes.Move(ibakuhatu1,ix-35,-50) '爆発画像を画面の外の待機させる
Shapes.Move(ibakuhatu2,ix-15,-50) '爆発画像を画面の外の待機させる
Shapes.Move(ibakuhatu3,ix-25,-50) '爆発画像を画面の外の待機させる
'
GraphicsWindow.MouseMove=OnMouseMove'…マウスに動きがあったらOnMouseMoveサブへ飛ぶ
'
Loop:'★★★ループの始まりの標識(メインルーチン)★★★
'
'ラケットゲームの処理↓
x=x+deltaX
y=y+deltaY
'
If tenjyou>=gh-50 Then '天井が下まで来たら…
Sound.PlayChime()
Program.Delay(100)
Goto Hajimari
EndIf
'
If(x>gw-16 Or x<=0) Then 'ボールが横の壁に当たったら…
deltaX=-deltaX
EndIf
If(y<=tenjyou) Then 'ボールが天井を越えたら…
deltaY=-deltaY
EndIf
'
rakettoX=Shapes.GetLeft(rwing) 'ラケットの位置を取得
If(y=gh-22 And x>=rakettoX-16 And x<=rakettoX+50) Then 'ボールがラケットに当たったら…
deltaY=-deltaY
tenjyouRakka()
'
score=score+bairitu*kihonten
If score>=hiscore Then '現在スコアーがハイスコアーを越えたら…
hiscore=score
EndIf
ScoreKaunto()
Sound.PlayClick()
EndIf
'
Shapes.Move(ball,x,y) 'ボールを動かす
'
If(y>=gh) Then 'ボールが画面の底(下)を越えたら…
score=0
bairitu=0
stage=0
Goto Hajimari
EndIf
'
'1.インボーダーの動作↓
'
If ix>=gw Then'…もしインボーダーのX座標がウィンドウの幅を超えたら以下の処理をする
ix=0'…インボーダーのX座標を0にする(最初に戻る)
iMissyleShokika() 'インボーダーのミサイル初期化サブへ飛ぶ
EndIf
'
ix=ix+Idx'…インボーダーのX座標をIdx分増やす(インボーダーのスピード調整)
InvoderMove()'…インボーダーを動かすサブに飛ぶ
'
If ix>=iMissyleX0 Then 'もしインボーダーのX座標がiMissyleX0を超えたら以下を処理
If iMissyleY>=gh-40 And iMissyleX>=rokettoX-25 And iMissyleX<=rokettoX+25 Then 'もしインボーダーのミサイルが自機に当たる条件を満たしたら以下を処理
RokettoBakuhatu() '自機の爆発サブに飛ぶ
Goto Hajimari '始まりに戻る
EndIf

If iMissyleY>=gh Then 'もしインボーダーのミサイルのY座標が画面の縦幅を超えたら以下の処理
iMissyleX=ix 'インボーダーミサイルのX座標をインボーダーのX座標とする
iMissyleY=0 'インボーダーミサイルのY座標を0(画面の一番上)にする
EndIf
'
Shapes.Move(iMissyle,iMissyleX,iMissyleY) 'インボーダーミサイルを座標(iMissylex,iMissyleY)に移動する
iMissyleY=iMissyleY+iMdy 'インボーダーミサイルのY座標の値を増やす(ミサイルが下がる)
Endif
'
'2.自機の動作↓
'
If MissileFlag=1 Then '自機ミサイルが飛行中なら以下の処理
If MyMissileY<=15 And MyMissileX>=ix-20 And MyMissileX<=ix+20 Then 'もしミサイルのY座標が15以下で、X座標がインボーダーの機体範囲内なら以下を処理する
InvoderBakuhatu() 'インボーダー爆発サブへ飛ぶ
'
MymissyleShokika() '自機ミサイル初期化サブへ飛ぶ
'
ix=0 'インボーダーのX座標を0(左端)に戻す
iMissyleShokika() 'インボーダーミサイル初期化サブへ飛ぶ
'
Goto Loop 'メインルーチンに戻る
Endif

If MyMissileY<=0 then 'もし自機ミサイルのY座標が15以下になら以下の処理
MissileFlag=0 '自機ミサイル飛行終了とする
MyMissileY=gh '自機ミサイルのY座標をウィンドウの一番下にする
EndIf
Shapes.Move(MyMissile,MyMissileX-5,MyMissileY) '自機ミサイルを座標(MyMissileX,MyMissileY)に移動
MyMissileY=MyMissileY-MMdy '自機ミサイルのY座標からMMdyを引く(ミサイルが前進する)
Goto Loop 'Loopの最初に戻る
EndIf
If Mouse.IsLeftButtonDown Then 'もしマウスの左ボタンが押されたら以下の処理
MissileFlag=1 'ミサイル飛行中宣言
MyMissileX=GraphicsWindow.MouseX '自機ミサイルのX座標をマウスのX座標とする
EndIf
'

Goto Loop'…ループの最初へ
'
'-------------------- サブルーチン ↓ -------------------------------
'
Sub OnMouseMove'…マウスに動きがあった時のサブ
rokettoX=GraphicsWindow.MouseX'…マウスの位置(X座標)
Shapes.Move(rtop,rokettoX-7,gh-40)'…ロケットの先端を動かす
Shapes.Move(rwing,rokettoX-24,gh-22)'…ロケット翼を動かす
Shapes.Move(rbody,rokettoX-10,gh-25)'…ロケットのボディを動かす
Shapes.Move(rpit,rokettoX-3,gh-19)'…ロケットのコックピットを動かす
EndSub
'
Sub UchuuHyouji'…宇宙表示サブ
For i=1 To 100'…100回繰り返す(100この星)
hx=Math.GetRandomNumber(gw)'…星のX座標(乱数)
hy=Math.GetRandomNumber(gh)'…星のY座標(乱数)
GraphicsWindow.SetPixel(hx,hy,"White")'…座標(hx,hy)のピクセルを白にする
EndFor
EndSub
'
Sub InvoderMove'…インボーダーの動きサブ
Shapes.Move(iwing,ix-20,0)'…インボーダーの翼を動かす
Shapes.Move(ibody,ix-15,0)'…インボーダーのボディを動かす
Shapes.Move(itop,ix-4,9)'…インボーダーの先端を動かす
EndSub
'
Sub InvoderBakuhatu 'インボーダーの爆発表示サブ
Shapes.Move(ibakuhatu1,ix-35,-20) '爆発用の円1を描く
Shapes.Move(ibakuhatu2,ix-15,-20) '爆発用の円2を描く
Shapes.Move(ibakuhatu3,ix-25,-10) '爆発用の円3を描く
Sound.PlayChimeAndWait() 'チャイムを鳴らし、鳴り終わるまで待つ
Program.Delay(1000) '待ち時間を作る
Shapes.Move(ibakuhatu1,ix-35,-50) '発爆用の円1消去(ウドンィウ外へ)
Shapes.Move(ibakuhatu2,ix-15,-50) '発爆用の円2消去(ウドンィウ外へ)
Shapes.Move(ibakuhatu3,ix-25,-50) '発爆用の円3消去(ウドンィウ外へ)
EndSub
'
Sub MymissyleShokika '自機ミサイル初期化サブ
MissileFlag=0 'ミサイル飛行フラグを降ろす(飛んでいない状態とする)
MyMissileY=gh '自機ミサイルのY座標をウィンドウの一番下にする
Shapes.Move(MyMissile,MyMissileX,MyMissileY) '画面から消す
EndSub
'
Sub iMissyleShokika 'インボーダーミサイル初期化サブ
iMissyleX0=Math.GetRandomNumber(gw/4) 'ミサイル発射のX座標をランダムに決める(画面の1/4以下)
iMissyleX=iMissyleX0 'ミサイルの位置(X座標)をiMissyleX0とする
iMissyleY=0 'Y座標を0とする
Shapes.Move(iMissyle,iMissyleX,iMissyleY-50) '画面の外に放り出す
EndSub
'
Sub RokettoBakuhatu '自機ロケットの爆発表示サブ
Shapes.Move(ibakuhatu1,rokettoX-35,gh-35) '爆発用の円1を描く
Shapes.Move(ibakuhatu2,rokettoX-15,gh-35) '爆発用の円2を描く
Shapes.Move(ibakuhatu3,rokettoX-25,gh-25) '爆発用の円3を描く
Sound.PlayChimesAndWait() 'チャイムを鳴らし、鳴り終わるまで待つ
Program.Delay(1000) '待ち時間を作る
Shapes.Move(ibakuhatu1,rokettoX-35,gh-50) '発爆用の円1消去(ウドンィウ外へ)
Shapes.Move(ibakuhatu2,rokettoX-15,gh-50) '発爆用の円2消去(ウドンィウ外へ)
Shapes.Move(ibakuhatu3,rokettoX-25,gh-50) '発爆用の円3消去(ウドンィウ外へ)
EndSub
'
'ラケットゲーム用
Sub ScoreKaunto 'スコアーを表示するサブ
GraphicsWindow.FontSize=15
GraphicsWindow.BrushColor="Black"
GraphicsWindow.FillRectangle(gw-220,gh-50,200,20)
GraphicsWindow.BrushColor="Red"
GraphicsWindow.DrawText(gw-220,gh-50,"Score:"+score)
GraphicsWindow.BrushColor="Orange"
GraphicsWindow.DrawText(gw-120,gh-50,"Hi-score:"+hiscore)
EndSub
'
Sub TenjyouRakka 'ボールの跳ね返る天井表示サブ
GraphicsWindow.PenColor="Black"
GraphicsWindow.DrawLine(0,tenjyou,gw,tenjyou)
GraphicsWindow.PenColor="#111130"
tenjyou=tenjyou+tenjyouatumi
GraphicsWindow.DrawLine(0,tenjyou,gw,tenjyou)
EndSub
'