第5回 これであなたもプログラマ「5.カメさん、可愛い!」

5−5 カメさん、可愛い!

さて、配列変数が出てきたところで、カメさんに戻りましょう。
まず、カメさんの X座標を格納する配列を用意します。
4匹もいればよいので、
    Dim X(4) as Integer
とカメさん用の配列を宣言します。
バラバラの動きですから、ここには乱数を使ってみましょう。
    i=Rand()*4+1
    X(i)=X(i)+1
とすれば、iは乱数で1〜4のいずれかになりますので、カメさんのどれかが1歩進むわけです。
そうすると、1匹の時のサンプルの
    For x=0 to 129 
        DrawBitmap 1005+Mod(x,2),x,80
        Delay 0.05
    Next
のFor Nextループが、X座標も兼ねていましたので、今回はこの方法は使わなくても良さそうです。
カメさんはバラバラに進みますので、いつ右端(X=129)に到達するか、分かりませんね。そう言う場合は、For NextよりもDo Loopを使ったほうが適当です。
すると、
    Dim X(4) as Integer
    Dim i as Integer

    Do
        i=Rand()*4+1
        X(i)=X(i)+1

        DrawBitmap 1005+Mod(X(i),2),X(i),30*i

        If X(i)=130 Then 
            Exit Do
        End if
    Loop
で、良いわけですね。でも、最初にカメさんが表示されていないのは寂しいので、
    For i=1 to 4
        DrawBitmap 1005,0,30*i
    Next
を入れておけばカメさんが表示されているはずです。Delayは、様子を見て入れれば良いです。
(サンプルを作っている時に間違えて、Delay 0.5 と入れてしまい、本当のカメさん並の速度になって困りました。)

あと、Loopの後に、
    MsgBox "KAME-" + str(i) + ",Win!"
と加えておくと、どのカメさんが一着かわかりますので、簡単なレースゲームになります。

そして、ふたたび、STARTをタップすれば、再度カメさんがスタートしますが、前のレースのカメさんは画面上に残ったままです。
なので一度、消しておく必要があります。
通常、比較的簡単に画面を消去するコマンドがあるのですが、NS BasicのEraseWindowでは、タイトルやボタンの表示も消してしまいますので、今1つ使い勝手が良くありません。
しかし、画面がパソコンほど大きくないので、白色で塗りつぶすのが良いでしょう。
   
    FillRectangle 0,30,159,110,0,nsbInverted
これで、複数のカメさんを歩かせて、MsgBoxを付けることでレースになりました。完成です。
(結構、可愛いですね)

For Nextと配列変数、これで、おおよそのコマンド類や仕組みが揃ったことになります。
今回のカメさんでもわかりますが、Hello,world!からは、かなりの進歩ではないでしょうか?

これまでは、BASICの基礎的なコマンドを中心に説明してきましたが、次回からは、プログラム作りの方に話題を移していく予定です。


【完成したソース】
Sub object1007()

    Dim X(4) as Integer
    Dim i as Integer

    FillRectangle 0,30,159,110,0,nsbInverted
    
    For i=1 to 4
        DrawBitmap 1005,0,30*i
    Next

    Do
        i=Rand()*4+1
        X(i)=X(i)+1

        DrawBitmap 1005+Mod(X(i),2),X(i),30*i

        If X(i)=130 Then 
            Exit Do
        End If
    Loop
    
    MsgBox "KAME-" + str(i) + ",Win!"
            
End Sub



前へ     目次へ

第5回 これであなたもプログラマ「5.カメさん、可愛い!」