Ydin : koodirakenteet

TYPE ja FIELD


   KUVAUS

Tämä koodilohko esittelee uuden TYYPIN ohjelmaasi. Siksi se kannattaa kirjoittaa ohjelman alkuun. Tyypit ovat kokoelmia, joihin voidaan luoda ja joista voidaan poistaa jäseniä. Kullakin jäsenellä on omat muuttujansa. Ne ovat ikään kuin itsenäisiä objekteja, jotka muodostavat listan.

Tyyppien avulla voit hallita suuria määriä vihollisia, ammuksia, efektejä ja objekteja helposti ja vaivattomasti.

TYYPPI-lohko lopetetaan komentoon END TYPE. Älä unohda sitä! Tämän lohkon sisään taas kirjoitetaan FIELD-sanaa käyttäen kaikki muuttujat, jotka siis monistetaan automaattisesti jokaiselle jäsenelle.

Esimerkki kertoo kaiken tarpeellisen, mutta suosittelemme ehdottomasti, että luet myös tämän.

   KÄYTTÖ
TYPE nimi
    FIELD muuttuja1
    FIELD muuttuja2
    ...
END TYPE

Katso myös: TOINEN SELITYS

   ESIMERKKI
Type BULLETS
    Field obj
End Type

'- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
'MAIN PROGRAM
'- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

FrameLimit 40

'load the soldier, turning detail 72
guy=LoadObject("Media\soldier.bmp",72)

'load the bullet (master-object) and hide it
bullet=LoadObject("Media\bullet.bmp")
ShowObject bullet,OFF

ClsColor cbdark

AddText "Arrows to turn, SPACE to shoot"

'MAIN LOOP
Repeat

    'Update turning
    If LeftKey() Then TurnObject guy,5
    If RightKey() Then TurnObject guy, -5
    
    'Shoot?
    If KeyDown(cbkeyspace) And reload=0
    
        newBullet.BULLETS= New(BULLETS)
        newBullet\obj=CloneObject(bullet)
        CloneObjectPosition newBullet\obj,guy
        CloneObjectOrientation newBullet\obj,guy
        'put the bullet at the end of the barrel
        MoveObject newBullet\obj,24
    
        reload=4
    EndIf
    
    'Update all BULLETS (move them forward)
    i=0
    For iBullet.BULLETS= Each BULLETS
        
        MoveObject iBullet\obj,6 'speed=6
        
        'delete bullet from collection if it
        'gets too far away
        If Distance2(iBullet\obj,guy)>200 Then
            DeleteObject iBullet\obj
            Delete iBullet
        EndIf
        
        i=i+1
        
    Next iBullet
    
    'Update reloading
    If reload>0 Then reload=reload-1
    
    Text 30,30,"Bulets to update: "+i
    
    'Don't forget this :)
    DrawScreen

Until EscapeKey()

<<TAKAISIN