Tyhmät kysymykset (I/2010)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
User avatar
Feuer
Devoted Member
Posts:520
Joined:Tue Jun 16, 2009 11:13 am
Contact:
Re: Tyhmät kysymykset (I/2010)

Post by Feuer » Wed Mar 24, 2010 12:31 pm

Palauttaahan input()kin sekä string - tyyppiä että lukutyyppejä. Coolbasic ei ole aivan turhantarkka tyyppitarkistuksissa, mikä aiheutti ainakin minulle hieman ongelmia C-kieliin siirryttäessä.
Asus P8P67 LE/Intel Core i5 2500K/ GTX560/ 8GT RAM/750GT HDDt + 120GT SSD + 13" Macbook Pro
Blogi - Peräpohjola - MERPG

Nassi_Setä
Advanced Member
Posts:281
Joined:Sat Jun 28, 2008 5:19 pm
Location:Hämeessä miä

Re: Tyhmät kysymykset (I/2010)

Post by Nassi_Setä » Wed Mar 24, 2010 4:14 pm

sankja wrote:Nassi_Setälle kysymys: Vaikka tuo tallennus ja lataus esimerkkisi toimiikin hyvin,niin ihmettelen seuraavaa...
Miten tuossa Nassi_Setän tallennus esimerkissä tuo latausjuttu pitäs ymmärtää, koska x ja y ladataan tiedostosta readline komennolla eli merkkeinä,niin miten circle käsky voi tulkita ne numeroiksi.Ja miten readline voi yleensäkään tallentaa x:ään ja y:hyn lataus kohdassa,kun ne eivät edes ole merkkijono muuttujia.
Voisiko Nassi_Setä tai joku muu valaista asiaa? :shock:
writeline tallentaa merkkijonoiksi eli jos avaat tallennuksen notepadilla näet x:n ja y:n arvon numeroina,
niin kuin ohjelma ne tallentaakin. Ja eikös numerotkin ole merkkejä ;)
EDIT:

hupsista tuli kirjoitettua vähän hepreaa ja unohdettua 1 asia.
x ja y on määritelty globaaleiksi eli tuo funktio esimerkkini on pahaa purkkaa.
IMO parastapa toteuttaa tallennus\lataus on laittaa koodi suoraan päälooppiin ja unohtaa monimutkaiset funktiot
ja turhat globaali tsydeemit.

edit2: siis mäen osaa näit juttuja :D , mutta kunhan pädin :mrgreen:
\../(-_-)\../ <---klick MyBrute Image
Jotain evilii on tekeillä....

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

Re: Tyhmät kysymykset (I/2010)

Post by sankja » Wed Mar 24, 2010 4:49 pm

Niin mutta eikös kokonaisluku muuttujiin x ja y pitäisi pystyä tallentamaan vain kokonaislukuja,eikä lainkaan merkkejä.Ja mitä tuo .dat pääte tiedostossa tarkoittaa oikeestaans. :roll:

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

Re: Tyhmät kysymykset (I/2010)

Post by phons » Wed Mar 24, 2010 4:51 pm

Jos yrität laittaa kokonaislukumuuttujaan jonkun merkkijonon jossa on jotain se pistää muutuujan arvoksi 1, muuten nolla Vinkki: kun luet tiedostosta merkkijonon pistä se int muotoon Int() funktiolla. Ja nuo päätteet, ainakaan .dat, eivät merkitse mitään, jotkin ohjelmat vain voivat avata automaagisesti joitakin tiedostoja niiden päätteiden perusteella.
Image

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

Re: Tyhmät kysymykset (I/2010)

Post by jaahas » Wed Mar 24, 2010 4:52 pm

Nassi_Setä wrote:
sankja wrote:Nassi_Setälle kysymys: Vaikka tuo tallennus ja lataus esimerkkisi toimiikin hyvin,niin ihmettelen seuraavaa...
Miten tuossa Nassi_Setän tallennus esimerkissä tuo latausjuttu pitäs ymmärtää, koska x ja y ladataan tiedostosta readline komennolla eli merkkeinä,niin miten circle käsky voi tulkita ne numeroiksi.Ja miten readline voi yleensäkään tallentaa x:ään ja y:hyn lataus kohdassa,kun ne eivät edes ole merkkijono muuttujia.
Voisiko Nassi_Setä tai joku muu valaista asiaa? :shock:
writeline tallentaa merkkijonoiksi eli jos avaat tallennuksen notepadilla näet x:n ja y:n arvon numeroina,
niin kuin ohjelma ne tallentaakin. Ja eikös numerotkin ole merkkejä ;)
EDIT:

hupsista tuli kirjoitettua vähän hepreaa ja unohdettua 1 asia.
x ja y on määritelty globaaleiksi eli tuo funktio esimerkkini on pahaa purkkaa.
IMO parastapa toteuttaa tallennus\lataus on laittaa koodi suoraan päälooppiin ja unohtaa monimutkaiset funktiot
ja turhat globaali tsydeemit.

edit2: siis mäen osaa näit juttuja :D , mutta kunhan pädin :mrgreen:
elikkä?

MrMonday
Advanced Member
Posts:378
Joined:Fri Oct 10, 2008 2:35 pm

Re: Tyhmät kysymykset (I/2010)

Post by MrMonday » Wed Mar 24, 2010 7:36 pm

jaahas wrote:
Nassi_Setä wrote:
sankja wrote:Nassi_Setälle kysymys: Vaikka tuo tallennus ja lataus esimerkkisi toimiikin hyvin,niin ihmettelen seuraavaa...
Miten tuossa Nassi_Setän tallennus esimerkissä tuo latausjuttu pitäs ymmärtää, koska x ja y ladataan tiedostosta readline komennolla eli merkkeinä,niin miten circle käsky voi tulkita ne numeroiksi.Ja miten readline voi yleensäkään tallentaa x:ään ja y:hyn lataus kohdassa,kun ne eivät edes ole merkkijono muuttujia.
Voisiko Nassi_Setä tai joku muu valaista asiaa? :shock:
writeline tallentaa merkkijonoiksi eli jos avaat tallennuksen notepadilla näet x:n ja y:n arvon numeroina,
niin kuin ohjelma ne tallentaakin. Ja eikös numerotkin ole merkkejä ;)
EDIT:

hupsista tuli kirjoitettua vähän hepreaa ja unohdettua 1 asia.
x ja y on määritelty globaaleiksi eli tuo funktio esimerkkini on pahaa purkkaa.
IMO parastapa toteuttaa tallennus\lataus on laittaa koodi suoraan päälooppiin ja unohtaa monimutkaiset funktiot
ja turhat globaali tsydeemit.

edit2: siis mäen osaa näit juttuja :D , mutta kunhan pädin :mrgreen:
elikkä?
Itse katsoin parhaaksi tehdä tuon systeemin GoSub-aliohjelman avulla, eli periaatteessa sama kuin funktio..

Code: Select all

A = 0

Repeat
    
        A + 1
        
    ClearText
    
    AddText "A = "+A
    
    AddText "Enter = Tallenna"
    AddText "Backspace = Lataa"
    
    If KeyHit(28) Then Gosub Tallenna // 28 = Enter
    If KeyHit(14) Then Gosub Lataa // 14 = Backspace
    
    DrawScreen
    
Forever

Tallenna:
    Tallennus = OpenToWrite("Tallennus.dat")
        WriteLine Tallennus, A
    CloseFile Tallennus
Return

Lataa:
    Tallennus = OpenToRead("Tallennus.dat")
       A = ReadLine(Tallennus)
    CloseFile Tallennus
Return 
Koodia ei ole pahemmin kommentoitu, mutta aika helppoa huttua tuon pitäisi olla.. Toivottavasti on jotain apua..

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

Re: Tyhmät kysymykset (I/2010)

Post by sankja » Wed Mar 24, 2010 8:45 pm

Tota?! No ,kiitokset avusta.Elikkäs yhteenvetona tuosta vois vetäistä ,että
-readline lukee tiedostossa olevan numeron numerona,jos on näin: a=readline(f)
-ja merkkeinä ,jos on näin: a$=readline(f).
Elikkä lukemistapa riippuisi muuttujasta,toivottavasti tässä on perää. :?

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

Re: Tyhmät kysymykset (I/2010)

Post by Viltzu » Wed Mar 24, 2010 9:16 pm

sankja wrote:Tota?! No ,kiitokset avusta.Elikkäs yhteenvetona tuosta vois vetäistä ,että
-readline lukee tiedostossa olevan numeron numerona,jos on näin: a=readline(f)
-ja merkkeinä ,jos on näin: a$=readline(f).
Elikkä lukemistapa riippuisi muuttujasta,toivottavasti tässä on perää. :?
Wut? En usko tuossa olevan mitään perää. ReadInt lukee 32bittisen kokonaisluvun, ReadLine sekä ReadString lukevat vain merkkijonon. Ja jos yrität laittaa muuttujaan jota ei ole määritelty merkkijonoksi, muuttujassa tulee olemana 0 tai 1.
Last edited by Viltzu on Wed Mar 24, 2010 9:18 pm, edited 1 time in total.

User avatar
MetalRain
Active Member
Posts:188
Joined:Sun Mar 21, 2010 12:17 pm
Location:Espoo

Re: Tyhmät kysymykset (I/2010)

Post by MetalRain » Wed Mar 24, 2010 9:17 pm

sankja wrote:Elikkä lukemistapa riippuisi muuttujasta,toivottavasti tässä on perää. :?
Lukemistapa ei riipu muuttujasta koska readline aina palauttaa merkkijonon. Eli ohjaa teksti merkkijonomuuttujaan ($-merkki muuttujanimen lopussa) niin saat sen varmasti oikeassa muodossa otettua talteen. Jos koitat sijoittaa merkkijonoa kokonaislukumuuttujaan niin CoolBasic koittaa muuntaa sen sellaiseksi. Esim.

Code: Select all

SCREEN 800,600
a = "11x11"
b$ = "11x11"

Print "numeroksi suoraan muunnettuna: "+a+" merkkijonona: "+b$
WaitKey 

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

Re: Tyhmät kysymykset (I/2010)

Post by phons » Wed Mar 24, 2010 9:27 pm

Jos haluat kokonaisluvun ulos ReadLine:llä tee näin: Int(Readline(file)) tai jos haluat desimaalin niin Float(Readline(file))
Image

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

Re: Tyhmät kysymykset (I/2010)

Post by Feuer » Wed Mar 24, 2010 10:13 pm

Code: Select all

f=OpenToRead("tekstitiedosto.txt")

Dim _int(3) As Integer

For i=0 To 2
    _int(i)=ReadLine(f)
Next i

For i=0 To 2
    Text 0,10*i, _int(i)
Next i

Text 0,10*(i+1), ReadLine(f)
DrawScreen
WaitKey

Code: Select all

1
2
32
Ja katso, tekstiä!
Tallentakaapa ylläoleva tiedostoon nimeltä "tekstitiedosto.txt" ja ajakaa sorsa samasta kansiosta ja ihastelkaa, kuinka ReadLine sijoittaa Integer-taulukkoon vaikka mitä.

E: Ja sitten kun pätemishalun laannuttua tutkin ylläolevia vastauksia, huomasin demonstroineeni täysin saman mitä yllä sanottiin...
Asus P8P67 LE/Intel Core i5 2500K/ GTX560/ 8GT RAM/750GT HDDt + 120GT SSD + 13" Macbook Pro
Blogi - Peräpohjola - MERPG

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

Re: Tyhmät kysymykset (I/2010)

Post by sankja » Thu Mar 25, 2010 11:02 am

Joo,ny selkis,kiitokset kaikille asiaa miettineille.
Elikkä jos writelinella on kirjoitettu tiedostoon vaikka luku 235 merkkijonona,niin se readlinella luetaan sieltä merkkijonona.
Mutta jos se luetaankin näin A=readline(f),niin tuo kokonaislukumuuttuja A muuttaa tuon merkkijono-"luvun" oikeaksi luvuksi 235.
Elikkä Mr Mondayn esimerkissä on nyt kommentoituna tuo kohta. :D

Code: Select all

A = 0

Repeat
    
        A + 1
        
    ClearText
    
    AddText "A = "+A
    
    AddText "Enter = Tallenna"
    AddText "Backspace = Lataa"
    
    If KeyHit(28) Then Gosub Tallenna // 28 = Enter
    If KeyHit(14) Then Gosub Lataa // 14 = Backspace
    
    DrawScreen
    
Forever

Tallenna:
    Tallennus = OpenToWrite("Tallennus.dat")
        'writeline tallentaa luvun tiedostoon merkkijonona
        WriteLine Tallennus, A
    CloseFile Tallennus
Return

Lataa:
    Tallennus = OpenToRead("Tallennus.dat")
        
        'tässä readline lukee koordinaatin merkkijonona
        'tiedostosta ja tuo merkkijono sijoitetaan kokonaisluku
        'muuttujaan->kokonaislukumuuttuja puolestaan muuttaa
        'tuon koordinaatin kokonaisluvuksi
        A = ReadLine(Tallennus)
    CloseFile Tallennus
Return 

naabster
Member
Posts:56
Joined:Sat Sep 22, 2007 10:10 am

Re: Tyhmät kysymykset (I/2010)

Post by naabster » Thu Mar 25, 2010 11:20 pm

eli mikä tässä koodissani mättää ,kun yritän saada vihollista pyörtymään 5 sekunniksi.
kun pyörrytän vihollisen niin se ei aina toimi, joten uskon että se on tuon koodinpätkän vika :S

Code: Select all

If newenemy\pyörtynyt=1 Then 
   If Timer()>seisoo+5000 Then 
        seisoo=Timer()
If newenemy\pyörtynyt=0
        EndIf
EndIf 

User avatar
temu92
Web Developer
Web Developer
Posts:1226
Joined:Mon Aug 27, 2007 9:56 pm
Location:Gamindustri
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by temu92 » Thu Mar 25, 2010 11:26 pm

En oo ihan varma miten sen voi sanoa, jotenkin siellä väärässä paikoissa EndIf tai jotain muuta.

Kokeileppas toimiiko tää:

Code: Select all

If newenemy\pyörtynyt=1 and Timer()>seisoo+5000 Then
	seisoo=Timer()
	newenemy\pyörtynyt=0
EndIf

naabster
Member
Posts:56
Joined:Sat Sep 22, 2007 10:10 am

Re: Tyhmät kysymykset (I/2010)

Post by naabster » Fri Mar 26, 2010 12:21 am

oho laitoin koodini väärin tuohon, mutta kuitenkin temu92 koodi on suunilleen samanlainen. Viholliset stunaantuu 1-5 sekunniksi, ei ollenkaan ja väillä sen 5 sekunnin ylikin, mistä tämä johtuu :?:
fixed

Code: Select all

If newenemy\pyörtynyt=1 Then 
   If Timer()>seisoo+5000 Then 
        seisoo=Timer()
newenemy\pyörtynyt=0
        EndIf
EndIf 

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/2010)

Post by koodaaja » Fri Mar 26, 2010 3:20 am

Näyttäisi siltä, että sinulla on vain yksi "seisoo" -muuttuja, jolloin vihollisten pyörtymiset vaikuttavat toisiinsa. Todennäköisesti haluat kuitenkin tehdä newenemylle kentän, joka kertoo seisomistilanteen.

Lisäksi nimi "newenemy" vähän pelottaa, koska se kuulostaa vain uusimmalta viholliselta eikä for each-loopissa läpikäytävältä.

User avatar
Nameless_One
Member
Posts:63
Joined:Fri Mar 26, 2010 5:05 pm

Re: Tyhmät kysymykset (I/2010)

Post by Nameless_One » Fri Mar 26, 2010 6:18 pm

Minä olen tehnyt Final Fantasy 1 kaltaista roolipeliä ja mulla on tullut törmäyksessä ongelmia. Tässä on minun koodi.

Code: Select all

ukko=LoadObject("C:\Program Files\Coolbasic\Media\guy.bmp")

pelaaja=LoadObject("C:\Program Files\Coolbasic\Media\guy.bmp")

PositionObject ukko,83,74

MaskObject ukko,255,255,255

MaskObject pelaaja,255,255,255

x= 155
y= 155
s = 0 ' 0 = perustilanne, 1 = ylös, 2 = oikealle, 3 = alas, 4 = vasemmalle
i = 0 ' apumuuttuja joka laskee kierroksia

SetupCollision pelaaja,ukko,1,1,2

Repeat

    ScreenPositionObject pelaaja,x,y        

    If LeftKey() And s=0 Then  
      s=4        
      i=1
      PlayObject pelaaja,8,9
    EndIf
    If RightKey() And s=0 Then
      s=2
      i=1
      PlayObject pelaaja,6,7
    EndIf
    If UpKey() And s=0 Then
      s=1
      i=1
      PlayObject pelaaja,4,5
    EndIf
    If DownKey() And s=0 Then
       s=3
       i=1
       PlayObject pelaaja,1,2
    EndIf

    If s>0 And i>0 Then 
        If s=1 Then y=y-1
        If s=2 Then x=x+1
        If s=3 Then y=y+1
        If s=4 Then x=x-1
        i=i+1
    EndIf 
     
    If i = 17 Then
      s=0
      i=0
    EndIf

    DrawScreen
     
Until EscapeKey() 
Minulla pelaaja törmää ukkoon ja kun on vähän aikaa liikkunut ukkoa päin, niin pelaaja mystisesti hyppää ukon toiselle puolelle.En tiedä miten korjata ongelma, joten apua tarttis.
Projektit:
Semmonen jännä tasoloikka

Youtube-kanavani
Uusin video: Pelataas LoZ Oracle of Seasons - Osa 14 - Tarm Rauniot

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

Re: Tyhmät kysymykset (I/2010)

Post by Feuer » Fri Mar 26, 2010 7:40 pm

Varmaan kerran ennenkin kysytty, mutta miten sai kaivettua objektin X:n ja Y:n ruutukoordinaatteina?

Danke, Jonez. CBKK helpottaisi tätä touhua kummasti... :D
Last edited by Feuer on Fri Mar 26, 2010 9:44 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

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

Re: Tyhmät kysymykset (I/2010)

Post by Jonez » Fri Mar 26, 2010 8:29 pm

@Feuer: objektien koordinaattien erot ruutukoordinaateista:

1.
obj_origoX = ruutu_origoX + ruutu_leveys / 2
obj_origoY = -ruutuOrigoY - ruutu_korkeus / 2

2. Objekteihin vaikuttaa kameran sijainti, kuviin ei.

Noista säätämällä saat ;)

@Nameless_One:
Ongelmasi johtuu siitä, että vaikka ukko törmää esteeseen, x- ja y-koordinaatteja kasvatetaan silti jos etenemistä jatketaan. Kokeile vaikka kirjoittamalla ko. koordinaatit ruudulle. Kun koordinaatit ovat kohdassa jossa esteen törmäysalue ei enää vaikuta, ukko "hyppää" tähän kohtaan. SetupCollision on tarkoitettu käytettäväksi enemmänkin Translate- ja MoveObject-komentojen kanssa.

Mutta ei huolta. SetupCollision on aika huono valinta tällaisessa systeemissä muutenkin. Tee sen sijaan näin: Aina kun objektille annetaan käsky liikkua eteenpäin, tehdään aluksi tarkastus onko edessä seinä. Jos on, etenemistä ei suoriteta. Tässä on erittäin hyödyllistä käyttää vaikka kaksiulotteista taulukkoa.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War

User avatar
Nameless_One
Member
Posts:63
Joined:Fri Mar 26, 2010 5:05 pm

Re: Tyhmät kysymykset (I/2010)

Post by Nameless_One » Fri Mar 26, 2010 8:45 pm

@Jonez
Kiitos! :D Ja nyt sitten jatkamaan! :)
Projektit:
Semmonen jännä tasoloikka

Youtube-kanavani
Uusin video: Pelataas LoZ Oracle of Seasons - Osa 14 - Tarm Rauniot

Locked