Tyhmät kysymykset (II/2009)

Voit pyytää apua ohjelmointiongelmiin täältä.
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Tyhmät kysymykset (II/2009)

Post by Awaclus » Mon Dec 21, 2009 8:16 pm

EDIT: En huomannutkaan toista sivua.

No järkeä saa varmaan käyttää. Sinulla on tuolla Repeat-blokki, jota ei koskaan lopeteta, niinhän tuo virheilmoitus sanoo.

EDIT 2: Rekisteröidypä muuten foorumeille. Silloin pystyy muokkaamaan viestejään ja ei tarvitse aina postata uutta viestiä.

User avatar
valscion
Moderator
Moderator
Posts: 1592
Joined: Thu Dec 06, 2007 8:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (II/2009)

Post by valscion » Mon Dec 21, 2009 11:20 pm

legend wrote:
Feuer wrote:Saako CB:n oman Input():n lukemaan syötteitä myös numpadiltä? Saan joululoma-palkan tekemällä faijalle ohjelman johon tarvitsisi syöttää paljon numeroita, ja tuo on tottunut käyttämään numpadiä, eikä noita näppäimistön yllä olevia numeroita.
ei, mutta saat ne keyhit() functiolla.
ohjelma tulostaa numeron 1, kun painat numpadin 1

Code: Select all

    Repeat
       Text 10,10,numpad()
       DrawScreen
    Forever

    Function numpad()
        If KeyDown(79) Then Return 1 '79 = 1
    EndFunction   
Niin, ja sitten jos haluat käyttää numpadin näppäimiä niin on myös olemassa paranneltu versio Input()-funktiosta. Se löytyy täältä: http://cbkk.systec.fi/koodi.php?id=159
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

User avatar
Feuer
Devoted Member
Posts: 520
Joined: Tue Jun 16, 2009 11:13 am
Contact:

Re: Tyhmät kysymykset (II/2009)

Post by Feuer » Tue Dec 22, 2009 4:19 pm

Outoa, luulin vastanneeni jo... Joko tuo toinen kone bugaa tai tulee tuplaposti.

Joka tapauksessa, saisiko tuon syötteen ottamaan huomioon myös caps lockin?
Asus P8P67 LE/Intel Core i5 2500K/ GTX560/ 8GT RAM/750GT HDDt + 120GT SSD + 13" Macbook Pro
Blogi - Peräpohjola - MERPG

User avatar
legend
Advanced Member
Posts: 371
Joined: Wed Nov 18, 2009 9:06 pm

Re: Tyhmät kysymykset (II/2009)

Post by legend » Tue Dec 22, 2009 6:09 pm

Minulla se ainakin ottaa?

Code: Select all

repeat
   teksti = input("Toimiiko?")
   drawscreen
forever

User avatar
Viltzu
Guru
Posts: 1132
Joined: Sun Aug 26, 2007 5:45 pm
Location: Alavieska
Contact:

Re: Tyhmät kysymykset (II/2009)

Post by Viltzu » Tue Dec 22, 2009 6:56 pm

@Legend,
Nyt taidetaan puhua tuosta paremmasta* inputista. Ei CB:n omasta.
(*=Mielestäni ainakin parempi, vaikka capsi ei toimisikaan)

@Feuer,
Voithan laittaa tarkistuksen onko caps lockia painettu, tosin silloin ei välttämättä se caps valo näppäimistössä merkitse mitään.
CB:ssä ei muistaakseni ollut minkäänlaisia tarkistuksia caps lockille/muille lock napeille. Eli ilman DLL ei taida onnistua.
Ellei CB lue caps lockin silleen jännästi. Eli, että kun se on päällä niin sitä "painettaisiin" kokoajan.. ;) Katson jos näin on nyt. Edit: Ilmeisesti nopeiden testien perusteella näin ei ole. CB:llä ei kai ole mahdollista katsoa ilman DLL:iä onko caps lock käytössä.

User avatar
Herra Siili
Advanced Member
Posts: 308
Joined: Tue Nov 25, 2008 9:06 pm
Location: Viitasaari, Keski-Suomi
Contact:

Re: Tyhmät kysymykset (II/2009)

Post by Herra Siili » Tue Dec 22, 2009 7:09 pm

Eikös cbFunilla voi vaikuttaa caps-, num- ja scroll lockin tilaan? Tosin sehän vaatii sen DLL:n.
a.k.a. Hedge

User avatar
Viltzu
Guru
Posts: 1132
Joined: Sun Aug 26, 2007 5:45 pm
Location: Alavieska
Contact:

Re: Tyhmät kysymykset (II/2009)

Post by Viltzu » Tue Dec 22, 2009 7:24 pm

Herra Siili wrote:Eikös cbFunilla voi vaikuttaa caps-, num- ja scroll lockin tilaan? Tosin sehän vaatii sen DLL:n.
Siinä voi laittaa käyttöön tai ottaa pois, mutta ei katsoa onko Lock-näppäimiä käytössä vai ei.
Mutta sillä sen voisi tehdä, jopa niin että valo näppäimistössäkin menisi oikein. Kun painetaan capsia niin cbFUNin komennolla sitten laitetaan joko päälle tai sammutetaan caps.
EDIT:

Äh... Nyt meni ajatukset hieman ohi jostakin :D Mutta jotenkin sen voisi kikkailla... :E


User avatar
valscion
Moderator
Moderator
Posts: 1592
Joined: Thu Dec 06, 2007 8:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (II/2009)

Post by valscion » Tue Dec 22, 2009 7:42 pm

Pidät vaikka yhtä globaalia muuttujaa, jossa on tieto, onko caps lock päällä vai ei. Alustat cbFUNilla ensiksi caps lockin pois päältä ja sitten tarkistat loopeissa, että onko capslockia painettu vai ei ihan normaalilla KeyHit()-funktiolla.
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

User avatar
Feuer
Devoted Member
Posts: 520
Joined: Tue Jun 16, 2009 11:13 am
Contact:

Re: Tyhmät kysymykset (II/2009)

Post by Feuer » Wed Dec 23, 2009 12:58 pm

Onko jotain yksinkertaista kikkaa (täyden läpikäynnin lisäksi) alustaa mielivaltainen läjä muuttujia tyhjäksi?

(Kyseessä on siis ohjelma, joka kysyy käyttäjältä tietoja, tekee tiedoilla mitä tekee, ja ennenvanhaan suoritti itsensä lopuksi uudelleen GetEXEName():n avulla. Lopun tehtävänä oli siis alustaa kaikki muuttujat tyhjiksi. Tuolle on oltava siistimpikin keino.)
Asus P8P67 LE/Intel Core i5 2500K/ GTX560/ 8GT RAM/750GT HDDt + 120GT SSD + 13" Macbook Pro
Blogi - Peräpohjola - MERPG

User avatar
Viltzu
Guru
Posts: 1132
Joined: Sun Aug 26, 2007 5:45 pm
Location: Alavieska
Contact:

Re: Tyhmät kysymykset (II/2009)

Post by Viltzu » Wed Dec 23, 2009 1:20 pm

Feuer wrote:Onko jotain yksinkertaista kikkaa (täyden läpikäynnin lisäksi) alustaa mielivaltainen läjä muuttujia tyhjäksi?

(Kyseessä on siis ohjelma, joka kysyy käyttäjältä tietoja, tekee tiedoilla mitä tekee, ja ennenvanhaan suoritti itsensä lopuksi uudelleen GetEXEName():n avulla. Lopun tehtävänä oli siis alustaa kaikki muuttujat tyhjiksi. Tuolle on oltava siistimpikin keino.)
No tuota siis, eipä sille taida olla. Taulukon(/typen?) onnistuu helposti tyhjentämään For ... Next loopilla, taikka muistaakseni ReDim komennolla. (Sehän taisi alustaa sen.)
Mutta muuten siinä ei taida olla muuta keinoa kuin uudelleen suorittaa exe, taikka käymällä kaikki läpi ja asettamalla arvon 0. En kyllä näin äkkiseltään muutakaan keksi.

User avatar
Feuer
Devoted Member
Posts: 520
Joined: Tue Jun 16, 2009 11:13 am
Contact:

Re: Tyhmät kysymykset (II/2009)

Post by Feuer » Wed Dec 23, 2009 1:31 pm

Onko väärin olettaa että "alustettavien muuttujien" funktion alla pitäminen hoitaisi tuon? Kun poistutaan funktiosta, ei noita muuttujia enää tietääkseni ole olemassa?
EDIT:

Eli tämä tapa on toimiva

Ja tuohon ylempään ongelmaan, kasasin systeemin joka tarkistaa onko capsi päällä vai poissa, mutta tajusin ettei cbFunilla voi valehdella shiftin olevan pohjassa. Miten tuon shiftin saisi valehdeltua olevan pohjassa?
Last edited by Feuer on Wed Dec 23, 2009 1:50 pm, edited 1 time in total.
Asus P8P67 LE/Intel Core i5 2500K/ GTX560/ 8GT RAM/750GT HDDt + 120GT SSD + 13" Macbook Pro
Blogi - Peräpohjola - MERPG

TheFish
Developer
Developer
Posts: 477
Joined: Mon Aug 27, 2007 9:28 pm
Location: Joensuu

Re: Tyhmät kysymykset (II/2009)

Post by TheFish » Wed Dec 23, 2009 1:40 pm

Feuer wrote:Onko jotain yksinkertaista kikkaa (täyden läpikäynnin lisäksi) alustaa mielivaltainen läjä muuttujia tyhjäksi?

(Kyseessä on siis ohjelma, joka kysyy käyttäjältä tietoja, tekee tiedoilla mitä tekee, ja ennenvanhaan suoritti itsensä lopuksi uudelleen GetEXEName():n avulla. Lopun tehtävänä oli siis alustaa kaikki muuttujat tyhjiksi. Tuolle on oltava siistimpikin keino.)
Minun nähdäkseni teet jotain väärin, jos sinun edes täytyy alustaa suuri määrä muuttujia pelin/ohjelman suorituksen jälkeen. Käytä mieluummin funktioita ja lokaaleja muuttujia, jotka alustuvat automaattisesti kun funktiota kutsutaan seuraavan kerran.

Tuossa pikainen havainnollistava esimerkki:

Code: Select all

repeat
    if mainMenuAction("new game") then
        game(1, 10)
    endif
    if mainMenuAction("quit") then
        quitGame()
    endif
forever

//peli palaa automaattisesti takaisin päävalikkoon kun tästä poistutaan
function game(startLevel, levelAmount)
    for currentLevel = startLevel to levelAmount
        exitValue = level(currentLevel)
        if exitValue = FAILED then
            currentLevel = currentLevel - 1 //pelataan sama kenttä uudestaan
        endif
    next currentLevel
end function

//jokaisen kentän jälkeen kaikki siinä käytetyt muuttujat tuhoutuvat automaattisesti
function level(currentLevel)
    //käytä currentLevel:iä määrittelemään mikä kenttä on menossa
    //(esim. jos sinulla on kenttien tiedot taulukossa, käytä currentLeveli:ä indeksinä)
    //ja lataa kaikki kentässä tarvittavat kuvat/äänet/yms.

    repeat
        //varsinainen kentän logiikka täällä
    until levelPassed

    return levelExitValue
end function
CoolBasic henkilökuntaa
Kehittäjä

sankja
Newcomer
Posts: 30
Joined: Thu Jan 29, 2009 11:32 pm

Re: Tyhmät kysymykset (II/2009)

Post by sankja » Thu Dec 24, 2009 12:46 am

Moi! Voisiko joku nero asiantuntija selittää tuon paremman inputin ohjelmasisällön,vaikka kommentoimalla sen - katsos
vaikka yritin ,niin en ymmärtänyt siitä paljon mitään - kuitenkin tarvitsisin parempaa input toimintoa erääseen
ohjelmaani ja olisi hienoo jos sen kursorin sais siinä siten ,että se menee kirjainten välissä pystysuorana viivana.

User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: Tyhmät kysymykset (II/2009)

Post by axu » Thu Dec 24, 2009 2:53 pm

sankja wrote:Moi! Voisiko joku nero asiantuntija selittää tuon paremman inputin ohjelmasisällön,vaikka kommentoimalla sen - katsos
vaikka yritin ,niin en ymmärtänyt siitä paljon mitään - kuitenkin tarvitsisin parempaa input toimintoa erääseen
ohjelmaani ja olisi hienoo jos sen kursorin sais siinä siten ,että se menee kirjainten välissä pystysuorana viivana.
Ensimmäiseen en mene sanomaan nyt mitään, mutta tuo kursorijuttu ei toimi tuolla cb:n omalla inputilla; jos välttämättä kuitenkin sellaisen haluat, niin niitä löytyy tältä foorumilta aika paljon. Kokeile hakea sitä varten esim. "input", tai "textbox". Jos et jaksa hakea parempaa, tässä on omani, tosin integroituna kokonaiseen käyttöliittymäkirjastoon :D
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image

sankja
Newcomer
Posts: 30
Joined: Thu Jan 29, 2009 11:32 pm

Re: Tyhmät kysymykset (II/2009)

Post by sankja » Thu Dec 24, 2009 11:15 pm

Kiitos paljon Axu.Otan ja tutkin noita funktioita,jotka olet suunnitellut,ja yritän sovittaa niitä omaan ohjelmaani,kiitos.

User avatar
Ilkka
Active Member
Posts: 201
Joined: Mon Oct 08, 2007 8:01 am

Re: Tyhmät kysymykset (II/2009)

Post by Ilkka » Fri Dec 25, 2009 11:07 pm

Aloin tehdä väritörmäystunnistusta objekteille. Tarkoitushan on, että kun laatikko-objecti koskee valkoiseen se tippuu, kun mustaan se nousee. Koodissa on kaksi ongelmaa;
1.Laatikko lopettaa tippumisen jo ennen kuin musta tulee vastaan.
2.Lisäsin laatikolle mahdollisuuden liikkua oikeaan ja vasempaan; Jos menet ruudun keskeltä vasemmalle, laatikko alkaa nousta ikään kuin siellä olisi mustaa. Jos oikealle juttu toimii oikein lukuun ottamatta ongelmaa Nro1.
Koodi:

Code: Select all

SCREEN 640,480
Palikka=LoadObject("palikka.png")
Pohja=LoadImage("Pohja.png")
PositionObject palikka,0,320
Repeat

    DrawImage pohja,0,0
    PickImageColor pohja,ObjectX(palikka),ObjectY(palikka)
    r=getRGB(RED)
    g=getRGB(GREEN)
    b=getRGB(BLUE)
    If R=0 And G=0 And B=0 Then 
       TranslateObject palikka,0,1
    ElseIf R=255 And G=255 And B=255 Then 
       TranslateObject palikka,0,-1
    EndIf 
    If LeftKey()Then TranslateObject palikka,-2,0
    If RightKey()Then TranslateObject palikka,2,0
    If UpKey()Then TranslateObject palikka,0,2
        
    Box 45,45,10,10
    
 DrawScreen
Edit
Forever

Attachments
Pohja.PNG
Pohja.PNG (4.95 KiB) Viewed 6425 times
Palikka.PNG
Palikka.PNG (231 Bytes) Viewed 6425 times
Image

User avatar
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: Tyhmät kysymykset (II/2009)

Post by phons » Fri Dec 25, 2009 11:30 pm

Muista että kuvilla ja objekteilla on eri koordinaatit.. Elikkä sun objectx voi olla ruudulla jotain ihan muuta kuin "maailmassa". Etsi CBKK:sta funkkarit ObjectSX ja ObjectSY jotka kertovat objektin sijannin ruudulla. Tässä on vastaus molempiin kysymyksiin.. Luulisin..
Image

User avatar
Viltzu
Guru
Posts: 1132
Joined: Sun Aug 26, 2007 5:45 pm
Location: Alavieska
Contact:

Re: Tyhmät kysymykset (II/2009)

Post by Viltzu » Sat Dec 26, 2009 1:07 am

Hmm.. Ja niin voinet myös käyttää GetPixeliä PickColorin sijaan. Ei välttämättä tarpeellista, enkä tiedä nopeuttaisiko tai mitään, mutta sanoinpahan vain.

User avatar
Ilkka
Active Member
Posts: 201
Joined: Mon Oct 08, 2007 8:01 am

Re: Tyhmät kysymykset (II/2009)

Post by Ilkka » Sat Dec 26, 2009 4:47 pm

Phons: En tiedä miten toimii koska ruutu ei enää näyttänyt ollenkaan punaista laatikko-objektia.
Image

User avatar
Ilkka
Active Member
Posts: 201
Joined: Mon Oct 08, 2007 8:01 am

Re: Tyhmät kysymykset (II/2009)

Post by Ilkka » Sun Dec 27, 2009 11:59 am

Oon tehny tota potkunyrkkeilypeliä vähän aikaa. Ongelma on se että kun tossa koodiin laittaa noi KeyUp komennot, niin elämää ei lähde ollenkaan. Laitanpa vielä Keyupin määritelmän tähä.
Tämä funktio kertoo, onko haluttu näppäin "päästetty ylös", eli vapautettu. Funktiota voi verrata hiirellä klikkaukseen (kts. MouseUp)

Funktiolle pitää kertoa halutun näppäimen SCAN-koodi.

Scan-koodeja ei ole pakko muistaa ulkoa, vaan tilalle voi myös kirjoittaa jonkun CoolBasicin sisäänrakennetuista näppäinvakioista. Esim. KeyHit(cbKeyA) tarkastaa, painetaanko J-näppäintä. Listan näppäinvakioista näet SCAN-taulukosta (linkki yllä).

Näppäinten tila päivitetään UpdateGame-kutsun aikana (tai DrawScreenissä, jos UpdateGamea ei kutsuta). Tämä tarkoittaa sitä, että et voi odottaa pääloopissa tiettyä aikaa ja tarkastaa onko näppäimen tila vieläkin ennallaan.

Code: Select all

    If Distance2(pelaaja1,pelaaja2)<30 And KeyHit(cbKeyQ)And KeyUp(cbKeyRight)Then ElämäB=ElämäB-4
    If Distance2(pelaaja1,pelaaja2)<30 And KeyHit(cbKeyW)And KeyUp(cbKeyRight)Then ElämäB=ElämäB-5
    If Distance2(pelaaja1,pelaaja2)<30 And KeyHit(cbKeyLeft)And KeyUp(cbKeyQ)Then ElämäA=ElämäA-5
    If Distance2(pelaaja1,pelaaja2)<30 And KeyHit(cbKeyDown)And KeyUp(cbKeyQ)Then Elämäa=ElämäA-4
Voin tarvittaessa laittaa vaikka koko pelin koodin.
Image

Locked