Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: vb lotto & yms

t800 [11.12.2003 15:00:52]

#

tarkoituksena olisi tehdä lottopeli vb.netillä käyttäen taulukkoa..,mutta pari ongelmaa tuli vastaan:

ohjelma on tähän tyylin nyt:

Public nro(6) As Integer


        Randomize()
        For i = 0 To UBound(nro)

            nro(i) = Int(Rnd() * 39)

        Next

mutta miten tuohon saisi lisättyä että sama numero ei
esiityisi kahteen kertaan?

kokeilin if rumballa ja uusi numero do until ,mutta tämä
jumitti koko homman..
luin qbasiclla tehdyn loton ,mutta en saanut sovellettua
sitä tähän :(

sitten miten buttonin väri voidaan vaihtaa ns ohjelmallisesti?..tarkoituksena olisi tehdä vilkkuva buttoni

pystyykö vb totetuttamaan ns restart-toiminnon ohjelmalle,
eli toiminto tekisi saman asian kun käynnistäisi ohjelman uudestaan?

sooda [11.12.2003 15:13:20]

#

Jotenkin näin.

dim olleet(ubound(nro))
Randomize
For i = 0 To UBound(nro)
    uusiks:
    nro(i) = Int(Rnd * 39)
    for j=0 to i
        if nro(i)=olleet(j) then goto uusiks
    next
    olleet(i)=nro(i)

Next

Ja...

lainaus:

miten buttonin väri voidaan vaihtaa ns ohjelmallisesti?..tarkoituksena olisi tehdä vilkkuva buttoni

pistät sen styleksi eka Graphical siinä design tilassa, ja koodiin laitat: Command1.BackColor = coloori

lainaus:

pystyykö vb totetuttamaan ns restart-toiminnon ohjelmalle,
eli toiminto tekisi saman asian kun käynnistäisi ohjelman uudestaan?

Joo, käynnistä shellillä tai shellexecutella(etsi täältä putkasta koodivinkki siitä) ohjelma ja pistä nykyiseen ohjelmaan että Unload Me

Antti Laaksonen [11.12.2003 15:36:18]

#

Itse toteuttaisin lottonumeroiden arvonnan seuraavantapaisella funktiolla:

Private Function ArvoNumerot(ByVal maara As Integer, ByVal maksimi As Integer) As Collection
    Dim varasto As New Collection, numerot As New Collection
    Dim i As Integer, a As Integer
    'lisätään kaikki sallitut numerot listalle
    For i = 1 To maksimi
        varasto.Add(i)
    Next
    'poimitaan listalta haluttu määrä numeroita
    For i = 1 To maara
        'arvotaan valittava numero listalta,
        'jossa on ainoastaan valitsemattomia numeroita
        a = Int(Rnd() * varasto.Count) + 1
        'lisätään numero valittujen listalle
        numerot.Add(varasto.Item(a))
        'poistetaan numero listalta, jotta sitä ei
        'voi valita myöhemmin uudestaan
        varasto.Remove(a)
    Next
    Return numerot
End Function

Funktiota voisi käyttää esim. näin:

Dim numerot As New Collection, numero As Integer
'alustetaan satunnaislukugeneraattori
Randomize()
'arvotaan 7 numeroa 39:n joukosta
numerot = ArvoNumerot(7, 39)
'näytetään kaikki arvotut numerot
For Each numero In numerot
    MsgBox(numero)
Next

Tässä toteutustavassa on se hyvä puoli, että lukuja täytyy aina arpoa saman verran — vain yhtä monta kuin numeroita valitaan. Jos numeroita arvottaisiin, kunnes löytyy sellainen jota ei vielä ole valittu, numeroiden arvonta saattaisi tosi huonolla tuurilla kestää kauan.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta