Tyhmät kysymykset (I/2011)
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: Tyhmät kysymykset (I/2011)
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.
Re: Tyhmät kysymykset (I/2011)
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.
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.
Re: Tyhmät kysymykset (I/2011)
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.)
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:
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).
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())
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())
(Koordinaatistomuunnokset ovat minullekin aika vaikea asia, toivottavasti en nyt seonnut pahasti jossain seikassa. Koodin pitäisi kuitenkin toimia).
Re: Tyhmät kysymykset (I/2011)
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.
JATKA eli peli jatkuisi samasta kohdasta mihin se on pysäytetty
LOPETA lopettaa pelin.
Aloittelija koodari joka
KOTISIVU
Re: Tyhmät kysymykset (I/2011)
Miten tiedän milloin tyyppikokoelmassa on jäljellä enää yksi jäsen?
SpaceCraft on kokopitkä peli! Nyt ladattavissa! Tsekkaa!
Re: Tyhmät kysymykset (I/2011)
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
Re: Tyhmät kysymykset (I/2011)
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:
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
Re: Tyhmät kysymykset (I/2011)
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
Re: Tyhmät kysymykset (I/2011)
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
Re: Tyhmät kysymykset (I/2011)
Saako CB:n Make- ja EditMapeilla tuotettuja karttoja tallennettua mitenkään?
Re: Tyhmät kysymykset (I/2011)
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ä.Noun wrote:Saako CB:n Make- ja EditMapeilla tuotettuja karttoja tallennettua mitenkään?
Re: Tyhmät kysymykset (I/2011)
Tämmösen joskus tein (avaus- ja tallennusfunktiot):Noun wrote:Saako CB:n Make- ja EditMapeilla tuotettuja karttoja tallennettua mitenkään?
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
Tietenkin suosittelen itse kokeilemaan tuon tekoa, kuten Latexi sanoikin, on Tilesterin formaatti helppo ja dokumentaatio riittävä.
-
- Newcomer
- Posts: 6
- Joined: Sun Aug 21, 2011 11:19 am
Re: Tyhmät kysymykset (I/2011)
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).)
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
Re: Tyhmät kysymykset (I/2011)
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.
-
- Newcomer
- Posts: 6
- Joined: Sun Aug 21, 2011 11:19 am
Re: Tyhmät kysymykset (I/2011)
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.
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.
Re: Tyhmät kysymykset (I/2011)
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.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.
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
-
- Newcomer
- Posts: 6
- Joined: Sun Aug 21, 2011 11:19 am
Re: Tyhmät kysymykset (I/2011)
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".
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
Re: Tyhmät kysymykset (I/2011)
Käytä ReadFloat komentoa ReadLinen sijaan, sekä muuttuja c kannattaa olla c# (risuaita on kertoo cb:lle että muuttuja sisältää desimaaliluvun).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
-
- Newcomer
- Posts: 6
- Joined: Sun Aug 21, 2011 11:19 am
Re: Tyhmät kysymykset (I/2011)
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.
e. Sekoilen taas tekstissä. laitoin siis readfloatiksi ja sit takas readlineksi.
-
- Newcomer
- Posts: 6
- Joined: Sun Aug 21, 2011 11:19 am
Re: Tyhmät kysymykset (I/2011)
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.)
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.