Tyhmät kysymykset (I/2011)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
TheFish
Developer
Developer
Posts: 477
Joined: Mon Aug 27, 2007 9:28 pm
Location: Joensuu

Re: Tyhmät kysymykset (I/2011)

Post by TheFish »

Chaosworm wrote:Kyselin joku aika sitten (taisi olla viime vuonna?), miten tyyppikokoelman jäsenet saadaan järjestettyä suuruusjärjestykseen jonkin field-muuttujan mukaan. Vastausta ei löytynyt, joten projektini (Swiss-järjestelmään pohjautuva turnausjärjestämistä helpottava kirjanpito-ohjelma) jäätyi kunnes tänään keksin, miten haluttuun tulokseen päästiin ilman tyyppikokoelman järjestämistä. Nyt tuli vastaan toinen ongelma:

Miten saan tarkistettua, onko tyyppikokoelman jäseniä parillinen vai pariton määrä?
Itsestäänselvin vastaus on tietysti loopata kokoelman läpi. CB:ssä ei taida olla mitään keinoa saada kokoa ulos muuten. (edit: ellet sitten pidä siitä kirjaa aina lisäysten/poistojen yhteydessä...)

Code: Select all

parillinen = true
for t.tyyppi = each tyyppi
    parillinen = not parillinen
next t.tyyppi
CoolBasic henkilökuntaa
Kehittäjä
Dimple
Active Member
Posts: 103
Joined: Wed Nov 17, 2010 5:43 pm

Re: Tyhmät kysymykset (I/2011)

Post by Dimple »

Olipas TheFishillä jännä ratkaisu. :D Hieman matemaattisempi ratkaisu on se, että lasketaan jakojäännös jaettaessa jäsenten määrä kakkosella ja jos tulos on nolla on määrä parillinen, muuten pariton.

Mutta mikä siitä tyyppikokoelman järjestelemisestä ongelmallisen tekee? Eikös tyyppikokoelma kuitenkin ole vain kaksisuuntainen linkitetty lista. Kai niitä jäseniä pystyy vapaasti liikuttelemaan? Jos ongelmana oli itse järjestelyalgoritmi, niin bubblesorthan on yksinkertainen toteuttaa ja pienillä jäsenten määrillä ihan käyttökelpoinen.
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Tyhmät kysymykset (I/2011)

Post by Awaclus »

TheFish: Kiitos! Jotenkin aivot olivat ihan jumissa aamulla.
Dimple wrote:Mutta mikä siitä tyyppikokoelman järjestelemisestä ongelmallisen tekee? Eikös tyyppikokoelma kuitenkin ole vain kaksisuuntainen linkitetty lista. Kai niitä jäseniä pystyy vapaasti liikuttelemaan? Jos ongelmana oli itse järjestelyalgoritmi, niin bubblesorthan on yksinkertainen toteuttaa ja pienillä jäsenten määrillä ihan käyttökelpoinen.
Olen joka tapauksessa toteuttanut asian jo toisella tavalla, joka olikin paljon parempi, joten tätä ongelmaa ei enää tarvitse miettiä paitsi jos ihan välttämättä haluaa.
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 »

Minä teen junasimulaattoria mutta rata (eli kartta)ei näy.
Olisko jotain vinkkejä :?:
Aloittelija koodari joka
osaa jo jotain (ehkä) :)
KOTISIVU
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Tyhmät kysymykset (I/2011)

Post by Awaclus »

Laurenzo wrote:Minä teen junasimulaattoria mutta rata (eli kartta)ei näy.
Olisko jotain vinkkejä :?:
Valitettavasti olen nyt koulussa ja kristallipalloni sattui jäämään kotiin, joten on vähän hankalaa auttaa tietämättä esim, miten olet asiaa yrittänyt toteuttaa tms.
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: Tyhmät kysymykset (I/2011)

Post by temu92 »

Laurenzo wrote:Minä teen junasimulaattoria mutta rata (eli kartta)ei näy.
Olisko jotain vinkkejä :?:
Piirrä rata?

Ilman koodia tai mitään tarkempaa ongelman kuvausta parempaa ohjetta ei voi antaa. Ellei jollain ole antaa kristallipalloa lainaksi?
Kumiankka
Member
Posts: 65
Joined: Wed May 18, 2011 5:17 pm
Location: Artjärvi

Re: Tyhmät kysymykset (I/2011)

Post by Kumiankka »

Mitenkähän piirtäisin täytetyn neliön haluttuun kulmaan? Yritin kikkailla cosin, sinin ja trifillerin kanssa mutta tuloksista tuli aika epämääräisiä... :|
User avatar
Timblex
Advanced Member
Posts: 252
Joined: Sun Apr 11, 2010 10:37 am
Location: Kouvola

Re: Tyhmät kysymykset (I/2011)

Post by Timblex »

Kumiankka wrote:Mitenkähän piirtäisin täytetyn neliön haluttuun kulmaan? Yritin kikkailla cosin, sinin ja trifillerin kanssa mutta tuloksista tuli aika epämääräisiä... :|
esimerkiksi näin:

Code: Select all

img=MakeImage(50,50) 'Luodaan 50*50 kokoinen kuva
DrawToImage img 'piirtokomennot kuvaan
Box 0,0,50,50 'laatikko
DrawToScreen 'piirto ruudulle
RotateImage img,45 'käännetään kuvaa
DrawImage img,100,100 'piirretään kuva
DrawScreen 'piirretään ruutu
WaitKey  
Entinen timpe99...
Demokisa 2013 demo valmis, Check it out!
Dimple
Active Member
Posts: 103
Joined: Wed Nov 17, 2010 5:43 pm

Re: Tyhmät kysymykset (I/2011)

Post by Dimple »

Kumiankka wrote:Mitenkähän piirtäisin täytetyn neliön haluttuun kulmaan? Yritin kikkailla cosin, sinin ja trifillerin kanssa mutta tuloksista tuli aika epämääräisiä... :|
Timpen ehdotus on ehdottomasti helpoin, mutta jos haluat tietää, miten sen saisi tehtyä niiden trigonometristen fuonktioiden avulla niin tässä on jonkinlainen selitys. Voi olla hivenen hankalan kuuloista, jos et ole tottunut vektoreihin.

Neliön kulmion koordinaatit saa laskettua muodostamalla vektorit neliön keskipisteestä kulmiin ja kertomalla niitä vektoreita rotaatiomatriisilla. Käytännössä vektori siis muodostetaan niin, että vektorin ensimmäinen komponentti saadaan vähentämällä pisteen x-koordinaatista neliön keskipisteen x-koordinaatti ja toinen komponentti saadaan vähentämällä pisteen y-koordinaatista neliön keskipisteen y-koordinaatti. Eli esim.

Code: Select all

(x2-x1, y2-y1)
Tämän jälkeen kyseistä vektoria kerrotaan rotaatiomatriisilla ja lopputuloksena on jotain tämännäköistä (voin selittää koko prosessin, jos jaksaa kiinnostaa):

Code: Select all

x: cos(kulma)*(x2-x1) - sin(kulma)*(y2-y1)
y: sin(kulma)*(x2-x1) + cos(kulma)*(y2-y1) 
Jos haluat rotaation toiseen suuntaan, niin

Code: Select all

x: cos(kulma)*(x2-x1) + sin(kulma)*(y2-y1)
y: sin(kulma)*(x2-x1) - cos(kulma)*(y2-y1)
Lopulliset koordinaatit saat lisäämällä vektorit komponeittain neliön koordinaatteihin. Eli

Code: Select all

newx = x1 + cos(kulma)*(x2-x1) - sin(kulma)*(y2-y1)
newy = y1 + sin(kulma)*(x2-x1) + cos(kulma)*(y2-y1) 
Toivottavasti ei tullut kovin pahoja ajatusmokia. :D Käytännön toteutus kyllä kannattaa ehdottomasti tehdä Timpen ehdottamalla tavalla, jos et välttämättä halua käydä läpi, mitä siinä taustalla tapahtuu.

EDIT: Lipsahdus korjattu. :)
Last edited by Dimple on Sun May 22, 2011 10:42 pm, edited 1 time in total.
Kumiankka
Member
Posts: 65
Joined: Wed May 18, 2011 5:17 pm
Location: Artjärvi

Re: Tyhmät kysymykset (I/2011)

Post by Kumiankka »

Ajatus pätkii kun ei tullut nukuttua riittävästi... Mikä tässä on vikana ja Onko tämä edes yhtään sinne päin?

Code: Select all

Function Box2(_x#, _y#, _hsize#, _vsize#, _angle#)
    
    x1 = _x  - _hsize / 2                 // vas ylä
    y1 = _y  - _vsize / 2
    xx1 = _x + Cos(_angle)*(x1-_x) - Sin(_angle)*(y1 - _y)
    yy1 = _y + Sin(_angle)*(y1-_y) + Cos(_angle)*(x1 - _x)
    
    x2  = _x  + _hsize / 2                // oik ylä
    y2  = _y  - _vsize / 2
    xx2 = _x + Cos(_angle)*(x2-_x) - Sin(_angle)*(y2 - _y)
    yy2 = _y + Sin(_angle)*(y2-_y) + Cos(_angle)*(x2 - _x)    
    
    x3  = _x  - _hsize / 2                // vas ala
    y3  = _y  + _vsize / 2
    xx3 = _x + Cos(_angle)*(x3-_x) - Sin(_angle)*(y3 - _y)
    yy3 = _y + Sin(_angle)*(y3-_y) + Cos(_angle)*(x3 - _x)
    
    x4  = _x  + _hsize / 2                // oik ala
    y4  = _y  + _vsize / 2
    xx4 = _x + Cos(_angle)*(x4-_x) - Sin(_angle)*(y4 - _y)
    yy4 = _y + Sin(_angle)*(y4-_y) + Cos(_angle)*(x4 - _x)
    
    //trifiller(xx1 , yy1 , xx2 , yy2 , xx3 , yy3 )
    //trifiller(xx2 , yy2 , xx3 , yy3 , xx4 , yy4 )
    Line xx1,yy1,xx2,yy2
    Line xx2,yy2,xx3,yy3
    Line xx3,yy3,xx4,yy4
    Line xx4,yy4,xx1,yy1
    
EndFunction
User avatar
MetalRain
Active Member
Posts: 188
Joined: Sun Mar 21, 2010 11:17 am
Location: Espoo

Re: Tyhmät kysymykset (I/2011)

Post by MetalRain »

Enpä tuota rotaatiomatriisikikkaa oikein omaksunut, mutta ajattelin että tämän voi ajatella helpomminkin.

Tässä siis ideana että lasketaan nelikulmion kulman koordinaattien etäisyys keskipisteestä x- ja y-suunnassa. Tällöin muiden kärkipisteiden koordinaatit saadaan vähentämällä tai lisäämällä samaiset koordinaatit keskipisteen koordinaateihin.

Code: Select all

SCREEN 800,600

angplus#=1

Repeat 

    z#=MouseMoveZ()
    
    Randomize 9001

    If z# Then angplus#=z#

    ang#=ang#+angplus#
    
    Lock
        For i=0 To 1000
            Box2(MouseX()+Rand(-800,800),MouseY()+Rand(-600,600), Rand(10,100),Rand(10,100), ang#+(ang#*i/200.0))
        Next i
    Unlock
    
    SetWindow "Tuhat ja yks laatikkoa pyörimässä. Liikuttele hiirtä nähdäksesi, pyöritä rullaa suunnanvaihtoon. FPS: "+FPS()
    
    DrawScreen 

Forever 

Function Box2(_x#, _y#, _hsize#, _vsize#, _angle#)
    
    //nää tarttee laskea vain kerran
    h2# = _hsize / 2.0 
    v2# = _vsize / 2.0

    xx1# = Cos(_angle)*v2       //laatikon kulman x-suunnan x koordinaatti
    xy1# = Cos(_angle+90.0)*h2  //laatikon kulman y-suunnan x koordinaatti
    
    yx1# = - Sin(_angle)*v2     //laatikon kulman x-suunnan y koordinaatti
    yy1# = - Sin(_angle+90.0)*h2 //laatikon kulman y-suunnan y koordinaatti

    x1 = _x + xx1 + xy1      //oikea yläkulma
    y1 = _y + yx1 + yy1
    
    x2 = _x - xx1 + xy1   //vasen yläkulma
    y2 = _y - yx1 + yy1
    
    x3 = _x - xx1 - xy1   //vasen alakulma
    y3 = _y - yx1 - yy1
    
    x4 = _x + xx1 - xy1       //oikea alakulma
    y4 = _y + yx1 - yy1
    
    Line x1,y1,x2,y2
    Line x2,y2,x3,y3
    Line x3,y3,x4,y4
    Line x4,y4,x1,y1
    
EndFunction
Mikäli meinaat tätä käyttää niin kannattaa lukita ruutu viivojen piirron ajaksi komennoilla lock ja unlock, tällöin saat huomattavan nopeusedun. En sitä funktioon laittanut koska jos laatikoita piirretään vaikka 1000 ja joka kerralla lukitaan ja avataan ruutu niin se ei ole läheskään niin tehokasta kuin jos ensin lukitaan ruutu ja sen jälkeen vasta piirretään ne tuhat laatikkoa jonka jälkeen avataan lukitus.
Last edited by MetalRain on Sun May 22, 2011 3:08 pm, edited 1 time in total.
Kumiankka
Member
Posts: 65
Joined: Wed May 18, 2011 5:17 pm
Location: Artjärvi

Re: Tyhmät kysymykset (I/2011)

Post by Kumiankka »

Kiitoksia, nyt toimii :lol:
mika132
Newcomer
Posts: 30
Joined: Sun Jul 12, 2009 1:31 pm

Re: Tyhmät kysymykset (I/2011)

Post by mika132 »

Etsin internetistä .txt tiedostosta tekstiä. Miten voin asettaa löydetyn tekstin riviväleihin?

Siis jos kirjoitan esim: etsi_tama.txt serveriini ja käsken coolbasicin etsiä tuo tiedosto ja tulostaa sen sisällä oleva kirjoitus joka on esim tälläistä:
"asdasdasaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"

Miten voin katsoa tekstin ja pistää CoolBasicillä esim 20 kirjaimen välein rivivaihdon?
Business manager - companys mini pack
Tämä on Companys peliin tuleva lisä osa jonka mukana tulee mm.
- Raha pelejä
- Bugi korjauksia
- Yksi botti firma
- Pullon palautus automaatti
- pankki automaatti
Eli kaikkea sälää.
TheFish
Developer
Developer
Posts: 477
Joined: Mon Aug 27, 2007 9:28 pm
Location: Joensuu

Re: Tyhmät kysymykset (I/2011)

Post by TheFish »

mika132 wrote:Etsin internetistä .txt tiedostosta tekstiä. Miten voin asettaa löydetyn tekstin riviväleihin?

Siis jos kirjoitan esim: etsi_tama.txt serveriini ja käsken coolbasicin etsiä tuo tiedosto ja tulostaa sen sisällä oleva kirjoitus joka on esim tälläistä:
"asdasdasaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"

Miten voin katsoa tekstin ja pistää CoolBasicillä esim 20 kirjaimen välein rivivaihdon?
Käytä vaikka Mid-funktiota loopin sisällä.
CoolBasic henkilökuntaa
Kehittäjä
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 »

Code: Select all

Repeat

DrawScreen LoadMap ("Rata.Til","Default.bmp")

 DrawScreen Ohjaamo= LoadObject("uko.bmp",5)



Forever


Siinä Koodi melko yksinkertainen. :mrgreen:
Aloittelija koodari joka
osaa jo jotain (ehkä) :)
KOTISIVU
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 8:25 am

Re: Tyhmät kysymykset (I/2011)

Post by Sly_Jack0 »

Älä koskaan lataa mitään silmukassa!

Code: Select all

map = LoadMap("Rata.til","Default.bmp")
ohjaamo = LoadObject("uko.bmp",5)

Repeat
    DrawScreen
Forever 
EDIT:

Oma kysymys: Miten toteutan ATan2-funktion CB:llä? Googlasin ja kokeilin muutamia eri lähestymistapoja, mutta en saanut toimimaan.

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 »

atan2(y/x) = getangle(0,0,x,y)
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Tyhmät kysymykset (I/2011)

Post by Awaclus »

EDIT: Niinpä tietysti. Oli kulunut sen verran aikaa viestien välillä eikä ollut quotea, niin en yhdistänyt.
Last edited by Awaclus on Mon May 23, 2011 7:54 am, edited 1 time in total.
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 8:25 am

Re: Tyhmät kysymykset (I/2011)

Post by Sly_Jack0 »

koodaaja wrote:atan2(y/x) = getangle(0,0,x,y)
Kiitoksia! Enpä tullut ajatelleeksi tätä ratkaisua.
Herra Siili
Advanced Member
Posts: 308
Joined: Tue Nov 25, 2008 8:06 pm
Contact:

Re: Tyhmät kysymykset (I/2011)

Post by Herra Siili »

Chaosworm wrote:
Laurenzo wrote:

Code: Select all

koodi
Siinä Koodi melko yksinkertainen. :mrgreen:
Mitähän koodin on tarkoitus tehdä, ja miksi lähetit sen tänne?
Vähän ylempänä:
Chaosworm wrote:
Laurenzo wrote:Minä teen junasimulaattoria mutta rata (eli kartta)ei näy.
Olisko jotain vinkkejä :?:
Valitettavasti olen nyt koulussa ja kristallipalloni sattui jäämään kotiin, joten on vähän hankalaa auttaa tietämättä esim, miten olet asiaa yrittänyt toteuttaa tms.
a.k.a. Gehock
Locked