第7回 逆引き:プログラムを分解解説 「2.これがプログラム全部です。」

7−2 これがプログラム全部です。

さて、肝心のプログラムの方は、どうなっているのでしょう?
ということで、全ソース類をまとめてみました。基本的にNS Basicはデザイン時のIDE画面を載せておけば、おおよそ画面の状態は分かるとおもいますので、スクリーンショットを載せておきました。
あと、ビットマップ類はここに掲載するためにGIF形式にしてありますが、もし、ソース類やビットマップ形式の画像が欲しい方は、私までメールをお送り下されば、お送りいたします。

「結構、長いなぁ」と思う方、「え?これだけ」と思う方、いろいろあるかと思いますが、後にも先にもこれだけのプログラムで先ほどのゲームは動作しています。
ま、ここでは、プログラムリストの詳細を見るのではなく、ざ〜っと全体を眺めて「知らないコマンド類」がいくつあるか、見て下さい。原則として、第1回から第6回までに登場したコマンド類のみを使っているつもりですが、いかがでしょうか?

ざっと眺めたら、各動作毎にこのプログラムを見てみることにしましょう。

Screen Design Graphics Startup Form1004 After Sub Crush() events Modules:SampleB7.cod
Screen Design


Graphics
 1007  1008  1009  1010  1011  1012  1013  1014  1015  1016  1018  1019  1020
Screen Design Graphics Startup Form1004 After Sub Crush() events Modules:SampleB7.cod
[Startup]
Sub main()

    Global Scrn(10)as Integer   'スクロール表示用(Bmpの番号:1008〜1016)
    Global Yi as Integer        '自機のY座標(段)
    Global Flg as Integer       '連続キー入力防止フラグ
    Global Flg2 as Integer      'カウントフラグ
    Global Flg3 as Integer      'ゲームオーバーフラグ(=1の時、ゲームオーバー)
    
    Global ReStart as Integer   '再開フラグ
    Global MyShip as Integer    '自機の数
    Global Score as Integer     '得点 
    Global FUEL as Integer      '燃料
    
    Call Init_All
    
End Sub
Screen Design Graphics Startup Form1004 After Sub Crush() events Modules:SampleB7.cod
Form1004
[After]
Sub Form1004_after()

    Dim i as Integer
    
    Do Until (SysEventAvailable()=1 And Flg=1) Or Flg3=1
    
        For i=1 to 10
            DrawBitmap Scrn(i),i*15-10,25
        Next
        DrawBitmap 1007,5,Yi*15+25

        Lbl1021.Label="SCORE:" + Format(Score,"000000")
                
        If ReStart=1 Then
            DrawChars "Ready!",65,75
            For i=1 to MyShip 
                DrawBitmap 1020,90+i*11,148
            Next
            DrawLine 5,147,155,147
            Delay 1.5
            ReStart=0
        End If
        
        FUEL=FUEL-1
        DrawLine 5+FUEL,147,155,147,nsbInverted
        
        Score=Score+1
        
        If Yi<1 Or Yi>6 Or FUEL=0 Then
            Call Crush
            Redraw
        End If
        
        If Scrn(1)<1014 Then
            If Scrn(1)-1007=Yi Then
                Call Crush
                Redraw
            End If
        End If
        
        If Scrn(1)=1016 And Yi=6 Then
            FUEL=FUEL+20
            If FUEL>150 Then
                FUEL=150
            End If
            DrawLine 5,147,5+FUEL,147
        End If
        
        For i=1 to 9
            Scrn(i)=Scrn(i+1)
        Next
        
        If Flg=1 Then
            Delay 0.15
        End If
        
        Flg2=Flg2-1
        If Flg2=0 Then
            Scrn(10)=1008+Int(rand()*9)
            Flg2=5
        Else
            Scrn(10)=1014+Int(rand()*2)
        End If
        Yi=Yi+1
        Flg=1
    Loop
    
End Sub


Sub Crush()

    Dim i as Integer
    
    For i=0 to 10
        DrawBitmap 1018,5,Yi*15+25
        Delay 0.1
        DrawBitmap 1019,5,Yi*15+25
        Delay 0.1
    Next
    
    FillRectangle 90+MyShip*11,148,10,10,0,nsbInverted
    MyShip=MyShip-1
    If MyShip<0 Then
        DrawChars "GAME OVER",55,75
        Flg3=1
    Else
        Delay 1.5
        Call Init_Screen
    End If
    
End Sub
[events]
Sub Form1004_events()

    Dim theKey as String
    
    Flg=0
    
    If GetEventType()=nsbKeyOrButton Then
        
        theKey=GetKey()
        If theKey=&h1 Or theKey=&h2 Or theKey=&h3 Or theKey=&h4 Then
            SetEventHandled
            Yi=Yi-2
            Redraw
        End If
    End If
    
    If GetEventType()=nsbPenDown Then
        If flg3=0 Then 
            Stop
        Else
            Call Init_All
            Redraw
        End If
        
    End If
    
End Sub
Screen Design Graphics Startup Form1004 After Sub Crush() events Modules:SampleB7.cod
Modules:[SampleB7.cod]
Sub Init_Screen()

    Dim i as Integer
    
    For i=1 to 10
        Scrn(i)=1014+Rand()*2
    Next
    
    Flg=0
    Flg2=5
    Flg3=0
    Yi=3
    ReStart=1
    FUEL=150

End Sub

Sub Init_All()

    MyShip=2
    Score=0
    Call Init_Screen

End Sub
Screen Design Graphics Startup Form1004 After Sub Crush() events Modules:SampleB7.cod


前へ     目次へ     次へ

第7回 逆引き:プログラムを分解解説 「2.これがプログラム全部です。」