SQLの窓

2015年04月23日


Small Basic。横に動く長方形をキーを押したらボールを発射して命中させて回転させるゲーム雛形



▼ 一つ前のコード
Small Basic。やはり基本はゲーム作って楽しむべきなので、キーを押したらボールを発射する雛形

Small Basic では、発行ボタンですぐ WEB上に公開して、SilverLight によって動作させる事ができます。ローカルでは画像が使えますが、WEB 上ではメモリだけで動作させるコードにする必要があります。

▼ SilverLight で実行
http://smallbasic.com/program/?BZN043

▼ 動画のソースコード
' ウィンドウの背景色
GraphicsWindow.BackgroundColor = "White"
' ウインドウの位置
GraphicsWindow.Left = 100
GraphicsWindow.Top = 40
' リサイズできないようにする
GraphicsWindow.CanResize = 0

LoadImage_Url = "https://lh5.googleusercontent.com/-3IWAlBbUSYs/VLgFjekftnI/AAAAAAAAYKw/VM5FI7bYNzw/s800/142133580685821985693.jpeg"
'LoadImage_Url = ""
LoadImage_Opacity = 50
LoadImage()

' ******************************************
' 白いボール
' ******************************************
GraphicsWindow.BrushColor = "#ffffff"   ' ボールの塗りつぶし色
Ball_Speed = 1
Ball_Size = 30  ' ボールの直径
Ball_Name = Shapes.AddEllipse(Ball_Size, Ball_Size)
' 初期位置
Ball_x = LoadImage_width / 2 - Ball_Size / 2  ' ボールの中心を画面の中心に
Ball_y = Ball_Size * -1   ' ボールが隠れる位置( 直径ぶん、上辺の上 )
Shapes.Move( Ball_Name, Ball_x, Ball_y )
Sub Ball

  Ball_y = Ball_y - Ball_Speed
  If Ball_y > (Ball_Size * -2) Then
    Shapes.Move( Ball_Name, Ball_x, Ball_y )
    ' TextWindow.WriteLine(Ball_y) 
  Else
    Ball_y = Ball_Size * -1
  EndIf

EndSub

' ******************************************
' 四角形
' ******************************************
GraphicsWindow.BrushColor = "#00ff00"   ' 四角形の塗りつぶし色
Rect_Speed = 0.5
Rect_Size = 40  ' 高さ
Rect_Name = Shapes.AddRectangle(Rect_Size * 2, Rect_Size)   ' 幅は、高さの倍
' 初期位置
Rect_x = Rect_Size * -2   ' 箱が隠れる位置( 幅ぶん左 )  
Rect_y = Rect_Size * 1    ' 箱一個ぶん下
Shapes.Move( Rect_Name, Rect_x, Rect_y )
' 当たりアニメーション中フラグ
Rect_Hit_Flg = 0  '  0 は、通常時でアニメーション中では無い
Sub Rect
  If Rect_Hit_Flg = 0 then
    Rect_x = Rect_x + Rect_Speed
    If Rect_x < LoadImage_width Then
      Shapes.Move( Rect_Name, Rect_x, Rect_y )
      ' TextWindow.WriteLine(Rect_y) 
    Else
      Rect_x = Rect_Size * -2
    EndIf
    ' 当たり判定用の値を用意する
    Hit_x = Rect_x
    Hit_width = Rect_Size * 2
    Hit_y = Rect_y
    Hit_height = Rect_Size
    ' 当たり判定のチェック
    Hit()
    ' 当たり判定からの結果をこちらの条件にセットする
    Rect_Hit_Flg = Hit_Flg
    ' 当たっていたら、ボールは先に初期化しておく
    If Rect_Hit_Flg <> 0 Then
      Ball_y = Ball_Size * -1
    EndIf
  Else

    Shapes.Rotate(Rect_Name, 1000 - Rect_Hit_Flg)

    Rect_Hit_Flg = Rect_Hit_Flg - 1
    ' アニメーションが終了すると初期位置に移動
    If Rect_Hit_Flg = 0 Then
      Shapes.Rotate(Rect_Name, 0)
      Rect_x = Rect_Size * -2
    EndIf
  EndIf
  
EndSub

' ******************************************
' 当たり判定
' ******************************************
Sub Hit
  Hit_Flg = 0
  ' 当たり判定は、四角形の居る位置( 高さ ) に、ボールが到達した時で
  If Hit_y <= Ball_y And Ball_y <= Hit_y + Hit_height Then
    If Hit_x <= Ball_x + Ball_Size And Ball_x <= Hit_x + Hit_width Then
      ' アニメーション回数
      Hit_Flg = 1000
    EndIf
  EndIf
EndSub

' ******************************************
' キーイベント
' ******************************************
GraphicsWindow.KeyDown = OnKeyDown
Sub OnKeyDown

  If Ball_y <= (Ball_Size * -1) Then
    Ball_y = LoadImage_height
  EndIf
  
EndSub

' ******************************************
' アニメーションループ
' ******************************************
Loop:
  Program.Delay(1)
  Ball()
  Rect()
  
Goto Loop


' ******************************************
' グラフィックウインドウに画像を表示する
' LoadImage_Url : URL
' LoadImage_Opacity : 不透明度
' ******************************************
Sub LoadImage

  If LoadImage_Url <> "" then
    LoadImage_pic = ImageList.LoadImage(LoadImage_Url)
    LoadImage_img = Shapes.AddImage(LoadImage_pic)
    Shapes.SetOpacity(LoadImage_img, LoadImage_Opacity)
    LoadImage_width = ImageList.GetWidthOfImage(LoadImage_pic)
    LoadImage_height = ImageList.GetHeightOfImage(LoadImage_pic)
  Else
    LoadImage_width = Desktop.Width * 0.8
    LoadImage_height = Desktop.Height * 0.8
  EndIf
  GraphicsWindow.Width = LoadImage_width
  GraphicsWindow.Height = LoadImage_height
  GraphicsWindow.DrawResizedImage(LoadImage_img, 0, 0, LoadImage_width, LoadImage_height)

EndSub


処理の要点

当然ですが、ボール(弾)を増やしたり長方形(敵)を増やしたりする事を想定してサブルーチンを作成しています。その為、Hit サブルーチンは共用する為に専用の判定用座標変数にセットされた値でチェックするようにしています。四角形のアニメーションは、四角形の描画処理と同時持ちして、ボールが当たればボールを自由にして回転アニメーションを開始します。当たった直後、ボールはすぐ使えるようになります。

現実問題として、ボールの処理は単純なので配列で行ったほうがいいでしょう。長方形の処理はいろいろな敵の動作が必要になって来るのでサブルーチン毎の処理が必要になると思います。



タグ:Small Basic
【Small Basicの最新記事】
posted by lightbox at 2015-04-23 21:14 | Small Basic | このブログの読者になる | 更新情報をチェックする
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり