Tyhmät kysymykset (I/2011)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (I/2011)

Post by valscion »

Wingman wrote:Itselläni ei win7 anna kaikkien ohjelmien lukea program files -kansiosta, joten asensin cb.n johonkin muualle, ja se auttoi
Kyseessä on kuitenkin Windows XP eikä siinä ole mitään hienoja suojausasetuksia sisäänrakennettuna. Jokin Windowsin ulkopuolinen ohjelma siis aiheuttaa CoolBasicin toimimattomuuden LeeMeisterillä.
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
Minecrafter

Re: Tyhmät kysymykset (I/2011)

Post by Minecrafter »

Tietääkö kukaan kuinka voisin muuttaa hiiren koordinaatit tilekartan koordinaateiksi?
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (I/2011)

Post by valscion »

Minecrafter wrote:Tietääkö kukaan kuinka voisin muuttaa hiiren koordinaatit tilekartan koordinaateiksi?
cbSDK:sta löytyy funktiot sitä varten:

Code: Select all

//================================================================================
// Selvitetään maailmankoordinaattien mukainen tilen x-paikka.
// Parametrit:
// _x       - X-koordinatti pikseleinä. 
//================================================================================
Function GetTileX(_x)
    mapX# = (ObjectSizeX(NYKYINEN_KARTTA) / 2.0) - ObjectX(NYKYINEN_KARTTA)
    Return RoundUp((_x + mapX) / TILEN_LEVEYS)
EndFunction


//================================================================================
// Selvitetään maailmankoordinaattien mukainen tilen y-paikka
// Parametrit:
// _y       - Y-koordinatti pikseleinä. 
//================================================================================
Function GetTileY(_y)
    mapY# = ObjectY(NYKYINEN_KARTTA) + (ObjectSizeY(NYKYINEN_KARTTA) / 2.0)
    Return RoundUp((mapY - _y) / TILEN_KORKEUS)
EndFunction
Suosittelen että laitat karttasi globaaliksi, vaikkapa muuttujaan nimeltä gMap, ja vaihdat sitten tuolta funktiosta vastaavasti tuon "NYKYINEN_KARTTA" kohdalle karttasi muuttujan nimi. Sinun tulee myös muuttaa TILEN_KORKEUS ja TILEN_LEVEYS vastaamaan kartan yhden laatan korkeutta ja leveyttä.

Käytä siis yllä olevaa funktiota näin:

Code: Select all

tileX = GetTileX( MouseWX() ) // X-tilekoordinaatti hiiren alla
tileY = GetTileY( MouseWY() ) // Y-tilekoordinaatti hiiren alla
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
naputtelija
Devoted Member
Posts: 718
Joined: Wed Nov 03, 2010 7:56 pm
Location: Joku piste pohjoisessa.

Re: Tyhmät kysymykset (I/2011)

Post by naputtelija »

Aivoni eivät kerta kaikkiaan pysty käsittämään tätä. Miksi tuo mavaa? Kokeilin vielä Addtext-komennolla, ja tuo Updatespace varmaan aiheuttaa sen, mutta miksi?

Code: Select all

Include "sdk/include/cbGravitationPhysics.cb"
SCREEN 800,600

DrawScreen

Type PISTEET
    Field obj
End Type

piste = LoadObject("SDK/media/dot.bmp")
For i=1 To 100
    pis.PISTEET = New (PISTEET)
    pis\obj=CloneObject (piste)
    PositionObject pis\obj,Rand(-200,200),Rand(-200,200)
    ObjectFloat pis\obj,1
    Text 0,0,i
    DrawScreen
Next i


Repeat

    UpdateSpace()

    DrawScreen
Forever
<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (I/2011)

Post by valscion »

naputtelija wrote:Aivoni eivät kerta kaikkiaan pysty käsittämään tätä. Miksi tuo mavaa? Kokeilin vielä Addtext-komennolla, ja tuo Updatespace varmaan aiheuttaa sen, mutta miksi?
UpdateSpace-funktio on aika buginen. Se käyttää hyväksi CB:n sisäistä objektisysteemiä, jossa jokaiselle objektille annetaan muuttujaan arvo, joka juoksee ykkösestä eteenpäin. Jostain syystä tyypin jäsenissä olevat objektit kuitenkin saavat suurempia arvoja (itse huomasin arvojen alkavan kolmosesta ja jatkuvan siitä tasaisesti eteenpäin) niin yrittää UpdateSpace-funktio käyttää olemattomia objekteja -> MAV.

Eli suosittelisin että kopioit SDK:sta tuon UpdateSpace-funktion ja muokkaat sitä omiin tarkoitusperiisi sopivaksi.
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
naputtelija
Devoted Member
Posts: 718
Joined: Wed Nov 03, 2010 7:56 pm
Location: Joku piste pohjoisessa.

Re: Tyhmät kysymykset (I/2011)

Post by naputtelija »

VesQ wrote:
naputtelija wrote:Aivoni eivät kerta kaikkiaan pysty käsittämään tätä. Miksi tuo mavaa? Kokeilin vielä Addtext-komennolla, ja tuo Updatespace varmaan aiheuttaa sen, mutta miksi?
UpdateSpace-funktio on aika buginen. Se käyttää hyväksi CB:n sisäistä objektisysteemiä, jossa jokaiselle objektille annetaan muuttujaan arvo, joka juoksee ykkösestä eteenpäin. Jostain syystä tyypin jäsenissä olevat objektit kuitenkin saavat suurempia arvoja (itse huomasin arvojen alkavan kolmosesta ja jatkuvan siitä tasaisesti eteenpäin) niin yrittää UpdateSpace-funktio käyttää olemattomia objekteja -> MAV.

Eli suosittelisin että kopioit SDK:sta tuon UpdateSpace-funktion ja muokkaat sitä omiin tarkoitusperiisi sopivaksi.
Niinpä, taas hyvin nukutun yön jälkeen tajusin miten se korjataan :D
<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...
User avatar
TukeKoodi
Active Member
Posts: 142
Joined: Thu Feb 03, 2011 7:40 pm
Location: C:\Työpöytä

Re: Tyhmät kysymykset (I/2011)

Post by TukeKoodi »

Yritän tehdä ohjelmaa joka selvittää salasanan, mutta en tiedä miten saan sen selvittämään pidemmän kuin 1-merkkisen merkkijonon?:

Code: Select all

    a = Rand (33, 126)
    b = Rand (33, 126)

    m$ = Chr (a)+Chr (b)
    
    i$ = ""
    
    x = 33
    
    AddText "Jono ON "+m+", mutta kone ei tiedä sitä."
    
Repeat


    x + 1
    
    i = Chr (x)
    
    While i = m
        Print "Merkki on "+m+", mutta kone ei tiedä sitä."
        Print ""
        Print ""
        Print ""
        Print ""
        Print "        Sain merkin selville. Se on "+i
        WaitKey
        End
    Wend

    DrawScreen
Forever
Aloittelija, koodaaja, jotain...
CbFUN :D
User avatar
MetalRain
Active Member
Posts: 188
Joined: Sun Mar 21, 2010 11:17 am
Location: Espoo

Salasanan haku

Post by MetalRain »

Tässä esimerkki tekniikasta jolla ei oikeasti löydä salasanaa, koska pitäisi tietää salasanan pituus tietämättä itse sanaa ja voida kokeilla jokaista merkkiä kerrallaan toisista riippumatta, mutta ihan kivan näköinen systeemi vaikka hakkerointipeliin.

Code: Select all

 pituus = 20

//tässä luodaan merkkijono
For i=1 To pituus
    m$ = m$ + Chr(Rand (33, 126))
Next i


//tietokoneen tietämät merkit
//tässä vaiheessa tietokone ei
//ole löytänyt yhtään oikeaa merkkiä
t$=""

//käydään joka merkki läpi
For i=1 To pituus

    //käydään kaikki arvot läpi joka merkissä
    For value=33 To 126

        //tarkastetaan onko merkki oikea
        //ja lisätään tietokoneen merkkeihin 
        //sikäli mikäli on
        If value=Asc(Mid(m$,i,1)) Then t$=t$+Mid(m$,i,1)
        
        //tulostus
        Text 0,0, "Oikea merkkijono:    "+m$
        
        If t$<>m$ Then
            Text 0,20,"Tietokoneen arvaus:  "+t$+Chr(value)
        Else 
            Text 0,20,"Tietokoneen vastaus: "+t$
        EndIf 

        DrawScreen
    
    Next value
    
Next i

WaitKey
Vaikkakin jos haluaa optimoida laskentaresursseja ja saada vain kivannäköisen systeemin eikä etsinnän oikeellisuudella ole mitään väliä. Voi vaikka syöttää satunnaismerkkejä ja tietyn "etsintä" ajan kuluttua asettaa oikean merkin paikoilleen.

Vähän näyttävämmin "etsintää" harjoittavasta ohjelmasta vinkkinä tämä.

Code: Select all

Dim ret(1,1) As Byte

Repeat

    Text 0,0,Scramble("Tämä teksti valkenee sulle pikkuhiljaa",5)

    DrawScreen

Forever


Function Scramble(_txt$,speed)

    l=Len(_txt$)
    
    ClearArray OFF
    ReDim ret(l,2) As Byte
    
    If ret(0,0)=0 Then 
        For i=1 To l
            m$=Mid(_txt$,i,1)
            
            ret(i,0)=Asc(m$)
            
            ret(i,2)=0
        
            If ret(i,1)=0 Then ret(i,1)=ret(i,0)+Rand(1,10)
            If ret(i,1)>126 And ret(i,1)<145 Then 
                ret(i,1)=145
            ElseIf ret(i,1)>147 And ret(i,1)<161 Then 
                ret(i,1)=161
            ElseIf ret(i,1)>255 Or ret(i,1)<32 Then 
                ret(i,1)=32
            EndIf 
            
            If ret(i,1)=ret(i,0) Then ret(i,2)=1
        Next i
        ret(0,0)=1
    EndIf 

    For o=0 To speed 
    
        i=Rand(1,l)

        c=0
        While ret(i,2)=1 
            c+1
            i=i+1
            If i>l Then i=1
            If c>l Then Exit 
        Wend 

        If ret(i,2)=0 Then 

            ret(i,1)= ret(i,1) + 1
            
            If ret(i,1)>126 And ret(i,1)<145 Then 
                ret(i,1)=145
            ElseIf ret(i,1)>147 And ret(i,1)<161 Then 
                ret(i,1)=161
            ElseIf ret(i,1)>255 Or ret(i,1)<32 Then 
                ret(i,1)=32
            EndIf 
            
            If ret(i,1)=ret(i,0) Then ret(i,2)=1
        EndIf 

    Next o

    rStr$=""
    
    For i=1 To l
        rStr$=rStr$+Chr(ret(i,(ret(i,2)=0)))
    Next i
    
    Return rStr$

End Function
Toinen esimerkki hieman erilaisesta systeemistä, joka tarkastaa kaikki kirjaimet aina yhtäaikaisesti, tämä on paljon hitaampaa koska minkä tahansa merkin ollessa väärin koko salasana on väärin. Salasanan pituuden kasvaessa oikean sanan löytämiseen kuluva aika moninkertaistuu.

Code: Select all

pituus = 2

//tässä luodaan merkkijono
For i=1 To pituus
    m$ = m$ + Chr(Rand (33, 126))
Next i


//tietokoneen arvaus
t$="!!"

//käydään joka merkki läpi

i=pituus

While t$<>m$ And finished=0
    
    While Asc(Mid(t$,i,1))<=126 And finished=0
    
        value = Asc(Mid(t$,i,1))+1
        
        If i=pituus Then tafter$ = "" Else tafter$ = Right(t$,pituus-i)
        
        If i=1 Then tbefore$ = "" Else tbefore$ = Left(t$,i-1)
    
        If value=127 Then 
        
            If i=pituus Then tafter$ = "" Else tafter$ = Right(t$,pituus-i)
        
            If tbefore$ <> "" Then tbefore$ = Left(tbefore$,i-2)+Chr(Asc(Right(tbefore$,1))+1)
        
            value=33
            
            i=pituus
            
        EndIf 
        
        t$ = tbefore$+Chr(value)+tafter$
        
        If t$=m$ Then finished=1 : Exit: Exit 
            
        Text 0,0, "Oikea merkkijono:   "+m$
        Text 0,20,"Tietokoneen arvaus: "+t$
        
        DrawScreen
        
    Wend 
    
    i=i-1
    
Wend 

Text 0,0, "Oikea merkkijono:   "+m$
Text 0,20,"Tietokoneen vastaus:"+t$

DrawScreen
    
WaitKey
Molemmat tekniikat olettavat että sanan pituus on tiedossa. Näinhän ei välttämättä ole, vain voitaisiin vielä laittaa yksi looppi, joka lisää pituutta mikäli sanaa ei löytynyt lyhyempien joukosta.
Last edited by MetalRain on Wed May 04, 2011 7:03 pm, edited 3 times in total.
naputtelija
Devoted Member
Posts: 718
Joined: Wed Nov 03, 2010 7:56 pm
Location: Joku piste pohjoisessa.

Re: Tyhmät kysymykset (I/2011)

Post by naputtelija »

VesQ wrote:
naputtelija wrote:Aivoni eivät kerta kaikkiaan pysty käsittämään tätä. Miksi tuo mavaa? Kokeilin vielä Addtext-komennolla, ja tuo Updatespace varmaan aiheuttaa sen, mutta miksi?
UpdateSpace-funktio on aika buginen. Se käyttää hyväksi CB:n sisäistä objektisysteemiä, jossa jokaiselle objektille annetaan muuttujaan arvo, joka juoksee ykkösestä eteenpäin. Jostain syystä tyypin jäsenissä olevat objektit kuitenkin saavat suurempia arvoja (itse huomasin arvojen alkavan kolmosesta ja jatkuvan siitä tasaisesti eteenpäin) niin yrittää UpdateSpace-funktio käyttää olemattomia objekteja -> MAV.

Eli suosittelisin että kopioit SDK:sta tuon UpdateSpace-funktion ja muokkaat sitä omiin tarkoitusperiisi sopivaksi.
Noin, nyt pääsin siihen asti, että peli piirsi kaiken kaman näytölle kerran ja sitten mavasi.

Tässä on itse "pelin" koodi:

Code: Select all

Include "C:\Program Files\CoolBasic\SDK\include\cbGravitationPhysics.cb"
SCREEN 800,600

DrawScreen

Type PISTEET
    Field obj
End Type

piste = LoadObject("C:\Program Files\CoolBasic\SDK\media\dot.bmp")
For i=1 To 10
    pis.PISTEET = New (PISTEET)
    pis\obj=CloneObject (piste)
    PositionObject pis\obj,Rand(-200,200),Rand(-200,200)
    ObjectFloat pis\obj,1
    Text 0,0,i
    DrawScreen
Next i


Repeat

    UpdateSpace3()

    DrawScreen
Forever

Ja tässä maaginen (ja mavinen) UpdateSpace3:

Code: Select all

Function UpdateSpace3()
    For pis.PISTEET = Each PISTEET
        If ObjectFloat(pis\obj) <> 0.0 Then
            xmove# = GetObjectSpeed(pis\obj,xcomp)
            ymove# = GetObjectSpeed(pis\obj,ycomp)
            If ObjectInteger(pis\obj) = 0 Then
                tempobj=CloneObject(pis\obj)
                For pis.PISTEET = Each PISTEET
                    If ObjectFloat(pis\obj) <> 0.0 And temp <> pis\obj Then
                        gravacc# = gamma * ObjectFloat(pis\obj) / Distance2(temp,pis\obj)^2
                        gravang# = GetAngle2(temp,pis\obj)
                        xmove = xmove + Cos(gravang) * gravacc
                        ymove = ymove + Sin(gravang) * gravacc
                    EndIf
                Next pis
                DeleteObject tempobj
                ObjectString pis\obj, Str(xmove) + " " + Str(ymove)
            EndIf
            TranslateObject pis\obj, xmove, ymove
        EndIf
    Next pis
End Function
Onko kenelläkään ratkaisua, miten tuo toimisi?
<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...
Dimple
Active Member
Posts: 103
Joined: Wed Nov 17, 2010 5:43 pm

Re: Tyhmät kysymykset (I/2011)

Post by Dimple »

Code: Select all

For pis.PISTEET = Each PISTEET

               ...

                For pis.PISTEET = Each PISTEET
                    
                    ...

                Next pis

                ...

Next pis
Tarkoituksella samat?
User avatar
TukeKoodi
Active Member
Posts: 142
Joined: Thu Feb 03, 2011 7:40 pm
Location: C:\Työpöytä

Re: Salasanan haku

Post by TukeKoodi »

MetalRain wrote:Tässä esimerkki tekniikasta jolla ei oikeasti löydä salasanaa, koska pitäisi tietää salasanan pituus tietämättä itse sanaa ja voida kokeilla jokaista merkkiä kerrallaan toisista riippumatta, mutta ihan kivan näköinen systeemi vaikka hakkerointipeliin.

Code: Select all

 pituus = 20

//tässä luodaan merkkijono
For i=1 To pituus
    m$ = m$ + Chr(Rand (33, 126))
Next i


//tietokoneen tietämät merkit
//tässä vaiheessa tietokone ei
//ole löytänyt yhtään oikeaa merkkiä
t$=""

//käydään joka merkki läpi
For i=1 To pituus

    //käydään kaikki arvot läpi joka merkissä
    For value=33 To 126

        //tarkastetaan onko merkki oikea
        //ja lisätään tietokoneen merkkeihin 
        //sikäli mikäli on
        If value=Asc(Mid(m$,i,1)) Then t$=t$+Mid(m$,i,1)
        
        //tulostus
        Text 0,0, "Oikea merkkijono:    "+m$
        
        If t$<>m$ Then
            Text 0,20,"Tietokoneen arvaus:  "+t$+Chr(value)
        Else 
            Text 0,20,"Tietokoneen vastaus: "+t$
        EndIf 

        DrawScreen
    
    Next value
    
Next i

WaitKey
Vaikkakin jos haluaa optimoida laskentaresursseja ja saada vain kivannäköisen systeemin eikä etsinnän oikeellisuudella ole mitään väliä. Voi vaikka syöttää satunnaismerkkejä ja tietyn "etsintä" ajan kuluttua asettaa oikean merkin paikoilleen.

Vähän näyttävämmin "etsintää" harjoittavasta ohjelmasta vinkkinä tämä.

Code: Select all

Dim ret(1,1) As Byte

Repeat

    Text 0,0,Scramble("Tämä teksti valkenee sulle pikkuhiljaa",5)

    DrawScreen

Forever


Function Scramble(_txt$,speed)

    l=Len(_txt$)
    
    ClearArray OFF
    ReDim ret(l,2) As Byte
    
    If ret(0,0)=0 Then 
        For i=1 To l
            m$=Mid(_txt$,i,1)
            
            ret(i,0)=Asc(m$)
            
            ret(i,2)=0
        
            If ret(i,1)=0 Then ret(i,1)=ret(i,0)+Rand(1,10)
            If ret(i,1)>126 And ret(i,1)<145 Then 
                ret(i,1)=145
            ElseIf ret(i,1)>147 And ret(i,1)<161 Then 
                ret(i,1)=161
            ElseIf ret(i,1)>255 Or ret(i,1)<32 Then 
                ret(i,1)=32
            EndIf 
            
            If ret(i,1)=ret(i,0) Then ret(i,2)=1
        Next i
        ret(0,0)=1
    EndIf 

    For o=0 To speed 
    
        i=Rand(1,l)

        c=0
        While ret(i,2)=1 
            c+1
            i=i+1
            If i>l Then i=1
            If c>l Then Exit 
        Wend 

        If ret(i,2)=0 Then 

            ret(i,1)= ret(i,1) + 1
            
            If ret(i,1)>126 And ret(i,1)<145 Then 
                ret(i,1)=145
            ElseIf ret(i,1)>147 And ret(i,1)<161 Then 
                ret(i,1)=161
            ElseIf ret(i,1)>255 Or ret(i,1)<32 Then 
                ret(i,1)=32
            EndIf 
            
            If ret(i,1)=ret(i,0) Then ret(i,2)=1
        EndIf 

    Next o

    rStr$=""
    
    For i=1 To l
        rStr$=rStr$+Chr(ret(i,(ret(i,2)=0)))
    Next i
    
    Return rStr$

End Function
Toinen esimerkki hieman erilaisesta systeemistä, joka tarkastaa kaikki kirjaimet aina yhtäaikaisesti, tämä on paljon hitaampaa koska minkä tahansa merkin ollessa väärin koko salasana on väärin. Salasanan pituuden kasvaessa oikean sanan löytämiseen kuluva aika moninkertaistuu.

Code: Select all

pituus = 2

//tässä luodaan merkkijono
For i=1 To pituus
    m$ = m$ + Chr(Rand (33, 126))
Next i


//tietokoneen arvaus
t$="!!"

//käydään joka merkki läpi

i=pituus

While t$<>m$ And finished=0
    
    While Asc(Mid(t$,i,1))<=126 And finished=0
    
        value = Asc(Mid(t$,i,1))+1
        
        If i=pituus Then tafter$ = "" Else tafter$ = Right(t$,pituus-i)
        
        If i=1 Then tbefore$ = "" Else tbefore$ = Left(t$,i-1)
    
        If value=127 Then 
        
            If i=pituus Then tafter$ = "" Else tafter$ = Right(t$,pituus-i)
        
            If tbefore$ <> "" Then tbefore$ = Left(tbefore$,i-2)+Chr(Asc(Right(tbefore$,1))+1)
        
            value=33
            
            i=pituus
            
        EndIf 
        
        t$ = tbefore$+Chr(value)+tafter$
        
        If t$=m$ Then finished=1 : Exit: Exit 
            
        Text 0,0, "Oikea merkkijono:   "+m$
        Text 0,20,"Tietokoneen arvaus: "+t$
        
        DrawScreen
        
    Wend 
    
    i=i-1
    
Wend 

Text 0,0, "Oikea merkkijono:   "+m$
Text 0,20,"Tietokoneen vastaus:"+t$

DrawScreen
    
WaitKey
Molemmat tekniikat olettavat että sanan pituus on tiedossa. Näinhän ei välttämättä ole, vain voitaisiin vielä laittaa yksi looppi, joka lisää pituutta mikäli sanaa ei löytynyt lyhyempien joukosta.
Arvaa repesinkö ku ajoin ton ekan. Tuli heti sellanen rikossarja-meininki et koodilukkoon kytketään laite joka välkyttelee numeroita :D Mut kiitti.
Aloittelija, koodaaja, jotain...
CbFUN :D
User avatar
TukeKoodi
Active Member
Posts: 142
Joined: Thu Feb 03, 2011 7:40 pm
Location: C:\Työpöytä

Re: Salasanan haku

Post by TukeKoodi »

TukeKoodi wrote:
MetalRain wrote:Tässä esimerkki tekniikasta jolla ei oikeasti löydä salasanaa, koska pitäisi tietää salasanan pituus tietämättä itse sanaa ja voida kokeilla jokaista merkkiä kerrallaan toisista riippumatta, mutta ihan kivan näköinen systeemi vaikka hakkerointipeliin.
Arvaa repesinkö ku ajoin ton ekan. Tuli heti sellanen rikossarja-meininki et koodilukkoon kytketään laite joka välkyttelee numeroita :D Mut kiitti.
Aloittelija, koodaaja, jotain...
CbFUN :D
naputtelija
Devoted Member
Posts: 718
Joined: Wed Nov 03, 2010 7:56 pm
Location: Joku piste pohjoisessa.

Re: Tyhmät kysymykset (I/2011)

Post by naputtelija »

Dimple wrote:

Code: Select all

For pis.PISTEET = Each PISTEET

               ...

                For pis.PISTEET = Each PISTEET
                    
                    ...

                Next pis

                ...

Next pis
Tarkoituksella samat?
Juu, tiedän. En vain tiennyt ettei se noin toimisi. Räknään systeemiä vähän ja sitten varmaan onnistuu.
<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...
User avatar
Misthema
Advanced Member
Posts: 312
Joined: Mon Aug 27, 2007 8:32 pm
Location: Turku, Finland
Contact:

Re: Tyhmät kysymykset (I/2011)

Post by Misthema »

naputtelija wrote:Ja tässä maaginen (ja mavinen) UpdateSpace3:

Code: Select all

Function UpdateSpace3()
    For pis.PISTEET = Each PISTEET
        If ObjectFloat(pis\obj) <> 0.0 Then
            xmove# = GetObjectSpeed(pis\obj,xcomp)
            ymove# = GetObjectSpeed(pis\obj,ycomp)
            If ObjectInteger(pis\obj) = 0 Then
                tempobj=CloneObject(pis\obj)
                For pis.PISTEET = Each PISTEET
                    If ObjectFloat(pis\obj) <> 0.0 And temp <> pis\obj Then
                        gravacc# = gamma * ObjectFloat(pis\obj) / Distance2(temp,pis\obj)^2
                        gravang# = GetAngle2(temp,pis\obj)
                        xmove = xmove + Cos(gravang) * gravacc
                        ymove = ymove + Sin(gravang) * gravacc
                    EndIf
                Next pis
                DeleteObject tempobj
                ObjectString pis\obj, Str(xmove) + " " + Str(ymove)
            EndIf
            TranslateObject pis\obj, xmove, ymove
        EndIf
    Next pis
End Function
Onko kenelläkään ratkaisua, miten tuo toimisi?
Jos vaikka ensin huomauttaisin tuosta sinun väliaikaisesta objektistasi: tempobj != temp.
Toisekseen, objekteille ei missään vaiheessa ole määritelty mitään arvoa ObjectInteger:llä, joten miksi edes tarkistat sen?
Ja kolmanneksi, tietääkseni kaksi samannimistä For=Each -objektia ei voi olla sisäkkäin.
Dimple
Active Member
Posts: 103
Joined: Wed Nov 17, 2010 5:43 pm

Re: Tyhmät kysymykset (I/2011)

Post by Dimple »

Misthema wrote:Ja kolmanneksi, tietääkseni kaksi samannimistä For=Each -objektia ei voi olla sisäkkäin.
Miksei voisi olla?

Code: Select all

For pis.PISTEET = Each PISTEET
    temp = pis
    For pis.PISTEET = Each PISTEET
    
    next pis
    pis = temp
Next pis
En kyllä kokeillut. :D Eikä tuollaista viritelmää ei kyllä ikinä tarvitse.

Se Force variable declaration -valinta on kyllä oikeasti aika hyödyllinen. Sen avulla pystyy bongaamaan kirjoitusvirheet nopeasti. Itse käytän sitä lähes aina, kun koodaan CB:llä.
Feuer
Devoted Member
Posts: 520
Joined: Tue Jun 16, 2009 11:13 am
Contact:

Re: Tyhmät kysymykset (I/2011)

Post by Feuer »

Kyllähän se toimii :P

Code: Select all

Type PISTEET
    Field n
EndType

For i=0 To 9
    JOO.PISTEET = New(PISTEET)
    JOO\n = i+1
Next i

For pis.PISTEET = Each PISTEET
    temp = pis
    For pis.PISTEET = Each PISTEET
        Print pis\n
        Wait 200
    next pis
    pis = temp
Next pis

WaitKey
Mutta ainoa tilanne jossa keksisin tuollaiselle rakenteelle käyttöä, on kun tarkistetaan ettei objektikokoelman jäsen törmää kehenkään muuhun jäseneen. Sille tosin lienee helpompiakin rakenteita olemassa.
Asus P8P67 LE/Intel Core i5 2500K/ GTX560/ 8GT RAM/750GT HDDt + 120GT SSD + 13" Macbook Pro
Blogi - Peräpohjola - MERPG
Bave-
Newcomer
Posts: 8
Joined: Sat May 15, 2010 5:09 pm
Contact:

Re: Tyhmät kysymykset (I/2011)

Post by Bave- »

Minulla olisi tämmöinen todella tyhmä kysymys. :?
Varmaan tähän löytyy ratkaisu Coolbasic ohjekirjasta tai varmasti ainakin täältä foorumilta, mutta en jaksanut selata kaikkea läpi. :roll:

Kysymykseni:
Miten saisin If - Then lausekkeella(tai jollain muulla, jos on parempi keino) objektin lopettamaan toimintansa (esim. silmukalla saatu objektin pyöriminen) tietyn ajan kuluttua( esim. 1 minuutti)?

Enkä kaipaa tähän: tietenkin se on näin- vastauksia.
Olen vasta aloittelija, enkä tiedä paljoa. :roll:
Milloin CoolBasic Classic Julkaistaan ?

Huomisen ammattipelintekijä...
Bave-
DJ-Filbe
Devoted Member
Posts: 854
Joined: Sat Feb 20, 2010 2:18 pm

Re: Tyhmät kysymykset (I/2011)

Post by DJ-Filbe »

Bave- wrote:Minulla olisi tämmöinen todella tyhmä kysymys. :?
Varmaan tähän löytyy ratkaisu Coolbasic ohjekirjasta tai varmasti ainakin täältä foorumilta, mutta en jaksanut selata kaikkea läpi. :roll:

Kysymykseni:
Miten saisin If - Then lausekkeella(tai jollain muulla, jos on parempi keino) objektin lopettamaan toimintansa (esim. silmukalla saatu objektin pyöriminen) tietyn ajan kuluttua( esim. 1 minuutti)?

Enkä kaipaa tähän: tietenkin se on näin- vastauksia.
Olen vasta aloittelija, enkä tiedä paljoa. :roll:

Code: Select all

aloitusaika=timer() // määritetään aloitusaika, josta voidaan laskea kulunutta aikaa
aika=60000 // 1min = 60s = 60000ms
repeat
	...
	if timer()-aloitusaika < aika then // jos aikaa on mennyt vähemmän kuin [aika] niin...
		rotateobject obj, 1 // ...pyöritetään objektia
	endif
until escapekey()
Bave-
Newcomer
Posts: 8
Joined: Sat May 15, 2010 5:09 pm
Contact:

Re: Tyhmät kysymykset (I/2011)

Post by Bave- »

kiitos.
Milloin CoolBasic Classic Julkaistaan ?

Huomisen ammattipelintekijä...
Bave-
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Tyhmät kysymykset (I/2011)

Post by Awaclus »

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ä?
Locked