Tyhmät kysymykset (I/2010)

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

Re: Tyhmät kysymykset (I/2010)

Post by Awaclus » Mon Jan 18, 2010 7:27 pm

Siis tarkoititko tällaista systeemiä:

Code: Select all

For alus
    For raketti
        If raketti osuu alukseen Then alus\rakettiosunut = True
    Next
Next

For alus
    If alus\rakettiosunut Then PositionObject alus, hiirenkoordinaatit: TurnObject alus, 7
Next

User avatar
skorpioni-cb
Advanced Member
Posts: 364
Joined: Wed Dec 03, 2008 4:48 pm
Location: Turku

Re: Tyhmät kysymykset (I/2010)

Post by skorpioni-cb » Mon Jan 18, 2010 7:33 pm

Chaosworm wrote:Siis tarkoititko tällaista systeemiä:

Code: Select all

For alus
    For raketti
        If raketti osuu alukseen Then alus\rakettiosunut = True
    Next
Next

For alus
    If alus\rakettiosunut Then PositionObject alus, hiirenkoordinaatit: TurnObject alus, 7
Next
Kutakuinkin.
Minä en tiedä mitä tiedän, mutta sen tiedän ettei se ole mitään kaunista.

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 » Mon Jan 18, 2010 8:11 pm

skorpioni-cb wrote:siis raketti menee vihollisen läpi joka on sinisessä rinkulaassa joka on niin kuin pitääkin, mutta se ei tule hiiren kohdalle ja pyöri niin kuin pitäisi. Te ette vastanneet olennaiseen :evil:
Murr...

Code: Select all

PositionObject lVihu\obj,ObjectX(h),ObjectY(h)
Oisko tuossa vika?
EDIT:

Jaa, oli vielä seurava sivukin. Mutta siis tuohan ainakin ilmeisesti oli tarkistuksessa jossa tarkistetaan ammuksten törmäys, ja tuollainen siellä oli.
Tuohan ei aseta sitä hiiren kohdalle.


MattiMeikäläinen
Newcomer
Posts: 1
Joined: Tue Jan 19, 2010 4:18 pm

Re: Tyhmät kysymykset (I/2010)

Post by MattiMeikäläinen » Tue Jan 19, 2010 7:21 pm

Miten saa nämä hösellykseni hahmot ampumaan?

Code: Select all

FrameLimit 40

ääniAmmu = LoadSound ("Media\blaster.wav")
ääniAmmu2 = LoadSound ("Media\pop.wav")

ruoho = MakeObjectFloor ()
nurmikko = LoadImage ("Media\grass.bmp")
PaintObject ruoho, nurmikko

ukko1 = LoadObject ("Media\soldier.bmp",72)
ukko2 = LoadObject ("Media\guy.bmp",72)

pati = LoadObject ("Media\fireball.bmp")
pati2 = LoadObject ("Media\bullet.bmp")

RotateObject ukko1,0
RotateObject ukko2,180


PositionObject ukko1,-150,100
PositionObject ukko2,150,-100

SetupCollision ukko1,ukko2,2,2,2
SetupCollision ukko2,ukko1,2,2,2

Repeat

    
    If LeftKey() Then TurnObject ukko1,5
    If RightKey() Then TurnObject ukko1,-5
    If UpKey() Then MoveObject ukko1,2
    If DownKey() Then MoveObject ukko1,-2

    
    If KeyDown(cbKeyA) Then TurnObject ukko2,5
    If KeyDown(cbKeyD) Then TurnObject ukko2,-5
    If KeyDown(cbKeyW) Then MoveObject ukko2,2
    If KeyDown(cbKeyS) Then MoveObject ukko2,-2
    
   
    
    If ObjectX(ukko1)<-200 Then PositionObject ukko1,-200,ObjectY(ukko1)
    If ObjectX(ukko1)>200 Then PositionObject ukko1,200,ObjectY(ukko1)
    If ObjectY(ukko1)<-150 Then PositionObject ukko1,ObjectX(ukko1),-150
    If ObjectY(ukko1)>150 Then PositionObject ukko1,ObjectX(ukko1),150
    
    
    If ObjectX(ukko2)<-200 Then PositionObject ukko2,-200,ObjectY(ukko2)
    If ObjectX(ukko2)>200 Then PositionObject ukko2,200,ObjectY(ukko2)
    If ObjectY(ukko2)<-150 Then PositionObject ukko2,ObjectX(ukko2),-150
    If ObjectY(ukko2)>150 Then PositionObject ukko2,ObjectX(ukko2),150
        
    
    DrawScreen

Forever

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

Re: Tyhmät kysymykset (I/2010)

Post by Ilkka » Tue Jan 19, 2010 7:49 pm

Kun käynnistät CoolBasicin, paina näppäimistöstä F8 nappia jolloin voit valita esimerkin. Esimerkki 18 ja 17 kertovat miten voi tehdä ammusjärjestelmän. Kannattaa muutenkin lukea esimerkit.
Image

The TK
Newcomer
Posts: 2
Joined: Fri Jan 22, 2010 3:49 pm

Re: Tyhmät kysymykset (I/2010)

Post by The TK » Fri Jan 22, 2010 3:57 pm

Code: Select all

alku:
Color cbWhite
          
Repeat  
    nimi$=Input("Nimesi: ")  
    DrawScreen               
Until KeyHit(cbkeyreturn)    
CloseInput

Cls 

           
Repeat  
    nimi2$=Input("Rakkaasi nimi: ")  
    DrawScreen               
Until KeyHit(cbkeyreturn)    
CloseInput

Cls  
love=Rand (0,100)

Repeat
If 25<love<50 Then Color cbDarkRed
If love<25 Then Color cbDark
If 50<love<75 Then Color cbMagenta
If 75<love Then Color cbPink
Text 10, 10, "Tulos: "+nimi$+" SYDÄN "+nimi2$+"="+love+"%"
Text 10, 20, "Uudestaan? Paina Välilyöntiä."
Text 10, 30, "Lopeta? Paina ESC"
If KeyHit (cbKeyspace) Then Goto alku
DrawScreen
Forever
Tuo on siis pikaisesti tekemäni rakkaustesti. Kysymys kuuluu: Miten saan tallennettua "huipputulokset" tiedostoon ja näyttämään 10 korkeinta suuruusjärjestyksessä?

User avatar
otto90x
Advanced Member
Posts: 349
Joined: Mon Aug 27, 2007 9:00 pm
Location: Lapinjärvi, Finland
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by otto90x » Fri Jan 22, 2010 6:07 pm

The TK wrote:Kysymys kuuluu: Miten saan tallennettua "huipputulokset" tiedostoon ja näyttämään 10 korkeinta suuruusjärjestyksessä?
Ensinnäkin tulokset kannattaa tallentaa joko taulukkoon tai tyyppikokoelmaan, sitten ne pitää järjestää suuruusjärjestykseen (tämä on aika vaikea). Tallennus tiedostoon on helppoa komennoilla opentowrite, writeline ja closefile, kunhan muistat vain lukea tiedot komennoilla opentoread ja readline samassa järjestyksessa kuin kirjoititkin. Tein esimerkin tästä, kun nämä top-10 listat tuottavat niin monille harmaita hiuksia.

Tässä voimakkaasti kommentoitu esimerkki, pistin nyt aluksi piiloon jos haluat koittaa ratkaista tätä noilla sanallisilla ohjeilla. Suosittelen kuitenkin lukemaan jokatapauksessa, vaikka sitten ongelman ratkaistuasi.

Code: Select all

//tilastojen säilöminen muistissa on helpompaa kun käytetään 
//taulukkoa tai tyyppikokoelmaa, tässä esimerkissä käytän 
//tyyppimuuttujaa sen helpon käsittelyn takia

Type Rakas
    Field omanimi$
    Field rakkaannimi$
    Field love
End Type

//tämä on hyvä tallentaa muuttujaan jottei yritetä vahingossa lukea
//ja/tai kirjoittaa eri tiedostoon ja sitten ihmetellä kun koodi ei toimi
tiedosto$ = "lovedata.txt"

//tässä kutsutaan funktiota joka lataa tiedostosta tilastot
LataaTilastot(tiedosto$)

alku:

//tässä kutsutaan funktiota joka antaa nimet suoraan, näin saamme hieman siistittyä koodia
nimi1$ = OtaNimi("Nimesi: ")
nimi2$ = OtaNimi("Rakkaasi nimi: ")

//rakkauden mittaamiseen käytämme funktiota joka päättelee rakkauden määrän nimien perusteella
love = MittaaRakkaus(nimi1$,nimi2$)

//lisätään pari tilastoihin, toki tämän voisi hoitaa ilman funktiotakin, 
//mutta ilmeisesti ohjelma tulee olemaan pieni joten muutama ylimääräinen funktio ei haittaa
LisääPari(nimi1$,nimi2$,love)

//tämä funktio järjestää tilastot suuruusjärjestykseen
JärjestäTilastot()
//ja siksipä kutsumme sitä ennen kuin tallennamme tilastot tiedostoon
TallennaTilastot(tiedosto$)

//tästä alkaa pääsilmukka
Repeat

    Color cbwhite
    
    Text 10, 0, "Tulos: "+nimi1$+" SYDÄN "+nimi2$+" = "+love+"%"
    Text 10, 20, "Uudestaan? Paina Välilyöntiä."
    Text 10, 40, "Paina enteriä nähdäksesi sopivimmat parit."
    Text 10, 60, "Lopeta? Paina ESC"
    //välilyönnillä pääsee alkuun 
    If KeyHit (cbKeyspace) Then Goto alku
    //ja enterillä kutsutaan funktiota joka näyttää tilastot
    If KeyHit (cbKeyreturn) Then NäytäTilastot()
    DrawScreen
Forever

//Funktio joka näyttää tekstin ja ottaa käyttäjältä nimen 
Function OtaNimi(teksti$)
    //tyhjennetään näyttö ja poistetaan jo aiemmin näppäimistöön rekisteröityneet painallukset
    Cls 
    ClearKeys 
    //väri asetetaan valkoiseksi
    Color cbWhite
    
    //tässä ihan normaali nimenkysely
    Repeat 
        nimi$=Input(teksti$) 
        DrawScreen               
    Until KeyHit(cbkeyreturn)   
    CloseInput
    
    //tyhjennetään taas näppäimistö jottei inputin sulkeva enterin painallus seuraa perässä
    ClearKeys
    //palautetaan käyttäjän antama nimi
    Return nimi$
End Function 

//funktio joka mittaa ja palauttaa rakkauden määrän kahdesta nimestä
Function MittaaRakkaus(nimi1$,nimi2$)
    //periaatteena on se että kummastakin nimestä lasketaan numero
    //numero lasketaan yhteenlaskulla jokaisen nimen kirjaimen merkin ASCII arvosta
    // eli nimellä matti saataisiin m+a+t+t+i joka on ASCII taulukon mukaan
    // 109+97+116+116+105 = 543 
    //eli arvo ei vaihtele jos nimikään ei vaihtele
    
    //koska ascii taulukossa pienet ja isot kirjaimet saa eri arvot
    //pienennetään nimien kirjaimet jotta vältetään sekaannus
    nimi1$=Lower(nimi1$)
    nimi2$=Lower(nimi2$)
    
    p1=0
    //i kuvastaa merkkiä jonka kohdalla ollaan
    For i=1 To Len(nimi1$)
        //asc muuttaa merkin asciiarvoksi ja mid nappaa yhden merkin merkkijonon kohdasta i
        //tuo arvo sitten lisätään pistesaldoon p1
        p1=p1+Asc(Mid(nimi1$,i,1))
    Next i
    //sama temppu tehdään toiselle nimelle
    p2=0
    For i=1 To Len(nimi2$)
        p2=p2+Asc(Mid(nimi2$,i,1))
    Next i
    //tässä piilee koko homman juju 
    //randomize näes alustaa satunnaislukugeneraattorin
    //eli tietokoneen rand komennolla arpomat luvut eivät olekaan oikeasti satunaisia
    //vaan ovat tavallaan osa pitkää listaa
    //kun alustamme satunnaislukugeneraattorin samalla luvulla saamme joka ajokerralla
    //samat tulokset
    
    //esimerkikisi jos alustaisimme luvulla 5 ja arpoisimme ensimmäisen luvun väliltä 0-100
    //saisimme aina luvun 68, käytämme tätä ominaisuutta hyväksemme näin ollen kun käytämme 
    //nimistä saatuja pisteitä joilla alustamme satunnaislukugeneraattorin
    //saamme samoilla nimillä aina saman tuloksen rakkauden määrälle
    Randomize p1-p2
    
    Return Rand(100)
End Function 

//Tämä funktio lisää tilastoihin yhden parin
Function LisääPari(nimi1$,nimi2$,love)
    //tosin tarkistetaan ensin josko samoilla nimillä jo löytyisi tilastoista pari
    //emmehän halua tukkia tilastoja monilla samannimisillä pareilla
    For r.rakas=Each rakas
        //tällöin emme lisää vaan poistumme funktiosta
        If r\omanimi=nimi1$ And r\rakkaannimi=nimi2$ Then Return 0
    Next r
    
    //jos tässä vaiheessa ei olla poistuttu ei samannimisiä ole löytynyt
    //siispä voimme huoletta lisätä parin tilastoihin
    r.rakas=New(rakas)
    r\omanimi$=nimi1$
    r\rakkaannimi$=nimi2$
    r\love = love
    //palautetaan vielä 1 merkiksi onnistumisesta
    Return 1
End Function 

//Tämä funktio näyttää tilastot käyttäjälle
Function NäytäTilastot(määrä=10)
    //tyhjätään näyttö ja näppäimistö varmuuden vuoksi
    Cls
    ClearKeys 
    //kirjoitetaan otsikko
    Color cbWhite
    Text 0,0,"Rakastuineiden Top-10 lista:"
    
    //muuttuja i kertoo monesko pari on menossa, se on aluksi ensimmäinen
    i=1
    //käydään kaikki parit läpi
    For r.rakas=Each rakas
    
        //jos määrä ylittyy lopetetaan tilastojen kirjoitus
        If i>määrä Then Exit
        
        //päätellään väri
        //tässä on hyvä muistaa laittaa oikeaan järjestykseen sillä jos 
        //love = 80 on se silti suurempi kuin 25 eli jos toinen rivi olisikin viimeisenä 
        //tulisi väärä väri käyttöön
        If r\love<=25 Then Color cbDark
        If 25<r\love Then Color cbDarkRed
        If 50<r\love Then Color cbMagenta
        If 75<r\love Then Color cbPink
        
        //tässä kirjoitetaan nimet ja rakkaudet, käytämme parin numeroa i
        //kertomaan mihin kohti ruutua se piirretään
        //ensimmäinen pari tulee kohtaan 0,20 koska i=1
        Text 0,20*i,r\omanimi+" sydän "+r\rakkaannimi+" = "+r\love+" %"
        //lisätään i:n arvoa jotta seuraava pari ei tulisi edellisen päälle
        i=i+1
    Next r
    //piirretään näyttö jotta tulokset näkyy
    DrawScreen
    //odotetaan kunnes käyttäjä painaa jotain nappulaa
    //tämän takia näppäimistö piti tyhjentää tämän funktion alussa
    WaitKey
End Function 

//Tämä funktio järjestää tilastot
Function JärjestäTilastot()
    //arvojen järjestäminen on monimutkaista puuhaa
    //ensinnäkin pitäisi käydä kaikki arvot läpi ja verrata niitä toisiinsa
    //otetaan esimerkiksi lukujono 34974 jossa kukin numero kuvastaa omaa
    //arvoa. Näin tämä funktio järjestäisi nuo arvot:
    
    //luetaan ensimmäinen arvo, se on 3
    //verrataan saatua arvoa seuraavaan arvoon, se on neljä
    //kappas se onkin suurempi siispä vaihdetaan niiden paikkaa
    //nyt näyttää tältä 43974
    //no nyt pitääkin palata edelliseen lukuun mutta koska ollaan ensimmäisessä
    //ei liikuta mihinkään
    //ensimmäinen arvo on nyt 4 ja siitä seuraava on 3 eli voidaan jatkaa
    //eteenpäin kun neljä on suurempi kuin 3
    //eli nyt verrataan arvoa 3 siitä seuraavaan arvoon joka on 9
    //kappas 9 on suurempi kuin 3 siispä vaihdetaan niiden paikkoja
    //no nyt näyttää tältä 49374 ja taas pitää palata edelliseen eli ensimmäiseen 
    //arvoon joka siis on neljä
    // 4 < 9 eli vaihdetaan lukuja
    // ja sitten näyttää tältä 94374
    // palataan edelliseen arvoon eli ensimmäiseen
    // 9 > 4 jatketaan seuraavaan (toiseen) arvoon
    // 4 > 3 jatketaan seuraavaan (kolmanteen) arvoon
    // 3 < 7 vaihdetaan lukuja 
    // näyttää tältä 94734
    //palataan  edelliseen arvoon eli toiseen arvoon
    // 4 < 7 vaihdetaan lukuja
    // näyttää tältä 97434
    //palataan edelliseen eli ensimmäiseen arvoon
    //9 > 7 jatketaan seuraavaan eli toiseen arvoon
    // 7 > 4 jatketaan kolmanteen arvoon
    // 4 > 3  jatketaan neljänteen arvoon
    // 3 < 4 vaihdetaan lukuja
    // näyttää tältä 97443 ja palataan edelliseen arvoon
    // 4 = 4 joten jatketaan neljänteen arvoon
    // 4 > 3 joten jatketaan viidenteen arvoon
    // seuraavaa arvoa ei löydykään joten lopetataan järjestäminen
    

    //r osoittaa ensimmäiseen tilastoarvoon
    r.rakas = First (rakas)
    rr.rakas = First (rakas)
    
    
    While r<>NULL //tarkistetaan ettei r ole mennyt tilastosta yli
                  // jos on niin ollaan valmiita, muutoin jatketaan
                  
        
        //rr osoittaa r:n jälkeiseen arvoon
        rr=After(r)
        
        If rr <> NULL Then //tarkistetaan ettei rr ole mennyt tilastosta yli
        
            // mikäli listassa alempi on suurempi
            If rr\love>r\love Then  
            
                //vaihdetaan arvot
                love = r\love 
                omanimi$ = r\omanimi$
                rakkaannimi$ = r\rakkaannimi$
                r\love= rr\love
                r\omanimi$ = rr\omanimi$
                r\rakkaannimi$ = rr\rakkaannimi$
                rr\love = love
                rr\omanimi$ = omanimi$
                rr\rakkaannimi$ = rakkaannimi$
                
                //hypätään takaisin edelliseen arvoon 
                r.rakas = First (rakas)
                If Before(r)<>NULL Then r = Before(r) 
            Else
                //siirrytään seuraavaan arvoon 
                r=After(r)
                If r=NULL Then Return 1
            EndIf

        Else //jos rr on ei enää ole tilastossa 
        
            //siirrytään seuraavaan arvoon
            r=After(r)
            If r=NULL Then Return 1
        EndIf

    Wend

End Function 


//tämä funktio tallentaa tilastot tiedostoon
//jonka polku on file$ muuttujan määräämä merkkijono
Function TallennaTilastot(file$)
    //avataan tiedosto
    f=OpenToWrite(file$)
        //käydään kaikki läpi
        For r.rakas=Each rakas
            //kirjoitetaan tiedot eri riveille
            WriteLine f,r\omanimi$
            WriteLine f,r\rakkaannimi$
            WriteLine f,r\love
        Next r
        
        //muistetaan myös sulkea tiedosto
    CloseFile f
End Function 


//tämä tiedosto lataa tilastot tiedostosta
Function LataaTilastot(file$)
    //tarkistetaan että tiedosto löytyy
    If FileExists(file$) Then 
        //luetaan tiedosto
        f=OpenToRead(file$)
            //luetaan kunnes on lopussa
            While Not EOF(f)
                //lisätään parin tiedot tilastoihin
                r.rakas=New(rakas)
                r\omanimi$ = ReadLine (f)
                r\rakkaannimi$ = ReadLine (f)
                //muistetaan muuttaa rakkauden määrä kokonaisluvuksi
                r\love = Int(ReadLine (f))
            Wend
            //ja muistetaan taas sulkea tiedosto luvun jälkeen
        CloseFile f
    EndIf
End Function
Otto Martikainen a.k.a. MetalRain, otto90x, kAATOSade.
Runoblogi, vuodatusta ja sekoiluja.

Hene
Active Member
Posts: 122
Joined: Wed Apr 22, 2009 8:13 pm

Re: Tyhmät kysymykset (I/2010)

Post by Hene » Sat Jan 23, 2010 1:53 pm

Olen tehnyt erääseen peleistäni latausikkunaan järjestelmän, joka arpoo aina jonkin tekstin ohjelmaa ladattaessa.

Code: Select all

lataus_teksti=Rand(1,3)
If lataus_teksti=1 Then
AddText "AAA"
DrawScreen
EndIf
If lataus_teksti=2 Then
AddText "BBB"
DrawScreen
EndIf
If lataus_teksti=3 Then
AddText "CCC"
DrawScreen
EndIf
Onko mitään sivistyneempää tapaa toteuttaa samaa ideaa?
"Baby," I said. "I'm a genius but nobody knows it but me."

User avatar
Tuxi
Active Member
Posts: 189
Joined: Wed Jan 21, 2009 11:25 pm
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by Tuxi » Sat Jan 23, 2010 1:58 pm

Select-rakenteella.

Code: Select all

lataus_teksti=Rand(1,3)
Select lataus_teksti
Case 1
    AddText "AAA"
Case 2
    AddText "BBB"
Case 3
    AddText "CCC"
End Select
DrawScreen
Projektit:
Jotain pientä (Ehkä vähän suurempaakin)

-Tuxi- (myös Tuxi4321)

User avatar
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 9:25 am

Re: Tyhmät kysymykset (I/2010)

Post by Sly_Jack0 » Sat Jan 23, 2010 2:13 pm

Hene wrote:Onko mitään sivistyneempää tapaa toteuttaa samaa ideaa?
Voisit kirjoittaa eri lataustekstit tiedostoon ja pelin käynnistyessä lukea ne sieltä taulukkoon ReadLine-funktiolla. Sitten vain arvot numeron ja näytät lautaustekstin, joka sijaitsee numeron osoittamassa taulukon indeksissä.

Hene
Active Member
Posts: 122
Joined: Wed Apr 22, 2009 8:13 pm

Re: Tyhmät kysymykset (I/2010)

Post by Hene » Sun Jan 24, 2010 8:56 pm

Kiitokset Jackille & Tuxille : )

Tarvitsisin (mielellään ihan valmista) koodia, joka laskee montako tähti (*) -merkkiä lähdekoodiin syötetyssä tekstissä on. Pitäisi tarkistaa onko Wikipedian käyttäjäsivullani oikea lukumäärä ilmoitettuna : )
"Baby," I said. "I'm a genius but nobody knows it but me."

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 » Sun Jan 24, 2010 10:15 pm

Toteuttaisin tuon CountWords()llä, mutta se vaatisi erotinmerkkien lisäyksen:

Code: Select all

Repeat
    tähti$=String("* ",Rand(20))//monistetaan Max. 20:stä tähdestä koostuva String
                                
    lukumäärä=CountWords(tähti)//ja kun joka tähti ON erotettu erotinmerkillä, ON niiden laskeminen helppoa
    
    Print tähti
    Print "Lukumäärä: "+lukumäärä
    
    WaitKey
    
Until EscapeKey()
Parempia ideoita?
Asus P8P67 LE/Intel Core i5 2500K/ GTX560/ 8GT RAM/750GT HDDt + 120GT SSD + 13" Macbook Pro
Blogi - Peräpohjola - MERPG

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

Re: Tyhmät kysymykset (I/2010)

Post by valscion » Sun Jan 24, 2010 11:07 pm

Feuer wrote:Toteuttaisin tuon CountWords()llä, mutta se vaatisi erotinmerkkien lisäyksen:

Code: Select all

Repeat
    tähti$=String("* ",Rand(20))//monistetaan Max. 20:stä tähdestä koostuva String
                                
    lukumäärä=CountWords(tähti)//ja kun joka tähti ON erotettu erotinmerkillä, ON niiden laskeminen helppoa
    
    Print tähti
    Print "Lukumäärä: "+lukumäärä
    
    WaitKey
    
Until EscapeKey()
Parempia ideoita?
No vaikka tämä, käytetään erotinmerkkinä tähteä itseään:

Code: Select all

Repeat
    tähti$=String("*",Rand(20))//monistetaan Max. 20:stä tähdestä koostuva String
                                
    lukumäärä=CountWords(tähti, "*")// lasketaan tähtien määrä ;)
    if lukumäärä>0 Then lukumäärä-1 // korjataan luku oikeaksi, muuten olisi yksi liikaa. 


    Print tähti
    Print "Lukumäärä: "+lukumäärä
    
    WaitKey
    
Until EscapeKey()
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
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: Tyhmät kysymykset (I/2010)

Post by phons » Sun Jan 24, 2010 11:21 pm

Code: Select all

merkkijono$ = "asdad**fasf**sdfwefm**lollolo*rofl***cdxsd**..."

For i = 1 To Len(merkkijono$)
    If Mid(merkkijono$,i,1) = "*" Then tähti_maara + 1
Next i

Text 0,0,"Tähtiä: "+tähti_maara

DrawScreen
WaitKey
Edit: Taas tuli laitettua Repeat - Until vaikkei pitänyt, se menee jotenkin automaattisesti...
Image

User avatar
Ruuttu
Devoted Member
Posts: 687
Joined: Thu Aug 30, 2007 5:11 pm
Location: Finland, Sipoo

Re: Tyhmät kysymykset (I/2010)

Post by Ruuttu » Mon Jan 25, 2010 11:34 am

Hei, onko mitään nopeata tapaa ottaa pikseliarvo, ja puolittaa sen kirkkaus? Vai onko pakko ensin muuttaa pikseliarvo RGB:ksi, sitten tehdä muutos, ja sitten taas muuttaa takaisin pikseliarvoksi?

Code: Select all

PIX = GetPixel2(...)

PIX = MaaginenMahtavaAlgoritmi

PutPixel2 ...,...,PIX

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 » Mon Jan 25, 2010 12:49 pm

Tarvitsisin läpikäytävää rakennetta läpikäytävässä rakenteessa. Eli niinkuin Typeä Typessä. Muistan nähneeni täällä muistipaloilla toteutetun systeemin, mutten pysty palauttamaan mieleeni miten sellainen tehtiin, enkä löytänyt sitä haulla.
Asus P8P67 LE/Intel Core i5 2500K/ GTX560/ 8GT RAM/750GT HDDt + 120GT SSD + 13" Macbook Pro
Blogi - Peräpohjola - MERPG

User avatar
otto90x
Advanced Member
Posts: 349
Joined: Mon Aug 27, 2007 9:00 pm
Location: Lapinjärvi, Finland
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by otto90x » Mon Jan 25, 2010 1:46 pm

Tässä nyt jonkinlainen muistipala muistipalassa ratkaisu. Itse suosin muistipaloja typejen sijaan, saa paljon paremmin määriteltyä mitä ominaisuuksia tarvii, tosin joutuu koodaamaan alusta asti kaikki luonnit, muokkaukset ja poistot kullekin tietorakenteelle.

Code: Select all

//luodaan muistipala neljälle muistipalalle
rakenne = makememblock(16)
for i=0 to memblocksize(rakenne)-1 step 4
    lista = makememblock(16)
    //luodaan muistipalaan neljä satunnaista lukua
    for o=0 to memblocksize(lista)-1 step 4
        pokeint lista,o,rand(100)
    next o
    //laitetaan muistipalaan toisen muistipalan osoite
    pokeint rakenne,i,lista
next i

//tulostus

for i=0 to memblocksize(rakenne)-1 step 4
    lista = peekint(rakenne,i)
    print "muistipala @ "+lista+" sisältää seuraavat luvut:"
    if lista then 
        for o=0 to memblocksize(lista)-1 step 4
            print peekint(lista,o)
        next o
    endif
next i

waitkey
Toivottavasti en tehnyt virheitä, kun en päässyt toimivuutta editorilla tarkistamaan.
Otto Martikainen a.k.a. MetalRain, otto90x, kAATOSade.
Runoblogi, vuodatusta ja sekoiluja.

User avatar
85 spider
Newcomer
Posts: 35
Joined: Thu Dec 10, 2009 8:01 pm
Location: Vihanti, Alpua

Re: Tyhmät kysymykset (I/2010)

Post by 85 spider » Tue Jan 26, 2010 10:49 pm

Teen sellaista kuvanmuokkausohjelmaa, niin miten siihen sais tehtyä latausikkunan?

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

Re: Tyhmät kysymykset (I/2010)

Post by MrMonday » Tue Jan 26, 2010 11:05 pm

Haulla pitäisi löytyä jotain..
Ja on muutenkin suotavaa käyttää hakua, ja vasta sitten kysyä jos ongelmaan ei löydy ratkaisua,
sillä on yksinkertaisesti typerää vastailla kysymyksiin joihin on jo kymmenesti aiemmin vastailtu :|

User avatar
SPuntte
Tech Developer
Tech Developer
Posts: 650
Joined: Mon Aug 27, 2007 9:51 pm
Location: Helsinki, Finland
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by SPuntte » Wed Jan 27, 2010 2:13 am

Ruuttu wrote:Hei, onko mitään nopeata tapaa ottaa pikseliarvo, ja puolittaa sen kirkkaus? Vai onko pakko ensin muuttaa pikseliarvo RGB:ksi, sitten tehdä muutos, ja sitten taas muuttaa takaisin pikseliarvoksi?

Code: Select all

PIX = GetPixel2(...)

PIX = MaaginenMahtavaAlgoritmi

PutPixel2 ...,...,PIX
En tähän hätään keksi nopeampaa, korjatkaa joku, jos tiedätte paremman

Code: Select all

a = (pix Shr 24) Shl 24 //Pelkkä 255 Shl 24 saattaisi myös ehkä toimia, sillä CBhän ei tunnetusti käytä alfakanavaa.
r = ((pix - a) Shr 17) Shl 16
g = ((pix - a - r) Shr 9) Shl 8
b = (pix - a - r - g) Shr 1
pix = a + r + g + b
En ota mitään takuita toimivuudesta, sillä tuo on kirjoitettu puoliunessa Linuxin geditillä. Huomaa myös että "nopeampi kahdella jako" eli yhden bitin siirto oikealle pyöristää parittomat luvut alaspäin.
CoolBasic henkilökuntaa
Tech-kehittäjä
CoolBasic Classic, Cool VES

CoolPhysicsEngine | MissileSystem | Jana-ympyrä -törmäys | cbSimpleTexture | CoolCPLX

Locked