Code: Select all
//Vihut Tyyppikokoelma, sisältää objektimuuttujan ja latausaika-muuttujan.
Type Vihut
Field obj 'Itse objekti
Field reload 'Vihollisen latausaika
End Type
//Ammus tyyppikokoelma, sisältää lentävän luodin objektimuuttujan.
Type AMMUS
Field obj
End Type
SCREEN 800, 600
imglife = LoadImage("Media\life.jpg") //Ladataan energiapalkki kuva, joka merkitsee pelaajan energiamäärää.
Global ukko //Tehdään allaolevasta ukosta "globaali" eli tämä sama muuttuja näkyy jokapuolella koodia, myös
//repeat-silmukan alapuolella.
ukko=LoadObject("Media\soldier.bmp",72)
ObjectFloat ukko, 120 'Asetetaan pelaajalle energia
vihu = LoadObject("Media\soldier.BMP", 72)
Global pati //Laitetaan panos näkymään kaikkialla.
pati=LoadObject("Media\bullet.bmp")
ShowObject pati,OFF
ShowObject vihu, OFF
//Luodaan viholliset, tehdään niitä 10
For i = 0 To 10
pahis.Vihut = New(Vihut)
pahis\obj = CloneObject(Vihu)
SetupCollision pahis\obj, ukko, 2, 2, 2 //Viholliset törmäävät pelaajaan.
PositionObject pahis\obj,Rand(-400, 400), Rand(-300, 300) //Sijoitetaan viholliset satunnaisiin kohtiin ruudulla.
ObjectFloat pahis\obj, 100 'Asetetaan pahikselle energia
Next i
aloitsuaika = Timer()
//Viholliset törmäävät nyt toisiinsa.
For pahis.Vihut = Each Vihut
For pahis2.Vihut = Each Vihut
If pahis <> pahis2 Then SetupCollision pahis\obj, pahis2\obj, 2, 2,2
Next pahis2
Next pahis
Repeat
ClearText
currentTime = (Timer() - aloitsuaika)/1000 //Tehdään muuttuja, josta lasketaan
//aloitusaikamuuttujan ja nykyisen ajan välinen erotus.
AddText "Aikaa mennyt: "+currentTime //Kirjoitetaan ruutuun tarvittavat tekstit
AddText "Nuolista ohjaa, CTRL=ampuu"
//Ukon liikutus..
If LeftKey() Then TurnObject ukko,5
If RightKey() Then TurnObject ukko,-5
If UpKey() Then MoveObject ukko,3.5
If DownKey() Then MoveObject ukko,-2.45
//Painetaan oikeaa kontrollia, niin käytetään itse tekemää "komentoa" ts. funktiota nimeltään ObjAmmu
If KeyDown(cbKeyRControl) And reload=0 Then
ObjAmmu(ukko)
reload=5
EndIf
If reload>0 Then reload=reload-1
DrawGame
//Kun käydään viholliset lävitse lasketaan samalla niiden määrä
Vihollisia = 0 //Asetetaan vihollisten määrä aina aluksi nollaan
//Vihollisten läpikäynti
For pahis.Vihut = Each Vihut
//Piirretään pahikselle energia
Vihollisia = Vihollisia + 1 //Nyt lisätään Vihollisia-muuttujaan niin montakertaa 1, kuin vihollisia on.
DrawToWorld 0, 0, ON
CenterText ObjectX(pahis\obj), ObjectY(pahis\obj), ObjectFloat(pahis\obj), 2
DrawToWorld 0, 0, OFF
//Käännetään vihollinen osoittamaan pelaajaa kohti.
PointObject pahis\obj, ukko
//Jos etäisyys vihollisen ja pelaajan välillä on liian suuri, liikutetaan vihollista pelaajaa kohti.
If Distance2(pahis\obj, ukko) > 120 Then
MoveObject pahis\obj, 0.6
Else
//Muuten jos etäisyys pelaajan ja vihollisen välillä on tarpeeksi vähän niin vihollinen avaa tulen.
If pahis\reload = 0 Then
ObjAmmu(pahis\obj)
pahis\reload = 45
EndIf
If pahis\reload > 0 Then pahis\reload = pahis\reload - 1
EndIf
//Joe vihollisen energia-arvo on tasan tai meni alle nollan, niin tuhotaan vihollinen.
If ObjectFloat(pahis\obj) =< 0 Then
DeleteObject pahis\obj
Delete pahis
EndIf
Next Pahis
ukonenergia = ObjectFloat(ukko)
DrawImageBox imglife, 0, 540, 0, 0, Float(ImageWidth(imglife))/(120.0)*ukonenergia, 20
If Vihollisia = 0 Then MakeError "Voitit! Tapoit kaikki viholliset! Aikaa meni: "+currentTime+"s"
If ObjectFloat(ukko) =< 0 Then MakeError "Kuolit! Selvisit: "+currentTime+"s"
//Hypätään aliohjelmaan, tässä aliohjelmassa kaikki panokset päivitää
Gosub Sub_PäivitäPanokset
DrawScreen
Until EscapeKey()
//Tässä Tehdään oma komento. Kaikki aloittelijat eivät vielä tunne tätä koodiosaa.
//Tätä komentoa käytetään esim rivillä 64. :)
Function ObjAmmu(ampuja)
luoti.AMMUS = New(AMMUS)
luoti\obj=CloneObject(pati)
CloneObjectPosition luoti\obj,ampuja
CloneObjectOrientation luoti\obj,ampuja
//Jos ampuja on eri objekti, kuin pelaaja laitetaan panos törmäämään pelaaja-objektiin.
If ampuja <> ukko Then SetupCollision luoti\obj, ukko, 2, 2, 2
For pahis.Vihut = Each Vihut
If pahis\obj <> ampuja Then SetupCollision luoti\obj, pahis\obj, 2, 2, 2
//Jos yksi vihuista ampuu,
//Ei anneta tälle viholliselle ja panokselle törmäystunnistusta
Next pahis
EndFunction
//Tässä määritellään aliohjelma.
Sub_PäivitäPanokset:
//Panosten peruspäivitys
For luoti.AMMUS = Each AMMUS
MoveObject luoti\obj,6
If CountCollisions(luoti\obj) Then 'Johonkin törmättiin, sen täytyi olla vihollinen, tai pelaaja..
törmättyobjekti = GetCollision(luoti\obj, 1) 'Tämä komento ON todella kätevä, tällä saadaan
'objektin kahva (englanniksi handle), kahva on muuttujan nimi
'eli ukko(<- tämä) = LoadObject("ukko.png"). Kahva on oikeasti vain viittaus
'tietokoneen muistiosoitteeseen, jossa se data on. Eli "ukko" ei ole kuvatiedosto.
'Vaan se osoittaa sijainnin, missä kuvatiedoston data on.
energia# = ObjectFloat(törmättyobjekti) 'Tutkitaan törmätyn objektin energia-arvo ja otetaan muuttuja (energia# <-) talteen.
uusienergia# = energia# - 10 '"tehdään" uusi energia-arvo, eli energia muuttujasta vähennetään kymmenen.
ObjectFloat törmättyobjekti, uusienergia 'Asetetaan törmätylle objektille uusi energia-arvo.
DeleteObject luoti\obj
Delete luoti
//Jos ei törmätty mihinkään, ja luoti jatkoi ruudun ulkopuolelle niin... tuhotaan se.
ElseIf ObjectX(luoti\obj)<-400 Or ObjectX(luoti\obj)>400 Or ObjectY(luoti\obj)<-300 Or ObjectY(luoti\obj)>300 Then
DeleteObject luoti\obj
Delete luoti
EndIf
Next luoti
Return