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!
Oletko lukenut tämän oppaan: https://www.ohjelmointiputka.net/oppaat/opas.
Olen lukenut, mutta en ole huomannut tota esimerkkiohjelmaa... No tarkoitukseni oli tehdä peli täysin oman taidon ja osaamisen mukaan...,että taitoni kehittyisivät :)
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.
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)
Etkö muka? For i = 0 To 4 ja Next:in välillä tekee luupin neljä kertaa. siinä se.
Jaa. siis se toistaa niin kauan "loop" sanan jälkeisiä lauseita ku ehto on tosi?
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...
Vai ennen loop -sanaa olevat asiat niin monta kertaa ku et ehto on tosi?
Minkä loop sanan??? ei for-nextissä ole loopia...? häh!
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
Eiku joo... mä sekotin tota siihen do ja loop -juttuun... mut kyl mä sen suurin piirtein tajuan...
Aihe on jo aika vanha, joten et voi enää vastata siihen.