Code is using images, sounds and tilemaps that comes with CoolBasic, so I consider that you use it from CoolBasics program folder (c:\program files\coolbasic\, or whatever you have) at least in the beginning.
Player is moved by arrows and shooting from right ctrl button.
Code: Select all
SCREEN 800,600,0,1
FrameLimit 40
playerpoints = 0
font = LoadFont("Verdana",32,1,1)
SetFont font
// Create type collection for bullets
Type BULLETS
Field obj
End Type
// Load media
Gosub LoadMedia
// Create type collection for enemies and make couble enemies
Type ENEMIES
Field obj
Field energy
End Type
Gosub MakeEnemies
/////// MAIN LOOP ///////
Repeat
Gosub CheckButtons
Gosub EnemyAI
Gosub CheckBullets
Gosub DrawGUI
// Move camera with player
CloneCameraPosition player
// Check if background music has stopped and start it from beginning
If SoundPlaying(backgroundmusic) = 0 Then
backgroundmusic = PlaySound("Media\SK_Battle2.mp3", 40)
EndIf
DrawScreen
Until EscapeKey()
/////// SUBPROGRAMS ///////
// Subprogram that loads all media what needed in game
LoadMedia:
// Load tilemap and animate it
map = LoadMap("Media\cdm2.til", "Media\Tileset.bmp")
PlayObject map,0,0,0.5
// Load bullet object graphics and hide object
bulletobject = LoadObject("Media\bullet.bmp", 72)
ShowObject bulletobject, OFF
// Load player graphics and set collision recognizing between player and map
player = LoadObject("Media\soldier.bmp", 72)
SetupCollision player,map,2,4,2
// Load enemy graphics and hide object
enemyobject = LoadObject("Media\guy.bmp", 72)
ShowObject enemyobject, OFF
// Load sounds
backgroundmusic = PlaySound("Media\SK_Battle2.mp3", 40)
shot = LoadSound("Media\gun 1.wav")
scream = LoadSound("Media\scream1.wav")
Return
// Subprogram that checks keyboard usage
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
// Check if shooting button is hit and if it is
// then create bullet and collision recognizing to it
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
// Subprogram that made simple AI for enemies
EnemyAI:
For enem.ENEMIES = Each ENEMIES
// If enemy object can "see" player object, then point it to player
// and start mobing towards
If ObjectSight(enem\obj,player) Then
PointObject enem\obj, player
MoveObject enem\obj, 2
EndIf
Next enem
Return
// Subprogram that checks bullets and collisions of bullets
CheckBullets:
For blt.BULLETS = Each BULLETS
MoveObject blt\obj, 10
For enem.ENEMIES = Each ENEMIES
// Check if bullets hit to enemies
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
// Check if bullets have hit to walls
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
// Subprogram that draws "GUI"
DrawGUI:
DrawGame
DrawToWorld ON
// Check enemies
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
// If energy is empty then play scream sound and delete enemy type
PlaySound scream,40
DeleteObject enem\obj
Delete enem
EndIf
Next enem
DrawToWorld OFF
// Write points to screen (first is shadow)
Color cbBlack : Text 12,12, playerpoints
Color cbWhite : Text 10,10, playerpoints
Return
// Subprogram that creates two enemies and their energy
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