Page 4 of 154

Re: Tyhmät kysymykset

Posted: Fri Sep 14, 2007 2:26 pm
by vieras
Jälleen tuli propleema tuossa hahmonluontijutussa. :shock:

Code: Select all

Type hahmo
    Field A
End Type

hahmo.hahmo = New(hahmo)
hahmo\A=10

Repeat

    Text 10,10,"A: "+hahmo\A
    add_loota(100,100,hahmo\A)
    
    DrawScreen
Forever 

Function add_loota(x,y,z)
    Color cbred
    Box x,y,40,15,0
    Color cbwhite
    CenterText x+20,y+1, "LESS"
    Color cbyellow
    If MouseX()>=x And MouseX()<=x+40 And MouseY()>=y And MouseY()<=y+20 Then
        Box x+2,y+2,36,13,0
            If MouseHit(1) Then
                z=z-1
                If z<3 Then 
                    z=z+1    
                EndIf
            EndIf    
    EndIf  
End Function 
Saan vastaavan toiminnon kyllä toimimaan, jossei tuo vähennysloota ole funktio vaan pääsilmukan sisällä, mutta näin en saa sitä pelaaman en sitten millään. Jos joku viitsii hiukan avittaa, olen enemmän kuin kiitollinen.

Re: Tyhmät kysymykset

Posted: Fri Sep 14, 2007 2:37 pm
by koodaaja
vieras wrote:Jälleen tuli propleema tuossa hahmonluontijutussa. :shock:

Code: Select all

Type hahmo
    Field A
End Type

hahmo.hahmo = New(hahmo)
hahmo\A=10

Repeat

    Text 10,10,"A: "+hahmo\A
    add_loota(100,100,hahmo\A)
    
    DrawScreen
Forever 

Function add_loota(x,y,z)
    Color cbred
    Box x,y,40,15,0
    Color cbwhite
    CenterText x+20,y+1, "LESS"
    Color cbyellow
    If MouseX()>=x And MouseX()<=x+40 And MouseY()>=y And MouseY()<=y+20 Then
        Box x+2,y+2,36,13,0
            If MouseHit(1) Then
                z=z-1
                If z<3 Then 
                    z=z+1    
                EndIf
            EndIf    
    EndIf  
End Function 
Saan vastaavan toiminnon kyllä toimimaan, jossei tuo vähennysloota ole funktio vaan pääsilmukan sisällä, mutta näin en saa sitä pelaaman en sitten millään. Jos joku viitsii hiukan avittaa, olen enemmän kuin kiitollinen.
Ei tietenkään toimi. Katsos, tuo z tuolla funkkarin sisällä ei ole sama kuin tuo hahmo\A. Se on hahmo\A:n kopio, joka saa toki saman arvon, mutta tämä kopio tuhotaan, eikä sen arvo vaikuta alkuperäiseen. Ratkaisu on käyttää tuota alkuperäistä tyypin jäsentä funkkarissa, kas näin:

Code: Select all

Type hahmo
    Field A
End Type

h.hahmo = New(hahmo)
h\A=10

Repeat

    Text 10,10,"A: "+h\A
    add_loota(100,100,ConvertToInteger(h))
    
    DrawScreen
Forever 

Function add_loota(x,y,id)
    h.hahmo = ConvertToType(id)
    Color cbred
    Box x,y,40,15,0
    Color cbwhite
    CenterText x+20,y+1, "LESS"
    Color cbyellow
    If MouseX()>=x And MouseX()<=x+40 And MouseY()>=y And MouseY()<=y+20 Then
        Box x+2,y+2,36,13,0
            If MouseHit(1) Then
                h\A=h\A-1
                If h\A<3 Then 
                    h\A=h\A+1    
                EndIf
            EndIf    
    EndIf
End Function
Ja pari koodiin liittyvää asiaa: Älä käytä tyypin jäsenen nimenä tyypin nimeä. Syy: muuten converttointeger sekoaa. Äläkä (mieluusti) käytä muuttujaa z mihinkään muuhun kuin z-koordinaatin merkkaamiseen. Nämä menevät muuten helposti sekaisin.

Re: Tyhmät kysymykset

Posted: Fri Sep 14, 2007 2:50 pm
by vieras
Ahaa! Kiitän selvennyksestä.

Mutta sitten on vielä sellanen, että todellisuudessa tyyppiin tulee useampi kenttä ja yhden funktion tulee ajaa jokaisen kentän vähennys; mitä muuttujaa käyttää tällöin?
Oon aika kujalla näistä hommista. :D

Re: Tyhmät kysymykset

Posted: Fri Sep 14, 2007 3:48 pm
by elmo123
Ahaa! Kiitän selvennyksestä.

Mutta sitten on vielä sellanen, että todellisuudessa tyyppiin tulee useampi kenttä ja yhden funktion tulee ajaa jokaisen kentän vähennys; mitä muuttujaa käyttää tällöin?
Oon aika kujalla näistä hommista. :D
sitä samaa h-muuttujaa.


Mulla on ongelma aseen latauspalkissa: aseena on haulikko, jossa 5 patia. Joka padin välillä on lataus 60, ja jos padit loppui, lataus on 400. Latauspalkki on 100px leveä, niin millä laskutoimituksella saan selville, minkä levyinen on latauspalkin sisällä oleva palkki?

selvemmin:

Code: Select all

'latauspalkki

'väri
Color cbBlue
If reload Then Color cbBlackSkin

Box 250,38,*joku laskutoimitus*,15

'reunus
Color 0,0,0
Box 250,38,100,15,OFF

Re: Tyhmät kysymykset

Posted: Fri Sep 14, 2007 8:21 pm
by Zrazy_Coder
Väsäsin ihan muuten vaan, kun halusin koittaa funktion tekoa, mutta ei onnistu :( Tein näin

Code: Select all

FrameLimit 40 

guy= LoadObject("Media\guy.bmp", 72)

Repeat

kiihtyvyys(car,1.5,1.0,20,0)

DrawScreen
Forever

Function kiihtyvyys(objekti,kiihtyvyys$,pakki$,maxnopeus,nopeus$)
If UpKey() Then nopeus + kiihtyvyys
If DownKey() Then nopeus - pakki 
If KeyDown(cbkeyspace) And nopeus$=>1 Then nopeus$-pakki
MoveObject objekti,nopeus
EndFunction
Jokanen rivi on kait väärin koodattu kun koitin toimiiko mikään riveista niin ei toiminu. Mikäköhän on vääri ?

Re: Tyhmät kysymykset

Posted: Fri Sep 14, 2007 9:11 pm
by regalis
Virheilmoitus johtui siitä, että funktion nimi on sama kuin kiihtyvyys-muuttujan. Muuttamalla joko funktion tai muuttujan nimen pitäisi toimia:

Code: Select all

FrameLimit 40

    guy= LoadObject("Media\guy.bmp", 72)

    Repeat

    KiihtyvyysFunktio(car,1.5,1.0,20,0)

    DrawScreen
    Forever

    Function KiihtyvyysFunktio(objekti,kiihtyvyys#,pakki#,maxnopeus,nopeus#)
        If UpKey() Then nopeus = nopeus + kiihtyvyys
        If DownKey() Then nopeus = nopeus - pakki
        If KeyDown(cbkeyspace) And nopeus=>1 Then nopeus = nopeus - pakki
        MoveObject objekti, nopeus
    EndFunction
En oikein tajunnut, miksi kiihtyvyys, pakki ja nopeus -muuttujat ovat merkkijonomuuttujia, vaikka niihin tallennetaan numeroita. Jos tarkoituksesi oli tehdä niistä desimaalimuuttujia, laita perään #-merkki.

Re: Tyhmät kysymykset

Posted: Fri Sep 14, 2007 9:56 pm
by Zrazy_Coder
Muistin että siinä piti olla perässä $ eikä #. Noh nyt tiedän miksi se ei suostunut edes nimiä näyttää, kun oli väärät merkit perässä

Re: Tyhmät kysymykset

Posted: Sat Sep 15, 2007 11:05 am
by koodaaja
elmo123:

Lasket, kuinka paljon on yhden kudin leveys ja kerrot sen kudien määrällä.

Code: Select all

Box 250, 38, 100/maxkudit, 15
Itse tosin tekisin homman näinkin eliitisti (hienoista purkkaa siellä täällä, mutta lopputulos on komia):

Code: Select all

Const maxkutimäärä = 5
kudit = maxkutimäärä

Const lipaslatausaika = 400
Const kutilatausaika = 50

ClsColor 255, 255, 255

Repeat
    
    If KeyHit(57) And ajastin<Timer() Then
        If kudit = 0 Then
            ajastin = Timer()+lipaslatausaika
            lipaslatautuu = True
            ajastin2 = Timer()+lipaslatausaika/maxkutimäärä
        Else
            ajastin = Timer()+kutilatausaika
            kudit = kudit - 1
        EndIf
        
    EndIf
    
    If lipaslatautuu And ajastin2<Timer() Then
        
        kudit = kudit + 1
       ajastin2 = Timer()+ lipaslatausaika/maxkutimäärä
        If kudit = maxkutimäärä Then lipaslatautuu = False
        
    EndIf
    
    Color 100, 100, 100
    Box 250,38,101,15
    Color 0, 0, 0
    Box 250, 38, 101, 15, OFF
    
    For i = 0 To kudit-1
        
        Color 255, 255, 0
        Box 251+i*(100/maxkutimäärä), 39, (100/maxkutimäärä)-1, 13
        Color 200, 200, 0
        Box 251+i*(100/maxkutimäärä), 39, (100/maxkutimäärä)-1, 13, OFF
        
    Next i
    
    DrawScreen
Forever
regalis: tuo mavittaa, vaihda objektin nimi funkkarikutsusta car->guy. Tai Zrazy Coderin koodiahan se alunperin on ;D

Re: Tyhmät kysymykset

Posted: Sat Sep 15, 2007 7:50 pm
by regalis
Nyt tulee todella tyhmä kysymys: miten saan saman tyypin jäsenet kääntymään toisiaan kohti? ^^
Minulla on siis SOTILAS-type, jossa on puoli-field. Jos puoli on 1, sotilaan on käännyttävä niitä kohti, joiden puoli on 2. Ja toisinpäin.

Re: Tyhmät kysymykset

Posted: Sat Sep 15, 2007 8:32 pm
by koodaaja
regalis wrote:Nyt tulee todella tyhmä kysymys: miten saan saman tyypin jäsenet kääntymään toisiaan kohti? ^^
Minulla on siis SOTILAS-type, jossa on puoli-field. Jos puoli on 1, sotilaan on käännyttävä niitä kohti, joiden puoli on 2. Ja toisinpäin.
Niitä kohti? Jos sinulla on enemmän kuin kaksi kumpaakin, joudut laskemaan keskiarvon, jota kohti käännät ukon. Ellet tarkoita, että puolet katsoo vasemmalle ja puolet oikealle?

Re: Tyhmät kysymykset

Posted: Sat Sep 15, 2007 9:06 pm
by Zrazy_Coder
Miten saisin ton mun auton kiihtymään siinä mun kiihdytys funktiossa , kun yritin saada että se kiihtyis mutta ei se kiihdy vaan se menee siihen nopeuteen jolla suurrennetaa auto nopeutta eli

Code: Select all


Function kiihtyvyys(objekti,kiihtyvyys$,pakki$,maxnopeus,nopeus$)
If UpKey() Then nopeus + kiihtyvyys
If DownKey() Then nopeus - pakki
If KeyDown(cbkeyspace) And nopeus$=>1 Then nopeus$-pakki
MoveObject objekti,nopeus
EndFunction

Toi mun auto liikkuu vaa niin kovaa , kun toi kiihtyvyys on eli jos mä laitan että kiihtyvyys on 4 ja nii auto liikkuu vaa neljää eikä kiihdy sillei , kun pitäs :( Kukaa ei saanu selvää

Re: Tyhmät kysymykset

Posted: Sat Sep 15, 2007 9:08 pm
by regalis
Tarkoitan sitä, että vastapuolen sotilaat ovat puoli 1, ja oman puolen sotilaat ovat puoli 2. Minun pitäisi saada ne osoittamaan toisiaan (siis esimerkiksi niin, että jokainen sotilas katsoo lähintä vihollissotilasta).

Re: Tyhmät kysymykset

Posted: Sat Sep 15, 2007 9:10 pm
by koodaaja
Zrazy_Coder wrote:Miten saisin ton mun auton kiihtymään siinä mun kiihdytys funktiossa , kun yritin saada että se kiihtyis mutta ei se kiihdy vaan se menee siihen nopeuteen jolla suurrennetaa auto nopeutta eli

Code: Select all


Function kiihtyvyys(objekti,kiihtyvyys$,pakki$,maxnopeus,nopeus$)
If UpKey() Then nopeus + kiihtyvyys
If DownKey() Then nopeus - pakki
If KeyDown(cbkeyspace) And nopeus$=>1 Then nopeus$-pakki
MoveObject objekti,nopeus
EndFunction

Toi mun auto liikkuu vaa niin kovaa , kun toi kiihtyvyys on eli jos mä laitan että kiihtyvyys on 4 ja nii auto liikkuu vaa neljää eikä kiihdy sillei , kun pitäs :( Kukaa ei saanu selvää
No ei todellakaan saanut. Siis se menee sitä kiihtyvyyden nopeutta? Siis 4 pikseliä sekunnissa? Niin, tottakai se menee. Katsos, sinun pitää lisätä kiihtyvyyttä vähemmän kerralla, vaikka 0.2. Mutta kuten sanottu, funktiossa kyseessä on vain kopio muuttujasta, joten "nopeus"-muuttujan arvoa ei pääloopissa muuteta, jolloin se nollautuu. Kirjoita siis ennen looppia "Global nopeus", ja ongelman pitäisi ratketa. Silloin se näkyy automaagisesti funktiossa, etkä tarvitse parametriä nopeus.

Regalis: pseudoa:

Code: Select all

joka ukolle
    tarkista puoli
    tee temp-muuttuja etäisyyksiä varten, aseta arvoksi suuri luku, esim 1000
    temp-muuttuja myös vihollisobjektia varten
        käy vastapuoli läpi
            jos nykyisen vihun etäisyys pienempi kuin temp, tallenna temp-muuttujiin etäisyys ja objekti
        seuraava
    osoita temp-objektiin
    ammu(?)
seuraava
    

Re: Tyhmät kysymykset

Posted: Sat Sep 15, 2007 9:36 pm
by regalis
koodaaja wrote:

Code: Select all

joka ukolle
    tarkista puoli
    tee temp-muuttuja etäisyyksiä varten, aseta arvoksi suuri luku, esim 1000
    temp-muuttuja myös vihollisobjektia varten
        käy vastapuoli läpi
            jos nykyisen vihun etäisyys pienempi kuin temp, tallenna temp-muuttujiin etäisyys ja objekti
        seuraava
    osoita temp-objektiin
    ammu(?)
seuraava
    
Miten tuon vastapuolen läpikäymisen voi toteuttaa? Jos laittaa siihen for each-loopin, tulee MAV.

Re: Tyhmät kysymykset

Posted: Sat Sep 15, 2007 9:39 pm
by koodaaja
regalis wrote:
koodaaja wrote:

Code: Select all

joka ukolle
    tarkista puoli
    tee temp-muuttuja etäisyyksiä varten, aseta arvoksi suuri luku, esim 1000
    temp-muuttuja myös vihollisobjektia varten
        käy vastapuoli läpi
            jos nykyisen vihun etäisyys pienempi kuin temp, tallenna temp-muuttujiin etäisyys ja objekti
        seuraava
    osoita temp-objektiin
    ammu(?)
seuraava
    
Miten tuon vastapuolen läpikäymisen voi toteuttaa? Jos laittaa siihen for each-loopin, tulee MAV.
Et tokikaan voi käyttää samaa muuttujanimeä niille instansseille, eli for x.TYYPPI -silmukan sisässä ei saisi olla toista for x.TYYPPIä, toiselle pitää keksiä eri nimi, vaikka y.TYYPPI.

Re: Tyhmät kysymykset

Posted: Mon Sep 17, 2007 7:17 am
by Vieras :>
Voikos tällä coolbasicilla tehdä niin, että tämä piirtäisi kuvan näytölle ilman tuota ikkunaa?
Siis että kuva vaan ilmestyisi keskelle näyttöä ja itse ikkunaa ei näkyisi.

Re: Tyhmät kysymykset

Posted: Mon Sep 17, 2007 7:55 am
by Harakka
Vieras :> wrote:Voikos tällä coolbasicilla tehdä niin, että tämä piirtäisi kuvan näytölle ilman tuota ikkunaa?
Siis että kuva vaan ilmestyisi keskelle näyttöä ja itse ikkunaa ei näkyisi.
Ei onnistu.

Re: Tyhmät kysymykset

Posted: Mon Sep 17, 2007 1:30 pm
by koodaaja
Vieras :> wrote:Voikos tällä coolbasicilla tehdä niin, että tämä piirtäisi kuvan näytölle ilman tuota ikkunaa?
Siis että kuva vaan ilmestyisi keskelle näyttöä ja itse ikkunaa ei näkyisi.
Fullscrööni päälle ja piirrät sen kuvan keskelle näyttöä ;D ei näy ikkunan reunoja, vaan eipä näy takana olevatkaan ikkunat. Ei kyllä taida CB:llä onnistua.

Öfftöpik:
Mitäs SCREEN() muuten palauttaa? Saisiko siltä kenties ehdan HWND -pointterin tms.? (Zerolta olen kysynyt, mutta hän tuntuu jälleen kadonneen..) Sittenhän voisi GetWindowLongilla kaivaa instancen ja sen jälkeen ei olisi riemulla rajaa ;D

Re: Tyhmät kysymykset

Posted: Mon Sep 17, 2007 5:03 pm
by Vieras taas :>
Harmi sinänsä :roll:
Millähän ohjelmalla tämän voisi toteuttaa? vaikkei tämä ClooBasicin foorumeille kuulukkaan : P

Re: Tyhmät kysymykset

Posted: Tue Sep 18, 2007 3:15 pm
by koodaaja
Vieras taas :> wrote:Harmi sinänsä :roll:
Millähän ohjelmalla tämän voisi toteuttaa? vaikkei tämä ClooBasicin foorumeille kuulukkaan : P
Ei millään ohjelmalla. Ohjelmointikielellä kylläkin ;D C++:lla onnistuu, windows.h:sta ja windowsx.h:sta löytyvillä funkkareilla. Saat määritellä kaiken itse, taustaväristä otsikkoon ( tai jättää otsikkopalkin ja ikkunaa ympäröivän palkin pois, kuten halusit ). Tai tehdä ikkunan sisään vaikka viisi uutta. Eri asia sitten, että siinä missä CB luo ikkunan ( tai pikemminkin muokkaa vanhaa ;D ) 1 rivissä, saat C++:lla uhrata asialle monta kymmentä, etenkin, jos haluat sille oman laitekontekstin ja käyttää siinä vaikka DirectX:ää tai OpenGL:ää. Näiden käyttö taas menee vaikeaksi. SDL voisi myös olla pätevä ratkaisu, huomattavasti helpompaa. Vaan silläpä ei saakaan enää kustomoitua sellaista ikkunaa kun haluaa. Ihan vinkkinä; kannattaa unohtaa koko juttu. Ohjelmoi ensin vuosi pari CB:llä, mieti sitten vaikeampaan siirtymistä. Ja siihen mennessä unohdat jo, miksi halusit kuvan keskelle näyttöä ;D