Tyhmät kysymykset (I/2011)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
User avatar
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset (I/2011)

Post by koodaaja » Sat Sep 10, 2011 4:06 pm

Koska ruutusi koko on 32 pikseliä ja CB käyttää koordinaattina yksittäisiä pikseleitä. Luvut eivät sen jälkeenkään täsmää, mutta jaa mX 32:lla niin liikut ainakin samankokoisessa koordinaatistossa.

User avatar
Paroni
Newcomer
Posts: 20
Joined: Sun Jan 16, 2011 3:39 am

Re: Tyhmät kysymykset (I/2011)

Post by Paroni » Sat Sep 10, 2011 4:22 pm

Tiedän.

Tarkoitin lähinnä miksi tuo luku on noin suuri kun Box 0, 0, grid, grid piirtää laatikon tuon sinisen laatikon viereen. Tuon klikkauksen mukaan taas X:n 0 -koordinaatti on jossain ihan muualla. En tiedä mietinkö tätä väärin mutta vaikuttaa jotenkin oudolta.

User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset (I/2011)

Post by Jonez » Sun Sep 11, 2011 11:34 am

Siis sekoat siinä, että vaikka piirrät kuvan kohtaan 0, 0, mX silti palauttaa siitä koordinaatista arvon 700 jotain?
mX ei sinänsä liity mitenkään kuvien piirtämiseen. Se ei edes liity sen valkoisen kursori-boksin piirtoon, vaikka molemmat hyödyntävät MouseX():ää ja -Y():tä. Mitä mX ja mY tekevät on se, että ne ottavat tietyn origopisteen, ja liikuttavat sitä pistettä juuri vastakkaiseen suuntaan kuin mihin kamera liikkuu. Näin saamme illuusion että (mX, mY) on tietty kiinteä piste peliavaruudessa, ja pystymme liikuttamaan kameraa suhteessa siihen.

Ongelma siis on se, että sinulla on oikeastaan kolme eri koordinaatistoa: ruutukoordinaatit, joihin voisit piirtää esim. kirjoittamalla Text 20, 20, "Hello World" (ei DrawToWorldilla). Sitten on maailmakoordinaatit, joihin objektit piirretään. Myös kuvat piirretään maailmakoordinaatteihin DrawToWorldin avulla. Sitten sinulla on ihan omat maailmakoordinaatit, jotka luodaan mX:llä ja mY:llä. Nämä koordinaatit kasvavat samaan suuntaan ja yhtä nopeasti kuin normaalitkin m-koordinaatit, mutta niiden origopiste on eri. Ja tämä johtuu yksinkertaisesti siitä kaavasta mitä käytät.

Käyttämäsi kaava on seuraavanlainen: (tämä on hieman eri kuin kaava jonka annoin, sekosin itsekin :). Toimii samalla tavalla.)

Code: Select all

mX = (ScreenWidth() / 2.0) + bX + CameraX()
mY = -((ScreenHeight() / 2.0) + bY - CameraY())
Kaavassa CameraX(), -CameraY() ovat muuttujia, jotka huolehtivat että piste liikkuu oikeaan suuntaan kun kameraa liikutetaan. -CameraY() koska kuvakoordinaatisto kasvaa vastakkaiseen suuntaan kuin objektikoordinaatisto.

bX ja bY ovat muuttujia, jotka säilövät halutun pisteen koordinaatistossa. Jos bX ja bY ovat (0, 0), mX:n ja mY:n palauttama piste on tämän oman koordinaatiston origo.

ScreenWidth() / 2, ScreenHeight() / 2 ovat nyt se origo. Tämä kertoo missä suhteessa uusi origo on alkuperäiseen kuvakoordinaatiston origoon. Tässä on ongelmasi: origosi on eri kuin ehkä haluat. Ja pääsemme ratkaisuun. Siirrämme origoa:

Code: Select all

mX = (-ScreenWidth() / 2.0) + bX + CameraX()
mY = -((-ScreenHeight() / 2.0) + bY - CameraY())
Ja nyt mX:n ja mY:n palauttamat arvot ovat identtiset maailmakoordinaatiston kanssa.

(Koordinaatistomuunnokset ovat minullekin aika vaikea asia, toivottavasti en nyt seonnut pahasti jossain seikassa. Koodin pitäisi kuitenkin toimia).
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War

User avatar
Laurenzo
Member
Posts: 85
Joined: Mon Apr 25, 2011 8:28 am
Location: Tampere
Contact:

Re: Tyhmät kysymykset (I/2011)

Post by Laurenzo » Sun Sep 11, 2011 5:59 pm

Kuinka pystyisin tekemään pause-tilan peliini?Eli kun Painaa näppäintä P niin esiin ilmestyy pausevalikko jossa on napit:
JATKA eli peli jatkuisi samasta kohdasta mihin se on pysäytetty
LOPETA lopettaa pelin.
Aloittelija koodari joka
osaa jo jotain (ehkä) :)
KOTISIVU

User avatar
Execute
Active Member
Posts: 110
Joined: Fri Feb 11, 2011 7:41 pm

Re: Tyhmät kysymykset (I/2011)

Post by Execute » Sun Sep 11, 2011 6:29 pm

Miten tiedän milloin tyyppikokoelmassa on jäljellä enää yksi jäsen?
SpaceCraft on kokopitkä peli! Nyt ladattavissa! Tsekkaa!

User avatar
Latexi95
Guru
Posts: 1164
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: Tyhmät kysymykset (I/2011)

Post by Latexi95 » Sun Sep 11, 2011 7:13 pm

Execute wrote:Miten tiedän milloin tyyppikokoelmassa on jäljellä enää yksi jäsen?

Code: Select all

määrä = 0
for each
   määrä + 1
next

if määrä = 1 then

endif

User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset (I/2011)

Post by Jonez » Sun Sep 11, 2011 7:21 pm

Execute:
Voit myös pitää globaalia muuttujaa, joka alkaa nollasta, lisääntyy yhdellä kun tyyppi luodaan ja vähentyy yhdellä kun se tuhotaan. Näin tiedät aina tyyppien määrän käymättä niitä läpi. Tämä on lähes pakollista muuttuvien taulukoiden kanssa.

Laurenzo:

Code: Select all

//Pääsilmukka
Repeat
    If KeyHit(CbKeyP) Then pause = Not pause
    
    If pause Then
        //Pausen päällä oleva koodi
        PiirraValikko()
    Else
        //Itse pelin koodi
        LiikutaPelaajia()
        LiikutaAmmuksia()
    DrawScreen
Forever
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War

jaahas
Advanced Member
Posts: 307
Joined: Sat Feb 06, 2010 12:36 am
Location: Tornio

Re: Tyhmät kysymykset (I/2011)

Post by jaahas » Sun Sep 11, 2011 7:49 pm

Yksinkertasempi?

Code: Select all

//pääsilmukka
Repeat

  //ohjelma tähän
  
  If KeyHit(cbkeyp) Then
    UpdateGame()
    Repeat
    
      //valikko tähän
      
      If KeyHit(cbkeyp) Then Exit

      DrawScreen
    Forever
    
  EndIf
  
  //tai tähän
  
  DrawScreen
Forever

Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Tyhmät kysymykset (I/2011)

Post by Awaclus » Sun Sep 11, 2011 8:04 pm

Itsehän olen toteuttanut pausen aina aliohjelmalla, selkeyttää mielestäni päälooppia kun ei ole jotain varsinaisesti peliin kuulumatonta seassa. Toisin sanoen näin:

Code: Select all

ukko = LoadObject ("Media\cow.bmp")

Repeat
    TranslateObject ukko, RightKey()*2-LeftKey()*2, UpKey()*2-DownKey()*2
    If KeyHit(cbkeyp) Then Gosub pause
    DrawScreen
Forever

pause:
Repeat
    DrawScreen
Until KeyHit(cbkeyp)
Return

User avatar
Noun
Newcomer
Posts: 19
Joined: Sun May 08, 2011 8:17 pm
Contact:

Re: Tyhmät kysymykset (I/2011)

Post by Noun » Tue Sep 13, 2011 3:20 pm

Saako CB:n Make- ja EditMapeilla tuotettuja karttoja tallennettua mitenkään?

User avatar
Latexi95
Guru
Posts: 1164
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: Tyhmät kysymykset (I/2011)

Post by Latexi95 » Tue Sep 13, 2011 3:24 pm

Noun wrote:Saako CB:n Make- ja EditMapeilla tuotettuja karttoja tallennettua mitenkään?
CoolBasicissa ei ole valmiina sellaista komentoa, mutta tilesterin karttaformaatti on varsin helppo(ohjeet latausfunktion tekoon löytyvät tilesterin asennuskansiosta), joten tallennus funktio on varsin helppo tehdä. Veikkaan kyllä, että aika monelta löytyy tarvittava koodi jostain arkistojen pohjalta. Itsekin tein joskus tuollaisen funktion, mutta sen lähdekoodi on kyllä tainnut jo hävitä.

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

Re: Tyhmät kysymykset (I/2011)

Post by axu » Tue Sep 13, 2011 4:05 pm

Noun wrote:Saako CB:n Make- ja EditMapeilla tuotettuja karttoja tallennettua mitenkään?
Tämmösen joskus tein (avaus- ja tallennusfunktiot):

Code: Select all

Dim TileAnim(1,1)   //TileAnim -taulukko sisältää tilejen animoinnin(koska coolbasicissa ei voi tarkistaa sitä jälkikäteen), TileAnim(TILE, ANIMAATION_PITUUS = 0/ANIMAATION_HITAUS = 1
Function OpenMap(FileName$, Tileset$="", PrintHeader = 0)
    f = OpenToEdit(FileName)
    '    If Not(ReadByte(f) = 40 And ReadByte(f) = 192 And ReadByte(f) = 13 And ReadByte(f) =  139) Then MakeError "Can't load map "+FileName+". Map is not valid Tilester 1.3 file"
        If PrintHeader Then
            Print ReadByte(f) + " " + ReadByte(f) + " " + ReadByte(f) + " " + ReadByte(f)
            WaitKey
        EndIf
        If Tileset = "" Then
            SeekFile f, 564
            For i = 0 To 255
                b = ReadByte(f)
                If b = 0 Then Exit Else Tileset = Tileset + Chr(b)
            Next i
        EndIf
        SeekFile f, 820
        TileCount   = ReadInt(f)
        TileWidth   = ReadInt(f)
        TileHeight  = ReadInt(f)
        Map = MakeMap(ReadInt(f), ReadInt(f), TileWidth, TileHeight)
        TilesetImg  = LoadImage(Tileset)
        PaintObject Map, TilesetImg
        For i = 0 To 3
            If Not(ReadByte(f) = 254-i And ReadByte(f) = 45-i And ReadByte(f) = 12-i And ReadByte(f) = 166-i) Then MakeError "Can't load map "+FileName+". Map layer "+i+" was corrupted"
            For Y = 1 To MapHeight()
                For X = 1 To MapWidth()
                    EditMap Map, i + (i = 1) - (i = 2), X, Y, ReadInt(f)
                Next X
            Next Y
        Next i
        If Not(ReadByte(f) = 250 And ReadByte(f) = 41 And ReadByte(f) = 8 And ReadByte(f) =  162) Then MakeError "Can't load map "+FileName+". Tile animation was corrupted"
        ReDim TileAnim(TileCount-1, 1)
        For i = 0 To TileCount-1
            TileAnim(i, 0) = ReadInt(f)
            TileAnim(i, 1) = ReadInt(f)
            SetTile i, TileAnim(i, 0), TileAnim(i, 1)
        Next i
        SeekFile f, 520
        MaskObject Map, ReadByte(f), ReadByte(f), ReadByte(f)
    CloseFile f
    
    Return Map
End Function

Function SaveMap(Map, FileName$, TilesetImg, Tileset$ = "", MaskRED = 0, MaskGREEN = 0, MaskBLUE = 0, Comment$ = "")
    f = OpenToWrite(FileName)
        WriteByte f, 40 : WriteByte f, 192 : WriteByte f, 13 : WriteByte f, 139
        WriteFloat f, 1.3
        For i = 1 To 512
            If i < Len(Comment) And i < 256 Then
                WriteByte f, Asc(Mid(Comment, i, 1))
            Else
                WriteByte f, 0
            EndIf
        Next i
        WriteByte f, MaskRED : WriteByte f, MaskGREEN : WriteByte f, MaskBLUE : WriteByte f, 0
        For i = 1 To 40
            WriteByte f, 0
        Next i
        For i = 1 To 256
            If i < Len(Tileset) Then
                WriteByte f, Asc(Mid(Tileset, i, 1))
            Else
                WriteByte f, 0
            EndIf
        Next i
        TileCount = (ImageWidth(TilesetImg)/(ObjectSizeX(Map) / MapWidth())) * (ImageHeight(TilesetImg)/(ObjectSizeY(Map) / MapHeight()))
        WriteInt f, TileCount
        WriteInt f, ObjectSizeX(Map) / MapWidth()
        WriteInt f, ObjectSizeY(Map) / MapHeight()
        WriteInt f, MapWidth()
        WriteInt f, MapHeight()
        For i = 0 To 3
            WriteByte f, 254-i : WriteByte f, 45-i : WriteByte f, 12-i : WriteByte f, 166-i
            For Y = 1 To MapHeight()
                For X = 1 To MapWidth()
                    WriteInt f, GetMap2(i + (i = 1) - (i = 2), X, Y)
                Next X
            Next Y
        Next i
        WriteByte f, 250 : WriteByte f, 41 : WriteByte f, 8 : WriteByte f, 162
        For i = 0 To TileCount-1
            WriteInt f, TileAnim(i, 0)
            WriteInt f, TileAnim(i, 1)
        Next i
    CloseFile f
EndFunction
Muistaakseni toimii hyvin. Minkäänlaista ohjetta en tähän kirjoittanut :P

Tietenkin suosittelen itse kokeilemaan tuon tekoa, kuten Latexi sanoikin, on Tilesterin formaatti helppo ja dokumentaatio riittävä.
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image

Geewilliam
Newcomer
Posts: 6
Joined: Sun Aug 21, 2011 11:19 am

Re: Tyhmät kysymykset (I/2011)

Post by Geewilliam » Tue Sep 13, 2011 5:21 pm

Täällä taas kysymässä...

Koodissani on ilmeisesti jotain häikkää, sillä kun tuosta valikosta menee "korkolaskuriin", tuleekin pelkää tyhjää. Ongelma varmaan on jossain drawscreen tms. komennossa, mutta en vain keksi missä =p.

Koodi siis tässä:
(itse aliohjelma löytyy vähän keskikohdan alapuolelta (korkolaskuri).)

Code: Select all

 
    SCREEN 500,250 
  
  'päävalikko
   valikkonappuloita = 3

    //luodaan nappuloille taulukko jossa toisen ulottuvuus kertoo onko kyseessä 
    //nappulan nimi (1) vai nappulafunktion palauttama arvo (0)

    Dim valikkokohta(valikkonappuloita-1,1) As String
     //asetetaan nappuloille nimet, nämähän voidaan toki vaikka ladata ulkoisesta tiedostostakin
    valikkokohta(0,1)="Uusi peli"
    valikkokohta(1,1)="korkolaskuri"
    valikkokohta(2,1)="Lopeta peli"


  
  
  
  
     Repeat

        // tässä päivitetään kaikkien nappuloiden tila, jos nappula on alhaalla niin valikkokohta(i,0)="1" muutoin valikkokohta(i,0)="0"
        For i=0 To valikkonappuloita-1
            valikkokohta(i,0)=Button(100,100+30*i,100,20,valikkokohta(i,1))
        Next i

        //jos nappula numero 2 eli lopetus on alhaalla niin lopetetaan
        If Int(valikkokohta(2,0)) Then End
        If Int(valikkokohta(1,0)) Then  
        Gosub korkolaskuri 
        EndIf 
        
       
       
     DrawScreen 
   
   Forever 
   
      
   // x, y koordinaatit
    // w,h koko
    // t painikkeen teksti
    // s painikkeen pyöreys

    Function Button(x,y,w,h,t$,s=5)
        If MouseX()>x And MouseY()>y And MouseX()<x+w And MouseY()<y+h Then
            If MouseDown(1) Then Color 180,180,180 Else Color 240,240,240
            If MouseUp(1) Then Return True 
        Else
            Color 200,200,200
        EndIf         
            Box x+s,y,w-(s*2),h     
            Box x,y+s,w,h-(s*2)
            Circle x,y,s*2
            Circle x+w-s*2,y,s*2
            Circle x+w-s*2,y+h-s*2,s*2
            Circle x,y+h-s*2,s*2
            Color cbblack
            CenterText x+w/2,y+h/2-TextHeight(t)/2,t$
    EndFunction 
  
     
     
     korkolaskuri: 'korkolaskuri-aliohjelma
     ClearText 
      xx#=""  'nollataan muuttujat
     yy#=""
     zz#=""
      Locate 10,10
        Repeat
            xx# = Input("Alkusumma ") 
            DrawScreen OFF 
        Until KeyHit(28)
   //tyhjennetään näppäinpuskuri ettei edellinen enterin painallus poistu suoraan seuraavastakin loopista
        ClearKeys
        //nollataan input seuraavaa kyselyä varten
    CloseInput
    
    Locate 10,20
    Repeat
            yy# = Input("Kuukausittainen korkoprosentti: ")
            DrawScreen OFF 
        Until KeyHit(28)
   //tyhjennetään näppäinpuskuri ettei edellinen enterin painallus poistu suoraan seuraavastakin loopista
        ClearKeys
        //nollataan input seuraavaa kyselyä varten
        CloseInput
        
     Locate 10,30   
    Repeat
            zz# = Input("Kuinka monta kuukautta?: ")
            DrawScreen OFF 
        Until KeyHit(28)
//tyhjennetään näppäinpuskuri ettei edellinen enterin painallus poistu suoraan seuraavastakin loopista
        ClearKeys
        //nollataan input seuraavaa kyselyä varten
        CloseInput
       
    aa#=yy*0.01+1.0 // lasketaan prosenttikerroin
    bb#=aa^zz //nostetaan prosenttikerroin potenssiin
    vastaus#=bb*xx //lasketaan vastaus
     
    ClearKeys
    
    Write "Vastaus on: "
    Write vastaus
    Print ""
    Print "paina enter palataksesi päävalikkoon"
    Repeat 
    If KeyHit (28)
    Return 
    EndIf 
    Forever 
   
   
    
    DrawScreen 
    

User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset (I/2011)

Post by Jonez » Tue Sep 13, 2011 5:47 pm

Riviltä ~80 puuttuu Return, jolla pääsisit takaisin valikkoon. Color taitaa olla 0, 0, 0; eli voit kirjoittaa mutta mitään ei oikeastaan näy. Koska komennat DrawScreen Off (etkä pelkkä DrawScreen), kuvaa ei tyhjennetä ja valikkokuva jää ruudulle.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War

Geewilliam
Newcomer
Posts: 6
Joined: Sun Aug 21, 2011 11:19 am

Re: Tyhmät kysymykset (I/2011)

Post by Geewilliam » Tue Sep 13, 2011 5:52 pm

Return löytyy riviltä ~119. Drawscreen off on tarkoituksella, jotta aikaisemmat textit jäävät näkyviin. (Kannattaisiko mieluummin käyttää addtextiä?)

e. Siis ei addtextiä voikaan käyttää, sillä nyt puhun noitsa inputeista. Tietysti ne voi korvata addtextillä inputin jälkeen.
EDIT:

(e2.) Kiitos avusta

Last edited by Geewilliam on Tue Sep 13, 2011 5:58 pm, edited 2 times in total.

User avatar
Latexi95
Guru
Posts: 1164
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: Tyhmät kysymykset (I/2011)

Post by Latexi95 » Tue Sep 13, 2011 5:55 pm

Jonez wrote:Riviltä ~80 puuttuu Return, jolla pääsisit takaisin valikkoon. Color taitaa olla 0, 0, 0; eli voit kirjoittaa mutta mitään ei oikeastaan näy. Koska komennat DrawScreen Off (etkä pelkkä DrawScreen), kuvaa ei tyhjennetä ja valikkokuva jää ruudulle.
Juu... Tai oikeastaa sieltä ei taida puuttua Returnia, mutta ainakin yksi drawscreen. Ja väri todellakin on jäännyt täysin mustaksi joten mitään ei näy. Sitten vielä kannattaa opetella sisentäminen. Se helpottaa niin omaakin kuin muidenkin koodinlukua. Ai niin ja Write ja Print eivät toimi oikein jos käyttät Drawscreeniä joten vaihdoin ne AddTextiin.
Tässä korjattu koodi:

Code: Select all

    SCREEN 500,250 
  
  'päävalikko
   valikkonappuloita = 3

    //luodaan nappuloille taulukko jossa toisen ulottuvuus kertoo onko kyseessä 
    //nappulan nimi (1) vai nappulafunktion palauttama arvo (0)

    Dim valikkokohta(valikkonappuloita-1,1) As String
     //asetetaan nappuloille nimet, nämähän voidaan toki vaikka ladata ulkoisesta tiedostostakin
    valikkokohta(0,1)="Uusi peli"
    valikkokohta(1,1)="korkolaskuri"
    valikkokohta(2,1)="Lopeta peli"


  
  
  
  
     Repeat

        // tässä päivitetään kaikkien nappuloiden tila, jos nappula on alhaalla niin valikkokohta(i,0)="1" muutoin valikkokohta(i,0)="0"
        For i=0 To valikkonappuloita-1
            valikkokohta(i,0)=Button(100,100+30*i,100,20,valikkokohta(i,1))
        Next i

        //jos nappula numero 2 eli lopetus on alhaalla niin lopetetaan
        If Int(valikkokohta(2,0)) Then End
        If Int(valikkokohta(1,0)) Then  
        Gosub korkolaskuri 
        EndIf 
        
       
       
     DrawScreen 
   
   Forever 
   
      
   // x, y koordinaatit
    // w,h koko
    // t painikkeen teksti
    // s painikkeen pyöreys

    Function Button(x,y,w,h,t$,s=5)
        If MouseX()>x And MouseY()>y And MouseX()<x+w And MouseY()<y+h Then
            If MouseDown(1) Then Color 180,180,180 Else Color 240,240,240
            If MouseUp(1) Then Return True 
        Else
            Color 200,200,200
        EndIf         
            Box x+s,y,w-(s*2),h     
            Box x,y+s,w,h-(s*2)
            Circle x,y,s*2
            Circle x+w-s*2,y,s*2
            Circle x+w-s*2,y+h-s*2,s*2
            Circle x,y+h-s*2,s*2
            Color cbblack
            CenterText x+w/2,y+h/2-TextHeight(t)/2,t$
    EndFunction 
  
     
     
korkolaskuri: 'korkolaskuri-aliohjelma
ClearText
Color cbWhite
xx#=""  'nollataan muuttujat
yy#=""
zz#=""
Locate 10,10
Repeat
    xx# = Input("Alkusumma ") 
    DrawScreen 
Until KeyHit(28)
//tyhjennetään näppäinpuskuri ettei edellinen enterin painallus poistu suoraan seuraavastakin loopista
ClearKeys
    //nollataan input seuraavaa kyselyä varten
CloseInput

Locate 10,20
Repeat
    yy# = Input("Kuukausittainen korkoprosentti: ")
    DrawScreen OFF 
Until KeyHit(28)
//tyhjennetään näppäinpuskuri ettei edellinen enterin painallus poistu suoraan seuraavastakin loopista
ClearKeys
    //nollataan input seuraavaa kyselyä varten
CloseInput
    
Locate 10,30   
Repeat
    zz# = Input("Kuinka monta kuukautta?: ")
    DrawScreen OFF 
Until KeyHit(28)
//tyhjennetään näppäinpuskuri ettei edellinen enterin painallus poistu suoraan seuraavastakin loopista
ClearKeys
    //nollataan input seuraavaa kyselyä varten
CloseInput
   
aa#=yy*0.01+1.0 // lasketaan prosenttikerroin
bb#=aa^zz //nostetaan prosenttikerroin potenssiin
vastaus#=bb*xx //lasketaan vastaus
 
ClearKeys

AddText "Vastaus on: " + vastaus
AddText ""
AddText "paina enter palataksesi päävalikkoon"
Repeat 
    If KeyHit (28)
        ClearText
        Return 
    EndIf
    DrawScreen
Forever 
   

Geewilliam
Newcomer
Posts: 6
Joined: Sun Aug 21, 2011 11:19 am

Re: Tyhmät kysymykset (I/2011)

Post by Geewilliam » Tue Sep 13, 2011 8:15 pm

Huoh, heti perään täällä, tuli koodissa uusi ongelma vastaan. Kun luen tiedostosta, cb pyöristää sieltä tulleen luvun lähimpään kokonaislukuun.
Eli, kun tiedostossa lukee vain "14.74", cb lukee sen ja tulostaa "15".

Code: Select all

x=OpenToRead("tiedosto") //tässä tiedostossa ei siis ole muuta, kuin yksi desimaali luku, esim. 14.74
  c=Float(ReadLine(x)) 
  
 Text 10,10,c
CloseFile x

DrawScreen   

WaitKey 

User avatar
Peltsi
Active Member
Posts: 121
Joined: Thu Sep 30, 2010 12:16 pm

Re: Tyhmät kysymykset (I/2011)

Post by Peltsi » Tue Sep 13, 2011 8:24 pm

Geewilliam wrote:Huoh, heti perään täällä, tuli koodissa uusi ongelma vastaan. Kun luen tiedostosta, cb pyöristää sieltä tulleen luvun lähimpään kokonaislukuun.
Eli, kun tiedostossa lukee vain "14.74", cb lukee sen ja tulostaa "15".

Code: Select all

x=OpenToRead("tiedosto") //tässä tiedostossa ei siis ole muuta, kuin yksi desimaali luku, esim. 14.74
  c=Float(ReadLine(x)) 
  
 Text 10,10,c
CloseFile x

DrawScreen   

WaitKey 
Käytä ReadFloat komentoa ReadLinen sijaan, sekä muuttuja c kannattaa olla c# (risuaita on kertoo cb:lle että muuttuja sisältää desimaaliluvun).

Geewilliam
Newcomer
Posts: 6
Joined: Sun Aug 21, 2011 11:19 am

Re: Tyhmät kysymykset (I/2011)

Post by Geewilliam » Tue Sep 13, 2011 8:32 pm

Kun laitoin readline, se heitti nolla. Muutin muutujan desimaalimuuttujaksi (oli unohtunut aikaisemmin) ja sit se heitti jotian ihan outoa. Sit vaihdoin sen takaisin readfloatiksi, ja städäm, toimii. Ongelma siis oli muuttujan väärässä tyypissä. (c# olisi ollut oikea, eikä c) Ei voinut tuota muistaa, kun muualla en ole joutunut muuttujaa mitenkään määrittelemään. =P

e. Sekoilen taas tekstissä. laitoin siis readfloatiksi ja sit takas readlineksi.

Geewilliam
Newcomer
Posts: 6
Joined: Sun Aug 21, 2011 11:19 am

Re: Tyhmät kysymykset (I/2011)

Post by Geewilliam » Wed Sep 14, 2011 4:16 pm

Hmh, ärsyttää, mutta pommitan lisää erittäin tyhmillä kysymyksillä.
Saanko if-lauseeseen ehdon "if x= >1 and <maara then...". Eli siis, jos x on suurempi, kuin 1 ja pienempi kuin muutuja maara. Tai olisiko joku hyvä keino saada jollain muulla komennolla? Tarkoitus siis saada tekemään jotain, kun/jos x on jokin luku 1-maara, jos ei, kysytään uudestaan tai tulee valitus. (Esim. while- voisi olla hyvä, että kysytään kunnes luku on 1-maara.)
EDIT:

ahhah, en laittanut siihen toiseen x_x. Kiitos!

Last edited by Geewilliam on Wed Sep 14, 2011 4:43 pm, edited 1 time in total.

Locked