Tyhmät kysymykset (I/2009)

Voit pyytää apua ohjelmointiongelmiin täältä.
vieras

Re: Tyhmät kysymykset

Post 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.
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset

Post 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.
vieras

Re: Tyhmät kysymykset

Post 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
User avatar
elmo123
Active Member
Posts: 153
Joined: Sun Sep 09, 2007 4:19 pm

Re: Tyhmät kysymykset

Post 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
Kiinnostuin pelien tekemisestä ennen 1. luokkaa.
Sitten 3. luokalla tuli CB. Ja siitä se alkoi.

Blender! TF2! CB! Game Maker! Nokia-mollaus! Kitaransoitto! Breakdance! MadTracker! Minecraft!
Zrazy_Coder
Member
Posts: 60
Joined: Sun Sep 09, 2007 8:46 pm

Re: Tyhmät kysymykset

Post 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 ?
regalis
Advanced Member
Posts: 268
Joined: Mon Aug 27, 2007 9:44 pm

Re: Tyhmät kysymykset

Post 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.
Zrazy_Coder
Member
Posts: 60
Joined: Sun Sep 09, 2007 8:46 pm

Re: Tyhmät kysymykset

Post 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ä
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset

Post 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
regalis
Advanced Member
Posts: 268
Joined: Mon Aug 27, 2007 9:44 pm

Re: Tyhmät kysymykset

Post 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.
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset

Post 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?
Zrazy_Coder
Member
Posts: 60
Joined: Sun Sep 09, 2007 8:46 pm

Re: Tyhmät kysymykset

Post 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ää
regalis
Advanced Member
Posts: 268
Joined: Mon Aug 27, 2007 9:44 pm

Re: Tyhmät kysymykset

Post 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).
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset

Post 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
    
regalis
Advanced Member
Posts: 268
Joined: Mon Aug 27, 2007 9:44 pm

Re: Tyhmät kysymykset

Post 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.
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset

Post 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.
Vieras :>

Re: Tyhmät kysymykset

Post 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.
Harakka
Advanced Member
Posts: 430
Joined: Mon Aug 27, 2007 9:08 pm
Location: Salo
Contact:

Re: Tyhmät kysymykset

Post 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.
Peli piirtokomennoilla - voittaja, Virtuaalilemmikkipeli - voittaja,
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset

Post 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
Vieras taas :>

Re: Tyhmät kysymykset

Post by Vieras taas :> »

Harmi sinänsä :roll:
Millähän ohjelmalla tämän voisi toteuttaa? vaikkei tämä ClooBasicin foorumeille kuulukkaan : P
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset

Post 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
Locked