Tason vaihto-ongelma

Voit pyytää apua ohjelmointiongelmiin täältä.
Post Reply
User avatar
Akuji
Member
Posts: 60
Joined: Fri Oct 08, 2010 5:59 pm
Location: Turku

Tason vaihto-ongelma

Post by Akuji »

Olen törmännyt ongelmaan. Pelissäni pitäisi päästä seuraavalle tasolle sitten, kun kaikki viholliset on tapettu, mutta ei ole onnistunut se tason vaihto.
"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
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Tason vaihto-ongelma

Post by valscion »

Voit tarkistaa onko ENEMIES tyyppikokoelmassa yhtään jäsentä jäljellä ja siitä päätellä ettei vihollisia ole enää jäljellä.

Code: Select all

If First(ENEMIES) = NULL Then siirry_seuraavaan_tasoon
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
User avatar
Akuji
Member
Posts: 60
Joined: Fri Oct 08, 2010 5:59 pm
Location: Turku

Re: Tason vaihto-ongelma

Post by Akuji »

Niinpä, nyt toimii! :D
Post Reply