第8回:Small Basicを使ってみよう

こんにちは。「50歳からのプログラミング講座」を担当する JLabo(ジェイラボ) です。

前回は他の Small Basic ユーザーがWebに登録している数多くのプログラムをご紹介しました。ゲームのプログラム開発を通じていろいろなコマンドの役割をご紹介しました。今回はゲームの続きを進めて行きます。ベースは JPL821で登録していますので インポートして動作を確認してください。
Small Basic を使ってみよう
Small Basic を使ってみよう

スペースキーでスタートです。
ボールが自然落下します。
左右の矢印キーでパッドが動きますのでボールを跳ね返します。
左右に動かして ボールが床に落ちないようにする機能でした。
今回はブロックを配置して当たるとクリアになるプログラムを組み込んでいきましょう。

プログラム要素です。
ブックの大きさ、色、数を決めて描画します。

ボールが当たったら
音を出す
箱が有効ではないという印を付けて画面から消す
箱の数を1個減らす

箱が0になったら
音を出す
おめでとう とコメントする
初期画面に戻る

ボールが床に落ちたら
音を出す
また 頑張ろう とコメントする
初期画面に戻る

最初に音を出すコマンドを試して見ましょう。
MyHelp for Small Basic を起動してみてください。
検索ボックスに SOUND と入力し、ENTERキーを押します。

Small Basic を使ってみよう

Sound.PlayBellRingを選択します。
プログラム例をクリックしてクリップボードに転送します。
Small Basic を起動して 新規 をクリックしてプログラムを貼り付け、実行します。

For Wa=1 To 3
Sound.PlayBellRing()
Sound.PlayBellRingAndWait()
EndFor

ベルが3回鳴ります。
Sound.PlayBellRingと
Sound.PlayBellRingAndWaitはどう違うのでしょう?

For Wa=1 To 3
Sound.PlayBellRingAndWait()
EndFor

これでも同じ結果です。違いを調べたのですがわかりませんでした。
構文例ではコマンドが連続しているのでここでは従うことにします。
同様に別な音も確認してみましよう。
関数を呼び出しますので引数が無くても()を付けてください。

Sound.PlayClickAndWait()

ただ、カチッ というだけです。

For WA=1 To 5
Sound.PlayClick()
Sound.PlayClickAndWait()
Program.Delay(1000)
EndFor

これで 1秒ごとに 5回繰り返します。
次はチャイムになります。

Sound.PlayChime()
Sound.PlayChimeAndWait()

「s」の付いたPlayChimes だと連打すると思いきや、別な効果音になります。

Sound.PlayChimes()
Sound.PlayChimesAndWait()

音符再生も出来ます。
コピーして動作を確認する場合は改行マークなど入らないようご注意ください。

君が代 = "O4 D2C2D2E2 G2E2D1 E2G2A2G4A4 O5D2O4B2A2G2 E2G2A1 O5D2C2D1 O4E2G2A2G2 E2R4G4D1 A2O5C2D1 C2D2O4A2G2 A2G4E4D1"
Sound.PlayMusic(君が代)

ではブロックの配置に取りかかります。
次のプログラムをコピーして Small Basic に貼付、実行してください。
使っていない色も定義しておけば箱色を変更する場合に便利です。

黒色="Black"
濃青="DarkBlue"
濃緑="DarkGreen"
濃水色="DarkCyan"
濃赤="DarkRed"
濃マゼンタ="DarkMagenta"
濃黄="DarkYellow"
濃白="Gray"
灰色="DarkGray"
青色="Blue"
緑色="Green"
水色="Cyan"
赤色="Red"
マゼンダ="Magenta"
黄色="Yellow"
白色="White"
オレンジ="orange"
背景色= GraphicsWindow.GetColorFromRGB(64, 64, 64)
箱の高さ = 24
' ==================== 条件設定() ' 各要素の条件を設定します。
ボールサイズ = 16
縦速度Max = 10
横速度Max = 5
増分 = 7
' ブロックの数 行列
列開始=1
列終了=8
行開始=2
行終了=11
重力 = 0.015
反発=0.9
幅1 = 640  'ゲームエリア
幅2 = 400  ' データ表示エリア
高さ = 480
箱の幅 = 64
箱の高さ = 24
' ブロックの数 行列
列開始=1
列終了=8
行開始=2
行終了=11
For 列 = 列開始 To 列終了 ' 列をスキャン
 For 行 = 行開始 To 行終了 '行をスキャン

 Sa = Math.Remainder(列, 4) ' 行の数を4で割ったあまりを求める Mod
 If Sa = 0 Then
  箱色 =水色
 EndIf
 If Sa = 1 Then
  箱色 = オレンジ
 EndIf
 If Sa = 2 Then
  箱色 = 黄色
 EndIf
 If Sa = 3 Then
  箱色 = 白色
 EndIf
 If Sa = 4 Then
  箱色 = 黒色
 EndIf

 GraphicsWindow.BrushColor = 箱色
 box[列][行] = Shapes.AddRectangle(箱の幅-2,箱の高さ-2)
 ' 指定された横幅と高さで四角形を追加します
 ' 配列に箱の名前を収納する

 有効箱[列][行] = "True"

 Shapes.Move(box[列][行],列*箱の幅+1,行*箱の高さ+1)
 '指定された名前の図形を 指定座標に描画する

 箱残り = 箱残り + 1

 EndFor
EndFor

これを実行すると以下の画面になります。
終了するには右下の プログラムの終了をクリックします。

Small Basic を使ってみよう

Small Basic を使ってみよう

箱の数、位置や大きさは次の変数で変更できます。

列開始=1
列終了=8
行開始=2
行終了=11
幅1 = 640  ’ゲームエリア
幅2 = 400  ’ データ表示エリア
高さ = 480

ボールとブロックの座標を監視することで「当たった」ことがわかります。
横方向はボール位置と箱の幅、縦方向はボールの大きさも考慮して
X値1,2およびY値1,2を判定し、4隅のどこに当たったかどうかを判別します。

X値1 = Math.Floor(ボール座標x / 箱の幅)
Y値1 = Math.Floor(ボール座標y / 箱の高さ)
X値2 = Math.Floor((ボール座標x + ボールサイズ) / 箱の幅)
Y値2 = Math.Floor((ボール座標y + ボールサイズ) / 箱の高さ)

当たった場合は 配列 「有効箱」の値を False にします。

 有効箱[X値1][Y値1]=”False”

箱を消します。
 Shapes.Remove(box[X値1][Y値1])

箱の数を1つ減らします。
 箱残り = 箱残り – 1

これを繰り返し、箱残りが 0 になった時点でゲーム完了となります。

これらを組み込んだ最終プログラムを登録しました。
インポートで読み込んで動作を確認してください。

Small Basic を使ってみよう

今回ご説明していないコマンドもいくつか入っています。
気になった場合は MyHelpで検索して MyMemo にメッセージを
残すなどで今後のプログラム開発にお役に立てて頂ければと思います。

342行目にはプログラムの動作を7msec止めるコマンドが入っています。
これを大きくすることでボールの動きがゆっくりとなり、結果として難易度が下がります。
Small Basic を使ってみよう

また、199行目に パッドの横をボール座標X にするという記述があります。
このチェックを外すと自動PLAYモードになります。
Small Basic を使ってみよう

ブロックの大きさ、数やパッドの大きさなど、いろいろなところで変数を変えて動作を確認することでコマンドの働きを確認したり楽しめるところが自分で作るアプリの良いところかと思いますのでいろいろ試して見てください。


さてここからは「我が家の工夫」をご紹介します。

今回は「LED」。今や珍しくも何ともないLEDですが、電子工作をしていて豆球が赤のLEDになっただけで感激した世代なので、とても関心があります。

これは普通の赤色LEDです。

下の板はブレッドボードです。トランジスタなどの電子部品とリード線を差し込むことによりはんだ付けをしなくても回路を確認出来ます。
Small Basic を使ってみよう

緑と青です。これでRGBがそろったので白色のLEDができる様になりました。
Small Basic を使ってみよう

昔の話ですが、どーしても玄関に白いLEDを付けたくて秋葉原に行って購入しました。今では笑い話ですが 白のLEDで玄関に間接照明をしたことが仲間内で自慢になる時代でした。
Small Basic を使ってみよう

これがそのときの現物です。袋に1800円と書いてありました。多分20本くらいだったと思います。しっかりした使い方マニュアルや100本くらいの抵抗が同梱されていました。最近のLEDはたとえばリールに巻いています。カットして貼り付けることでいろいろな使い方が出来ます。
Small Basic を使ってみよう
Small Basic を使ってみよう

光るとこんな感じです。うまく撮れていませんが白色です。
Small Basic を使ってみよう

青色もあります。
Small Basic を使ってみよう

簡易的と思いますが防水タイプです。
Small Basic を使ってみよう

もう少し大きなLEDだとこんな感じです。中に小さな青色LEDが詰まっているのですが外観的には1つの発光体のように見えます。青色を黄色フィルターに通すと白になるらしいです。プログラムで色を決めるコマンドは GetColorFromRGB(R,G,B) でした。

①赤:RGB(255,0,0) ②緑:RGB(0,255,0) ③青:RGB(0,0,255) ④白:RGB(255,255,255) ⑤黄:RGB(255,255,0)
①+②+③で④の白になりますが、③+⑤でも④の白になりますね。
これと同じ理屈なのでしょうか?
Small Basic を使ってみよう
Small Basic を使ってみよう

こちらはintegrated smart ic ですが、直接85V~220Vの範囲で交流をつなぐと光ってくれます。下にあるのはファン付の放熱器です。放熱器を付けないと高熱によりすぐ破損します。
Small Basic を使ってみよう

これは20Wです。最初にご紹介した白色LED 2本とほぼ同じ値段です。
Small Basic を使ってみよう

明るすぎて直視できません。

これからもいろいろなLEDが安価に生産されるでしょう。
それを使ったいろいろな商品が出てくるのを楽しみにしているところです。

では今回はこの辺で。
次回をお楽しみ頂ければ幸いです。