PS: Pistin tämän eri topikkiin, jotta se ei mahdollisesti sekoittuisi alkuperäiseen.
Code: Select all
SCREEN 800,600,0,1
FrameLimit 40
playerpoints = 0
font = LoadFont("Verdana",32,1,1)
SetFont font
Color cbred
Locate 580,10
AddText "Health"
// Luodaan tyyppikokoelma ammuksia varten
Type BULLETS
Field obj
End Type
Type RAADOT
Field obj
EndType
// Ladataan media
GoSub LoadMedia
// Määritetään tyyppikokoelma vihollisille ja luodaan pari vihollista
Type ENEMIES
Field obj
Field energy
End Type
GoSub MakeEnemies
health = 100
elkut = 100
/////// PÄÄSILMUKKA ///////
Repeat
GoSub CheckButtons
GoSub EnemyAI
GoSub CheckBullets
GoSub DrawGUI
'Laitetaan kamera seuraamaan pelaajaa
CloneCameraPosition player
// Tarkistetaan onko taustamusiikki pysähtynyt ja käynnistetään tarvittaessa uudelleen
If SoundPlaying(backgroundmusic) = 0 Then
backgroundmusic = PlaySound("Media\SK_Battle2.mp3", 40)
EndIf
DrawScreen
Until EscapeKey()
/////// ALIOHJELMAT ///////
// Aliohjelma jossa ladataan pelissä tarvittava media
LoadMedia:
// Ladataan kartta ja animoidaan se
map = LoadMap("Media\cdm2.til", "Media\Tileset.bmp")
PlayObject map,0,0,0.5
// Ladataan panosobjektin grafiikat ja piilotetaan objekti
bulletobject = LoadObject("Media\bullet.bmp", 72)
ShowObject bulletobject, OFF
// Ladataan pelaaja ja asetetaan törmäyksentunnistus kartan seinien ja pelaaja välille
player = LoadObject("Media\soldier.bmp", 72)
SetupCollision player,map,2,4,2
// Ladataan vihollinen ja piilotetaan objekti
enemyobject = LoadObject("Media\guy.bmp", 72)
ShowObject enemyobject, OFF
'Ladataan raato-objekti, joka piilotetaan
master_raato=LoadObject("Media\fireball.bmp",72)
ShowObject master_raato,OFF
// Ladataan äänet
backgroundmusic = PlaySound("Media\SK_Battle2.mp3", 40)
shot = LoadSound("Media\gun 1.wav")
scream = LoadSound("Media\scream1.wav")
wallhit=LoadSound("Media\pop.wav")
Osuma=LoadSound("Media\scream2.wav")
Return
// Aliohjelma joka tarkistaa näppäinpainallukset
CheckButtons:
If UpKey() Then MoveObject player,4
If DownKey() Then MoveObject player,-4
If LeftKey() Then TurnObject player,5
If RightKey() Then TurnObject player,-5
// Tarkistetaan painetaanko ampumisnäppäintä ja jos,
// niin luodaan ammus ja törmäystunnistus sille
If KeyHit(cbkeyrControl) Then
PlaySound shot, 40
blt.BULLETS = New(BULLETS)
blt\obj = CloneObject(bulletobject)
CloneObjectPosition blt\obj, player
CloneObjectOrientation blt\obj, player
MoveObject blt\obj,15
SetupCollision blt\obj,map,2,4,1
ResetObjectCollision blt\obj
EndIf
Return
// Aliohjelma, jossa tehdään viholliselle alkeellinen tekoäly
EnemyAI:
For enem.ENEMIES = Each ENEMIES
// Tarkistetaan näkeekö vihollisobjekti pelaajaobjekti ja
// jos näkee niin aloitetaan liikuttamaan pelaajaa kohti
If ObjectSight(enem\obj,player) Then
PointObject enem\obj, player
MoveObject enem\obj, 1.8
'Jos pelaaja ja vihollinen ovat kosketuksessa keskenään,
'vähennetään pelaajan elämiä
If ObjectsOverlap (enem\obj,player,2) Then Health-1
EndIf
'Vähennetään myös ruudulla näkyviä elämiä saman aikaisesti
If ObjectsOverlap (enem\obj,player,2) Then elkut-1
'Jos kuolet, niin peli loppuu
If Health <1 Then GoTo kuolit
Next enem
Return
// Aliohjelma, jossa läpikäydään ammukset
CheckBullets:
For blt.BULLETS = Each BULLETS
MoveObject blt\obj, 10
For enem.ENEMIES = Each ENEMIES
// Tarkistetaan osuuko ammus viholliseen
If ObjectsOverlap(blt\obj, enem\obj, 2) Then
'Ääni, kun osut viholliseen
PlaySound osuma,40
deleteobj = 1
enem\energy = enem\energy - 20
playerpoints = playerpoints + 5
EndIf
Next enem
bulcollisions = CountCollisions(blt\obj)
For i = 1 To bulcollisions
// Tarkistetaan onko ammus osunut seinään
If GetCollision(blt\obj, i) > 1 Then deleteobj = 1
'Tässä luodaan ääni myös silloin, kun luoti osuu seinään
PlaySound wallhit,50
Next i
If deleteobj = 1 Then
DeleteObject blt\obj
Delete blt
deleteobj = 0
EndIf
Next blt
Return
// Aliohjelma jossa piirretään "käyttöliittymä"
DrawGUI:
DrawGame
DrawToWorld ON
// Käydään viholliset läpi
For enem.ENEMIES = Each ENEMIES
PosX = ObjectX(enem\obj) - (ObjectSizeX(enem\obj)/2)
PosY = ObjectY(enem\obj) + ObjectSizeY(enem\obj)
EnWidth = enem\energy / 3
Color cbWhite
Box PosX,PosY,33,6
Color cbRed
Box PosX+1,PosY-1,EnWidth-2,4
If enem\energy <= 0 Then
// Jos energia nollassa, niin toistetaan huuto ja poistetaan vihollistyyppi
PlaySound scream,40
'Nyt, kun vihollinen kuolee, sen tilalle voidaan luoda raato
'Tässä luomme uuden raadon kokoelmaan RAADOT
newRaato.RAADOT = New(RAADOT)
newRaato\obj = CloneObject( master_raato )
'Raato pitää siirtää samaan paikkaan, kuin vihollinen
CloneObjectPosition newRaato\obj,enem\obj
'Sen voi myös kääntää samaan suuntaan :)
CloneObjectOrientation newRaato\obj,enem\obj
'Siirretään pelaaja päällimäiseksi, jotta se ei jää raatojen alle
ObjectOrder player,1
DeleteObject enem\obj
Delete enem
EndIf
Next enem
DrawToWorld OFF
'Tarkistetaan, onko enää yhtään vihollista jäljellä.
'Jos ei, niin voitit pelin!
If First(ENEMIES) = NULL Then
Wait 2000
GoTo win
EndIf
// Kirjoitetaan pisteet näytölle (ensimmäinen on varjostus)
Color cbBlack : Text 12,12, playerpoints
Color cbWhite : Text 10,10, playerpoints
'Kirjoitetaan myös näkyvät elämät
Color cbBlack : Text 702,12, elkut
Color cbred : Text 700,10, elkut
Return
// Aliohjelma, jossa määritetään viholliset ja niiden energia
MakeEnemies:
enem.ENEMIES = New(ENEMIES)
enem\obj = CloneObject(enemyobject)
PositionObject enem\obj,0,-500
SetupCollision enem\obj,map,2,4,1
SetupCollision enem\obj,player,2,2,2
SetupCollision player,enem\obj,2,2,2
ResetObjectCollision enem\obj
enem\energy = 100
enem.ENEMIES = New(ENEMIES)
enem\obj = CloneObject(enemyobject)
PositionObject enem\obj,0,500
SetupCollision enem\obj,map,2,4,1
SetupCollision enem\obj,player,2,2,2
SetupCollision player,enem\obj,2,2,2
ResetObjectCollision enem\obj
enem\energy = 100
enem.ENEMIES = New(ENEMIES)
enem\obj = CloneObject(enemyobject)
PositionObject enem\obj,0,-1000
SetupCollision enem\obj,map,2,4,1
SetupCollision enem\obj,player,2,2,2
SetupCollision player,enem\obj,2,2,2
ResetObjectCollision enem\obj
enem\energy = 100
enem.ENEMIES = New(ENEMIES)
enem\obj = CloneObject(enemyobject)
PositionObject enem\obj,0,1000
SetupCollision enem\obj,map,2,4,1
SetupCollision enem\obj,player,2,2,2
SetupCollision player,enem\obj,2,2,2
ResetObjectCollision enem\obj
enem\energy = 100
Return
'Jos kuolit
kuolit:
StopSound backgroundmusic
DeleteSound backgroundmusic
cleartext
ClearObjects
Color cbred
Text 200,210,"PELI LOPPUI - KUOLIT!"
DrawScreen
Wait 2000
End
'Jos voitit
win:
Voitto = PlaySound ("Media\harp.wav")
Color cbgreen
Text 320,250,"VOITIT!"
DrawScreen
Wait 2000
End