"Duplicate identifier name"-virhettä tulee joka kerta, kun käytän includea. Tiedän kyllä, että se johtuu eri koodien sisältämistä samannimisistä tyyppikokoelmista. Olen kokeillut muuttaa koodien tyyppien nimiä, mutta ei toimi. Silloin tasot muuttuvat omituisesti. Olisiko jollain jotain ratkaisua tähän "pikkupulmaan", sillä ei ole järkevää avata vain seuraavalle tasolle siirtymistä varten uutta cb-tiedostoa. Tässä koodi:
Code: Select all
SCREEN 320,240,0,cbsizable
SetWindow "RÄISKINTÄPELI",3
FrameLimit 40
playerpoints = 0
font = LoadFont("arial",15)
fond= LoadFont("arial narrow,14")
SetFont font
SetFont fond
Locate 10,10
Color cborange
AddText "Target points: 25"
Locate 10,30
Color cborange
AddText "Points="
// 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
health= 100
'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("Mission\102.wav", 100)
EndIf
DrawScreen
Until KeyHit(cbkeyE)
/////// ALIOHJELMAT ///////
// Aliohjelma jossa ladataan pelissä tarvittava media
LoadMedia:
// Ladataan kartta ja animoidaan se
map = LoadMap("Mission\zombi2.til", "Mission\sptil2.bmp")
PlayObject map,0,0,1
PositionObject map, -40,1000
MaskObject map, cbmagenta
grass=MakeObjectFloor()
PaintObject grass,LoadImage("Mission\aarograss.bmp")
'Make it run as it were far away
PositionObject grass,0,0, 0
// 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,1,4,2
// Ladataan vihollinen ja piilotetaan objekti
enemyobject = LoadObject("mission\ukkeli.bmp", 72)
ShowObject enemyobject, OFF
// Ladataan äänet
backgroundmusic = PlaySound("mission\102.wav", 100)
shot = LoadSound("Mission\gun 6.wav")
scream = LoadSound("Mission\snorker 1.wav")
Kävele = LoadSound ("mission\walk.wav")
hit= LoadSound ("mission\hit wall.wav")
pain = LoadSound ("mission\paino.wav")
Return
// Aliohjelma joka tarkistaa näppäinpainallukset
CheckButtons:
If UpKey() Then MoveObject player,2
If DownKey() Then MoveObject player,-0.8
If LeftKey() Then TurnObject player,5
If RightKey() Then TurnObject player,-5
'Voidaanko ampua
If KeyDown(cbKeyup) And reload=0 Then
PlaySound kävele,30
reload=70 'lataa 1/4 sekunnissa (koska framelimit 40)
EndIf
'lataaminen
If reload>0 Then reload-1
'Voidaanko ampua
If KeyDown(cbKeyDOWN) And reload=0 Then
PlaySound kävele,30
reload=110 'lataa 1/4 sekunnissa (koska framelimit 40)
EndIf
'lataaminen
If reload>0 Then reload-1
// Tarkistetaan painetaanko ampumisnäppäintä ja jos,
// niin luodaan ammus ja törmäystunnistus sille
If KeyHit(cbkeySpace) 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, 0.5
If ObjectsOverlap (enem\obj,player) Then Health-5
EndIf
If Health <1 Then MakeError "GAME OVER - YOU DIED"
Next enem
Return
// Aliohjelma, jossa läpikäydään ammukset
CheckBullets:
For blt.BULLETS = Each BULLETS
MoveObject blt\obj, 30
For enem.ENEMIES = Each ENEMIES
// Tarkistetaan osuuko ammus viholliseen
If ObjectsOverlap(blt\obj, enem\obj, 2) Then
deleteobj = 1
PlaySound pain,30
enem\energy = enem\energy -20
playerpoints = playerpoints + 1
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
PlaySound hit,100
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)
Box PosX+1,PosY-1,EnWidth-2,4
If enem\energy <= 0 Then
// Jos energia nollassa, niin toistetaan huuto ja poistetaan vihollistyyppi
PlaySound scream,80
DeleteObject enem\obj
Delete enem
EndIf
Next enem
DrawToWorld OFF
// Kirjoitetaan pisteet näytölle (ensimmäinen on varjostus)
Color cbBlack : Text 61,31, playerpoints
Color cbgreen : Text 60,30, playerpoints
Return
// Aliohjelma, jossa määritetään kaikki viholliset ja niiden energia
MakeEnemies:
enem.ENEMIES = New(ENEMIES)
enem\obj = CloneObject(enemyobject)
PositionObject enem\obj,1050,600
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,450
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,1000,1800
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,1000,1850
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,950,1900
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