Microsoft Small Basic

Program Listing: XCK783
GraphicsWindow.Title="陰謀ダーゲーム0.03 2012.1.4"'…ウィンドウタイトル
GraphicsWindow.BackgroundColor="Black"'…バックが黒
'
gw=GraphicsWindow.Width'…ウィンドウの幅:gw
gh=GraphicsWindow.Height'…ウィンドウの高さ:gh
GraphicsWindow.BrushColor="Cyan"'…塗り色:青緑
'
ix=0'…インボーダーのX座標(初期値)
MyMissileY=gh'…自機ミサイルの初期Y座標
MMdy=.03 '自機ミサイルの飛行スピード(調整用)
Idx=0.005 'インボーダーの移動スピード(調整用)
UchuuHyouji()'…宇宙表示サブに飛ぶ
'
rbody=Shapes.AddRectangle(22,22)'…ロケットのボディの形
rtop=Shapes.AddTriangle(0,20,8,0,16,20)'…ロケットのトップの形
rwing=Shapes.AddTriangle(0,25,15,0,30,25)'…ロケットの翼の形
rpit=Shapes.AddEllipse(8,15)'…ロケットのコックピットの形
MyMissile=Shapes.AddRectangle(10,20)'…自機ミサイルの形
'
iwing=Shapes.AddTriangle(0,0,20,20,40,0)'…インボーダーの翼の形
ibody=Shapes.AddEllipse(30,16)'…インボーダーのボディの形
itop=Shapes.AddTriangle(0,0,4,20,8,0)'…インボーダーの先の形
'
'インボーダー爆発のグラフィック用
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の円

OnMouseMove() '初期画面で左上に図形が集中するのを避けるため
Shapes.Move(MyMissile,MyMissileX,MyMissileY) '初期画面で左上に図形が集中するのを避けるため
Shapes.Move(ibakuhatu1,ix-35,-50)
Shapes.Move(ibakuhatu2,ix-15,-50)
Shapes.Move(ibakuhatu3,ix-25,-50)
GraphicsWindow.MouseMove=OnMouseMove'…マウスに動きがあったらOnMouseMoveサブへ飛ぶ
'
Loop:'…ループの始まりの標識(メインルーチン)
'
'*** インボーダーの動作 ↓ ***
'
If ix>=gw Then'…もしインボーダーのX座標がウィンドウの幅を超えたら以下の処理をする
ix=0'…インボーダーのX座標を0にする(最初に戻る)
Endif
'
ix=ix+Idx'…インボーダーのX座標を0.01増やす(インボーダーのスピード調整)
InvoderMove()'…インボーダーを動かすサブに飛ぶ
'
'*** 自機の動作 ↓ ***
'
If MissileFlag=1 Then '自機ミサイルが飛行中なら以下の処理
If MyMissileY<=15 And MyMissileX>=ix-20 And MyMissileX<=ix+20 Then 'もしミサイルのY座標が15以下で、X座標がインボーダーの機体範囲内なら以下を処理する
InvoderBakuhatu() 'インボーダー爆発サブへ飛ぶ
ix=0 'インボーダーのX座標を0(左端)に戻す
MissileFlag=0 'ミサイル飛行フラグを降ろす(飛んでいない状態とする)
MyMissileY=gh '自機ミサイルのY座標をウィンドウの一番下にする
Shapes.Move(MyMissile,MyMissileX,MyMissileY) '画面から消す
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-14,gh-28)'…ロケット翼を動かす
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.PlayChimesAndWait() 'チャイムを鳴らし、鳴り終わるまで待つ
Shapes.Move(ibakuhatu1,ix-35,-50) '発爆用の円1消去(のウドンィウへ外へ)
Shapes.Move(ibakuhatu2,ix-15,-50) '発爆用の円2消去(のウドンィウへ外へ)
Shapes.Move(ibakuhatu3,ix-25,-50) '発爆用の円3消去(のウドンィウへ外へ)
EndSub