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"
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
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. (Kuvadatakin on monien sokkeloiden päässä vasta)
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