Koodi käyttää hyväkseen CoolBasicin mukana tulevia kuvia, ääniä ja tilekarttaa, joten kannattanee ainakin ensi vaiheessa tallentaa koodi CB:n sovelluskansioon (c:\program files\coolbasic\, tai mikä nyt kelläkin sattuu olemaan).
Pelaajaa liikutetaan nuolista ja ampuminen tapahtuu oikeanpuoleisella ctrl-näppäimellä.
Code: Select all
SCREEN 800,600,0,1
FrameLimit 40
playerpoints = 0
font = LoadFont("Verdana",32,1,1)
SetFont font
// Luodaan tyyppikokoelma ammuksia varten
Type BULLETS
Field obj
End Type
// Ladataan media
Gosub LoadMedia
// Määritetään tyyppikokoelma vihollisille ja luodaan pari vihollista
Type ENEMIES
Field obj
Field energy
End Type
Gosub MakeEnemies
/////// PÄÄSILMUKKA ///////
Repeat
Gosub CheckButtons
Gosub EnemyAI
Gosub CheckBullets
Gosub DrawGUI
// Siirretään kameraa pelaajan mukana
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 äänet
backgroundmusic = PlaySound("Media\SK_Battle2.mp3", 40)
shot = LoadSound("Media\gun 1.wav")
scream = LoadSound("Media\scream1.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, 2
EndIf
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
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
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
DeleteObject enem\obj
Delete enem
EndIf
Next enem
DrawToWorld OFF
// Kirjoitetaan pisteet näytölle (ensimmäinen on varjostus)
Color cbBlack : Text 12,12, playerpoints
Color cbWhite : Text 10,10, playerpoints
Return
// Aliohjelma, jossa määritetään kaksi vihollista 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
Return
EDIT:
Pari kommenttia lisätty