OngelmA

Voit pyytää apua ohjelmointiongelmiin täältä.
Post Reply
naabster
Member
Posts: 56
Joined: Sat Sep 22, 2007 10:10 am

OngelmA

Post by naabster »

miten voisin tehdä semmosii ampuvia botteja nopeammin kuin koko ajan näpytellä
vihu = LoadObject("Media\soldier2.bmp",72) vihu2=load....... ja CloneObjectPosition luoti\obj,vihu ja tommosia :?
kai te tajuutte mitä mä ajan takaa :mrgreen:

tälleen oon tehny tän projektin.

Code: Select all

SCREEN 640,480,16,cbfullscreen



FrameLimit 40 'rajoita nopeutta

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 obj 'yksi kenttä nimeltään 'obj'
End Type



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



kartta = LoadMap("Media\office.til","Media\tileset.bmp") 'lataa kartta
PlayObject kartta,0,0,1                                'animoi kartta
ObjectPickable kartta, ON 'aseta se poimittavaksi
DrawToWorld ON 'mahdollistaa piirtämisen maailmaan


pati=LoadObject("Media\bullet.bmp")                    'lataa "isäntäluoti"...
ShowObject pati,OFF                                    '...ja piilota se
ukko = LoadObject ("Media\soldier.bmp",72)                 'lataa peliukko
vihu = LoadObject ("Media\soldier2.bmp",72)      
vihu2 = LoadObject ("Media\soldier2.bmp",72)  
vanki = LoadObject ("Media\hostage.bmp",72)   
maali = LoadObject ("Media\maali.bmp")      'lataa vihu
x=LoadSound("Media\lazer 1.wav")
g=LoadSound("Media\scream1.wav")


PositionObject vihu2, -50,350
PositionObject vihu, 0,0                           'sijoita vihu
PositionObject ukko, 200, 890
PositionObject vanki, 0,0 
PositionObject maali, 200,890 
                          'sijoita ukko
SetupCollision ukko, kartta, 1, 4, 2                   'aseta ukko törmäämään seiniin
SetupCollision vihu, kartta, 1, 4, 2   
SetupCollision vihu2, kartta, 1, 4, 2   
  
SetupCollision vihu, ukko, 2,2,1  
SetupCollision vihu2, ukko, 2,2,1  
SetupCollision vanki, ukko, 2,2,1  
            'aseta vihu törmäämään seiniin

elämät      = 100
Vihunelämät = 50
Vihunelämät2 = 50




Repeat             
                                   


'Ukon ohjaus---------------------------------------------------------
    If LeftKey() Then TurnObject ukko,5
    If RightKey() Then TurnObject ukko,-5
    If UpKey() Then MoveObject ukko,3
    If DownKey() Then MoveObject ukko,-3
   
    UpdateGame                                               

    CloneCameraPosition ukko                          'kameraa seuraa ukkoa

        'ukon ammunta
    If KeyDown(cbKeyRControl) And reload=0 Then  
    PlaySound x, 50
        ukonluoti.ukonAMMUS = New(ukonAMMUS) 'luo uusi ammus
        ukonluoti\obj=CloneObject(pati) 'tee klooni
        'asetetaan pati samaan paikkaan
       
        CloneObjectPosition ukonluoti\obj,ukko               
        'käännetään pati samaan suuntaan
        CloneObjectOrientation ukonluoti\obj,ukko           
        TurnObject ukonluoti\obj, Rnd(-10, 10)
        reload=10'aseen lataus  
         If ammuttu2 >= 30 Then ammuttu2 = 0
        ammuttu2 + 1
        If ammuttu2 >= 30 Then reload = 100 Else  reload=5     
    EndIf
    'päivitä aseen lataaminen
    If reload>0 Then reload=reload-1

    'Päivitä kaikki ammukset
    For ukonluoti.ukonAMMUS = Each ukonAMMUS
        MoveObject ukonluoti\obj,6
           If ObjectsOverlap (ukonluoti\obj, vihu) Then 
           veri=LoadObject ("Media\veri.bmp")
            CloneObjectPosition veri,vihu'jos luoti on päällekkäin ukon kanssa...
            Vihunelämät -5
            
            DeleteObject ukonluoti\obj                             
            Delete ukonluoti             
           EndIf

    Next ukonluoti
   

   For ukonluoti.ukonAMMUS = Each ukonAMMUS
        
           If ObjectsOverlap (ukonluoti\obj, vihu2) Then 
           veri=LoadObject ("Media\veri.bmp")
            CloneObjectPosition veri,vihu2'jos luoti on päällekkäin ukon kanssa...
            Vihunelämät2 -5
            DeleteObject ukonluoti\obj                             
            Delete ukonluoti             
           EndIf

    Next ukonluoti



   
'Vihun toiminta------------------------------------------------------

If Distance2(ukko,vihu) < 150 Then MoveObject vihu,-1

      MoveObject vihu,2                                 'liikuta vihua
    If CountCollisions(vihu) Then TurnObject vihu, Rand (0,12) 'jos vihu törmää, etsi uusi suunta
   
    If CanSee(vihu, ukko, 90) Then PointObject vihu, ukko      'jos hahmo osuu vihun näkökenttään, käännä vihu ukkoa kohti...
    If CanSee(vihu, ukko, 90) And reload5=0 Then  
     PlaySound x, 50'...ja ammu ukkoa 
         luoti.AMMUS = New(AMMUS) 'luo uusi ammus
        luoti\obj=CloneObject(pati) 'tee klooni
        'asetetaan pati samaan paikkaan
        CloneObjectPosition luoti\obj,vihu               
        'käännetään pati samaan suuntaan
        CloneObjectOrientation luoti\obj,vihu           
         TurnObject luoti\obj, Rnd(-10, 10)
        reload5=10'aseen lataus  
         If ammuttu >= 30 Then ammuttu = 0
        ammuttu + 1
        If ammuttu >= 30 Then reload5 = 100 Else  reload5=5 
    EndIf
    'päivitä aseen lataaminen
    If reload5>0 Then reload5=reload5-1

    'Päivitä kaikki ammukset
    For luoti.AMMUS = Each AMMUS
        MoveObject luoti\obj,6                               'liikuta ammusta
           If ObjectsOverlap (luoti\obj, ukko) Then 
           PlaySound g,50
           veri2=LoadObject ("Media\veri2.bmp")
            CloneObjectPosition veri2,ukko  'jos luoti on päällekkäin ukon kanssa...
            elämät -5
            DeleteObject luoti\obj                             
            Delete luoti             
           EndIf     
    Next luoti       


For luoti.AMMUS = Each AMMUS
           
            If GetMap(2, ObjectX(luoti\obj), ObjectY(luoti\obj)) Then
                 'ammus osuu karttaan -> tuhoa se               
                DeleteObject luoti\obj 'poista objekti
                Delete luoti 'poista luoti kokonaan
            EndIf       
        Next luoti




    For ukonluoti.ukonAMMUS = Each ukonAMMUS
        
          If GetMap(2, ObjectX(ukonluoti\obj), ObjectY(ukonluoti\obj)) Then       'jos luoti on päällekkäin ukon kanssa...
          
            DeleteObject ukonluoti\obj                             
            Delete ukonluoti             
           EndIf

    Next ukonluoti
    
    
    
    
 If Distance2(ukko,vihu2) < 150 Then MoveObject vihu2,-1

      MoveObject vihu2,2                                 'liikuta vihua
    If CountCollisions(vihu2) Then TurnObject vihu2, Rand (0,12) 'jos vihu törmää, etsi uusi suunta
   
    If CanSee(vihu2, ukko, 90) Then PointObject vihu2, ukko      'jos hahmo osuu vihun näkökenttään, käännä vihu ukkoa kohti...
    If CanSee(vihu2, ukko, 90) And reload2=0 Then  
     PlaySound x, 50'...ja ammu ukkoa 
         luoti2.AMMUS2 = New(AMMUS2) 'luo uusi ammus
        luoti2\obj=CloneObject(pati) 'tee klooni
        'asetetaan pati samaan paikkaan
        CloneObjectPosition luoti2\obj,vihu2               
        'käännetään pati samaan suuntaan
        CloneObjectOrientation luoti2\obj,vihu2           
         TurnObject luoti2\obj, Rnd(-10, 10)
        reload2=10'aseen lataus  
         If ammuttu3 >= 30 Then ammuttu3 = 0
        ammuttu3 + 1
        If ammuttu3 >= 30 Then reload2 = 100 Else  reload2=5 
    EndIf
    'päivitä aseen lataaminen
    If reload2>0 Then reload2=reload2-1

    'Päivitä kaikki ammukset
    For luoti2.AMMUS2 = Each AMMUS2
        MoveObject luoti2\obj,6                               'liikuta ammusta
           If ObjectsOverlap (luoti2\obj, ukko) Then 
            PlaySound g,50
           veri2=LoadObject ("Media\veri2.bmp")
            CloneObjectPosition veri2,ukko  'jos luoti on päällekkäin ukon kanssa...
            elämät -5
            DeleteObject luoti2\obj                             
            Delete luoti2             
           EndIf     
    Next luoti2       


For luoti2.AMMUS2 = Each AMMUS2
           
            If GetMap(2, ObjectX(luoti2\obj), ObjectY(luoti2\obj)) Then
                 'ammus osuu karttaan -> tuhoa se               
                DeleteObject luoti2\obj 'poista objekti
                Delete luoti2 'poista luoti kokonaan
            EndIf       
        Next luoti2




    For ukonluoti.ukonAMMUS = Each ukonAMMUS
        
          If GetMap(2, ObjectX(ukonluoti\obj), ObjectY(ukonluoti\obj)) Then       'jos luoti on päällekkäin ukon kanssa...
          
            DeleteObject ukonluoti\obj                             
            Delete ukonluoti             
           EndIf

    Next ukonluoti   
    
    If Distance2(ukko,vanki) < 150 Then
    MoveObject vanki,2.5
    PointObject vanki,ukko
    EndIf 
    
    If ObjectsOverlap (vanki,maali) Then Goto väli



DrawGame

Text 0,0,"elämäsi: "+elämät



If vihunelämät < 0 Then PositionObject  vihu,10000,0
If vihunelämät2 < 0 Then PositionObject  vihu2,10000,0

If elämät=-0 Then MakeError "kuolit!"


         
     
    DrawScreen
Forever


'Tutkitaan missä kulmassa _obj2 on objektista _obj1 katsottuna
Function ObjectDirection(_obj1, _obj2)
    a# = GetAngle2(_obj1, _obj2) - ObjectAngle(_obj1)
    If a > 180 Then a = a - 360
    If a < -180 Then a = a + 360
    Return a
EndFunction

'Tutkitaan näkeekö ukon   
    Function CanSee(_obj1, _obj2, _fov)
'Ensin tarkistetaan että kakkonen on ykkösen näkökentässä
    If Abs(ObjectDirection(_obj1, _obj2)) > _fov Then Return False
'Tarkistetaan ettei ole seinää välissä
    Return ObjectSight(_obj1, _obj2)
EndFunction
User avatar
Ruuttu
Devoted Member
Posts: 688
Joined: Thu Aug 30, 2007 5:11 pm
Location: Finland, Sipoo

Re: OngelmA

Post by Ruuttu »

Ensinnäkään sinun ei tarvitse luoda jokaiselle botille omaa ammus-tyyppikokoelmaa. Kaikki ammuksethan ovat samanlaisia, liikkuvat samalla nopeudella ja näyttävät samalta. Jos viholliset ovat saman näköisiä, ei niitä tarvitse ladata joka kerta erikseen.

Tässä suuntaa-antava esimerkki jossa luodaan 10 bottia:

Code: Select all

Ukko = loadobject("Media\guy.bmp",72)

Type VIHOLLISET
   field obj
End Type

for i=1 to 10
   Uusivihu.VIHOLLISET = New (VIHOLLISET)
   Uusivihu\obj = Cloneobject(ukko)
   Positionobject Uusivihu\obj, kordinaatit(i,1),kordinaatit(i,2)
   Setupcollision Uusivihu\obj,kartta,1,4,2
next i
naabster
Member
Posts: 56
Joined: Sat Sep 22, 2007 10:10 am

Re: OngelmA

Post by naabster »

miten saisin yhdistettyy ton koodin tohon omaan koodiin, oon yrittäny monta kertaa mutta tuloksetta :oops:
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: OngelmA

Post by valscion »

naabster wrote:miten saisin yhdistettyy ton koodin tohon omaan koodiin, oon yrittäny monta kertaa mutta tuloksetta :oops:
Jos tuo ei kerran onnistu, niin suosittelisin kokeilemaan helpompia juttuja.
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
naabster
Member
Posts: 56
Joined: Sat Sep 22, 2007 10:10 am

Re: OngelmA

Post by naabster »

no oon saannu ton koodin kyllä omaani mutta kun painan f5 tulee can't find missing repeat.....
voisko joku sanoa mikä tossa mun koodissa on vikana 8-)
uskon että koodissani on aika paljon virheitä :mrgreen:

Code: Select all

Type VIHOLLISET
   field obj
End Type


FrameLimit 40 'rajoita nopeutta

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




kartta = LoadMap("Media\pankki.til","Media\tileset.bmp") 'lataa kartta
PlayObject kartta,0,0,1                                'animoi kartta
ObjectPickable kartta, ON 'aseta se poimittavaksi
DrawToWorld ON 'mahdollistaa piirtämisen maailmaan


pati=LoadObject("Media\bullet.bmp")                    'lataa "isäntäluoti"...
ShowObject pati,OFF                                    '...ja piilota se
ukko = LoadObject ("Media\soldier3.bmp",72)    


     'lataa vihu
x=LoadSound("Media\lazer 1.wav")
t=LoadSound("Media\lazer 2.wav")
g=LoadSound("Media\scream1.wav")

                       'sijoita vihu
PositionObject ukko, 150, 600
mama = loadobject("Media\guy.bmp",72)

                          'sijoita ukko
SetupCollision ukko, kartta, 1, 4, 2                   'aseta ukko törmäämään seiniin

  
  

            'aseta vihu törmäämään seiniin

elämät      = 120


Ukko = loadobject("Media\guy.bmp",72)

Repeat             
                                   

For i=1 to 10
   Uusivihu.VIHOLLISET = New (VIHOLLISET)
   Uusivihu\obj = CloneObject(mama)
   PositionObject Uusivihu\obj,Rand(44,55),Rand(44,55),Rand(44,55)
 If Distance2(ukko,Uusivihu\obj) < 150 Then MoveObject Uusivihu\obj,-1

      MoveObject Uusivihu\obj,1.3                                 'liikuta vihua
    If CountCollisions(Uusivihu\obj) Then TurnObject Uusivihu\obj, Rand (0,12) 'jos vihu törmää, etsi uusi suunta
   
    If CanSee(Uusivihu\obj, ukko, 90) Then PointObject Uusivihu\obj, ukko      'jos hahmo osuu vihun näkökenttään, käännä vihu ukkoa kohti...
    If CanSee(Uusivihu\obj, ukko, 90) And reload4=0 Then  
     PlaySound x, 50'...ja ammu ukkoa 
         luoti.AMMUS = New(AMMUS) 'luo uusi ammus
        luoti\obj=CloneObject(pati) 'tee klooni
        'asetetaan pati samaan paikkaan
        CloneObjectPosition luoti\obj,Uusivihu\obj               
        'käännetään pati samaan suuntaan
        CloneObjectOrientation luoti\obj,Uusivihu\obj          
         TurnObject luoti\obj, Rnd(-10, 10)
        reload4=10'aseen lataus  
         If ammuttu4 >= 30 Then ammuttu4 = 0
        ammuttu4 + 1
        If ammuttu4 >= 30 Then reload4 = 100 Else  reload4=5 
    EndIf
    'päivitä aseen lataaminen
    If reload4>0 Then reload4=reload4-1

    'Päivitä kaikki ammukset
    For luoti.AMMUS = Each AMMUS
        MoveObject luoti\obj,6                               'liikuta ammusta
           If ObjectsOverlap (luoti\obj, ukko) Then 
            PlaySound g,50
            MoveObject ukko,-1
           veri2=LoadObject ("Media\veri2.bmp")
            CloneObjectPosition veri2,ukko  'jos luoti on päällekkäin ukon kanssa...
            elämät -5
            DeleteObject luoti\obj                             
            Delete luoti             
           EndIf     
    Next luoti       


For luoti.AMMUS = Each AMMUS
           
            If GetMap(2, ObjectX(luoti\obj), ObjectY(luoti\obj)) Then
                 'ammus osuu karttaan -> tuhoa se               
                DeleteObject luoti\obj 'poista objekti
                Delete luoti 'poista luoti kokonaan
            EndIf       
        Next luoti


   SetupCollision Uusivihu\obj,kartta,1,4,2
   SetupCollision Uusivihu\obj,ukko,2,4,2
   
Next i


'Ukon ohjaus---------------------------------------------------------
    If LeftKey() Then TurnObject ukko,5
    If RightKey() Then TurnObject ukko,-5
    If UpKey() Then MoveObject ukko,3
    If DownKey() Then MoveObject ukko,-3
   
    UpdateGame                                               

    CloneCameraPosition ukko                         'kameraa seuraa ukkoa

        'ukon ammunta
    If KeyDown(cbKeyRControl) And reload=0 Then  
    PlaySound t, 50
        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           
        TurnObject luoti\obj, Rnd(-10, 10)
        reload=10'aseen lataus  
         If ammuttu2 >= 12 Then ammuttu2 = 0
        ammuttu2 + 1
        If ammuttu2 >= 12 Then reload = 100 Else  reload=3    
    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, Uusivihu\obj) Then 
           veri=LoadObject ("Media\veri.bmp")
            CloneObjectPosition veri,Uusivihu\obj'jos luoti on päällekkäin ukon kanssa...
            Vihunelämät -5
            
            DeleteObject luoti\obj                             
            Delete luoti             
           EndIf


    
    
    



Text 0,0,"elämäsi: "+elämät



If elämät=-0 Then MakeError "kuolit!"

DrawGame



     
     
    DrawScreen
Forever


'Tutkitaan missä kulmassa _obj2 on objektista _obj1 katsottuna
Function ObjectDirection(_obj1, _obj2)
    a# = GetAngle2(_obj1, _obj2) - ObjectAngle(_obj1)
    If a > 180 Then a = a - 360
    If a < -180 Then a = a + 360
    Return a
EndFunction

'Tutkitaan näkeekö ukon   
    Function CanSee(_obj1, _obj2, _fov)
'Ensin tarkistetaan että kakkonen on ykkösen näkökentässä
    If Abs(ObjectDirection(_obj1, _obj2)) > _fov Then Return False
'Tarkistetaan ettei ole seinää välissä
    Return ObjectSight(_obj1, _obj2)
EndFunction
Nemesis
Member
Posts: 51
Joined: Sat May 17, 2008 1:54 pm

Re: OngelmA

Post by Nemesis »

naabster wrote:no oon saannu ton koodin kyllä omaani mutta kun painan f5 tulee can't find missing repeat.....
voisko joku sanoa mikä tossa mun koodissa on vikana 8-)
uskon että koodissani on aika paljon virheitä :mrgreen:

Code: Select all

koodia...
Lisää riville 149: Next luoti.AMMUS
Asian tuntian oikein kirjoitus ohjeet:
-Älä tee yhdys sana virheitä.
-Vältä lyhenteitä mahd. muk.
-Yksi sanaiset lauseet? Unohda.
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: OngelmA

Post by Koodiapina »

Nemesis wrote:Lisää riville 149: Next luoti.AMMUS
Eikös pelkkä "Next luoti" riitä?
Post Reply