Tyhmät kysymykset (I/2010)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
User avatar
Peltsi
Active Member
Posts: 121
Joined: Thu Sep 30, 2010 12:16 pm

Re: Tyhmät kysymykset (I/2010)

Post by Peltsi »

legend wrote:
Peltsi wrote:Ohjelmani MAV:aa, vika lienee luotien törmäysmäärityksistä karttaan... Voisiko joku vilkaista koodia ja ehdottaa ratkaisua? Kiitos :)

Code: Select all

    SCREEN 900,900

    SetWindow "Battle game (Ver: kehitys)"
    
    ChDir "C:\Documents and Settings\Järjestelmänvalvoja\Omat tiedostot\BattleGame kehitys\Media"

    Text 100,100, "Vihreä sotilas: liikkuu: nuolinäppäimistä ja ampuu luodin: M"
    Text 100,150, "Punainen sotilas: liikkuu: W,A,S,D ja ampuu luodin: C"
    Text 100,200, "Kummallakin pelaajalla elämä on 100, yhdestä osumasta menettää 1."
    Text 100,250, "PELI ALKKAA 6 SEKUNTIN KULUTTUA!"
    Text 100,300, "Paina pelin aikana H päästäksesi ohjeeseen"


    Type AMMUS
    Field obj
    End Type
    
    Type AMPU
    Field amm
    End Type

    FrameLimit 40

    Wait 6000
    
    ClearText

    kartta = LoadMap("kartta.til","tileset.bmp")
    PlayObject kartta,0,0,1

    ukko=LoadObject("soldier.bmp", 360)
    ukkeli=LoadObject("soldier2.bmp", 360)
    pati=LoadObject("panos.bmp")
    ShowObject pati,OFF
    paukku=LoadObject ("panos.bmp")
    ShowObject paukku,OFF

    
    Dim ykm As String
    ykm="Vihreä sotilas kuoli, Punainen sotilas voitti. Peli päättyi."
    
    Dim kam As String
    Dim linechange As String
    linechange=Chr(13)+Chr(10)
    kam="Punainen sotilas kuoli, Vihreä sotilas voitti. Peli päättyi."
    ykm=ykm+linechange

    'Pyöritä ukot alkuasentoon
    RotateObject ukko,0
    RotateObject ukkeli,180
    PositionObject ukko,-100,100
    PositionObject ukkeli,100,-100
'Törmäykset
    SetupCollision ukko,ukkeli,2,2,2
    SetupCollision ukkeli,ukko,2,2,2
    SetupCollision ukko,kartta,1,4,2
    SetupCollision ukkeli,kartta,1,4,2
'ELMÄMÄT
    ObjectInteger ukko,100
    ObjectInteger ukkeli,100
    
    Repeat
    
    Color cbwhite
    Text 10,860,"Pelin toimintanopeus (ruudunpäivitystä sekunnissa):"
    Text 420,860,FPS()
    Text 10,880,"Paina H päästäksesi ohjeeseen"
    
    Color cbred
    Text 100,100,FPS()
    
    If KeyDown(cbKeyH) Then
    Execute "BattleGameOhje.txt"
    EndIf

    If LeftKey() Then TurnObject ukko,4
    If RightKey() Then TurnObject ukko,-4
    If UpKey() Then MoveObject ukko,5
    If DownKey() Then MoveObject ukko,-5

    If KeyDown(cbKeyA) Then TurnObject ukkeli,4
    If KeyDown(cbKeyD) Then TurnObject ukkeli,-4
    If KeyDown(cbKeyW) Then MoveObject ukkeli,5
    If KeyDown(cbKeyS) Then MoveObject ukkeli,-5

    If ObjectX(ukko)<-430 Then PositionObject ukko,-430,ObjectY(ukko)
    If ObjectX(ukko)>430 Then PositionObject ukko,430,ObjectY(ukko)
    If ObjectY(ukko)<-430 Then PositionObject ukko,ObjectX(ukko),-430
    If ObjectY(ukko)>430 Then PositionObject ukko,ObjectX(ukko),430

    If ObjectX(ukkeli)<-430 Then PositionObject ukkeli,-430,ObjectY(ukkeli)
    If ObjectX(ukkeli)>430 Then PositionObject ukkeli,430,ObjectY(ukkeli)
    If ObjectY(ukkeli)<-430 Then PositionObject ukkeli,ObjectX(ukkeli),-430
    If ObjectY(ukkeli)>430 Then PositionObject ukkeli,ObjectX(ukkeli),430
'VIHREÄ
    If KeyDown(cbKeyM) And reload=0 Then
    PlaySound "Machine Gun 1.wav",100
    luot.AMPU = New(AMPU)
    luot\amm=CloneObject(paukku)
    CloneObjectPosition luot\amm,ukko
    CloneObjectOrientation luot\amm,ukko
    reload=5 'Luodin lataus nopeus
    EndIf
    If reload>0 Then reload=reload-1

    For luot.AMPU = Each AMPU
    MoveObject luot\amm,50 'Luodin lento nopeus
        If ObjectsOverlap (ukkeli,luot\amm) Then
            ObjectInteger ukkeli,ObjectInteger(ukkeli) -1 'Luodin hittaus
            DeleteObject luot\amm
            Delete luot
        EndIf       
    Next luot
    'Elämä 0
    If ObjectInteger (ukkeli) = 0 Then
    PlaySound "screm1.wav",100
    MakeError kam
    End
    EndIf

'PUNAINEN 

    If KeyDown(cbKeyC) And reload=0 Then
    PlaySound "Machine Gun 1.wav",100
    luoti.AMMUS = New(AMMUS)
    luoti\obj=CloneObject(pati)
    CloneObjectPosition luoti\obj,ukkeli
    CloneObjectOrientation luoti\obj,ukkeli
    reload=5 'Luodin lataus nopeus
    EndIf

    If reload>0 Then reload=reload-1

    For luoti.AMMUS = Each AMMUS
        If ObjectsOverlap (ukko,luoti\obj) Then
            ObjectInteger ukko,ObjectInteger(ukko) -1 'Luodin hittaus
            EndIf       
    MoveObject luoti\obj,50 'Luodin lento nopeus
    If ObjectsOverlap (ukko,luoti\obj) Then 
            DeleteObject luoti\obj
            Delete luoti
            EndIf
    Next luoti
'!!!!!!!!!!!!!!!!!!!!!!!!   
'MAV tulee jos lisätään nämä määritykset ja if:in
    SetupCollision luoti\obj,kartta,2,4,2
    osuu = CountCollisions (luoti\obj)  
    If osuu Then
    DeleteObject luoti\obj
    Delete luoti
    EndIf
'!!!!!!!!!!!!!!!!!!!!!!!!
    
    If ObjectInteger (ukko) = 0 Then
    PlaySound "screm1.wav",100
    MakeError ykm
    End
    EndIf

    DrawScreen

    Until EscapeKey()
Virhe yläänsä löytyy helpommin jos sisentää koodin. Tää ohjelma sisäntää koodin... Ottaa huomioon kaiken =D (jopa kommentit =D)

Code: Select all

    Const file$ = "alkuperäinen tiedosto.cb" //älä laita file1 ja file2 samaa tai muuten koodisi hukkuu...
    Const file2$ = "sisennetty.cb"
    
    If Not Sisentäjä(file,file2) Then
        Print "Tiedosto puuttui"
    Else
        Print "Tiedosto on sisennetty =)"
        Print file + " -> " + file2
    EndIf
    
    WaitKey
    
    
    '' by legend
    'Siventää tekstiä
    'palauttaa 1, jos onnistui
    Function Sisentäjä(file$,file2$)
        
        If FileExists(file)
            
            Dim Väli$,Txt$,Rivi$
            Väli = "    " 'alku väli
            
            R = OpenToRead(file) 'avataan tiedostot
            W = OpenToWrite(file2)
            
            While EOF(R) = 0
                Rivi = Trim(ReadLine(R))'luetaan rivi
                
                txt = GetWord(Trim(Rivi),1," ") 'otetaan sana
                
                'käydään yksi rivinen if lause läpi
                If txt = "If" And InStr(rivi,"Then") > 0 And InStr(rivi, Chr(34)+ "Then" +Chr(34)) = 0
                    If GetWord(Mid(Rivi,InStr(Rivi,"Then")),2) = "" Or Left(GetWord(Mid(Rivi,InStr(Rivi,"Then")),2),1) = "'" Or Left(GetWord(Mid(Rivi,InStr(Rivi,"Then")),2),2) = "//"
                        WriteLine W, Väli + Rivi
                        väli = väli + "    "
                    Else
                        WriteLine W, Väli + Rivi
                    EndIf
                    'käydään rivin jälkeen lavennettavat
                ElseIf txt = "Repeat" Or txt = "For" Or txt = "While" Or txt = "Type" Or txt = "Lock"  Or txt = "Function" Or txt = "If"
                    WriteLine W, Väli + Rivi
                    väli = väli + "    "
                    'käydään heti sisentävät kohdat
                ElseIf txt = "Until" Or txt = "Wend" Or txt = "EndIf" Or txt = "EndFunction"  Or txt = "Forever" Or txt = "Unlock" Or txt = "Next" Or Lower(txt) = "endtype" Or (txt = "End" And GetWord(rivi,2) = "Function")Or (txt = "End" And GetWord(rivi,2) = "If") Or (txt = "End" And GetWord(rivi,2) = "Type")
                    väli = Left(väli,Len(väli)-4)
                    WriteLine W, Väli + Rivi
                    'käydään heti sisennettävät kohdat, jotka myös laventavat rivin jälkeen
                ElseIf txt = "ElseIf" Or txt = "Case" Or txt = "Else" Or txt = "Default"  Or (txt = "Else" And GetWord(rivi,2) = "If")
                    väli = Left(väli,Len(väli)-4)
                    WriteLine W, Väli + Rivi
                    väli = väli + "    "
                    'käydään 8 väliä laventavat kohdat
                ElseIf txt = "Select"
                    WriteLine W, Väli + Rivi
                    väli = väli + "        "
                    'käydään 8 väliä supistavat kohdat
                ElseIf txt = "EndSelect" Or (txt = "End" And GetWord(rivi,2) = "Select")
                    Väli = Left(väli,Len(väli)-8)
                    WriteLine W, Väli + Rivi
                    'käydään ei loogiset kohdat
                ElseIf txt = "DrawToImage"
                    If i = 0 //Lavennettavat
                        WriteLine W, Väli + Rivi
                        väli = väli + "    "
                        i = 1
                    Else 'käydään heti sisennettävät kohdat, jotka myös laventavat rivin jälkeen
                        väli = Left(väli,Len(väli)-4)
                        WriteLine W, Väli + Rivi
                        väli = väli + "    "
                    EndIf
                ElseIf txt = "DrawToScreen" 
                    väli = Left(väli,Len(väli)-4)
                    WriteLine W, Väli + Rivi
                    i = 0
                    'kirjoitettaan muut ylös
                Else
                    WriteLine W, Väli + Rivi
                EndIf
                
            Wend
            
            CloseFile(R)
            CloseFile(W)
            
            Return 1 'palauettaan yksi jos se onnistui
            
        Else
            
            Return 0 'jos epäonnistui
        EndIf
        
    EndFunction
    
Mitään erikoista en löytänyt... :o Tässäpä on sisennetty versio jos joku voisi koodiani vilkaista:

Code: Select all

    SCREEN 900,900
    
    SetWindow "Battle game (Ver: kehitys)"
    
    ChDir "C:\Documents and Settings\Järjestelmänvalvoja\Omat tiedostot\BattleGame kehitys\Media"
    
    Text 100,100, "Vihreä sotilas: liikkuu: nuolinäppäimistä ja ampuu luodin: M"
    Text 100,150, "Punainen sotilas: liikkuu: W,A,S,D ja ampuu luodin: C"
    Text 100,200, "Kummallakin pelaajalla elämä on 100, yhdestä osumasta menettää 1."
    Text 100,250, "PELI ALKKAA 6 SEKUNTIN KULUTTUA!"
    Text 100,300, "Paina pelin aikana H päästäksesi ohjeeseen"
    
    
    Type AMMUS
        Field obj
    End Type
    
    Type AMPU
        Field amm
    End Type
    
    FrameLimit 40
    
    Wait 6000
    
    ClearText
    
    kartta = LoadMap("kartta.til","tileset.bmp")
    PlayObject kartta,0,0,1
    
    ukko=LoadObject("soldier.bmp", 360)
    ukkeli=LoadObject("soldier2.bmp", 360)
    pati=LoadObject("panos.bmp")
    ShowObject pati,OFF
    paukku=LoadObject ("panos.bmp")
    ShowObject paukku,OFF
    
    
    Dim ykm As String
    ykm="Vihreä sotilas kuoli, Punainen sotilas voitti. Peli päättyi."
    
    Dim kam As String
    Dim linechange As String
    linechange=Chr(13)+Chr(10)
    kam="Punainen sotilas kuoli, Vihreä sotilas voitti. Peli päättyi."
    ykm=ykm+linechange
    
    'Pyöritä ukot alkuasentoon
    RotateObject ukko,0
    RotateObject ukkeli,180
    PositionObject ukko,-100,100
    PositionObject ukkeli,100,-100
    'Törmäykset
    SetupCollision ukko,ukkeli,2,2,2
    SetupCollision ukkeli,ukko,2,2,2
    SetupCollision ukko,kartta,1,4,2
    SetupCollision ukkeli,kartta,1,4,2
    'ELMÄMÄT
    ObjectInteger ukko,100
    ObjectInteger ukkeli,100
    
    Repeat
        
        Color cbwhite
        Text 10,860,"Pelin toimintanopeus (ruudunpäivitystä sekunnissa):"
        Text 420,860,FPS()
        Text 10,880,"Paina H päästäksesi ohjeeseen"
        
        Color cbred
        Text 100,100,FPS()
        
        If KeyDown(cbKeyH) Then
            Execute "BattleGameOhje.txt"
        EndIf
        
        If LeftKey() Then TurnObject ukko,4
        If RightKey() Then TurnObject ukko,-4
        If UpKey() Then MoveObject ukko,5
        If DownKey() Then MoveObject ukko,-5
        
        If KeyDown(cbKeyA) Then TurnObject ukkeli,4
        If KeyDown(cbKeyD) Then TurnObject ukkeli,-4
        If KeyDown(cbKeyW) Then MoveObject ukkeli,5
        If KeyDown(cbKeyS) Then MoveObject ukkeli,-5
        
        If ObjectX(ukko)<-430 Then PositionObject ukko,-430,ObjectY(ukko)
        If ObjectX(ukko)>430 Then PositionObject ukko,430,ObjectY(ukko)
        If ObjectY(ukko)<-430 Then PositionObject ukko,ObjectX(ukko),-430
        If ObjectY(ukko)>430 Then PositionObject ukko,ObjectX(ukko),430
        
        If ObjectX(ukkeli)<-430 Then PositionObject ukkeli,-430,ObjectY(ukkeli)
        If ObjectX(ukkeli)>430 Then PositionObject ukkeli,430,ObjectY(ukkeli)
        If ObjectY(ukkeli)<-430 Then PositionObject ukkeli,ObjectX(ukkeli),-430
        If ObjectY(ukkeli)>430 Then PositionObject ukkeli,ObjectX(ukkeli),430
        'VIHREÄ
        If KeyDown(cbKeyM) And reload=0 Then
            PlaySound "Machine Gun 1.wav",100
            luot.AMPU = New(AMPU)
            luot\amm=CloneObject(paukku)
            CloneObjectPosition luot\amm,ukko
            CloneObjectOrientation luot\amm,ukko
            reload=5 'Luodin lataus nopeus
        EndIf
        If reload>0 Then reload=reload-1
        
        For luot.AMPU = Each AMPU
            MoveObject luot\amm,50 'Luodin lento nopeus
            If ObjectsOverlap (ukkeli,luot\amm) Then
                ObjectInteger ukkeli,ObjectInteger(ukkeli) -1 'Luodin hittaus
                DeleteObject luot\amm
                Delete luot
            EndIf
        Next luot
        'Elämä 0
        If ObjectInteger (ukkeli) = 0 Then
            PlaySound "screm1.wav",100
            MakeError kam
            End
        EndIf
        
        'PUNAINEN
        
        If KeyDown(cbKeyC) And reload=0 Then
            PlaySound "Machine Gun 1.wav",100
            luoti.AMMUS = New(AMMUS)
            luoti\obj=CloneObject(pati)
            CloneObjectPosition luoti\obj,ukkeli
            CloneObjectOrientation luoti\obj,ukkeli
            reload=5 'Luodin lataus nopeus
        EndIf
        
        If reload>0 Then reload=reload-1
        
        For luoti.AMMUS = Each AMMUS
            If ObjectsOverlap (ukko,luoti\obj) Then
                ObjectInteger ukko,ObjectInteger(ukko) -1 'Luodin hittaus
            EndIf
            MoveObject luoti\obj,50 'Luodin lento nopeus
            If ObjectsOverlap (ukko,luoti\obj) Then
                DeleteObject luoti\obj
                Delete luoti
            EndIf
        Next luoti
        '!!!!!!!!!!!!!!!!!!!!!!!!
        'MAV tulee jos lisätään nämä määritykset ja if:in
        SetupCollision luoti\obj,kartta,2,4,2
        osuu = CountCollisions (luoti\obj)
        If osuu Then
            DeleteObject luoti\obj
            Delete luoti
        EndIf
        '!!!!!!!!!!!!!!!!!!!!!!!!
        
        If ObjectInteger (ukko) = 0 Then
            PlaySound "screm1.wav",100
            MakeError ykm
            End
        EndIf
        
        DrawScreen
        
    Until EscapeKey()
legend
Advanced Member
Posts: 371
Joined: Wed Nov 18, 2009 8:06 pm

Re: Tyhmät kysymykset (I/2010)

Post by legend »

Elikäs siirrät

Code: Select all

 SetupCollision luoti\obj,kartta,2,4,2
ton siihen kohtaan kun sä luot sen uuden padin (ampumis kohtaan), koska se pitää tehdä vain kerran kuhunkin objektiin. Ja ton ympärille

Code: Select all

    osuu = CountCollisions (luoti\obj)
        If osuu then
            DeleteObject luoti\obj
            Delete luoti
        EndIf
lisäät for each silmukan jossa käyt luoti\obj läpi.
EDIT:

Olenpas laiskalla päällä =D Toi toimii, mutta jos haluat varmistaa että toi osuu varmasti seinään, joudut käyttämään GetCollisionia. Jotain tän tapasta (en ole varma toimiiko...)

Code: Select all

If osuu and getcollision(luoti\obj,1) = kartta
[/edit]
User avatar
Peltsi
Active Member
Posts: 121
Joined: Thu Sep 30, 2010 12:16 pm

Re: Tyhmät kysymykset (I/2010)

Post by Peltsi »

legend wrote:Elikäs siirrät

Code: Select all

 SetupCollision luoti\obj,kartta,2,4,2
ton siihen kohtaan kun sä luot sen uuden padin (ampumis kohtaan), koska se pitää tehdä vain kerran kuhunkin objektiin. Ja ton ympärille

Code: Select all

    osuu = CountCollisions (luoti\obj)
        If osuu then
            DeleteObject luoti\obj
            Delete luoti
        EndIf
lisäät for each silmukan jossa käyt luoti\obj läpi.
EDIT:

Olenpas laiskalla päällä =D Toi toimii, mutta jos haluat varmistaa että toi osuu varmasti seinään, joudut käyttämään GetCollisionia. Jotain tän tapasta (en ole varma toimiiko...)

Code: Select all

If osuu and getcollision(luoti\obj,1) = kartta
[/edit]
Laiskuus tarttuu (minulta) =D! Kiitos neuvosta, kokeilen sitä heti! Editoin tätä viestiä sitten kun ilmoitan toimiiko. :)
Ei tahtonut toimia, mutta teinkö itse sen oikein?

Code: Select all

    'Battle game
    SCREEN 900,900
    
    SetWindow "Battle game (Ver: kehitys)"
    
    ChDir "C:\Documents and Settings\Järjestelmänvalvoja\Omat tiedostot\BattleGame kehitys\Media"
    
    Text 100,100, "Vihreä sotilas: liikkuu: nuolinäppäimistä ja ampuu luodin: M"
    Text 100,150, "Punainen sotilas: liikkuu: W,A,S,D ja ampuu luodin: C"
    Text 100,200, "Kummallakin pelaajalla elämä on 100, yhdestä osumasta menettää 1."
    Text 100,300, "PELI ALKKAA 6 SEKUNTIN KULUTTUA!"
    Text 100,250, "Paina pelin aikana H päästäksesi ohjeeseen ja P laittaaksesi pelin tauolle"
    
    Type AMMUS
        Field obj
    End Type
    
    Type AMPU
        Field amm
    End Type
    
    FrameLimit 40
    
    Wait 6000
    
    ClearText
    
    kartta = LoadMap("kartta.til","tileset.bmp")
    PlayObject kartta,0,0,1
    
    ukko=LoadObject("soldier.bmp", 360)
    ukkeli=LoadObject("soldier2.bmp", 360)
    pati=LoadObject("panos.bmp")
    ShowObject pati,OFF
    paukku=LoadObject ("panos.bmp")
    ShowObject paukku,OFF
    musa=PlaySound ("SK_Battle2.mp3")
    
    
    Dim ykm As String
    ykm="Vihreä sotilas kuoli, Punainen sotilas voitti. Peli päättyi."
    
    Dim kam As String
    Dim linechange As String
    linechange=Chr(13)+Chr(10)
    kam="Punainen sotilas kuoli, Vihreä sotilas voitti. Peli päättyi."
    ykm=ykm+linechange
    
    RotateObject ukko,0
    RotateObject ukkeli,180
    PositionObject ukko,-100,100
    PositionObject ukkeli,100,-100
    'Törmäykset
    SetupCollision ukko,ukkeli,2,2,2
    SetupCollision ukkeli,ukko,2,2,2
    SetupCollision ukko,kartta,1,4,2
    SetupCollision ukkeli,kartta,1,4,2
    'ELMÄMÄT
    ObjectInteger ukko,100
    ObjectInteger ukkeli,100
    ObjectInteger paukku,100
    ObjectInteger pati,100
    
    Repeat
        
        If SoundPlaying(musa)=0 Then
            musa = PlaySound ("SK_Battle2.mp3")
        EndIf
        
        Text 595,30,"Punaisen sotilaan lippaan panokset:"+ObjectInteger (pati)
        Text 0,30,"Vihreän sotilaan lippaan panokset:"+ObjectInteger (paukku)
        Text 595,10,"Punaisen sotilaan elämä:"+ObjectInteger (ukkeli)
        Text 0,10,"Vihreän sotilaan elämä:"+ObjectInteger (ukko)
        
        If KeyHit(CbKeyP) Then
            pause = Not pause
        EndIf
        
        If pause Then
            Text 10,860,"Peli on tauolla, paina P jatkaaksesi"
        End If
        
        If Not pause Then
            
            Color cbwhite
            Text 10,860,"Pelin toimintanopeus (ruudunpäivitystä sekunnissa):"
            Text 420,860,FPS()
            Text 10,880,"Paina P laittaaksesi pelin tauolle ja H päästäksesi ohjeeseen"
            
            Color cbred
            Text 100,100,FPS()
            
            If KeyDown(cbKeyH) Then
                Execute "BattleGameOhje.html"
            EndIf
            
            If LeftKey() Then TurnObject ukko,4
            If RightKey() Then TurnObject ukko,-4
            If UpKey() Then MoveObject ukko,5
            If DownKey() Then MoveObject ukko,-5
            
            If KeyDown(cbKeyA) Then TurnObject ukkeli,4
            If KeyDown(cbKeyD) Then TurnObject ukkeli,-4
            If KeyDown(cbKeyW) Then MoveObject ukkeli,5
            If KeyDown(cbKeyS) Then MoveObject ukkeli,-5
            
            If ObjectX(ukko)<-430 Then PositionObject ukko,-430,ObjectY(ukko)
            If ObjectX(ukko)>430 Then PositionObject ukko,430,ObjectY(ukko)
            If ObjectY(ukko)<-430 Then PositionObject ukko,ObjectX(ukko),-430
            If ObjectY(ukko)>430 Then PositionObject ukko,ObjectX(ukko),430
            
            If ObjectX(ukkeli)<-430 Then PositionObject ukkeli,-430,ObjectY(ukkeli)
            If ObjectX(ukkeli)>430 Then PositionObject ukkeli,430,ObjectY(ukkeli)
            If ObjectY(ukkeli)<-430 Then PositionObject ukkeli,ObjectX(ukkeli),-430
            If ObjectY(ukkeli)>430 Then PositionObject ukkeli,ObjectX(ukkeli),430
            'VIHREÄ ukko
            If KeyDown(cbKeyM) And reload=0 Then
                ObjectInteger paukku,ObjectInteger (paukku) -1
                PlaySound "Machine Gun 1.wav",100
                luot.AMPU = New(AMPU)
                luot\amm=CloneObject(paukku)
                CloneObjectPosition luot\amm,ukko
                CloneObjectOrientation luot\amm,ukko
                reload=5 'Luodin lataus nopeus
            EndIf
            If reload>0 Then reload=reload-1
            For luot.AMPU = Each AMPU
                MoveObject luot\amm,50 'Luodin lento nopeus
                If ObjectsOverlap (ukkeli,luot\amm) Then
                    ObjectInteger ukkeli,ObjectInteger(ukkeli) -1 'Luodin hittaus
                    DeleteObject luot\amm
                    Delete luot
                EndIf
            Next luot
            'Elämä 0
            If ObjectInteger (ukkeli) = 0 Then
                PlaySound "screm1.wav",100
                MakeError kam
                End
            EndIf
        EndIf
        
        If ObjectInteger (paukku) =0 Then
            reload=100
            ObjectInteger paukku,ObjectInteger (paukku) +100
            PlaySound "Pistol reload.wav",100
        EndIf
        
        
        
        'PUNAINEN ukkeli
        
        If KeyDown(cbKeyC) And reload=0 Then
            ObjectInteger pati,ObjectInteger (pati) -1
            PlaySound "Machine Gun 1.wav",100
            luoti.AMMUS = New(AMMUS)
            luoti\obj=CloneObject(pati)
            SetupCollision luoti\obj,kartta,2,4,2
            CloneObjectPosition luoti\obj,ukkeli
            CloneObjectOrientation luoti\obj,ukkeli
            reload=5 'Luodin lataus nopeus
        EndIf
        
        If reload>0 Then reload=reload-1
        
        For luoti.AMMUS = Each AMMUS
            osuu = CountCollisions (luoti\obj)
            If osuu And GetCollision(luoti\obj,1) = kartta Then
                DeleteObject luoti\obj
                Delete luoti
            EndIf
            MoveObject luoti\obj,50 'Luodin lento nopeus
            If ObjectsOverlap (ukko,luoti\obj) Then
                ObjectInteger ukko,ObjectInteger(ukko) -1'Luodin hittaus
                DeleteObject luoti\obj
                Delete luoti
            EndIf
        Next luoti
        
        If ObjectInteger (ukko) = 0 Then
            PlaySound "screm1.wav",100
            MakeError ykm
            End
        EndIf
        
        If ObjectInteger (pati) =0 Then
            reload=100
            ObjectInteger pati,ObjectInteger (pati) +100
            PlaySound "Pistol reload.wav",100
        EndIf
        
        
        DrawScreen
        
    Until EscapeKey()

legend
Advanced Member
Posts: 371
Joined: Wed Nov 18, 2009 8:06 pm

Re: Tyhmät kysymykset (I/2010)

Post by legend »

Kokeileppa tota =D

Code: Select all

        For luoti.AMMUS = Each AMMUS
            MoveObject luoti\obj,15 'Luodin lento nopeus
            osuu = CountCollisions(luoti\obj)
            If ObjectsOverlap (ukko,luoti\obj) Then
                ObjectInteger ukko,ObjectInteger(ukko) -1'Luodin hittaus
                DeleteObject luoti\obj
                Delete luoti
            ElseIf osuu > 0 and GetCollision(luoti\obj,1) = kartta Then
                DeleteObject luoti\obj
                Delete luoti
            EndIf
        Next luoti
Eli errori johtui siitä, että poistit luodin kun se osui seinään ja sen jälkeen koitit liikuttaa sitä, eli järjestys on tärkeä! Lisäsin tohon elseif, koska muuten se sama ongelma olisi tullut tappamisessa.
Muuten: Suosittelen sinun laskevan luodin nopeutta 15 ja nostamaan framelimittiä 40:sta 60:n, koska nyt sinun padit voivat mennä seinien läpi. Se johtuu siitä, että pati lentää sen seinän yli ja sen jälkeen peli vasta tarkistaa sen. Eli laske luodin nopeutta ja nosta pelin pyörimis nopeutta (framelimit), silloin padit menee yhtä kovaa, mutta peli tarkistaa luotien osumista nopeammin (ei viivettä).
User avatar
Peltsi
Active Member
Posts: 121
Joined: Thu Sep 30, 2010 12:16 pm

Re: Tyhmät kysymykset (I/2010)

Post by Peltsi »

legend wrote:Kokeileppa tota =D

Code: Select all

        For luoti.AMMUS = Each AMMUS
            MoveObject luoti\obj,15 'Luodin lento nopeus
            osuu = CountCollisions(luoti\obj)
            If ObjectsOverlap (ukko,luoti\obj) Then
                ObjectInteger ukko,ObjectInteger(ukko) -1'Luodin hittaus
                DeleteObject luoti\obj
                Delete luoti
            ElseIf osuu > 0 and GetCollision(luoti\obj,1) = kartta Then
                DeleteObject luoti\obj
                Delete luoti
            EndIf
        Next luoti
Eli errori johtui siitä, että poistit luodin kun se osui seinään ja sen jälkeen koitit liikuttaa sitä, eli järjestys on tärkeä! Lisäsin tohon elseif, koska muuten se sama ongelma olisi tullut tappamisessa.
Muuten: Suosittelen sinun laskevan luodin nopeutta 15 ja nostamaan framelimittiä 40:sta 60:n, koska nyt sinun padit voivat mennä seinien läpi. Se johtuu siitä, että pati lentää sen seinän yli ja sen jälkeen peli vasta tarkistaa sen. Eli laske luodin nopeutta ja nosta pelin pyörimis nopeutta (framelimit), silloin padit menee yhtä kovaa, mutta peli tarkistaa luotien osumista nopeammin (ei viivettä).
Luodit törmäävät seinään vain tietyissä kulmissa. Vihreällä pelaajalla (ukko) ei käy edes niin, johtuuko tämä luotien ja pelin nopeuksista? Laskin luotien lentonopeutta ja nostin framelimitin 60:een:

Code: Select all

    'Battle game
    SCREEN 900,900
    
    SetWindow "Battle game (Ver: kehitys)"
    
    ChDir "C:\Documents and Settings\Järjestelmänvalvoja\Omat tiedostot\BattleGame kehitys\Media"
    
    Text 100,100, "Vihreä sotilas: liikkuu: nuolinäppäimistä ja ampuu luodin: M"
    Text 100,150, "Punainen sotilas: liikkuu: W,A,S,D ja ampuu luodin: C"
    Text 100,200, "Kummallakin pelaajalla elämä on 100, yhdestä osumasta menettää 1."
    Text 100,300, "PELI ALKKAA 6 SEKUNTIN KULUTTUA!"
    Text 100,250, "Paina pelin aikana H päästäksesi ohjeeseen ja P laittaaksesi pelin tauolle"

    Type AMMUS
    
        Field obj
    End Type
    
    Type AMPU
        Field amm
    End Type
    
    FrameLimit 60
    
    Wait 6000
    
    ClearText
    
    kartta = LoadMap("kartta.til","tileset.bmp")
    PlayObject kartta,0,0,1
    
    ukko=LoadObject("soldier.bmp", 360)
    ukkeli=LoadObject("soldier2.bmp", 360)
    pati=LoadObject("panos.bmp")
    ShowObject pati,OFF
    paukku=LoadObject ("panos.bmp")
    ShowObject paukku,OFF
    musa=PlaySound ("SK_Battle2.mp3")
    
    
    Dim ykm As String
    ykm="Vihreä sotilas kuoli, Punainen sotilas voitti. Peli päättyi."
    
    Dim kam As String
    Dim linechange As String
    linechange=Chr(13)+Chr(10)
    kam="Punainen sotilas kuoli, Vihreä sotilas voitti. Peli päättyi."
    ykm=ykm+linechange
    
    RotateObject ukko,0
    RotateObject ukkeli,180
    PositionObject ukko,-100,100
    PositionObject ukkeli,100,-100
    'Törmäykset
    SetupCollision ukko,ukkeli,2,2,2
    SetupCollision ukkeli,ukko,2,2,2
    SetupCollision ukko,kartta,1,4,2
    SetupCollision ukkeli,kartta,1,4,2
    'ELMÄMÄT
    ObjectInteger ukko,100
    ObjectInteger ukkeli,100
    ObjectInteger paukku,100
    ObjectInteger pati,100
    
    Repeat
        
        If SoundPlaying(musa)=0 Then
            musa = PlaySound ("SK_Battle2.mp3")
        EndIf
        
        Text 595,30,"Punaisen sotilaan lippaan panokset:"+ObjectInteger (pati)
        Text 0,30,"Vihreän sotilaan lippaan panokset:"+ObjectInteger (paukku)
        Text 595,10,"Punaisen sotilaan elämä:"+ObjectInteger (ukkeli)
        Text 0,10,"Vihreän sotilaan elämä:"+ObjectInteger (ukko)
        
        If KeyHit(CbKeyP) Then
            pause = Not pause
        EndIf
        
        If pause Then
            Text 10,860,"Peli on tauolla, paina P jatkaaksesi"
        End If
        
        If Not pause Then
            
            Color cbwhite
            Text 10,860,"Pelin toimintanopeus (ruudunpäivitystä sekunnissa):"
            Text 420,860,FPS()
            Text 10,880,"Paina P laittaaksesi pelin tauolle ja H päästäksesi ohjeeseen"
            
            Color cbred
            Text 100,100,FPS()
            
            If KeyDown(cbKeyH) Then
                Execute "BattleGameOhje.html"
            EndIf
            
            If LeftKey() Then TurnObject ukko,4
            If RightKey() Then TurnObject ukko,-4
            If UpKey() Then MoveObject ukko,5
            If DownKey() Then MoveObject ukko,-5
            
            If KeyDown(cbKeyA) Then TurnObject ukkeli,4
            If KeyDown(cbKeyD) Then TurnObject ukkeli,-4
            If KeyDown(cbKeyW) Then MoveObject ukkeli,5
            If KeyDown(cbKeyS) Then MoveObject ukkeli,-5
            
            If ObjectX(ukko)<-430 Then PositionObject ukko,-430,ObjectY(ukko)
            If ObjectX(ukko)>430 Then PositionObject ukko,430,ObjectY(ukko)
            If ObjectY(ukko)<-430 Then PositionObject ukko,ObjectX(ukko),-430
            If ObjectY(ukko)>430 Then PositionObject ukko,ObjectX(ukko),430
            
            If ObjectX(ukkeli)<-430 Then PositionObject ukkeli,-430,ObjectY(ukkeli)
            If ObjectX(ukkeli)>430 Then PositionObject ukkeli,430,ObjectY(ukkeli)
            If ObjectY(ukkeli)<-430 Then PositionObject ukkeli,ObjectX(ukkeli),-430
            If ObjectY(ukkeli)>430 Then PositionObject ukkeli,ObjectX(ukkeli),430

            'VIHREÄ PELAAJA (ukko)
            '!!!!!!!!!!!!!!!!!!!!!!!!!!!!

            If KeyDown(cbKeyM) And reload=0 Then
                ObjectInteger paukku,ObjectInteger (paukku) -1
                PlaySound "Machine Gun 1.wav",100
                luot.AMPU = New(AMPU)
                luot\amm=CloneObject(paukku)
                CloneObjectPosition luot\amm,ukko
                CloneObjectOrientation luot\amm,ukko
                reload=5 'Luodin lataus nopeus
            EndIf
            If reload>0 Then reload=reload-1
            
        For luot.AMPU = Each AMPU
            MoveObject luot\amm,7 'Luodin lento nopeus
            osuua = CountCollisions(luot\amm)
            If ObjectsOverlap (ukkeli,luot\amm) Then
                ObjectInteger ukkeli,ObjectInteger(ukkeli) -1'Luodin hittaus
                DeleteObject luot\amm
                Delete luot
            ElseIf osuua > 0 And GetCollision(luot\amm,1) = kartta Then
                DeleteObject luot\amm
                Delete luot
            EndIf
        Next luot   
            'Elämä 0
            If ObjectInteger (ukkeli) = 0 Then
                PlaySound "screm1.wav",100
                MakeError kam
                End
            EndIf
        EndIf
        
        If ObjectInteger (paukku) =0 Then
            reload=100
            ObjectInteger paukku,ObjectInteger (paukku) +100
            PlaySound "Pistol reload.wav",100
        EndIf
        
        'PUNAINEN PELAAJA (ukkeli)
        
        If KeyDown(cbKeyC) And reload=0 Then
            ObjectInteger pati,ObjectInteger (pati) -1
            PlaySound "Machine Gun 1.wav",100
            luoti.AMMUS = New(AMMUS)
            luoti\obj=CloneObject(pati)
            SetupCollision luoti\obj,kartta,2,4,2
            CloneObjectPosition luoti\obj,ukkeli
            CloneObjectOrientation luoti\obj,ukkeli
            reload=5 'Luodin lataus nopeus
        EndIf
        
        If reload>0 Then reload=reload-1
        
                For luoti.AMMUS = Each AMMUS
            MoveObject luoti\obj,7 'Luodin lento nopeus
            osuu = CountCollisions(luoti\obj)
            If ObjectsOverlap (ukko,luoti\obj) Then
                ObjectInteger ukko,ObjectInteger(ukko) -1'Luodin hittaus
                DeleteObject luoti\obj
                Delete luoti
            ElseIf osuu > 0 and GetCollision(luoti\obj,1) = kartta Then
                DeleteObject luoti\obj
                Delete luoti
            EndIf
        Next luoti
        
        If ObjectInteger (ukko) = 0 Then
            PlaySound "screm1.wav",100
            MakeError ykm
            End
        EndIf
        
        If ObjectInteger (pati) =0 Then
            reload=100
            ObjectInteger pati,ObjectInteger (pati) +100
            PlaySound "Pistol reload.wav",100
        EndIf
        
        
        DrawScreen
        
    Until EscapeKey()
PS: On aika mainio se sun sisentäjä! Tulee olemaan kovassa käytössä mulla. =D
User avatar
TheDuck
Devoted Member
Posts: 632
Joined: Sun Aug 26, 2007 3:51 pm
Location: C:\Program Files\Tuusula\

Re: Tyhmät kysymykset (I/2010)

Post by TheDuck »

Kannattaa opetella sisentämään ilman mitään sisentäjiäkin.. Ei se niin vaikeaa voi olla.
^^
User avatar
Peltsi
Active Member
Posts: 121
Joined: Thu Sep 30, 2010 12:16 pm

Re: Tyhmät kysymykset (I/2010)

Post by Peltsi »

TheDuck wrote:Kannattaa opetella sisentämään ilman mitään sisentäjiäkin.. Ei se niin vaikeaa voi olla.
Aattelin vaan että hyvä softa on. Toki itsekkin sisennän mutta en siinä ole vielä niin hyvä (kun laitan koodia foorumille niin varmuuden vuoksi sisennän softalla).
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: Tyhmät kysymykset (I/2010)

Post by MaGetzUb »

Opettele vain kun luot If/Else/ElseIf - Then, Repeat - Forever, While - Wend, For/For Each - Next niin lausekkeen niin sen sisäisen koodiin painamaan Tabulaattori näppäintä. Helppoa kuin heinän teko.
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
legend
Advanced Member
Posts: 371
Joined: Wed Nov 18, 2009 8:06 pm

Re: Tyhmät kysymykset (I/2010)

Post by legend »

Peltsi wrote:Ongelma, miksi toisen padit eivät osu seinään?
Unohdit laitaa toiseen padin ampumis kohtaa tän.

Code: Select all

SetupCollision luoti\obj,kartta,2,4,2
Character
Active Member
Posts: 113
Joined: Thu Nov 27, 2008 2:16 pm

Re: Tyhmät kysymykset (I/2010)

Post by Character »

Miten tarkistan törmäyksen saman tyypin jäsenten kanssa (kuvia)?
EDIT:

Kiitos :)

Last edited by Character on Sat Oct 30, 2010 8:27 pm, edited 1 time in total.
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Tyhmät kysymykset (I/2010)

Post by Awaclus »

Character wrote:Miten tarkistan törmäyksen saman tyypin jäsenten kanssa (kuvia)?

Code: Select all

For iJäsen.JÄSENET = Each JÄSENET
    For öJäsen.JÄSENET = Each JÄSENET
User avatar
Peltsi
Active Member
Posts: 121
Joined: Thu Sep 30, 2010 12:16 pm

Re: Tyhmät kysymykset (I/2010)

Post by Peltsi »

legend wrote:
Peltsi wrote:Ongelma, miksi toisen padit eivät osu seinään?
Unohdit laitaa toiseen padin ampumis kohtaa tän.

Code: Select all

SetupCollision luoti\obj,kartta,2,4,2
Olette varmaan jo aivan raivona näihin kysymyksiini (toivottavasti ette :D )... Elikkä, luodit liukuvat seiniä pitkin kunnes menevät niiden läpi pelin ulkopuolelle. Useissa tapauksissa näin ei käy, vaan luodit menevät kaikkien seinien läpi. Kokeilin ripotella updategamea peliin ja kokeilin myös getmap2:sta. Olisi mukava saada luodit vihdoinkin kuriin ;)

Code: Select all

    'Battle game
    SCREEN 900,900
    
    SetWindow "Battle game (Ver: kehitys)"
    
    ChDir "C:\Documents and Settings\Järjestelmänvalvoja\Omat tiedostot\BattleGame kehitys\Media"
    
    Color 255,255,0
    
    Text 100,100, "Vihreä sotilas: liikkuu: nuolinäppäimistä ja ampuu luodin: M"
    Text 100,150, "Punainen sotilas: liikkuu: W,A,S,D ja ampuu luodin: C"
    Text 100,200, "Kummallakin pelaajalla elämä on 100, yhdestä osumasta menettää 1"
    Text 100,350, "PELI ALKKAA 6 SEKUNTIN KULUTTUA!"
    Text 100,300, "Paina pelin aikana F2 piilottaaksesi hiiren ja F3 näyttääksesi hiiren"
    Text 100,250, "Paina pelin aikana H päästäksesi ohjeeseen ja P laittaaksesi pelin tauolle"
    
    Type AMMUS
        Field obj
    End Type
    
    Type AMPU
        Field amm
    End Type
    
    FrameLimit 60
    
    Wait 6000
    
    ClearText
    
    kartta = LoadMap("kartta.til","tileset.bmp")
    PlayObject kartta,0,0,1
    
    ukko=LoadObject("soldier.bmp", 360)
    ukkeli=LoadObject("soldier2.bmp", 360)
    pati=LoadObject("panos.bmp")
    ShowObject pati,OFF
    paukku=LoadObject ("panos.bmp")
    ShowObject paukku,OFF
    musa=PlaySound ("SK_Battle2.mp3")
    
    
    Dim ykm As String
    ykm="Vihreä sotilas kuoli, Punainen sotilas voitti. Peli päättyi."
    
    Dim her As String
    her="Peli päättyi"
    
    Dim kam As String
    Dim linechange As String
    linechange=Chr(13)+Chr(10)
    kam="Punainen sotilas kuoli, Vihreä sotilas voitti. Peli päättyi."
    ykm=ykm+linechange
    
    RotateObject ukko,0
    RotateObject ukkeli,180
    PositionObject ukko,-100,100
    PositionObject ukkeli,100,-100
    'Törmäykset
    SetupCollision ukko,ukkeli,2,2,2
    SetupCollision ukkeli,ukko,2,2,2
    SetupCollision ukko,kartta,1,4,2
    SetupCollision ukkeli,kartta,1,4,2
    'ELMÄMÄT
    ObjectInteger ukko,100
    ObjectInteger ukkeli,100
    ObjectInteger paukku,100
    ObjectInteger pati,100
    
    Repeat

        If KeyHit (88) Then
                Color 0,255,0
                Repeat
                Locate 10,10
                kuk$=Input("Code:","*")
                DrawScreen
                Until KeyHit (28)
                CloseInput
        EndIf

       If Lower(kuk$) = "t22" Then
           ObjectInteger ukkeli,ObjectInteger(ukkeli) -1
        EndIf
        
       If Lower(kuk$) = "t11" Then
           ObjectInteger ukko,ObjectInteger(ukko) -1
        EndIf

      If Lower(kuk$) = "sp1" Then
           AddText "SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM"
        EndIf
        
        If Lower (kuk$) = "fl20" Then
        FrameLimit 20
        EndIf
        
        If Lower (kuk$) = "fl60" Then
        FrameLimit 60
        EndIf
        
        If Lower (kuk$) = "fl5" Then
        FrameLimit 5
        EndIf

        
        If Lower (kuk$) = "le1" Then
           ObjectInteger ukko,ObjectInteger(ukko) +1
           EndIf
        
       If Lower (kuk$) = "el1" Then
           ObjectInteger ukko,ObjectInteger(ukko) +0
        EndIf
        
       If Lower (kuk$) = "el2" Then
           ObjectInteger ukkeli,ObjectInteger(ukkeli) +0
        EndIf
        
        If Lower (kuk$) = "le2" Then
           ObjectInteger ukkeli,ObjectInteger(ukkeli) +1
        EndIf
        
        If Lower (kuk$) = "lp1" Then
        MakeError her
        EndIf

       If KeyHit(CbKeyP) Then
            playing = Not playing
            pause = Not pause
        EndIf
                
        If pause Then
            StopSound musa
            Text 10,860,"Peli on tauolla, paina P jatkaaksesi"
        End If
        
        If Not pause Then
 
        UpdateGame 
 
        If KeyDown(60) Then
        ShowMouse OFF
        EndIf
        
        If KeyDown (61) Then
        ShowMouse ON
        EndIf
        
        If SoundPlaying(musa)=0 Then
            musa = PlaySound ("SK_Battle2.mp3")
        EndIf
        
        Text 595,30,"Punaisen sotilaan lippaan panokset:"+ObjectInteger (pati)
        Text 595,10,"Punaisen sotilaan elämä:"+ObjectInteger (ukkeli)
        
        Color 0,255,0
        Text 0,30,"Vihreän sotilaan lippaan panokset:"+ObjectInteger (paukku)
        Text 0,10,"Vihreän sotilaan elämä:"+ObjectInteger (ukko)
        
            
            Color cbWhite
            Text 420,860,FPS()
            Color cbSilver
            Text 10,860,"Pelin toimintanopeus (ruudunpäivitystä sekunnissa):"
            Text 10,880,"Paina P laittaaksesi pelin tauolle ja H päästäksesi ohjeeseen"
            
            Color cbred
            Text 100,100,FPS()
            
            If KeyDown(cbKeyH) Then
                Execute "BattleGameOhje.html"
            EndIf
            
            If LeftKey() Then TurnObject ukko,4
            If RightKey() Then TurnObject ukko,-4
            If UpKey() Then MoveObject ukko,5
            If DownKey() Then MoveObject ukko,-5
            
            If KeyDown(cbKeyA) Then TurnObject ukkeli,4
            If KeyDown(cbKeyD) Then TurnObject ukkeli,-4
            If KeyDown(cbKeyW) Then MoveObject ukkeli,5
            If KeyDown(cbKeyS) Then MoveObject ukkeli,-5
            
            If ObjectX(ukko)<-430 Then PositionObject ukko,-430,ObjectY(ukko)
            If ObjectX(ukko)>430 Then PositionObject ukko,430,ObjectY(ukko)
            If ObjectY(ukko)<-430 Then PositionObject ukko,ObjectX(ukko),-430
            If ObjectY(ukko)>430 Then PositionObject ukko,ObjectX(ukko),430
            
            If ObjectX(ukkeli)<-430 Then PositionObject ukkeli,-430,ObjectY(ukkeli)
            If ObjectX(ukkeli)>430 Then PositionObject ukkeli,430,ObjectY(ukkeli)
            If ObjectY(ukkeli)<-430 Then PositionObject ukkeli,ObjectX(ukkeli),-430
            If ObjectY(ukkeli)>430 Then PositionObject ukkeli,ObjectX(ukkeli),430
            'VIHREÄ ukko
        UpdateGame

            If KeyDown(cbKeyM) And reload=0 Then
                ObjectInteger paukku,ObjectInteger (paukku) -1
                PlaySound "Machine Gun 1.wav",100
                luot.AMPU = New(AMPU)
                luot\amm=CloneObject(paukku)
                CloneObjectPosition luot\amm,ukko
                SetupCollision luot\amm,kartta,2,4,2
                CloneObjectOrientation luot\amm,ukko
                reload=5 'Luodin lataus nopeus
            EndIf
            If reload>0 Then reload=reload-1
            
        For luot.AMPU = Each AMPU
            MoveObject luot\amm,7 'Luodin lento nopeus
            osuua = CountCollisions(luot\amm)
            If ObjectsOverlap (ukkeli,luot\amm) Then
                ObjectInteger ukkeli,ObjectInteger(ukkeli) -1'Luodin hittaus
                DeleteObject luot\amm
                Delete luot
            UpdateGame
            ElseIf osuua > 0 And GetCollision(luot\amm,1) = kartta Then
                DeleteObject luot\amm
                Delete luot
            EndIf
        Next luot   
            'Elämä 0
            If ObjectInteger (ukkeli) = 0 Then
                PlaySound "screm1.wav",100
                MakeError kam
                End
            EndIf
        EndIf
        
        If ObjectInteger (paukku) =0 Then
            reload=100
            ObjectInteger paukku,ObjectInteger (paukku) +100
            PlaySound "Pistol reload.wav",100
        EndIf
                
        UpdateGame

        'PUNAINEN ukkeli
        
        If KeyDown(cbKeyC) And reload=0 Then
            ObjectInteger pati,ObjectInteger (pati) -1
            PlaySound "Machine Gun 1.wav",100
            luoti.AMMUS = New(AMMUS)
            luoti\obj=CloneObject(pati)
            SetupCollision luoti\obj,kartta,2,4,2
            CloneObjectPosition luoti\obj,ukkeli
            CloneObjectOrientation luoti\obj,ukkeli
            reload=5 'Luodin lataus nopeus
        EndIf
        
        If reload>0 Then reload=reload-1
        
                For luoti.AMMUS = Each AMMUS
            MoveObject luoti\obj,7 'Luodin lento nopeus
            osuu = CountCollisions(luoti\obj)
            If ObjectsOverlap (ukko,luoti\obj) Then
                ObjectInteger ukko,ObjectInteger(ukko) -1'Luodin hittaus
                DeleteObject luoti\obj
                Delete luoti
            UpdateGame
            ElseIf osuu > 0 And GetCollision(luoti\obj,1) = kartta Then
                DeleteObject luoti\obj
                Delete luoti
           EndIf
        Next luoti
        
        If ObjectInteger (ukko) = 0 Then
            PlaySound "screm1.wav",100
            MakeError ykm
            End
        EndIf
        
        If ObjectInteger (pati) =0 Then
            reload=100
            ObjectInteger pati,ObjectInteger (pati) +100
            PlaySound "Pistol reload.wav",100
        EndIf
        
        
        DrawScreen
        
    Until EscapeKey()
Last edited by Peltsi on Sun Oct 31, 2010 10:46 am, edited 1 time in total.
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset (I/2010)

Post by Jonez »

Kokeilepa käyttää pelkkää GetMap-funktiota. Siis tähän malliin:

Code: Select all

If GetMap( 2, luoti\x, luoti\y ) Then DeleteObject luoti\obj : delete luoti
Tätä tapaa käyttäessä ei tarvitse asettaa törmäystarkistusta luodin ja kartan välille.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
User avatar
Peltsi
Active Member
Posts: 121
Joined: Thu Sep 30, 2010 12:16 pm

Re: Tyhmät kysymykset (I/2010)

Post by Peltsi »

Jonez wrote:Kokeilepa käyttää pelkkää GetMap-funktiota. Siis tähän malliin:

Code: Select all

If GetMap( 2, luoti\x, luoti\y ) Then DeleteObject luoti\obj : delete luoti
Tätä tapaa käyttäessä ei tarvitse asettaa törmäystarkistusta luodin ja kartan välille.
On se kumma kun ei toimi vieläkään :o . Laitoin tuon koodirivin edellisten törmäystunnistuksien tilalle:

Code: Select all

       If KeyDown(cbKeyC) And reload=0 Then
            ObjectInteger pati,ObjectInteger (pati) -1
            PlaySound "Machine Gun 1.wav",100
            luoti.AMMUS = New(AMMUS)
            luoti\obj=CloneObject(pati)
            SetupCollision luoti\obj,kartta,2,4,2
            CloneObjectPosition luoti\obj,ukkeli
            CloneObjectOrientation luoti\obj,ukkeli
            reload=5 'Luodin lataus nopeus
        EndIf
        
        If reload>0 Then reload=reload-1
        
                For luoti.AMMUS = Each AMMUS
            MoveObject luoti\obj,7 'Luodin lento nopeus
            If ObjectsOverlap (ukko,luoti\obj) Then
                ObjectInteger ukko,ObjectInteger(ukko) -1'Luodin hittaus
                DeleteObject luoti\obj
                Delete luoti
'Täällä on törmäys!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
         If GetMap( 2, x, y ) Then DeleteObject luoti\obj : Delete luoti  'jouduin ottamaan noista (2,x,y) kohdista "luoti\" sanat pois koska kääntäjä valitti niistä
          EndIf
        Next luoti
Luoti tekee liukuvaa törmäystä vieläkin (vaikka sen pitäisi poistua) ja lisäyllätyksenä tulee MAV jos luoti törmää toiseen pelaajaan.

Code: Select all

    'Battle game
    SCREEN 900,900
    
    SetWindow "Battle game (Ver: kehitys)"
    
    ChDir "C:\Documents and Settings\Järjestelmänvalvoja\Omat tiedostot\BattleGame kehitys\Media"
    
    Color 255,255,0
    
    Text 100,100, "Vihreä sotilas: liikkuu: nuolinäppäimistä ja ampuu luodin: M"
    Text 100,150, "Punainen sotilas: liikkuu: W,A,S,D ja ampuu luodin: C"
    Text 100,200, "Kummallakin pelaajalla elämä on 100, yhdestä osumasta menettää 1"
    Text 100,350, "PELI ALKKAA 6 SEKUNTIN KULUTTUA!"
    Text 100,300, "Paina pelin aikana F2 piilottaaksesi hiiren ja F3 näyttääksesi hiiren"
    Text 100,250, "Paina pelin aikana H päästäksesi ohjeeseen ja P laittaaksesi pelin tauolle"

    
    Type AMMUS
        Field obj
    End Type
    
    Type AMPU
        Field amm
    End Type
    
    FrameLimit 60
    
    Wait 6000
    
    ClearText
    
    kartta = LoadMap("kartta.til","tileset.bmp")
    PlayObject kartta,0,0,1
    
    ukko=LoadObject("soldier.bmp", 360)
    ukkeli=LoadObject("soldier2.bmp", 360)
    pati=LoadObject("panos.bmp")
    ShowObject pati,OFF
    paukku=LoadObject ("panos.bmp")
    ShowObject paukku,OFF
    musa=PlaySound ("SK_Battle2.mp3")
    
    
    Dim ykm As String
    ykm="Vihreä sotilas kuoli, Punainen sotilas voitti. Peli päättyi."
    
    Dim her As String
    her="Peli päättyi"
    
    Dim kam As String
    Dim linechange As String
    linechange=Chr(13)+Chr(10)
    kam="Punainen sotilas kuoli, Vihreä sotilas voitti. Peli päättyi."
    ykm=ykm+linechange
    
    RotateObject ukko,0
    RotateObject ukkeli,180
    PositionObject ukko,-100,100
    PositionObject ukkeli,100,-100
    'Törmäykset
    SetupCollision ukko,ukkeli,2,2,2
    SetupCollision ukkeli,ukko,2,2,2
    SetupCollision ukko,kartta,1,4,2
    SetupCollision ukkeli,kartta,1,4,2
    'ELMÄMÄT
    ObjectInteger ukko,100
    ObjectInteger ukkeli,100
    ObjectInteger paukku,100
    ObjectInteger pati,100
    
    Repeat

        If KeyHit (88) Then
                Color 0,255,0
                Repeat
                Locate 10,10
                kuk$=Input("Code:","*")
                DrawScreen
                Until KeyHit (28)
                CloseInput
        EndIf

       If Lower(kuk$) = "t22" Then
           ObjectInteger ukkeli,ObjectInteger(ukkeli) -1
        EndIf
        
       If Lower(kuk$) = "t11" Then
           ObjectInteger ukko,ObjectInteger(ukko) -1
        EndIf

      If Lower(kuk$) = "sp1" Then
           AddText "SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM"
        EndIf
        
        If Lower (kuk$) = "fl20" Then
        FrameLimit 20
        EndIf
        
        If Lower (kuk$) = "fl60" Then
        FrameLimit 60
        EndIf
        
        If Lower (kuk$) = "fl5" Then
        FrameLimit 5
        EndIf

        
        If Lower (kuk$) = "le1" Then
           ObjectInteger ukko,ObjectInteger(ukko) +1
           EndIf
        
       If Lower (kuk$) = "el1" Then
           ObjectInteger ukko,ObjectInteger(ukko) +0
        EndIf
        
       If Lower (kuk$) = "el2" Then
           ObjectInteger ukkeli,ObjectInteger(ukkeli) +0
        EndIf
        
        If Lower (kuk$) = "le2" Then
           ObjectInteger ukkeli,ObjectInteger(ukkeli) +1
        EndIf
        
        If Lower (kuk$) = "lp1" Then
        MakeError her
        EndIf

       If KeyHit(CbKeyP) Then
            playing = Not playing
            pause = Not pause
        EndIf
                
        If pause Then
            StopSound musa
            Text 10,860,"Peli on tauolla, paina P jatkaaksesi"
        End If
        
        If Not pause Then

 
        If KeyDown(60) Then
        ShowMouse OFF
        EndIf
        
        If KeyDown (61) Then
        ShowMouse ON
        EndIf
        
        If SoundPlaying(musa)=0 Then
            musa = PlaySound ("SK_Battle2.mp3")
        EndIf
        
        Text 595,30,"Punaisen sotilaan lippaan panokset:"+ObjectInteger (pati)
        Text 595,10,"Punaisen sotilaan elämä:"+ObjectInteger (ukkeli)
        
        Color 0,255,0
        Text 0,30,"Vihreän sotilaan lippaan panokset:"+ObjectInteger (paukku)
        Text 0,10,"Vihreän sotilaan elämä:"+ObjectInteger (ukko)
        
            
            Color cbWhite
            Text 420,860,FPS()
            Color cbSilver
            Text 10,860,"Pelin toimintanopeus (ruudunpäivitystä sekunnissa):"
            Text 10,880,"Paina P laittaaksesi pelin tauolle ja H päästäksesi ohjeeseen"
            
            Color cbred
            Text 100,100,FPS()
            
            If KeyDown(cbKeyH) Then
                Execute "BattleGameOhje.html"
            EndIf
            
            If LeftKey() Then TurnObject ukko,4
            If RightKey() Then TurnObject ukko,-4
            If UpKey() Then MoveObject ukko,5
            If DownKey() Then MoveObject ukko,-5
            
            If KeyDown(cbKeyA) Then TurnObject ukkeli,4
            If KeyDown(cbKeyD) Then TurnObject ukkeli,-4
            If KeyDown(cbKeyW) Then MoveObject ukkeli,5
            If KeyDown(cbKeyS) Then MoveObject ukkeli,-5
            
            If ObjectX(ukko)<-430 Then PositionObject ukko,-430,ObjectY(ukko)
            If ObjectX(ukko)>430 Then PositionObject ukko,430,ObjectY(ukko)
            If ObjectY(ukko)<-430 Then PositionObject ukko,ObjectX(ukko),-430
            If ObjectY(ukko)>430 Then PositionObject ukko,ObjectX(ukko),430
            
            If ObjectX(ukkeli)<-430 Then PositionObject ukkeli,-430,ObjectY(ukkeli)
            If ObjectX(ukkeli)>430 Then PositionObject ukkeli,430,ObjectY(ukkeli)
            If ObjectY(ukkeli)<-430 Then PositionObject ukkeli,ObjectX(ukkeli),-430
            If ObjectY(ukkeli)>430 Then PositionObject ukkeli,ObjectX(ukkeli),430
            'VIHREÄ ukko


            If KeyDown(cbKeyM) And reload=0 Then
                ObjectInteger paukku,ObjectInteger (paukku) -1
                PlaySound "Machine Gun 1.wav",100
                luot.AMPU = New(AMPU)
                luot\amm=CloneObject(paukku)
                CloneObjectPosition luot\amm,ukko
                SetupCollision luot\amm,kartta,2,4,2
                CloneObjectOrientation luot\amm,ukko
                reload=5 'Luodin lataus nopeus
            EndIf
            If reload>0 Then reload=reload-1
            
        For luot.AMPU = Each AMPU
            MoveObject luot\amm,7 'Luodin lento nopeus
            If ObjectsOverlap (ukkeli,luot\amm) Then
                ObjectInteger ukkeli,ObjectInteger(ukkeli) -1'Luodin hittaus
                DeleteObject luot\amm
                Delete luot
        If GetMap( 2, x,y ) Then DeleteObject luot\amm : Delete luot
            EndIf
        Next luot   
            'Elämä 0
            If ObjectInteger (ukkeli) = 0 Then
                PlaySound "screm1.wav",100
                MakeError kam
                End
            EndIf
        EndIf
        
        If ObjectInteger (paukku) =0 Then
            reload=100
            ObjectInteger paukku,ObjectInteger (paukku) +100
            PlaySound "Pistol reload.wav",100
        EndIf
                

        'PUNAINEN ukkeli
        
        If KeyDown(cbKeyC) And reload=0 Then
            ObjectInteger pati,ObjectInteger (pati) -1
            PlaySound "Machine Gun 1.wav",100
            luoti.AMMUS = New(AMMUS)
            luoti\obj=CloneObject(pati)
            SetupCollision luoti\obj,kartta,2,4,2
            CloneObjectPosition luoti\obj,ukkeli
            CloneObjectOrientation luoti\obj,ukkeli
            reload=5 'Luodin lataus nopeus
        EndIf
        
        If reload>0 Then reload=reload-1
        
                For luoti.AMMUS = Each AMMUS
            MoveObject luoti\obj,7 'Luodin lento nopeus
            If ObjectsOverlap (ukko,luoti\obj) Then
                ObjectInteger ukko,ObjectInteger(ukko) -1'Luodin hittaus
                DeleteObject luoti\obj
                Delete luoti
         If GetMap( 2, x, y ) Then DeleteObject luoti\obj : Delete luoti 
          EndIf
        Next luoti
        
        If ObjectInteger (ukko) = 0 Then
            PlaySound "screm1.wav",100
            MakeError ykm
            End
        EndIf
        
        If ObjectInteger (pati) =0 Then
            reload=100
            ObjectInteger pati,ObjectInteger (pati) +100
            PlaySound "Pistol reload.wav",100
        EndIf
        
        
        DrawScreen
        
    Until EscapeKey()
legend
Advanced Member
Posts: 371
Joined: Wed Nov 18, 2009 8:06 pm

Re: Tyhmät kysymykset (I/2010)

Post by legend »

Löysinpäs virheen :D Kokeilleppa tota. Saat objectin sijainnin komennoilla ObjectX(), ObjectY().

Code: Select all

        For luoti.AMMUS = Each AMMUS
            MoveObject luoti\obj,7 'Luodin lento nopeus
            If ObjectsOverlap (ukko,luoti\obj) Then
                ObjectInteger ukko,ObjectInteger(ukko) -1'Luodin hittaus
                DeleteObject luoti\obj
                Delete luoti
            ElseIf GetMap( 2, ObjectX(luoti\obj), ObjectY(luoti\obj) ) Then
                DeleteObject luoti\obj
                Delete luoti 
            EndIf
        Next luoti
Poista (alempi koodin pätkä) kohta padin luomisesta, koska käyt tarkistuksen läpi GetMap:lla, eli et enään tarvitse tota.

Code: Select all

SetupCollision luot\amm,kartta,2,4,2
Vinkkejä virheen etsimiseen:
1. Suosittelen poistamaan yks riviset if-lauseet ja etenkin ":" käytön, koska noissa tekee helposti virheen.
2. Aja myös silloin tällöin sisentäjä ohjelma, koska se korjaa sisennys virheet. Sen jälkeen on helppo analysoida mitä taphtuu minä jälkeen ja miksi.
3. Jos ihmettelet miksi se ei nyt poista luotia kun se osuu seinään, kannattaa laittaa luotien poisto kohtaan makeerror "1". Sitten käynnistät pelin, jos error 1 tulee niin tiedät, että virhe on luodin poistamisessa, jos se ei tule virhe on if lauseessa tai kauempana.
4. Jos epäilet, että et osaa käyttää komentoa/funktiota suositelen painamaan sitä. Sen jälkeen katso esimerkki ja kokeile muuttaa sen parametrejä niin näet miten se käytännössä toimii.
User avatar
Peltsi
Active Member
Posts: 121
Joined: Thu Sep 30, 2010 12:16 pm

Re: Tyhmät kysymykset (I/2010)

Post by Peltsi »

legend wrote:Löysinpäs virheen :D Kokeilleppa tota. Saat objectin sijainnin komennoilla ObjectX(), ObjectY().

Code: Select all

        For luoti.AMMUS = Each AMMUS
            MoveObject luoti\obj,7 'Luodin lento nopeus
            If ObjectsOverlap (ukko,luoti\obj) Then
                ObjectInteger ukko,ObjectInteger(ukko) -1'Luodin hittaus
                DeleteObject luoti\obj
                Delete luoti
            ElseIf GetMap( 2, ObjectX(luoti\obj), ObjectY(luoti\obj) ) Then
                DeleteObject luoti\obj
                Delete luoti 
            EndIf
        Next luoti
Poista (alempi koodin pätkä) kohta padin luomisesta, koska käyt tarkistuksen läpi GetMap:lla, eli et enään tarvitse tota.

Code: Select all

SetupCollision luot\amm,kartta,2,4,2
Vinkkejä virheen etsimiseen:
1. Suosittelen poistamaan yks riviset if-lauseet ja etenkin ":" käytön, koska noissa tekee helposti virheen.
2. Aja myös silloin tällöin sisentäjä ohjelma, koska se korjaa sisennys virheet. Sen jälkeen on helppo analysoida mitä taphtuu minä jälkeen ja miksi.
3. Jos ihmettelet miksi se ei nyt poista luotia kun se osuu seinään, kannattaa laittaa luotien poisto kohtaan makeerror "1". Sitten käynnistät pelin, jos error 1 tulee niin tiedät, että virhe on luodin poistamisessa, jos se ei tule virhe on if lauseessa tai kauempana.
4. Jos epäilet, että et osaa käyttää komentoa/funktiota suositelen painamaan sitä. Sen jälkeen katso esimerkki ja kokeile muuttaa sen parametrejä niin näet miten se käytännössä toimii.
Kiitokset sulle Legend ja kaikille muille auttaneille (kuten Jonez)! Nyt luodit poistuvat kiltisti eivätkä jää seinille notkumaan :D ;) .
EDIT:

Teen uutta ohjelmaa ja jotakin CB:llä on minua vastaan, keksi heittää "Can't load map":ia... Kaikki tarvittavat tiedostot ovat CB:n Media kansiossa (ovat siis itse tekemiäni, siirsin ne sinne). Tässä koodi ohjelmasta, tuskin kuitenkaan auttaa mut vilkaskaa nyt kummiskin:

Code: Select all

FrameLimit 60

SCREEN 600,300

SetWindow "Find The Exit"

nuoli = LoadObject ("Media\nuoli.bmp",4)

kartta = LoadMap("Media\karttaw.til","Media\tile.bmp")

PositionObject ukko,100,100

Repeat

            If LeftKey() Then TurnObject nuoli,1
            If RightKey() Then TurnObject nuoli,-1
            If UpKey() Then MoveObject nuoli,5
            If DownKey() Then MoveObject nuoli,-5
            
DrawScreen
Until EscapeKey ()
[/edit]
lollero 1996

Re: Tyhmät kysymykset (I/2010)

Post by lollero 1996 »

Okei, eli pelin alakulmassa ois kartta, johon yritän nyt saada pisteen/ympyrän/nuolen hahmon kohdalle.

Apua?
lollero 1996

Re: Tyhmät kysymykset (I/2010)

Post by lollero 1996 »

Peltsi wrote:
EDIT:

Teen uutta ohjelmaa ja jotakin CB:llä on minua vastaan, keksi heittää "Can't load map":ia... Kaikki tarvittavat tiedostot ovat CB:n Media kansiossa (ovat siis itse tekemiäni, siirsin ne sinne). Tässä koodi ohjelmasta, tuskin kuitenkaan auttaa mut vilkaskaa nyt kummiskin:

Code: Select all

FrameLimit 60

SCREEN 600,300

SetWindow "Find The Exit"

nuoli = LoadObject ("Media\nuoli.bmp",4)

kartta = LoadMap("Media\karttaw.til","Media\tile.bmp")

PositionObject ukko,100,100

Repeat

            If LeftKey() Then TurnObject nuoli,1
            If RightKey() Then TurnObject nuoli,-1
            If UpKey() Then MoveObject nuoli,5
            If DownKey() Then MoveObject nuoli,-5
            
DrawScreen
Until EscapeKey ()
[/edit]
En kokeillu vielä, mutta varmaan väärä karttaeditori. Tilester saattaa pukata väärän version karttatiedostosta. On näet olemassa 2 karttatiedosto-versiota, ja Tilester voi joskus laittaa vanhemman. Koska Nyky-CB Käyttää uutta, erroria pukkaa. Eli kartta vaan uusiksi A Stigmatorilla. :lol:
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset (I/2010)

Post by koodaaja »

Joko kyse on karttaformaattiongelmasta kuten lollero sanoi (tosin ohjelmaa ei tarvitse vaihtaa, tilesterissä valitsee vain finaaliversioon sopivan formaatin), tai olet tallentanut lähdekoodin muualle kuin CB:n oletuskansioon. Myös tiedostonimet kannattaa tarkistaa vielä kerran vaikka olisit näin jo tehnyt ;)
lollero 1996

Re: Tyhmät kysymykset (I/2010)

Post by lollero 1996 »

Juu, toimii mulla.

P.S MAVittaa, laitoit PositionObject ukko, Se piti olla PositionObject nuoli
Locked