Tyhmät kysymykset (I/2009)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
Sami345
Advanced Member
Posts: 349
Joined: Fri Aug 31, 2007 4:52 pm
Contact:

Re: ammuksen osuma vihuun

Post by Sami345 »

koodari299 wrote:elikkä mulla olis sellainen tosi tyhmä kysymys, eli kun otan vaikka learning centeristä ton ammukset 2 ja lisään sinne vihollisen, niin mikä koodi pätkä siihen pitää pistää ,että ammus ei mene vaan läpi vaan esim. vihun hp vähenee.
ei ole toiminut countsollisiont ja objectsoverlapit. :?: :shock:
Tässä olis esimerkki Ammukkset 2 oppitunnista muokattuna. Tiedän, että olis 1001 tapaa toteuttaa tämä paremmin. Halusin vain tehdä sellaista koodia, että aloittejakin ymmärtää sen.

Code: Select all

'Esimerkki 18 : Ammukset (osa 2)
'================================================

'! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
'Aja tämä ohjelma painamalla F5.
'Lopeta ohjelma painamalla ESC.
'! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

Type AMMUS 'luo kokoelma, jonka nimi on AMMUS
    Field obj 'yksi kenttä nimeltään 'obj'
End Type 

FrameLimit 40 'rajoita nopeutta

ukko=LoadObject("Media\soldier.bmp",72)
vihu=LoadObject("Media\guy.bmp",72)
pati=LoadObject("Media\bullet.bmp")
ShowObject pati,OFF

PositionObject vihu,100,100
vihuhp=100

AddText "Nuolista ohjaa, CTRL=ampuu"

Repeat
    Color cbWhite
    Text 0,13,"Vihuhp: "+vihuhp //Tulostetaan vihun hp
    If vihuhp <= 0 Then MakeError "Vihu kuoli!" //Jos vihun hp on 0 tai pienempi tehdään virhe: Vihu kuoli!
    'Ohjaa ukkoa NUOLILLA
    If LeftKey() Then TurnObject ukko,5
    If RightKey() Then TurnObject ukko,-5
    If UpKey() Then MoveObject ukko,2
    If DownKey() Then MoveObject ukko,-2    

    'Ammu-systeemi. Vain, jos ase on ladattu
    If KeyDown(cbKeyRControl) And reload=0 Then    
        luoti.AMMUS = New(AMMUS) 'luo uusi ammus
        luoti\obj=CloneObject(pati) 'tee klooni
        'asetetaan pati samaan paikkaan
        CloneObjectPosition luoti\obj,ukko                
        'käännetään pati samaan suuntaan
        CloneObjectOrientation luoti\obj,ukko            
        reload=5 'aseen lataus        
    EndIf
    'päivitä aseen lataaminen
    If reload>0 Then reload=reload-1

    'Päivitä kaikki ammukset
    For luoti.AMMUS = Each AMMUS
        MoveObject luoti\obj,6
        If ObjectsOverlap(luoti\obj,vihu,3) Then //Jos luoti osuu vihuun...
            vihuhp = vihuhp - 10 //Vähennetään vihun hp:ta
            tuhoa = True //Asetetaan tuhoa todeksi
        EndIf
        If ObjectX(luoti\obj)<-180 Or ObjectX(luoti\obj)>180 Or ObjectY(luoti\obj)<-130 Or ObjectY(luoti\obj)>130 Then
            'ammus ylittää rajan -> tuhoa se                
            DeleteObject luoti\obj 'poista objekti
            Delete luoti 'poista luoti kokonaan
        EndIf        
        If tuhoa Then //Jos tuhoa on tosi..,
            DeleteObject luoti\obj 'poista objekti
            Delete luoti 'poista luoti kokonaan
            tuhoa = False //Asetetaan tuhoa epätodeksi
        EndIf
    Next luoti
    
    'tämä ennen muuta grafiikkaa (box)
    DrawGame

    'piirrä "kenttä"
    Color cbOrange
    Box 20,20,360,260,OFF    
    
    DrawScreen

Until EscapeKey()

'Analyysi:
'------------------------------------------------

'Noin. Esimerkki toimii samalla tavalla kuin
'edellinen oppitunti, mutta on puolet lyhyempi,
'ja luultavasti selkeämpi. Ohjaussysteemi ja
'luotien törmäys on edelleen sama, muuttunutta
'on vain tapa, jolla ammuksia hallitaan.

'Ohjelman alussa luomme KOKOELMAN, jonne voidaan
'lisätä ja josta voidaan poistaa jäseniä. Aina
'kun uusi jäsen luodaan, sille monistetaan FIELD-
'kentällä määritellyt omat muuttujansa. Jokainen
'jäsen on siis yksilö ja erillinen kokonaisuus.

'Kun ammutaan, rivillä 31 luodaan uusi jäsen.
'Sillä on yksi muuttuja, johon sijoitamme objektin.
'Loppu on helppoa.

'Riviltä 43 alkaen läpikäymme kaikki kokoelman
'luodit. Elossa/Kuollut-kikkailuja ei tarvita.
'Huomaa erikoinen FOR-rakenne. Siellä on nyt EACH,
'jonka jälkeen kirjoitetaan kokoelman nimi.

'Erikoisinta on se, että luoti-muuttujalla on
'erikoinen tyyppi. Sen perään kirjoitetaan .AMMUS
'Tämä kertoo CoolBasicille, että muuttuja kuuluu
'kokoelmaan ja että sen avulla viitataan kokoelman 
'jäseneen. Tyyppiä ei tarvitse määritellä kuin
'ensimmäisellä kerralla, sen jälkeen riittää 
'pelkkä "luoti". Selvennykseksi olen kuitenkin 
'kirjoittanut sen joka kerta kun sitä käytetään
'tavallaan "uuteen" tarkoitukseen.

'Tyypeistä (kokoelmista) tulee vielä paras ystäväsi.
'Opettele käyttämään niitä. Alkuhämmennyksen 
'jälkeen ne ovat paljon kätevämpiä kuin taulukot.

'Lisää tietoa tyypeistä löydät manuaalista ja
'tyyppikomentojen oppaista ja esimerkeistä.
EDIT:

Parantelin koodia

Last edited by Sami345 on Mon Aug 25, 2008 8:37 pm, edited 1 time in total.
Projektit: Fiperus - Jäädytetty pidemmäksi aikaa.
Voitot: Viikkokisa XIII, Pikapelikisa 3, Pikapelikisa 13
http://www.sami345.tk/
koodari299
Newcomer
Posts: 9
Joined: Mon Aug 25, 2008 2:39 pm

Re: Tyhmät kysymykset

Post by koodari299 »

Code: Select all

Type AMMUS 'luo kokoelma, jonka nimi on AMMUS
    Field obj 'yksi kenttä nimeltään 'obj'
End Type 
SCREEN 500,500,0
FrameLimit 40 'rajoita nopeutta

ukko=LoadObject("Media\soldier.bmp",72)
pati=LoadObject("Media\bullet.bmp")
ShowObject pati,OFF
vihu=LoadObject("media\ukkeli.bmp")
AddText "Nuolista ohjaa, CTRL=ampuu"
PositionObject vihu,200,200
Repeat

    'Ohjaa ukkoa NUOLILLA
    If LeftKey() Then TurnObject ukko,5
    If RightKey() Then TurnObject ukko,-5
    If UpKey() Then MoveObject ukko,2
    If DownKey() Then MoveObject ukko,-2    

    'Ammu-systeemi. Vain, jos ase on ladattu
    If KeyDown(cbKeyRControl) And reload=0 Then    
        luoti.AMMUS = New(AMMUS) 'luo uusi ammus
        luoti\obj=CloneObject(pati) 'tee klooni
        'asetetaan pati samaan paikkaan
        CloneObjectPosition luoti\obj,ukko                
        'käännetään pati samaan suuntaan
        CloneObjectOrientation luoti\obj,ukko            
        reload=5 'aseen lataus        
    EndIf
    'päivitä aseen lataaminen
    If reload>0 Then reload=reload-1

    'Päivitä kaikki ammukset
    For luoti.AMMUS = Each AMMUS
        MoveObject luoti\obj,6
        If ObjectX(luoti\obj)<-1000 Or ObjectX(luoti\obj)>1000 Or ObjectY(luoti\obj)<-1000 Or ObjectY(luoti\obj)>1000 Then
            'ammus ylittää rajan -> tuhoa se                
            DeleteObject luoti\obj 'poista objekti
            Delete luoti 'poista luoti kokonaan
        EndIf        
    Next luoti

    'tämä ennen muuta grafiikkaa (box)
    DrawGame


    DrawScreen

Until EscapeKey()
tuossa on.
User avatar
Ilkka
Active Member
Posts: 201
Joined: Mon Oct 08, 2007 8:01 am

Re: Tyhmät kysymykset

Post by Ilkka »

Code: Select all

Type AMMUS 'luo kokoelma, jonka nimi on AMMUS
    Field obj 'yksi kenttä nimeltään 'obj'
End Type 
SCREEN 500,500,0
FrameLimit 40 'rajoita nopeutta

ukko=LoadObject("Media\soldier.bmp",72)
pati=LoadObject("Media\bullet.bmp")
ShowObject pati,OFF
vihu=LoadObject("media\ukkeli.bmp")
AddText "Nuolista ohjaa, CTRL=ampuu"
PositionObject vihu,200,200

vihue=100
Repeat

    'Ohjaa ukkoa NUOLILLA
    If LeftKey() Then TurnObject ukko,5
    If RightKey() Then TurnObject ukko,-5
    If UpKey() Then MoveObject ukko,2
    If DownKey() Then MoveObject ukko,-2    

    'Ammu-systeemi. Vain, jos ase on ladattu
    If KeyDown(cbKeyRControl) And reload=0 Then    
        luoti.AMMUS = New(AMMUS) 'luo uusi ammus
        luoti\obj=CloneObject(pati) 'tee klooni
        'asetetaan pati samaan paikkaan
        CloneObjectPosition luoti\obj,ukko                
        'käännetään pati samaan suuntaan
        CloneObjectOrientation luoti\obj,ukko            
        reload=5 'aseen lataus        
    EndIf
    'päivitä aseen lataaminen
    If reload>0 Then reload=reload-1

    'Päivitä kaikki ammukset
    For luoti.AMMUS = Each AMMUS
        MoveObject luoti\obj,6
        If ObjectX(luoti\obj)<-1000 Or ObjectX(luoti\obj)>1000 Or ObjectY(luoti\obj)<-1000 Or ObjectY(luoti\obj)>1000 Then
            'ammus ylittää rajan -> tuhoa se                
            DeleteObject luoti\obj 'poista objekti
            Delete luoti 'poista luoti kokonaan
        EndIf        
        If ObjectsOverlap(luoti\obj,vihu) Then 
            DeleteObject luoti\obj
            Delete luoti 
            vihue-1
        EndIf 
    Next luoti



    'tämä ennen muuta grafiikkaa (box)
    DrawGame
    Text 10,10,"vihun elämä: "+vihue

    DrawScreen

Until EscapeKey()
siinä koodarille.. jostain syystä mav tulee kun menee vihun lähelle. sitä en tajunnu. en jaksanu kirjoittaa selityksiä koodin pätköihin...
Image
koodari299
Newcomer
Posts: 9
Joined: Mon Aug 25, 2008 2:39 pm

Re: Tyhmät kysymykset

Post by koodari299 »

juu. kiito, en oo ite tajunnu että pitää pistää toi \obj tuohon luodin perään
koodari299
Newcomer
Posts: 9
Joined: Mon Aug 25, 2008 2:39 pm

Re: Tyhmät kysymykset

Post by koodari299 »

Sori kun taas kyselen tyhmiä.
koodissani on kaksi vihua ja yksi ukko jolla pitää ampua vihut.
vihuun luoti osuu ja sen elämä pienenee, mutta vihu2:sta se menee vain läpi eikä elämä vähene.
tietääkö joku miksi näin tapahtuu. :?: :?:
kiitos.
tuossa koodi

Code: Select all

Type AMMUS 'luo kokoelma, jonka nimi on AMMUS
    Field obj 'yksi kenttä nimeltään 'obj'
End Type 
SCREEN 800,600,0
FrameLimit 40 'rajoita nopeutta

ukko=LoadObject("Media\soldier.bmp",72)
pati=LoadObject("Media\bullet.bmp")
ShowObject pati,OFF
vihu=LoadObject("media\ukkeli.bmp")
vihu2 = LoadObject("media/guy.bmp",360)
PositionObject vihu2,-200,-200

PositionObject vihu,200,200
vihue=100
vihu2e=100
Repeat

    'Ohjaa ukkoa NUOLILLA
    If LeftKey() Then TurnObject ukko,5
    If RightKey() Then TurnObject ukko,-5
    If UpKey() Then MoveObject ukko,2
    If DownKey() Then MoveObject ukko,-2    

    'Ammu-systeemi. Vain, jos ase on ladattu
    If KeyDown(cbKeyRControl) And reload=0 Then    
        luoti.AMMUS = New(AMMUS) 'luo uusi ammus
        luoti\obj=CloneObject(pati) 'tee klooni
        'asetetaan pati samaan paikkaan
        CloneObjectPosition luoti\obj,ukko                
        'käännetään pati samaan suuntaan
        CloneObjectOrientation luoti\obj,ukko            
        reload=15 'aseen lataus        
    EndIf
    'päivitä aseen lataaminen
    If reload>0 Then reload=reload-1

    'Päivitä kaikki ammukset
    For luoti.AMMUS = Each AMMUS
        MoveObject luoti\obj,6
        If ObjectX(luoti\obj)<-999999 Or ObjectX(luoti\obj)>999999 Or ObjectY(luoti\obj)<-999999 Or ObjectY(luoti\obj)>999999 Then
            'ammus ylittää rajan -> tuhoa se                
            DeleteObject luoti\obj 'poista objekti
            Delete luoti 'poista luoti kokonaan
        EndIf        
    

    If ObjectsOverlap(luoti\obj,vihu) Then 
            DeleteObject luoti\obj
            Delete luoti 
            vihue-5
            EndIf
            Goto luoti
        
   luoti: 
Next luoti



    'tämä ennen muuta grafiikkaa (box)
    DrawGame
    Text 10,10,"vihun elämä: "+vihue
    Text 10,25,"vihun2 elämä:"+vihu2e


   
    DrawScreen

Until EscapeKey()

Alligaattori
Active Member
Posts: 135
Joined: Fri Mar 07, 2008 8:49 pm

Re: Tyhmät kysymykset

Post by Alligaattori »

Olit laittanut luodin osuman tarkistuksen vain toiseen vihuun, vaikka se pitäisi laittaa kumpaankin.

Korjasin ko. kohdan:

Code: Select all

    Type AMMUS 'luo kokoelma, jonka nimi on AMMUS
        Field obj 'yksi kenttä nimeltään 'obj'
    End Type
    SCREEN 800,600,0
    FrameLimit 40 'rajoita nopeutta

    ukko=LoadObject("Media\soldier.bmp",72)
    pati=LoadObject("Media\bullet.bmp")
    ShowObject pati,OFF
    vihu=LoadObject("media\ukkeli.bmp")
    vihu2 = LoadObject("media/guy.bmp",360)
    PositionObject vihu2,-200,-200

    PositionObject vihu,200,200
    vihue=100
    vihu2e=100
    Repeat

        'Ohjaa ukkoa NUOLILLA
        If LeftKey() Then TurnObject ukko,5
        If RightKey() Then TurnObject ukko,-5
        If UpKey() Then MoveObject ukko,2
        If DownKey() Then MoveObject ukko,-2   

        'Ammu-systeemi. Vain, jos ase on ladattu
        If KeyDown(cbKeyRControl) And reload=0 Then   
            luoti.AMMUS = New(AMMUS) 'luo uusi ammus
            luoti\obj=CloneObject(pati) 'tee klooni
            'asetetaan pati samaan paikkaan
            CloneObjectPosition luoti\obj,ukko               
            'käännetään pati samaan suuntaan
            CloneObjectOrientation luoti\obj,ukko           
            reload=15 'aseen lataus       
        EndIf
        'päivitä aseen lataaminen
        If reload>0 Then reload=reload-1

        'Päivitä kaikki ammukset
        For luoti.AMMUS = Each AMMUS
            MoveObject luoti\obj,6
            If ObjectX(luoti\obj)<-999999 Or ObjectX(luoti\obj)>999999 Or ObjectY(luoti\obj)<-999999 Or ObjectY(luoti\obj)>999999 Then
                'ammus ylittää rajan -> tuhoa se               
                DeleteObject luoti\obj 'poista objekti
                Delete luoti 'poista luoti kokonaan
            EndIf       
       

        If ObjectsOverlap(luoti\obj,vihu) Then
                DeleteObject luoti\obj
                Delete luoti
                vihue-5
        EndIf
        
        If ObjectsOverlap(luoti\obj,vihu2) Then // TÄMÄ IF-LAUSE OLI JÄÄNYT LAITTAMATTA
                DeleteObject luoti\obj
                Delete luoti
                vihu2e-5
        EndIf

    Next luoti



        'tämä ennen muuta grafiikkaa (box)
        DrawGame
        Text 10,10,"vihun elämä: "+vihue
        Text 10,25,"vihun2 elämä:"+vihu2e


       
        DrawScreen

    Until EscapeKey()
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: Tyhmät kysymykset

Post by Koodiapina »

Korjattu koodi:

Code: Select all

Type AMMUS 'luo kokoelma, jonka nimi on AMMUS
    Field obj 'yksi kenttä nimeltään 'obj'
End Type
SCREEN 800,600,0
FrameLimit 40 'rajoita nopeutta

ukko=LoadObject("Media\soldier.bmp",72)
pati=LoadObject("Media\bullet.bmp")
ShowObject pati,OFF
vihu=LoadObject("media\ukkeli.bmp")
vihu2 = LoadObject("media/guy.bmp",360)
PositionObject vihu2,-200,-200

PositionObject vihu,200,200
vihue=100
vihu2e=100
Repeat

    'Ohjaa ukkoa NUOLILLA
    If LeftKey() Then TurnObject ukko,5
    If RightKey() Then TurnObject ukko,-5
    If UpKey() Then MoveObject ukko,2
    If DownKey() Then MoveObject ukko,-2   

    'Ammu-systeemi. Vain, jos ase on ladattu
    If KeyDown(cbKeyRControl) And reload=0 Then   
        luoti.AMMUS = New(AMMUS) 'luo uusi ammus
        luoti\obj=CloneObject(pati) 'tee klooni
        'asetetaan pati samaan paikkaan
        CloneObjectPosition luoti\obj,ukko               
        'käännetään pati samaan suuntaan
        CloneObjectOrientation luoti\obj,ukko           
        reload=15 'aseen lataus       
    EndIf
    'päivitä aseen lataaminen
    If reload>0 Then reload=reload-1

    'Päivitä kaikki ammukset
    For luoti.AMMUS = Each AMMUS
        MoveObject luoti\obj,6
        If ObjectX(luoti\obj)<-999999 Or ObjectX(luoti\obj)>999999 Or ObjectY(luoti\obj)<-999999 Or ObjectY(luoti\obj)>999999 Then
            'ammus ylittää rajan -> tuhoa se               
            DeleteObject luoti\obj 'poista objekti
            Delete luoti 'poista luoti kokonaan
        EndIf       
   

        If ObjectsOverlap(luoti\obj,vihu) Then
            DeleteObject luoti\obj
            Delete luoti
            vihue-5
            Goto luoti
        EndIf
        
        If ObjectsOverlap(luoti\obj,vihu2) Then
            DeleteObject luoti\obj
            Delete luoti
            vihu2e-5
            Goto luoti
        EndIf
        
    luoti:
    Next luoti

    'tämä ennen muuta grafiikkaa (box)
    DrawGame
    Text 10,10,"vihun elämä: "+vihue
    Text 10,25,"vihun2 elämä:"+vihu2e
   
    DrawScreen

Until EscapeKey()
EDIT: Myöhästyin :P
Sami345
Advanced Member
Posts: 349
Joined: Fri Aug 31, 2007 4:52 pm
Contact:

Re: Tyhmät kysymykset

Post by Sami345 »

Grandi wrote:Korjattu koodi:

Code: Select all

koodia...
EDIT: Myöhästyin :P
Tässäkin koodissa on se vika, että jos lause "If ObjectX(luoti\obj)<-999999 Or ObjectX(luoti\obj)>999999 Or ObjectY(luoti\obj)<-999999 Or ObjectY(luoti\obj)>999999 Then" toteutuu, syntyy mavi. Tämä johtuu siitä, että sen jäkeen tarkistetaan vielä luodin törmäyksiä vihuihin. Lisäksi luoti voidaan poistaa paljon aikaisemmin, mitä koodissa on määritelty.

Code: Select all

Type AMMUS 'luo kokoelma, jonka nimi on AMMUS
    Field obj 'yksi kenttä nimeltään 'obj'
End Type
SCREEN 800,600,0
FrameLimit 40 'rajoita nopeutta

ukko=LoadObject("Media\soldier.bmp",72)
pati=LoadObject("Media\bullet.bmp")
ShowObject pati,OFF
vihu=LoadObject("media\ukkeli.bmp")
vihu2 = LoadObject("media/guy.bmp",360)
PositionObject vihu2,-200,-200

PositionObject vihu,200,200
vihue=100
vihu2e=100
Repeat

    'Ohjaa ukkoa NUOLILLA
    If LeftKey() Then TurnObject ukko,5
    If RightKey() Then TurnObject ukko,-5
    If UpKey() Then MoveObject ukko,2
    If DownKey() Then MoveObject ukko,-2   

    'Ammu-systeemi. Vain, jos ase on ladattu
    If KeyDown(cbKeyRControl) And reload=0 Then   
        luoti.AMMUS = New(AMMUS) 'luo uusi ammus
        luoti\obj=CloneObject(pati) 'tee klooni
        'asetetaan pati samaan paikkaan
        CloneObjectPosition luoti\obj,ukko               
        'käännetään pati samaan suuntaan
        CloneObjectOrientation luoti\obj,ukko           
        reload=15 'aseen lataus       
    EndIf
    'päivitä aseen lataaminen
    If reload>0 Then reload=reload-1

    'Päivitä kaikki ammukset
    For luoti.AMMUS = Each AMMUS
        MoveObject luoti\obj,6
        If ObjectX(luoti\obj)<0 Or ObjectX(luoti\obj)>800 Or ObjectY(luoti\obj)<0 Or ObjectY(luoti\obj)>600 Then
            'ammus ylittää rajan -> tuhoa se               
            DeleteObject luoti\obj 'poista objekti
            Delete luoti 'poista luoti kokonaan
            Goto luoti
        EndIf       
   

        If ObjectsOverlap(luoti\obj,vihu) Then
            DeleteObject luoti\obj
            Delete luoti
            vihue-5
            Goto luoti
        EndIf
        
        If ObjectsOverlap(luoti\obj,vihu2) Then
            DeleteObject luoti\obj
            Delete luoti
            vihu2e-5
            Goto luoti
        EndIf
        
    luoti:
    Next luoti

    'tämä ennen muuta grafiikkaa (box)
    DrawGame
    Text 10,10,"vihun elämä: "+vihue
    Text 10,25,"vihun2 elämä:"+vihu2e
   
    DrawScreen

Until EscapeKey()
Projektit: Fiperus - Jäädytetty pidemmäksi aikaa.
Voitot: Viikkokisa XIII, Pikapelikisa 3, Pikapelikisa 13
http://www.sami345.tk/
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset

Post by valscion »

Sami345 wrote:
Grandi wrote:Korjattu koodi:

Code: Select all

koodia...
EDIT: Myöhästyin :P
Tässäkin koodissa on se vika, että jos lause "If ObjectX(luoti\obj)<-999999 Or ObjectX(luoti\obj)>999999 Or ObjectY(luoti\obj)<-999999 Or ObjectY(luoti\obj)>999999 Then" toteutuu, syntyy mavi. Tämä johtuu siitä, että sen jäkeen tarkistetaan vielä luodin törmäyksiä vihuihin. Lisäksi luoti voidaan poistaa paljon aikaisemmin, mitä koodissa on määritelty.

Code: Select all

...goto purkkaista koodia...
Huomasit kyllä asian pointin mutta elä käytä goto-komentoa loopissa, se vaan sekoittaa koodia. Käytä mielummin jotain vähemmän purkkaista tapaa, esim. tarkistat luodin rajan ylityksen vasta ihan loopin lopussa.
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
Eräs Vierailija

Re: Tyhmät kysymykset

Post by Eräs Vierailija »

Kuinka saisi Inputilla laitetusta tekstistä poimittua tietyn pätkän? Tarvitsisin tätä, kun ajattelin väkertää ohjelman jonka kanssa keskustella :D
MAVmaggot
Advanced Member
Posts: 468
Joined: Fri Aug 31, 2007 10:18 pm
Location: bitspace

Re: Tyhmät kysymykset

Post by MAVmaggot »

Tutustu manuualin "merkkijonot"-kohtaan. Sieltä löydät monia tapoja poimia merkkijonosta osia. Ja chatti ohjelman tekeminen coolbasicilla ei ole paras ajatus, koska cb ei tue mitään nettijuttuja, mutta marcoderin tekemällä cbNetwork-systeemillä saa jotain aikaiseksi, tosin se ei sovi vasta-alkajille.
EDIT:

oho, luin väärin :D atomim: kyllä tuossa todennäköisesti tarvitsee muutakin kuin getwordia, esim jos halutaan tietää ensimmäinen sana(left)

Last edited by MAVmaggot on Fri Aug 29, 2008 8:04 pm, edited 1 time in total.
atomimalli
Moderator
Moderator
Posts: 227
Joined: Wed Aug 29, 2007 3:55 pm

Re: Tyhmät kysymykset

Post by atomimalli »

Kyse on tekoälystä eikä nettichatista.

Getword lienee sopivin vaihtoehto tähän tapaukseen.
koodari299
Newcomer
Posts: 9
Joined: Mon Aug 25, 2008 2:39 pm

Re: Tyhmät kysymykset

Post by koodari299 »

taas minulla olisi taas teille viisaille tyhmä kysymys.
miten saan objectin "kuvan" vaihtumaan esim. luodin osuessa jaa verijälki,tai hp:n loppuessa tulee tilalle luuranko.. :?:
Alligaattori
Active Member
Posts: 135
Joined: Fri Mar 07, 2008 8:49 pm

Re: Tyhmät kysymykset

Post by Alligaattori »

Näin:

Code: Select all

PaintObject objekti,-kuva ' kuva on ladattu aiemmin LoadImage-funktiolla
Pate5
Artist
Artist
Posts: 551
Joined: Tue Aug 28, 2007 4:53 pm
Location: Vantaa

Re: Tyhmät kysymykset

Post by Pate5 »

koodari299 wrote:taas minulla olisi taas teille viisaille tyhmä kysymys.
miten saan objectin "kuvan" vaihtumaan esim. luodin osuessa jaa verijälki,tai hp:n loppuessa tulee tilalle luuranko.. :?:
Tai sitten näin:

objekti=CloneObject(objekti2)
CoolBasic henkilökuntaa
Graafikko
koodari299
Newcomer
Posts: 9
Joined: Mon Aug 25, 2008 2:39 pm

Re: Tyhmät kysymykset

Post by koodari299 »

minkäs takia kun tuon tekee ja botti kuolee niin fps laskee yhteen?? teinkö jotain väärin??
Alligaattori
Active Member
Posts: 135
Joined: Fri Mar 07, 2008 8:49 pm

Re: Tyhmät kysymykset

Post by Alligaattori »

Kristallipalloni on juuri nyt rikki, joten en osaa kertoa, mikä on vikana. Lähetä koodi tänne niin katson sitä.
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: Tyhmät kysymykset

Post by Koodiapina »

Veikkaisin, että syynä on se jos kloonaat tuota objektia luupissa. Silloin FPS laskee, koska cloneobjectkin on melko raskas funktio.

EDIT: Typo.
koodari299
Newcomer
Posts: 9
Joined: Mon Aug 25, 2008 2:39 pm

Re: Tyhmät kysymykset

Post by koodari299 »

tuossa on. VAROITUS! koodi on todella kökköä

Code: Select all

Type AMMUS 'luo kokoelma, jonka nimi on AMMUS
    Field obj 'yksi kenttä nimeltään 'obj'
End Type
Type AMMUS2 'luo kokoelma, jonka nimi on AMMUS
    Field obj2 'yksi kenttä nimeltään 'obj2'
End Type
SCREEN 1024,768,0,cbfullscreen
SetWindow "testi räiskintä"
FrameLimit 40 'rajoita nopeutta
kartta = LoadMap("Media\3zombi.til","Media\tileset.bmp")
PlayObject kartta,0,0,1
ukko=LoadObject("Media\soldier.bmp",360)
ukko2=LoadObject("media\soldier2.bmp",360)
pati=LoadObject("Media\bullet.bmp")
ShowObject pati,OFF
vihu=LoadObject("media\ukkeli.bmp",360)
vihu2 = LoadObject("media\guy.bmp",360)
veri=LoadImage("media\veri1.bmp")
PositionObject vihu2,-150,-150
PositionObject vihu,200,200
PositionObject ukko,0,100
PositionObject ukko2,-50,100
vihue=100
vihu2e=100
ukkoe=100
ukko2e=100


Repeat
SetupCollision ukko,kartta,1,4,2
SetupCollision ukko2,kartta,1,4,2
SetupCollision vihu,kartta,1,4,2
SetupCollision vihu2,kartta,1,4,2
SetupCollision ukko,ukko2,2,2,2
SetupCollision ukko,vihu,2,2,2
SetupCollision ukko,vihu2,2,2,2
SetupCollision ukko2,ukko,2,2,2
SetupCollision ukko2,vihu,2,2,2
SetupCollision ukko2,vihu2,2,2,2

SetupCollision vihu,ukko2,2,2,2
SetupCollision vihu,vihu2,2,2,2
SetupCollision vihu2,ukko,2,2,2
SetupCollision vihu2,ukko2,2,2,2
SetupCollision vihu2,vihu,2,2,2

CloneCameraPosition ukko
    'Ohjaa ukkoa NUOLILLA
    If LeftKey() Then TurnObject ukko,5
    If RightKey() Then TurnObject ukko,-5
    If UpKey() Then MoveObject ukko,3.5
    If DownKey() Then MoveObject ukko,-3.5  
    
    If KeyDown(cbkeya) Then TurnObject ukko2,5
    If KeyDown(cbkeyd) Then TurnObject ukko2,-5
    If KeyDown(cbkeyw) Then MoveObject ukko2,3.5
    If KeyDown(cbkeys) Then MoveObject ukko2,-3.5  

    'Ammu-systeemi. Vain, jos ase on ladattu
    If KeyDown(cbKeyRControl) And reload=0 Then   
        luoti.AMMUS = New(AMMUS) 'luo uusi ammus
        luoti\obj=CloneObject(pati) 'tee klooni
        'asetetaan pati samaan paikkaan
        CloneObjectPosition luoti\obj,ukko               
        'käännetään pati samaan suuntaan
        CloneObjectOrientation luoti\obj,ukko           
        reload=15 'aseen lataus       
    EndIf
    'päivitä aseen lataaminen
    If reload>0 Then reload=reload-1

    'Päivitä kaikki ammukset
    For luoti.AMMUS = Each AMMUS
        MoveObject luoti\obj,6
        If ObjectX(luoti\obj)<-800 Or ObjectX(luoti\obj)>800 Or ObjectY(luoti\obj)<-600 Or ObjectY(luoti\obj)>600 Then
            'ammus ylittää rajan -> tuhoa se               
            DeleteObject luoti\obj 'poista objekti
            Delete luoti 'poista luoti kokonaan
            Goto luoti
        EndIf       
   

        If ObjectsOverlap(luoti\obj,vihu) Then
            DeleteObject luoti\obj
            Delete luoti
            vihue-5
            Goto luoti
        EndIf
        
        If ObjectsOverlap(luoti\obj,vihu2) Then
            DeleteObject luoti\obj
            Delete luoti
            vihu2e-5
            Goto luoti
        EndIf
    
    luoti:
    Next luoti  //tämä on piti pistä tähän muuten ei toimi kun sanoo jotain next komennosta
    If vihue=0 Then
   ShowObject vihu,OFF
    EndIf
    If vihu2e=0 Then
    ShowObject vihu2,OFF
    EndIf
    'Ammu-systeemi. Vain, jos ase on ladattu
    If KeyDown(cbKeyz) And reload=0 Then   
        luoti2.AMMUS2 = New(AMMUS2) 'luo uusi ammus
        luoti2\obj2=CloneObject(pati) 'tee klooni
        'asetetaan pati samaan paikkaan
        CloneObjectPosition luoti2\obj2,ukko2               
        'käännetään pati samaan suuntaan
        CloneObjectOrientation luoti2\obj2,ukko2           
        reload=15 'aseen lataus       
    EndIf
    'päivitä aseen lataaminen
    If reload>0 Then reload=reload-1

    'Päivitä kaikki ammukset
    For luoti2.AMMUS2 = Each AMMUS2
        MoveObject luoti2\obj2,6
        If ObjectX(luoti2\obj2)<-800 Or ObjectX(luoti2\obj2)>800 Or ObjectY(luoti2\obj2)<-600 Or ObjectY(luoti2\obj2)>600 Then
            'ammus ylittää rajan -> tuhoa se               
            DeleteObject luoti2\obj2 'poista objekti
            Delete luoti2 'poista luoti kokonaan
           
        EndIf       

     
        
         If ObjectsOverlap(luoti2\obj2,vihu) Then
            DeleteObject luoti2\obj2
            Delete luoti2
            vihue-5
         Goto luoti2
        EndIf
      
        If ObjectsOverlap(luoti2\obj2,vihu2) Then
            DeleteObject luoti2\obj2
            Delete luoti2
            Goto luoti2
            vihu2e-5
        EndIf
luoti2
Next luoti2  //tämä on piti pistä tähän muuten ei toimi kun sanoo jotain next komennosta




If Distance2(ukko,vihu)<200 Then
PointObject vihu,ukko
MoveObject vihu,2
EndIf

If Distance2(ukko,vihu2)<200 Then
PointObject vihu2,ukko
MoveObject vihu2,2
EndIf
If Distance2(ukko2,vihu)<200 Then
PointObject vihu,ukko2
MoveObject vihu,2
EndIf

If Distance2(ukko2,vihu2)<200 Then
PointObject vihu2,ukko2
MoveObject vihu2,2
EndIf

    'tämä ennen muuta grafiikkaa (box)
    DrawGame
     If vihue=<0 Then
  PaintObject vihu,-veri ' kuva on ladattu aiemmin LoadImage-funktiolla
    EndIf
     If vihu2e=<0 Then
  PaintObject vihu2,-veri ' kuva on ladattu aiemmin LoadImage-funktiolla
    EndIf
    Text 10,10,"vihun elämä: "+vihue
    Text 10,50,"vihun2 elämä:"+vihu2e
    Text 160,10,"vihreän ukon hp:"+ukkoe
    Text 450,10,FPS() 'print the current FPS
  Color cbred

 

   Box 10,25, vihue, 10 'energiapalkki
   Box 10,65, vihu2e,10
   
    DrawScreen

Until EscapeKey()
edit:koodi unohtui
Last edited by koodari299 on Sat Aug 30, 2008 8:06 am, edited 1 time in total.
Alligaattori
Active Member
Posts: 135
Joined: Fri Mar 07, 2008 8:49 pm

Re: Tyhmät kysymykset

Post by Alligaattori »

Ainoa suoritusta merkittävästi hidastava tekijä lienee SetupCollisionit pääsilmukan alussa. Siirrä ne repeatin yläpuolelle ja kerro, tuliko se nopeammaksi.

Edit: Ei nopeutunut paljoa. En keksi, mikä muu peliä voisi hidastaa, kokeilen selvittää sen ajan kanssa.
Locked