Option Strict On Imports System.Console Module Module1 Sub Main() ' Määritellään String-muuttujat. Toteutin vapaina olevien lokeroiden listan stringeillä, joten ' niitä kertyi varsin muhkea määrä: Dim StrYkkoset, StrKakkoset, StrKolmoset, StrNeloset, StrVitoset, StrKutoset As String Dim StrPari, StrKaksiparia, StrKolmesamaa, StrNeljasamaa, StrPienisuora, StrSuurisuora As String Dim StrMokki, StrSattuma, StrYatzy, StrNumeerisuustesti As String ' Seuraavaksi määritellään Integer-muuttujat. Eri lokeroiden pisteiden laskut on tehty eri integereille, ' joten näistäkään muuttujista ei pääse ainakaan pulaa tulemaan. Myös for-laskurit ja taulukot ovat integerejä: Dim IntYkkoset_pisteet, IntKakkoset_pisteet, IntKolmoset_pisteet, IntNeloset_pisteet, IntVitoset_pisteet As Integer Dim IntKutoset_pisteet, IntPari_pisteet, IntKaksiparia_pisteet, IntKolmesamaa_pisteet, IntNeljasamaa_pisteet As Integer Dim IntPienisuora_pisteet, IntSuurisuora_pisteet, IntMokki_pisteet, IntSattuma_pisteet, IntYatzy_pisteet As Integer Dim laskuri, IntValitselokero, IntSattuma, IntYatzymaara, IntLokerotYhteensa, IntBonuspisteet As Integer Dim heitto(4), maarat(5), i, a, z As Integer ' Testasin ovatko lokerot jo valittu Boolean-muuttujilla, joten jokaiselle viidelletoista lokerolle ' on omansa: Dim ykkoset_test, kakkoset_test, kolmoset_test, neloset_test, vitoset_test, kutoset_test As Boolean Dim pari_test, kaksiparia_test, kolmesamaa_test, neljasamaa_test, pienisuora_test, suurisuora_test As Boolean Dim mokki_test, sattuma_test, yatzy_test As Boolean ykkoset_test = True kakkoset_test = True kolmoset_test = True neloset_test = True vitoset_test = True kutoset_test = True pari_test = True kaksiparia_test = True kolmesamaa_test = True neljasamaa_test = True pienisuora_test = True suurisuora_test = True mokki_test = True sattuma_test = True yatzy_test = True For i = 1 To 15 For z = 0 To 4 Randomize() heitto(z) = CInt(Int(6 * Rnd()) + 1) Next WriteLine() WriteLine("Kierros " & i & ".") WriteLine("Heitit seuraavat silmäluvut:") WriteLine() WriteLine(heitto(0) & ", " & heitto(1) & ", " & heitto(2) & ", " & heitto(3) & " ja " & heitto(4)) WriteLine() If ykkoset_test = True Then StrYkkoset = (" 1: Ykköset") Else : StrYkkoset = ("") End If If kakkoset_test = True Then StrKakkoset = (" 2: Kakkoset") Else : StrKakkoset = ("") End If If kolmoset_test = True Then StrKolmoset = (" 3: Kolmoset") Else : StrKolmoset = ("") End If If neloset_test = True Then StrNeloset = (" 4: Neloset") Else : StrNeloset = ("") End If If vitoset_test = True Then StrVitoset = (" 5: Vitoset") Else : StrVitoset = ("") End If If kutoset_test = True Then StrKutoset = (" 6: Kutoset") Else : StrKutoset = ("") End If If pari_test = True Then StrPari = (" 7: Pari") Else : StrPari = ("") End If If kaksiparia_test = True Then StrKaksiparia = (" 8: Kaksi paria") Else : StrKaksiparia = ("") End If If kolmesamaa_test = True Then StrKolmesamaa = (" 9: Kolme Samaa") Else : StrKolmesamaa = ("") End If If neljasamaa_test = True Then StrNeljasamaa = (" 10: Neljä samaa") Else : StrNeljasamaa = ("") End If If pienisuora_test = True Then StrPienisuora = (" 11: Pieni suora") Else : StrPienisuora = ("") End If If suurisuora_test = True Then StrSuurisuora = (" 12: Suuri suora") Else : StrSuurisuora = ("") End If If mokki_test = True Then StrMokki = (" 13: Mökki") Else : StrMokki = ("") End If If sattuma_test = True Then StrSattuma = (" 14: Sattuma") Else : StrSattuma = ("") End If If yatzy_test = True Then StrYatzy = (" 15: Yatzy") Else : StrYatzy = ("") End If Do WriteLine("Valitse vapaa paikka.") WriteLine("Vapaita paikkoja ovat:") WriteLine() WriteLine(StrYkkoset & "" & StrKakkoset & "" & StrKolmoset & "" & StrNeloset & "" & StrVitoset) WriteLine(StrKutoset & "" & StrPari & "" & StrKaksiparia & "" & StrKolmesamaa & "" & StrNeljasamaa) WriteLine(StrPienisuora & "" & StrSuurisuora & "" & StrMokki & "" & StrSattuma & "" & StrYatzy) WriteLine() Write("Valitse lokero syöttämällä sitä vastaava numero: ") StrNumeerisuustesti = ReadLine() If IsNumeric(StrNumeerisuustesti) = True Then IntValitselokero = CInt(StrNumeerisuustesti) WriteLine() End If If IntValitselokero < 1 Or IntValitselokero > 15 Then WriteLine() WriteLine("Lokero on valittava numeroilla 1-15. Yritä uudestaan.") WriteLine() End If ' Yllä testataan käyttäjän syötteen numeerisuus Select Case IntValitselokero ' Katsotaan minkä lokeron käyttäjä on valinnut, ja tarkistetaan kunkin lokeron kohdalla onko käyttäjä ' oikeasti heittänyt lokeroon sopivat silmäluvut: Case Is = 1 ykkoset_test = False For a = 0 To 4 If heitto(a) = 1 Then laskuri = laskuri + 1 End If Next If laskuri >= 1 Then Write("Heitit ykkösiä. Laske saamasi pisteet: ") Do StrNumeerisuustesti = ReadLine() If IsNumeric(StrNumeerisuustesti) = True Then IntYkkoset_pisteet = CInt(StrNumeerisuustesti) WriteLine() Else WriteLine("Anna pisteet numeerisessa muodossa. Yritä uudestaan:") End If Loop Until IsNumeric(StrNumeerisuustesti) = True Else WriteLine("Et heittänyt lokeroon sopivia silmälukuja. Sait lokeroon 0 pistettä.") IntYkkoset_pisteet = 0 WriteLine() End If laskuri = 0 ' __________________________________________________ ' Ykköset-lokero on tarkistettu ja pisteytetty yllä. Case Is = 2 kakkoset_test = False For a = 0 To 4 If heitto(a) = 2 Then laskuri = laskuri + 1 End If Next If laskuri >= 1 Then Write("Heitit kakkosia. Laske saamasi pisteet: ") Do StrNumeerisuustesti = ReadLine() If IsNumeric(StrNumeerisuustesti) = True Then IntKakkoset_pisteet = CInt(StrNumeerisuustesti) WriteLine() Else WriteLine("Anna pisteet numeerisessa muodossa. Yritä uudestaan:") End If Loop Until IsNumeric(StrNumeerisuustesti) = True Else WriteLine("Et heittänyt lokeroon sopivia silmälukuja. Sait lokeroon 0 pistettä.") IntKakkoset_pisteet = 0 WriteLine() End If laskuri = 0 '___________________________________________________ ' Kakkoset-lokero on tarkistettu ja pisteytetty yllä. Case Is = 3 kolmoset_test = False For a = 0 To 4 If heitto(a) = 3 Then laskuri = laskuri + 1 End If Next If laskuri >= 1 Then Write("Heitit kolmosia. Laske saamasi pisteet: ") Do StrNumeerisuustesti = ReadLine() If IsNumeric(StrNumeerisuustesti) = True Then IntKolmoset_pisteet = CInt(StrNumeerisuustesti) WriteLine() Else WriteLine("Anna pisteet numeerisessa muodossa. Yritä uudestaan:") End If Loop Until IsNumeric(StrNumeerisuustesti) = True Else WriteLine("Et heittänyt lokeroon sopivia silmälukuja. Sait lokeroon 0 pistettä.") IntKolmoset_pisteet = 0 WriteLine() End If laskuri = 0 '____________________________________________________ ' Kolmoset-lokero on tarkistettu ja pisteytetty yllä. Case Is = 4 neloset_test = False For a = 0 To 4 If heitto(a) = 4 Then laskuri = laskuri + 1 End If Next If laskuri >= 1 Then Write("Heitit nelosia. Laske saamasi pisteet: ") Do StrNumeerisuustesti = ReadLine() If IsNumeric(StrNumeerisuustesti) = True Then IntNeloset_pisteet = CInt(StrNumeerisuustesti) WriteLine() Else WriteLine("Anna pisteet numeerisessa muodossa. Yritä uudestaan:") End If Loop Until IsNumeric(StrNumeerisuustesti) = True Else WriteLine("Et heittänyt lokeroon sopivia silmälukuja. Sait lokeroon 0 pistettä.") IntNeloset_pisteet = 0 WriteLine() End If laskuri = 0 '____________________________________________________ ' Neloset-lokero on tarkistettu ja pisteytetty yllä. Case Is = 5 vitoset_test = False For a = 0 To 4 If heitto(a) = 5 Then laskuri = laskuri + 1 End If Next If laskuri >= 1 Then Write("Heitit vitosia. Laske saamasi pisteet: ") Do StrNumeerisuustesti = ReadLine() If IsNumeric(StrNumeerisuustesti) = True Then IntVitoset_pisteet = CInt(StrNumeerisuustesti) WriteLine() Else WriteLine("Anna pisteet numeerisessa muodossa. Yritä uudestaan:") End If Loop Until IsNumeric(StrNumeerisuustesti) = True Else WriteLine("Et heittänyt lokeroon sopivia silmälukuja. Sait lokeroon 0 pistettä.") IntVitoset_pisteet = 0 WriteLine() End If laskuri = 0 '____________________________________________________ ' Vitoset-lokero on tarkistettu ja pisteytetty yllä. Case Is = 6 kutoset_test = False For a = 0 To 4 If heitto(a) = 6 Then laskuri = laskuri + 1 End If Next If laskuri >= 1 Then Write("Heitit kutosia. Laske saamasi pisteet: ") Do StrNumeerisuustesti = ReadLine() If IsNumeric(StrNumeerisuustesti) = True Then IntKutoset_pisteet = CInt(StrNumeerisuustesti) WriteLine() Else WriteLine("Anna pisteet numeerisessa muodossa. Yritä uudestaan:") End If Loop Until IsNumeric(StrNumeerisuustesti) = True Else WriteLine("Et heittänyt lokeroon sopivia silmälukuja. Sait lokeroon 0 pistettä.") IntKutoset_pisteet = 0 WriteLine() End If laskuri = 0 '____________________________________________________ ' Kutoset-lokero on tarkistettu ja pisteytetty yllä. Case Is = 7 pari_test = False For a = 0 To 5 For z = 0 To 4 If heitto(z) = a Then maarat(a) = maarat(a) + 1 End If Next Next For a = 0 To 5 If maarat(a) >= 2 Then laskuri = laskuri + 1 End If Next If laskuri >= 1 Then Write("Heitit parin. Laske saamasi pisteet: ") Do StrNumeerisuustesti = ReadLine() If IsNumeric(StrNumeerisuustesti) = True Then IntPari_pisteet = CInt(StrNumeerisuustesti) WriteLine() Else WriteLine("Anna pisteet numeerisessa muodossa. Yritä uudestaan:") End If Loop Until IsNumeric(StrNumeerisuustesti) = True Else WriteLine("Et heittänyt lokeroon sopivia silmälukuja. Sait lokeroon 0 pistettä.") IntPari_pisteet = 0 WriteLine() End If laskuri = 0 maarat(0) = 0 maarat(1) = 0 maarat(2) = 0 maarat(3) = 0 maarat(4) = 0 maarat(5) = 0 '____________________________________________________ ' Pari-lokero on tarkistettu ja pisteytetty yllä. Case Is = 8 kaksiparia_test = False For a = 0 To 5 For z = 0 To 4 If heitto(z) = a Then maarat(a) = maarat(a) + 1 End If Next Next For a = 0 To 5 If maarat(a) >= 2 Then laskuri = laskuri + 1 End If Next If laskuri >= 2 Then Write("Heitit kaksi paria. Laske saamasi pisteet: ") Do StrNumeerisuustesti = ReadLine() If IsNumeric(StrNumeerisuustesti) = True Then IntKaksiparia_pisteet = CInt(StrNumeerisuustesti) WriteLine() Else WriteLine("Anna pisteet numeerisessa muodossa. Yritä uudestaan:") End If Loop Until IsNumeric(StrNumeerisuustesti) = True Else WriteLine("Et heittänyt lokeroon sopivia silmälukuja. Sait lokeroon 0 pistettä.") IntKaksiparia_pisteet = 0 WriteLine() End If laskuri = 0 maarat(0) = 0 maarat(1) = 0 maarat(2) = 0 maarat(3) = 0 maarat(4) = 0 maarat(5) = 0 '____________________________________________________ ' Kaksi paria-lokero on tarkistettu ja pisteytetty yllä. Case Is = 9 kolmesamaa_test = False For a = 0 To 5 For z = 0 To 4 If heitto(z) = a Then maarat(a) = maarat(a) + 1 End If Next Next For a = 0 To 5 If maarat(a) >= 3 Then laskuri = laskuri + 1 End If Next If laskuri >= 1 Then Write("Heitit kolme samaa. Laske saamasi pisteet: ") Do StrNumeerisuustesti = ReadLine() If IsNumeric(StrNumeerisuustesti) = True Then IntKolmesamaa_pisteet = CInt(StrNumeerisuustesti) WriteLine() Else WriteLine("Anna pisteet numeerisessa muodossa. Yritä uudestaan:") End If Loop Until IsNumeric(StrNumeerisuustesti) = True Else WriteLine("Et heittänyt lokeroon sopivia silmälukuja. Sait lokeroon 0 pistettä.") IntKolmesamaa_pisteet = 0 WriteLine() End If laskuri = 0 maarat(0) = 0 maarat(1) = 0 maarat(2) = 0 maarat(3) = 0 maarat(4) = 0 maarat(5) = 0 '____________________________________________________ ' Kolme samaa-lokero on tarkistettu ja pisteytetty yllä. Case Is = 10 neljasamaa_test = False For a = 0 To 5 For z = 0 To 4 If heitto(z) = a Then maarat(a) = maarat(a) + 1 End If Next Next For a = 0 To 5 If maarat(a) >= 4 Then laskuri = laskuri + 1 End If Next If laskuri >= 1 Then Write("Heitit neljä samaa. Laske saamasi pisteet: ") Do StrNumeerisuustesti = ReadLine() If IsNumeric(StrNumeerisuustesti) = True Then IntNeljasamaa_pisteet = CInt(StrNumeerisuustesti) WriteLine() Else WriteLine("Anna pisteet numeerisessa muodossa. Yritä uudestaan:") End If Loop Until IsNumeric(StrNumeerisuustesti) = True Else WriteLine("Et heittänyt lokeroon sopivia silmälukuja. Sait lokeroon 0 pistettä.") IntNeljasamaa_pisteet = 0 WriteLine() End If laskuri = 0 maarat(0) = 0 maarat(1) = 0 maarat(2) = 0 maarat(3) = 0 maarat(4) = 0 maarat(5) = 0 '____________________________________________________ ' Neljä samaa-lokero on tarkistettu ja pisteytetty yllä. Case Is = 11 if PIENISUORA LÖYTYY THEN Write("Heitit pienen suoran. Pienestä suorasta saa automaattisesti 15 pistettä.") IntPienisuora_pisteet = 15 WriteLine() Else WriteLine("Et heittänyt lokeroon sopivia silmälukuja. Sait lokeroon 0 pistettä.") IntPienisuora_pisteet = 0 WriteLine() End If laskuri = 0 '____________________________________________________ ' Pieni suora-lokero on tarkistettu ja pisteytetty yllä. Case Is = 12 If SUURISUORA LÖYTYY THEN Write("Heitit suuren suoran. Suuresta suorasta saa automaattisesti 20 pistettä.") IntSuurisuora_pisteet = 20 WriteLine() Else WriteLine("Et heittänyt lokeroon sopivia silmälukuja. Sait lokeroon 0 pistettä.") IntSuurisuora_pisteet = 0 WriteLine() End If laskuri = 0 '____________________________________________________ ' Suuri suora-lokero on tarkistettu ja pisteytetty yllä. Case Is = 13 mokki_test = False For a = 0 To 5 For z = 0 To 4 If heitto(z) = a Then maarat(a) = maarat(a) + 1 End If Next Next For a = 0 To 5 If maarat(a) = 2 Then laskuri = laskuri + 1 End If If maarat(a) = 3 Then laskuri = laskuri + 1 End If Next If laskuri = 2 Then Write("Heitit mökin. Laske saamasi pisteet: ") Do StrNumeerisuustesti = ReadLine() If IsNumeric(StrNumeerisuustesti) = True Then IntMokki_pisteet = CInt(StrNumeerisuustesti) WriteLine() Else WriteLine("Anna pisteet numeerisessa muodossa. Yritä uudestaan:") End If Loop Until IsNumeric(StrNumeerisuustesti) = True Else WriteLine("Et heittänyt lokeroon sopivia silmälukuja. Sait lokeroon 0 pistettä.") IntMokki_pisteet = 0 WriteLine() End If laskuri = 0 maarat(0) = 0 maarat(1) = 0 maarat(2) = 0 maarat(3) = 0 maarat(4) = 0 maarat(5) = 0 '____________________________________________________ ' Mökki-lokero on tarkistettu ja pisteytetty yllä. Case Is = 14 sattuma_test = False WriteLine("Sattuma arpoo lokeron pisteiksi yhden heittämistäsi silmäluvuista.") Randomize() IntSattuma = CInt(Int(5 * Rnd())) WriteLine("Sattuma arpoi lokeron pisteiksi silmäluvun " & heitto(IntSattuma)) IntSattuma_pisteet = heitto(IntSattuma) WriteLine() '____________________________________________________ ' Sattuma-lokero on tarkistettu ja pisteytetty yllä. Case Is = 15 yatzy_test = False For a = 0 To 5 For z = 0 To 4 If heitto(z) = a Then maarat(a) = maarat(a) + 1 End If Next Next For a = 0 To 5 If maarat(a) = 5 Then laskuri = laskuri + 1 End If Next If laskuri = 5 Then IntYatzymaara = IntYatzymaara + 1 Write("HEITIT YATZYN! Laske saamasi pisteet: ") Do StrNumeerisuustesti = ReadLine() If IsNumeric(StrNumeerisuustesti) = True Then IntYatzy_pisteet = CInt(StrNumeerisuustesti) WriteLine() Else WriteLine("Anna pisteet numeerisessa muodossa. Yritä uudestaan:") End If Loop Until IsNumeric(StrNumeerisuustesti) = True Else WriteLine("Et heittänyt lokeroon sopivia silmälukuja. Sait lokeroon 0 pistettä.") IntYatzy_pisteet = 0 WriteLine() End If laskuri = 0 maarat(0) = 0 maarat(1) = 0 maarat(2) = 0 maarat(3) = 0 maarat(4) = 0 maarat(5) = 0 '____________________________________________________ ' Yatzy-lokero on tarkistettu ja pisteytetty yllä. End Select WriteLine("Keräämäsi pisteet lokeroittain tähän mennessä:") WriteLine("Ykköset: " & IntYkkoset_pisteet & " Kakkoset: " & IntKakkoset_pisteet & " Kolmoset: " & IntKolmoset_pisteet & " Neloset: " & IntNeloset_pisteet & " Vitoset: " & IntVitoset_pisteet) WriteLine("Kutoset: " & IntKutoset_pisteet & " Pari: " & IntPari_pisteet & " Kaksi paria: " & IntKaksiparia_pisteet & " Kolme samaa: " & IntKolmesamaa_pisteet & " Neljä samaa: " & IntNeljasamaa_pisteet) WriteLine("Pieni suora: " & IntPienisuora_pisteet & " Suuri suora: " & IntSuurisuora_pisteet & " Mökki: " & IntMokki_pisteet & " Sattuma: " & IntSattuma_pisteet & " Yatzy: " & IntYatzy_pisteet) WriteLine() WriteLine("Paina jotain näppäintä jatkaaksesi") ReadLine() Clear() Loop Until IntValitselokero >= 1 And IntValitselokero <= 15 Next ' Pisteiden, bonuspisteiden ja lopullisen kokonaispistemäärän laskeminen suoritetaan alla: ' Ensin tarkastetaan, saiko pelaaja ensimmäisestä kuudesta lokerosta yli 63 pistettä. Jos sai, ' hän saa 50 pisteen bonuksen: If (IntYkkoset_pisteet + IntKakkoset_pisteet + IntKolmoset_pisteet + IntNeloset_pisteet + IntVitoset_pisteet + IntKutoset_pisteet) > 63 Then IntBonuspisteet = IntBonuspisteet + 50 WriteLine("Keräsit ensimmäisestä kuudesta lokerosta yli 63 pistettä, joten sinulle annetaan 50 bonuspistettä!") End If ' Sen jälkeen tarkastetaan montako Yatzyä pelaaja heitti. Jokaisesta Yatzystä saa 50 pisteen bonuksen: If IntYatzymaara > 1 Then WriteLine("Heitit " & IntYatzymaara & " yatzya, joten sinulle annetaan jokaisesta niistä " & IntYatzymaara * 50 & " bonuspistettä!") IntBonuspisteet = IntBonuspisteet + IntYatzymaara * 50 End If IntLokerotYhteensa = IntYkkoset_pisteet + IntKakkoset_pisteet + IntKolmoset_pisteet + IntNeloset_pisteet + IntVitoset_pisteet + IntKutoset_pisteet + IntPari_pisteet + IntKaksiparia_pisteet + IntKolmesamaa_pisteet + IntNeljasamaa_pisteet + IntPienisuora_pisteet + IntSuurisuora_pisteet + IntMokki_pisteet + IntSattuma_pisteet + IntYatzy_pisteet WriteLine("Lokeroidesi yhteispistemäärä: " & IntLokerotYhteensa) WriteLine("Keräämäsi bonuspisteet: " & IntBonuspisteet) WriteLine("Yhteispistemääräsi: " & IntLokerotYhteensa + IntBonuspisteet) ReadLine() End Sub End Module