Lisäyksiä räiskintäpelirunkoon

Oletko tehnyt jotain, mistä muut voisivat hyötyä. Postita vinkit tänne.
Post Reply
User avatar
Akuji
Member
Posts: 60
Joined: Fri Oct 08, 2010 5:59 pm
Location: Turku

Lisäyksiä räiskintäpelirunkoon

Post by Akuji »

Olen tässä vähän aikani kuluksi lisäillyt tuohon Nixen pelirunkoon hieman efektejä. Olen myös kommentoinut niitä mahdollisimman selkeästi, jotta niistä saisi selkoa. Itse olen käyttänyt pelirunkoa monesti, ja tehnyt mm. tällaisia muutoksia.

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
Last edited by Akuji on Sun Nov 21, 2010 1:08 pm, edited 2 times in total.
User avatar
Koodari
Active Member
Posts: 201
Joined: Wed Nov 18, 2009 9:01 pm
Contact:

Re: Lisäyksiä räiskintäpelirunkoon

Post by Koodari »

Edes jonkinsortin tekoäly olisi hyvä, sillä nyt, jos objectit eivät näe toisiaan, ne pysähtyvät...
Tuossa on edes jonkinmoinen "tekoäly" alfaan.

Code: Select all

If ObjectSight(vihu,sotilas) Then
    PointObject vihu,sotilas //Käännytään sotilaaseen päin
    sotilasX = ObjectX(sotilas) //Tallennetaan viimeisimmät koordinaatit
    sotilasY = ObjectY(sotilas)
Else
    angle = GetAngle(ObjectX(vihu),-ObjectY(vihu),sotilasX,-sotilasY)
    RotateObject vihu,angle //Jos sotilasta ei enää näy, mennään viimeisimpiin koordinaatteihin
EndIf
MoveObject vihu,3
Alussa oli asiakas, projekti ja Koodari...

Code: Select all

[23:36:33] <Minixmix> jos nyt viel yhen lastin heittäis
[23:36:48] <Minixmix> Sit loput vois hoitaa kännyllä :/
[00:14:49] <Minixmix> mutta nyt tyhjennykselle ->
[/size]
Post Reply