Microsoft Small Basic

Program Listing: CPH057
GraphicsWindow.Title="陰謀ダーゲーム0.02 2012.1.3 Happy New Year!"'…ウィンドウタイトル
GraphicsWindow.BackgroundColor="Black"'…バックが黒
'
gw=GraphicsWindow.Width'…ウィンドウの幅:gw
gh=GraphicsWindow.Height'…ウィンドウの高さ:gh
GraphicsWindow.BrushColor="Cyan"'…塗り色:青緑
'
ix=0'…インボーダーのX座標(初期値)
MyMissileY=gh'…自機ミサイルの初期Y座標
MMdy=.1 '自機ミサイルの飛行スピード(調整用)
Idx=.01 'インボーダーの移動スピード(調整用)
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)'…インボーダーの先の形
'
OnMouseMove() '初期画面で左上に図形が集中するのを避けるため
Shapes.Move(MyMissile,MyMissileX,MyMissileY) '初期画面で左上に図形が集中するのを避けるため
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 then 'もし自機ミサイルのY座標が15以下になら以下の処理
MissileFlag=0 '自機ミサイル飛行終了とする
MyMissileY=gh '自機ミサイルのY座標をウィンドウの一番下にする
EndIf
Shapes.Move(MyMissile,MyMissileX,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,0)'…インボーダーの翼を動かす
Shapes.Move(ibody,ix+5,0)'…インボーダーのボディを動かす
Shapes.Move(itop,ix+16,9)'…インボーダーの先端を動かす
EndSub