Tyhmät kysymykset (I/2009)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
jack-ass

Re: Tyhmät kysymykset

Post by jack-ass »

En tajua pätkästä vielä paljon mitään...

Code: Select all

    If uus=0 Then
        v.VIHU = New (VIHU)
        v\obj = CloneObject (mvihu)
        uus = 25

Function SpawnObject(_obj)
    // Loopataan niin kauan että sopiva paikka kartalta löytyy.
    While True
        // Ensin arvotaan x ja y.
        x = Rand(1, MapWidth())
        y = Rand(1, MapHeight())
       
        // Tutkitaan back- ja hit-kerosten tilet arvotusta paikasta.
        tBack = GetMap2(0, x, y)
        tHit = GetMap2(2, x, y)
        // back-kerroksessa pitää olla jotain mutta hit-kerroksessa ei saa olla mitään.
        If tBack > 0 And tHit = 0 Then
            // Jos ehto täyttyi niin sijoitetaan objekti kartalle
            ObjectToMap(_obj, x, y)
            // Sopiva paikka löytyi joten homma on sillä selvä ja voidaan poistua.
            Exit
         EndIf
    Wend
EndFunction
Alligaattori
Active Member
Posts: 135
Joined: Fri Mar 07, 2008 8:49 pm

Re: Tyhmät kysymykset

Post by Alligaattori »

Nyt täytyy vielä komentaa SpawnObject(v\obj).
jack-ass

Re: Tyhmät kysymykset

Post by jack-ass »

custom type not denified for idenfier "v\obj
Alligaattori
Active Member
Posts: 135
Joined: Fri Mar 07, 2008 8:49 pm

Re: Tyhmät kysymykset

Post by Alligaattori »

Tuo kai tarkoittaa, että tyyppin VIHU ei ole tehty OBJ-nimistä kenttää. Teepä se.
jack-ass

Re: Tyhmät kysymykset

Post by jack-ass »

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

Re: Tyhmät kysymykset

Post by Alligaattori »

Lähetä tänne se koodi, jotta voin katsoa viat. Muuten luokittelen sinut trolliksi ja lopetan auttamisesi. :x
jack-ass

Re: Tyhmät kysymykset

Post by jack-ass »

Code: Select all

Type VIHU
    Field obj
    Field health
End Type

mvihu=LoadObject("Media\zombi.bmp",360)
ShowObject mvihu,OFF

uus = 25

repeat

    If uus=0 Then
        v.VIHU = New (VIHU)
        v\obj = CloneObject (mvihu)
        uus = 25
        v\health = 2
        SetupCollision v\obj,kartta,1,4,2
        SetupCollision kartta,v\obj,1,4,2

Function SpawnObject(v\obj)
    // Loopataan niin kauan että sopiva paikka kartalta löytyy.
    While True
        // Ensin arvotaan x ja y.
        x = Rand(1, MapWidth())
        y = Rand(1, MapHeight())
       
        // Tutkitaan back- ja hit-kerosten tilet arvotusta paikasta.
        tBack = GetMap2(0, x, y)
        tHit = GetMap2(2, x, y)
        // back-kerroksessa pitää olla jotain mutta hit-kerroksessa ei saa olla mitään.
        If tBack > 0 And tHit = 0 Then
            // Jos ehto täyttyi niin sijoitetaan objekti kartalle
            ObjectToMap(_obj, x, y)
            // Sopiva paikka löytyi joten homma on sillä selvä ja voidaan poistua.
            Exit
         EndIf
    Wend
EndFunction
        
    For v.VIHU = Each VIHU
    vv.vihu = First(vihu)
    vv = After(v)
    While vv<>NULL
        SetupCollision vv\obj,v\obj,2,2,2
        SetupCollision v\obj,vv\obj,2,2,2
        vv = After(vv)
    Wend    
   
   Next v   
  EndIf

    uus = uus-1  

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

Re: Tyhmät kysymykset

Post by Alligaattori »

Ota tuo SpawnObject-funktio kokonaan pois ja sisällytä sdk:n koodipätkä CbMap.cb include-komennolla koodin alkuun. Sitten pitäisi toimia.
jack-ass

Re: Tyhmät kysymykset

Post by jack-ass »

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

Re: Tyhmät kysymykset

Post by Alligaattori »

Todennäköisesti CBSDK löytyy koneeltasi C:\Program Files\Coolbasic -kansiosta. Jos näin on, kirjoita koodin alkuun Include "C:\Program Files\CoolBasic\SDK\INCLUDE\cbMap.cb" ja pitäisi toimia. Jos oletkin asentanut sen d-asemaan, vaihda alkuun C:n tilalle D.
jack-ass

Re: Tyhmät kysymykset

Post by jack-ass »

ok, nyt toimii. thanks
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: Tyhmät kysymykset

Post by Koodiapina »

Ehkä kannattais kuitenkin kopioida se filu pelin kansioon. Ainakin mun mielestä selkeempi ratkaisu.
jack-ass

Re: Tyhmät kysymykset

Post by jack-ass »

nyt jäi vielä yksi selvittämättä...
miten saan nyt vaihdettua paikkaa johon vihut tulee? (laatikkoon koordinaateista esim 100-200,100-200)
jack-ass

Re: Tyhmät kysymykset

Post by jack-ass »

ainiin, muutan sitä ladattua filua...pahoittelut hidasälyisyyttäni!
jack-ass

Re: Tyhmät kysymykset

Post by jack-ass »

ööh...minä taas...mitä kohtaa muutan, kun haluan vihut spawnaamaan eri kohdalle kartalla?

Code: Select all

Function SpawnObject(_obj)
    // Loopataan niin kauan että sopiva paikka kartalta löytyy.
    While True
        // Ensin arvotaan x ja y.
        x = Rand(1, MapWidth())
        y = Rand(1, MapHeight())
        
        // Tutkitaan back- ja hit-kerosten tilet arvotusta paikasta.
        tBack = GetMap2(MAP_BACK, x, y)
        tHit = GetMap2(MAP_HIT, x, y)
        // back-kerroksessa pitää olla jotain mutta hit-kerroksessa ei saa olla mitään.
        If tBack > 0 And tHit = 0 Then
            // Jos ehto täyttyi niin sijoitetaan objekti kartalle
            ObjectToMap(_obj, x, y)
            // Sopiva paikka löytyi joten homma on sillä selvä ja voidaan poistua.
            Exit
         EndIf
    Wend
EndFunction
pahoittelut "douplepostauksesta", mutten voi editoida vanhoja, koska en ole(vielä) rekisteröitynyt
User avatar
KillBurn
Advanced Member
Posts: 339
Joined: Wed Aug 29, 2007 5:02 pm

Re: Tyhmät kysymykset

Post by KillBurn »

jack-ass wrote:ööh...minä taas...mitä kohtaa muutan, kun haluan vihut spawnaamaan eri kohdalle kartalla?

Code: Select all

Function SpawnObject(_obj)
    // Loopataan niin kauan että sopiva paikka kartalta löytyy.
    While True
        // Ensin arvotaan x ja y.
        x = Rand(1, MapWidth())
        y = Rand(1, MapHeight())
        
        // Tutkitaan back- ja hit-kerosten tilet arvotusta paikasta.
        tBack = GetMap2(MAP_BACK, x, y)
        tHit = GetMap2(MAP_HIT, x, y)
        // back-kerroksessa pitää olla jotain mutta hit-kerroksessa ei saa olla mitään.
        If tBack > 0 And tHit = 0 Then
            // Jos ehto täyttyi niin sijoitetaan objekti kartalle
            ObjectToMap(_obj, x, y)
            // Sopiva paikka löytyi joten homma on sillä selvä ja voidaan poistua.
            Exit
         EndIf
    Wend
EndFunction
pahoittelut "douplepostauksesta", mutten voi editoida vanhoja, koska en ole(vielä) rekisteröitynyt
Kannattaa yrittää jotain toista konstia saada ne viholliset kentälle kun tuota,et taida ymmärtää sitä.

Tein räiskintäpelipohjan siinä on kerrottu mm. miten vihollinen arvotaan randomisti kentälle.tossa linkki, katso ja opi.
viewtopic.php?f=12&p=15794#p15794
Sumu Games: Sam, Ur eye!
NoobisCBCoder

Re: Tyhmät kysymykset

Post by NoobisCBCoder »

miten voi tehdä suht-sujuvan aseenvaihdon? (niin ettei toisella aseella voi ampua samaan aikaan)

oma koodi toimii sujuvasti, mutta vain kahdella aseella. miten tästä jatkaisi?

Code: Select all

SCREEN 1000,800

FrameLimit 50

ukko = LoadObject("media\soldier.bmp",360)

Type AMMUS
    Field obj
    Field id
End Type

mAmmus = LoadObject("Media\bullet.bmp")
ShowObject mAmmus,OFF

panokset1=12
panokset2=30
panokset3=100

ASE=0

repeat

If MouseHit(2) Then ASE = Not ASE

'pistooli
If MouseDown(1) And reload=0 Then
    Select ASE
      Case 0
        If panokset1>0 Then
            panokset1-1
            luoti.AMMUS = New(AMMUS)
            luoti\id=0
            luoti\obj=CloneObject(mammus)     
            CloneObjectPosition luoti\obj,ukko
            CloneObjectOrientation luoti\obj,ukko
            ResetObjectCollision luoti\obj
            MoveObject luoti\obj,5,-3
            TurnObject luoti\obj,Rand(3,-3)
            reload=20
        Else
            reload=50
            If Timer()>lataus+300 Then
                valmis=Not valmis
                lataus=Timer()
            EndIf
            If valmis Then
                panokset1=12  
            EndIf     
        EndIf
       'rynnäkkökivääri
      Case 1
        If panokset2>0 Then
            panokset2-1
            luoti.AMMUS = New(AMMUS)
            luoti\id=1
            luoti\obj=CloneObject(mammus)     
            CloneObjectPosition luoti\obj,ukko               
            CloneObjectOrientation luoti\obj,ukko
            ResetObjectCollision luoti\obj
            MoveObject luoti\obj,3,0
            TurnObject luoti\obj,Rand(5,-5)
            reload=8
        Else
            reload=40
            If Timer()>lataus+500 Then
                valmis=Not valmis
                lataus=Timer()
            EndIf
            If valmis Then
                panokset2=30   
            EndIf     
        EndIf
      'konekivääri
      Case 2
        If panokset3>0 Then
            panokset3-1
            luoti.AMMUS = New(AMMUS)
            luoti\id=1
            luoti\obj=CloneObject(mammus)     
            CloneObjectPosition luoti\obj,ukko               
            CloneObjectOrientation luoti\obj,ukko
            ResetObjectCollision luoti\obj
            MoveObject luoti\obj,3,0
            TurnObject luoti\obj,Rand(8,-8)
            reload=2
        Else
            reload=40
            If Timer()>lataus+800 Then
                valmis=Not valmis
                lataus=Timer()
            EndIf
            If valmis Then
                panokset2=100   
            EndIf     
        EndIf
      EndSelect   
    EndIf

If reload>0 Then reload=reload-1

    For luoti.AMMUS = Each AMMUS
        Select luoti\id
        
          Case 0
            MoveObject luoti\obj,8
            If Distance2(luoti\obj,ukko)>200 Then           
                DeleteObject luoti\obj 'poista objekti
                Delete luoti 'poista luoti kokonaan
            EndIf
            
          Case 1
            MoveObject luoti\obj,12
            If Distance2(luoti\obj,ukko)>400 Then           
                DeleteObject luoti\obj 'poista objekti
                Delete luoti 'poista luoti kokonaan
            EndIf
            
          Case 2
            MoveObject luoti\obj,8
            If Distance2(luoti\obj,ukko)>800 Then           
                DeleteObject luoti\obj 'poista objekti
                Delete luoti 'poista luoti kokonaan
            EndIf
            
        End Select 
    Next luoti
    
DrawScreen    
    
Forever
painovoima

Re: Tyhmät kysymykset

Post by painovoima »

Miten saan tehtyä lentorataan jonkunlaisen painovoiman pisteelle/objectille? Lentoradan putoamisessa pitäisi huomioida tässätapauksessa ammuksen nopeus, sekä painovoima. Itse sain jonkunlaisen väsäilty, mutta putoaminen ei ole yhtään todenmukainen.. =(

Code: Select all

FrameLimit 40 'prevent the game from running too fast
SCREEN 800,600
AddText "Arrows to aim"
AddText "Space to shoot"
AddText "Esc to exit"
tankki=LoadObject("media\guy.bmp")
angle=90
DrawToScreen 

PositionObject tankki,-200,-100
RotateObject tankki,27
ObjectOrder tankki,-1
Const painovoima=300

Repeat
    
    keskikohtax#=ScreenWidth()/2+ObjectX(tankki)
    keskikohtay#=ScreenHeight()/2+Abs(ObjectY(tankki))
    Line keskikohtax#,keskikohtay#,keskikohtax#+Cos(angle)*20,keskikohtay#-Sin(angle)*20
    
    If LeftKey()Then angle=angle+1
    If RightKey()Then angle=angle-1
    
    If angle<10 Then angle=10
    If angle>170 Then angle=170
    
    If KeyDown(cbkeyspace) Then
        If Timer()>=rr+20 Then 
            rr=Timer()
            speed#=speed#+0.1
        EndIf
    EndIf
    
    If KeyUp(cbkeyspace) Then
        bulletx#=keskikohtax#+Cos(angle)*10*speed#
        bullety#=keskikohtay#-Sin(angle)*10*speed#
        bulletmovex#=Cos(angle)*speed#
        bulletmovey#= -Sin(angle)*speed#
        bulletflying=1
    EndIf
    
    If bulletflying Then
        kierros=kierros+1
        bulletmoveg#=(bulletx#-keskikohtax#)*speed#/painovoima
        bulletx#=bulletx#+bulletmovex#
        bullety#=bullety#+bulletmovey#+bulletmoveg#
        Dot bulletx#,bullety#
        If bulletx#<0 Or bulletx#>ScreenWidth() Or bullety#<0 Then 
            bulletflying=0
            speed#=1
            kierros=0
        EndIf
    EndIf 
    Text 200,10,speed#

    DrawScreen OFF //näkyy lentorata selvästi, kun on off
    
Until EscapeKey()
Alligaattori
Active Member
Posts: 135
Joined: Fri Mar 07, 2008 8:49 pm

Re: Tyhmät kysymykset

Post by Alligaattori »

NoobisCBCoder wrote:miten voi tehdä suht-sujuvan aseenvaihdon? (niin ettei toisella aseella voi ampua samaan aikaan)

oma koodi toimii sujuvasti, mutta vain kahdella aseella. miten tästä jatkaisi?

Code: Select all

koodia
Liitä tämä rivin 23 tilalle:

Code: Select all

If MouseHit(2) Then ASE = (ASE < ASEIDEN_MÄÄRÄ - 1)(ASE + 1)
Sitten pitäisi useamman aseen toimia. ASEIDEN_MÄÄRÄ pitää olla määritelty aiemmin, mielellään vakiona.

-----------------------------------------------
painovoima wrote:Miten saan tehtyä lentorataan jonkunlaisen painovoiman pisteelle/objectille? Lentoradan putoamisessa pitäisi huomioida tässätapauksessa ammuksen nopeus, sekä painovoima. Itse sain jonkunlaisen väsäilty, mutta putoaminen ei ole yhtään todenmukainen.. =(

Code: Select all

koodia
Katso TranslateObject-komennon ohjeen esimerkki ja Learning Centerin oppitunti 18.
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset

Post by Jonez »

painovoima wrote:Miten saan tehtyä lentorataan jonkunlaisen painovoiman pisteelle/objectille? Lentoradan putoamisessa pitäisi huomioida tässätapauksessa ammuksen nopeus, sekä painovoima.
Väsäsin tämmösen. Olleellisimmat kohdat ovat riveillä 32 ja 33, jossa ammuksen nopeus suunnan suhteen määritellään, sekä rivillä 41, jossa ammuksen y-nopeutta yksinkertaisesti vähennetään.

Code: Select all

SCREEN 1024, 768
FrameLimit 40

Type tBullet
    Field cObj
    Field cSpeedX As Float
    Field cSpeedY As Float
End Type

'Const SPEED = 15
Const GRAVITY = 0.3
cannon = LoadObject( "media\cannon.bmp", 72 )

bullet = LoadObject( "media\bullet.bmp" )
ShowObject bullet, OFF

Repeat

    TurnObject cannon, ( LeftKey() - RightKey() ) * 3
    
    If KeyDown( CbKeySpace ) Then
        speed# = speed# + 0.5
    EndIf
    
    If KeyUp( CbKeySpace ) Then
        nb.tBullet = New( tBullet )
        nb\cObj = CloneObject( bullet )
        CloneObjectPosition nb\cObj, cannon
        CloneObjectOrientation nb\cObj, cannon
        MoveObject nb\cObj, 17

        nb\cSpeedX = Sin( ObjectAngle( nb\cObj ) + 90 ) * speed
        nb\cSpeedY = Cos( ObjectAngle( nb\cObj ) + 90 ) * -speed
        speed = 0
    EndIf

    For ib.tBullet = Each tBullet
        angle# = ObjectAngle( ib\cObj )
        TranslateObject ib\cObj, ib\cSpeedX, ib\cSpeedY
        
        ib\cSpeedY = ib\cSpeedY - GRAVITY
        
        If ObjectX( ib\cObj ) > ScreenWidth() / 2 Or ObjectX( ib\cObj ) < -ScreenWidth() / 2 Then
            ib\cSpeedX = ib\cSpeedX * -1
        EndIf
        If ObjectY( ib\cObj ) < -ScreenHeight() / 2 Then 
            DeleteObject ib\cObj
            Delete ib
        EndIf
    Next ib
    
    DrawToWorld ON, ON, ON
    Text ObjectX( cannon ) - 5, ObjectY( cannon ) - 10, speed
    DrawToWorld OFF
    
    DrawScreen
Forever
Last edited by Jonez on Fri Sep 12, 2008 11:09 pm, edited 1 time in total.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
Locked