Edellistä esimerkkiäni hieman muokaten (Esittelee myös Before(), After(), First() ja Last()-funktiot):
Code: Select all
guy_obj = LoadObject("media/guy.bmp",72) // Ladataan objekti.
ShowObject guy_obj, OFF // Piilotetaan objekti.
Type PLAYER // Luodaan kokoelma nimeltään 'PLAYER'.
Field obj // Ja kokoelmaan muuttuja 'obj', johon tallennetaan myöhemmin luotavan jäsenen objekti.
Field healt // Ja toinen muuttuja 'healt', johon tallenetaan energiat.
Field ID // Ja kolmas muuttuja 'ID', joka yksilöi objektin.
EndType
For i = 0 To 9 // Käydään silmukka kymmenesti (0,1,2...7,8,9) läpi ja luodaan joka kierroksella uusi jäsen.
guy.PLAYER = New(PLAYER) // Tässä luodaan uusi JÄSEN, johon päästään käsiksi 'guy'-muuttujan kautta.
guy\obj = CloneObject(guy_obj) // Tässä tallenetaan vastaluodun jäsenen 'obj'-muuttujaan alussa ladatun 'guy_obj'-objektin kopio.
guy\healt = Rand(100,300) // Ja täällä vielä asetetaan jäsenen 'healt'-muuttujaan arvo väliltä 500-1000 satunnaisesti arpoen.
guy\ID = i
Next i
// For-silmukassa käytetty muuttuja <i> voi olla mikä vain. esim. For <kissa> / Next <kissa>
create_new_players: // Kirjanmerkki, tänne hypätään myöhemmin.
guy.PLAYER = First(PLAYER) // First()-funktiolla siirrytään kokoelman ensimäiseen jäseneen.
x = Rand(-50,50)
y = Rand(-50,50)
PositionObject guy\obj, x, y // Asetetaan ensimmäisen jäseneen tallenetulle objektille sijainti.
guy = After(guy) // After()-funktiolla siirrytään seuraavaan kokoelman jäseneen.
x = Rand(-50,50)
y = Rand(-50,50)
PositionObject guy\obj, x, y // Asetetaan toiseen jäseneen tallenetulle objektille sijainti.
guy = After(guy) // After()-funktiolla siirrytään seuraavaan kokoelman jäseneen.
x = Rand(-50,50)
y = Rand(-50,50)
PositionObject guy\obj, x, y // Asetetaan kolmanteen jäseneen tallenetulle objektille sijainti.
guy = After(guy) // After()-funktiolla siirrytään seuraavaan kokoelman jäseneen.
x = Rand(-50,50)
y = Rand(-50,50)
PositionObject guy\obj, x, y // Asetetaan neljänteen jäseneen tallenetulle objektille sijainti.
guy = After(guy) // After()-funktiolla siirrytään seuraavaan kokoelman jäseneen.
x = Rand(-50,50)
y = Rand(-50,50)
PositionObject guy\obj, x, y // Asetetaan viidenteen jäseneen tallenetulle objektille sijainti.
guy = After(guy) // After()-funktiolla siirrytään seuraavaan kokoelman jäseneen.
x = Rand(-50,50)
y = Rand(-50,50)
PositionObject guy\obj, x, y // Asetetaan kuudenteen jäseneen tallenetulle objektille sijainti.
guy = After(guy) // After()-funktiolla siirrytään seuraavaan kokoelman jäseneen.
x = Rand(-50,50)
y = Rand(-50,50)
PositionObject guy\obj, x, y // Asetetaan seitsemänteen jäseneen tallenetulle objektille sijainti.
guy = After(guy) // After()-funktiolla siirrytään seuraavaan kokoelman jäseneen.
x = Rand(-50,50)
y = Rand(-50,50)
PositionObject guy\obj, x, y // Asetetaan kahdeksanteen jäseneen tallenetulle objektille sijainti.
guy = After(guy) // After()-funktiolla siirrytään seuraavaan kokoelman jäseneen.
x = Rand(-50,50)
y = Rand(-50,50)
PositionObject guy\obj, x, y // Asetetaan yhdeksänteen jäseneen tallenetulle objektille sijainti.
guy.PLAYER = First(PLAYER) // First()-funktiolla siirrytään kokoelman ensimäiseen jäseneen.
Repeat // Aloitetaan pääsilmukka.
If KeyHit(44) Then // Jos on painettu Z-näppäintä.
If Before(guy) <> NULL Then // Tarkistetaan, että listassa on edellinen jäsen.
guy = Before(guy) // Siirrytään edelliseen jäseneen.
Else // Mikäli edellinen ehto ei täyttynyt, niin toteutetaan alla oleva.
guy.PLAYER = Last(PLAYER) // Siirrytään viimeiseen jäseneen.
EndIf
EndIf
If KeyHit(45) Then // Jos on painettu X-näppäintä
If After(guy) <> NULL Then // Tarkistetaan, että listassa on seuraava jäsen.
guy = After(guy) // Siirrytään seuraavaan jäseneen.
Else // Mikäli edellinen ehto ei täyttynyt, niin toteutetaan alla oleva.
guy.PLAYER = First(PLAYER) // Siirrytään ensimäiseen jäseneen.
EndIf
EndIf
// Seuraavaksi hoidetaan objektin liikuttaminen, eli ihan perusasioita.
// Huomion arvoinen seikka on kuitenkin, että emme liikuta ladattua 'guy_obj'-objektia, vaan nimenomaan jäsenmuuttujaan tallennettua kopiota.
If KeyDown(200) Then MoveObject guy\obj, 1
If KeyDown(208) Then MoveObject guy\obj,-1
If KeyDown(203) Then TurnObject guy\obj, 1
If KeyDown(205) Then TurnObject guy\obj,-1
Text 0,0, "ID: "+guy\ID // Näytetään yksilöintitunnus yläkulmassa.
Text 0,12,"Healt: "+guy\healt // Näytetään energian määrä yläkulmassa.
Box 50,50,300,200,0 // Piirretään tavallinen laatikko, tähän ei siis liity mitään ihmeellistä.
// Tässä tehdään tarkistus, onko 'guy\obj'-objekti määrättyjen rajojen ulkopuolella, ja jos on, niin vähennetään muuttujasta 'guy\healt' yksi, ja tämä tarkistus siis jokaisella silmukan pyörähdyksellä.
If ObjectX(guy\obj) < -150 Or ObjectX(guy\obj) > 150 Or ObjectY(guy\obj) < -100 Or ObjectY(guy\obj) > 100 Then guy\healt = guy\healt - 1
If guy\healt =< 0 Then // Jos jäsenen 'healt'-muuttuja on 0 tai alle 0, niin toteutetaan alla oleva.
DeleteObject guy\obj // Poistetaan jäseneen tallennettu media, eli objektin kopio.
Delete guy // Poistetaan itse jäsen.
If First(PLAYER) = NULL Then Goto create_new_players // Jos kokoelman ensimmäistä jäsentä ei ole olemassa,
// eli toisin sanoen kokoelmassa ei ole jäseniä, hypätään kohtaan 'create_new_players',
// jossa siis luodaan uudet jäsenet.
If After(guy) <> NULL Then // Tarkistetaan, että listassa on seuraava jäsen.
guy = After(guy) // Siirrytään seuraavaan jäseneen.
Else // Mikäli edellinen ehto ei täyttynyt, niin toteutetaan alla oleva.
guy.PLAYER = First(PLAYER) // Siirrytään ensimäiseen jäseneen.
EndIf
EndIf
DrawScreen // Piirretään ruutu.
// Lopuksi poistutaan silmukasta, mikäli painetaan ESC-näppäintä.
// (CB tekee niin muutenkin, jos SAFEEXIT-toiminto on päällä, oletuksena on.)
Until KeyHit(1)
Tämä ei ole enää ihan niin simppeli, joten ei tarvitse säikähtää, vaikkei heti ymmärtäisikään. Testaile ja muokkaa koodia, niin huomaat mikä vaikuttaa mihinkin