Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: (vb.net) Yatzy -ongelma pisteytyksessä!

Sivun loppuun

Hellami [27.11.2003 12:43:37]

#

Teen Yatzy peliä... olen saanut toimimaan nämä nopan lukitukset... ongelma on: Minulla on noppina 5 Label:ia, joiden nimet on Noppa1,Noppa2, jne. ja kun heitot ovat loppu on mahdollisuus sijoittaa se johonkin valitsemalla Jokin RadioButtoneista ja painamalla sijoita. Olen saanut toimimaan vain sen,että ohjelma laittaa pareissa isomman parin yhteen lasketun summan pistelistaan. Mutta muut yksinkertaiset eivät jostain syystä onnistu kuten ykköset, kakkoset jam muut... Muttin nämä noppa!, Noppa2, ja muut taulukkoon, jonka nimi on:

Dim Pisteet(4) as Long

Ja sitten vertasin niitä seuraavalla tavalla:

Public function Ykköset
if Pisteet(0) = 1 then
Loppu = Loppu + 1
Elseif Pisteet(1) = 1 then
Loppu = Loppu + 1
elseif Pisteet(2) = 1 then
Loppu = Loppu + 1
elseif Pisteet(3) = 1 then
Loppu = Loppu + 1
Elseif Pisteet(4) = 1 then
Loppu = loppu + 1

Tuo "loppu" on vain muuttuja johon sijoitettavat pisteet sijoitetaan väliaikaisesti niinkuin nuo Pisteet(0) jne...
Tämä ei jostain syystä toiminut. Siis jos vaikka oli 2 ykköstä pisteisiin tuli vain 1. Miksi??? Käytin tota kaava kaikissa Yatzyn Noppa vaihtoehdoissa (Ykköset, Kakkoset, Kolmoset, neloset jne.), mutta sama ongelma oli niissä, miksi? Olisiko minun kannattanut käyttää seuraavanlaista tapaa(,jota en ole ehtinyt ja jaksanut kokeilla),että olisi toiminut:

Public Function Ykköset()
If Noppa1.text = 1 then
Loppu = loppu + 1
elseif Noppa2.text = 1 then
Loppu = loppu + 1

jne...
Vai onko ongel tossa "ElseIf" -tavassa? Tarkoitan että pitäisikö noista jokainen ElseIf -lause olla oma if -lause. Vai muuttaisiko tämä mitään?
Koodi -tagit ei toiminu... valitti erroreit!

Antti Laaksonen [27.11.2003 14:19:33]

#

Oletko lukenut tämän oppaan: https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=jatsi Oppaassa on mukana esimerkkiohjelma, joka on helppo muuttaa VB.NETille.

Hellami [27.11.2003 14:59:07]

#

Olen lukenut, mutta en ole huomannut tota esimerkkiohjelmaa... No tarkoitukseni oli tehdä peli täysin oman taidon ja osaamisen mukaan...,että taitoni kehittyisivät :)

Antti Laaksonen [27.11.2003 15:19:05]

#

Mitäs sitten kyselet täällä, jos ajattelit selviytyä omin päin? :)

Mutta itse asiaan: Suosittelen järjestämään nopat suuruusjärjestykseen, jolloin yhdistelmiä on paljon helpompi tutkia. Ykkösien tarkistus ei toimi siksi, että ehtojen tarkistus loppuu ensimmäisen toden löytyessä. Kannattaakin korvata tuollaiset peräkkäiset ehtolauseet silmukalla. Eli:

Dim i As Integer
For i = 0 to 4
    If Pisteet(i) = 1 Then
        Loppu += 1
    End If
Next

edit: Ja voit myös yhdistää ykkösien, kakkosien, kolmosien, nelosien, viitosien ja kuutosien tarkistuksen samaan funktioon.

Hellami [27.11.2003 19:56:53]

#

Toi on varmasti hyvä tapa... mut on aina tahtonu jäädä toi for -silmukan harjottelu sivuun ja käyttänyt sitten vaikeampaa tapaa(en vaa tajuu jostain syystä for -silmukan toiminta periaatetta)

rndprogy [27.11.2003 20:01:42]

#

Etkö muka? For i = 0 To 4 ja Next:in välillä tekee luupin neljä kertaa. siinä se.

Hellami [27.11.2003 20:03:41]

#

Jaa. siis se toistaa niin kauan "loop" sanan jälkeisiä lauseita ku ehto on tosi?

sooda [27.11.2003 20:05:05]

#

Esimerkki ja selite samassa:

For i = 0 to 4
    MsgBox "Oke, luupataan, luuppi-indeksi on " & i,vbInformation
Next

Niin, ja jos luuppaa paljon esim. 1000 kertaa tai enemmän kannattaa laittaa sisään DoEvents ettei ohjelma jumita...

Hellami [27.11.2003 20:05:12]

#

Vai ennen loop -sanaa olevat asiat niin monta kertaa ku et ehto on tosi?

sooda [27.11.2003 20:07:26]

#

Minkä loop sanan??? ei for-nextissä ole loopia...? häh!

Antti Laaksonen [27.11.2003 20:48:01]

#

For...Next on yksi tärkeimmistä rakenteista, se sinun kannattaa opetella hetimmiten.

Eli siis: For...Next-rakenteessa muuttuja saa arvokseen lukuja säännöllisessä järjestyksessä. Joka kerralla välissä olevat lauseet suoritetaan. Sen vuoksi

Dim i As Integer
For i = 1 To 5
    Print "Testi"
Next

tulostaa viisi kertaa sanan "Testi". Ensimmäisellä kerralla i-muuttujan arvo on 1, toisella kerralla 2 jne. kunnes viimeisellä kerralla 5. Siksi seuraavan esimerkin

Dim i As Integer
For i = 1 To 5
    Print i
Next

tulostus on

1
2
3
4
5

Muuttujan arvo voi myös kasvaa suuremmin (tai pienemmin) askelin sekä kasvamisen sijasta vähentyä. Tällöin käytetään Step-avainsanaa For-lauseen yhteydessä.

Dim i As Integer
'tulostaa luvut 2, 4, 6, 8, 10
For i = 2 To 10 Step 2
    Print i
Next
Dim i As Integer
'tulostaa luvut 5, 4, 3, 2, 1
For i = 5 To 1 Step -1
    Print i
Next

Hellami [28.11.2003 13:13:00]

#

Eiku joo... mä sekotin tota siihen do ja loop -juttuun... mut kyl mä sen suurin piirtein tajuan...


Sivun alkuun

Vastaus

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

Tietoa sivustosta