Olen tehnyt erään pisteenlaskenta ohjelman, jota olen näin harrastuksen omaisesti kehittänyt parin vuoden aikana eteenpäin. Pelistä teidän ei tarvitse ymmärtää, kunhan ohjelma saataisiin toimimaan ilman MAVia

Aiemmat versiot ovat toimineet ongelmitta, mutta nyt uusimman version kanssa on jotain hämmennystä, jossa itselläni meni sormi suuhun pahemman kerran. Kun ajan CBEditorista koodin, kaikki toimii täysin ilman ongelmia. Saan rakennettua jopa ilman virheitä EXE:n jotta pystyn ohjelmaa kavereille ja tutuille jakamaan. Rakennettu EXE kuitenkin heittää MAVia heti alkuun jo ohjelman käynnistyessä. Yritin etsiä vastausta jo Googlella ja foorumilta, tosin löytämäni vastaukset MAViin liittyen olivat aina ilmeisesti jo ajettaessa koodia CBEditorilla.
Koodarina en ole todellisuudessa erityisen hyvä, joten kaunistahan tuo koodi ei ole. Koodi on kuitenkin toiminut erinomaisesti tähän saakka. Tarvitsetteko näiden lisäksi jotain muita tietoja ongelmasta?
Lyhyesti: CBEditorista ajettuna toimii, EXE tiedostona ei toimi.
Onko vinkkejä mikä tämän tyyppisen mysteeri MAVin voi aiheuttaa? Alla vielä koodin pätkä teille tutkailtavaksi, mikäli siitä löytyy jotain ihmeellistä, mikä oheisen ongelman voi aiheuttaa.
Code: Select all
'Pisteenlaskija 2.0
'Made by Samu Korhonen Ja Aksel Korhonen
SetWindow "Sanghai Pisteenlaskija"
SAFEEXIT OFF
'Tehdään tarvittavista muuttujista Globaaleja
Global PelaajaMaara
Global JakajanSijainti
Global Jakaja
Global PisteMaara
Global Valittu
Global KierrosNumero
Global ValittuKierros
Global hiiri
Global SijaintiX
Global SijaintiY
Global Painettu
Global Virhe
Global Ohjeet
Global Syotto
Global numero
Global SarakkeenLeveys
'Valitaan muistiin tarvittavat muuttujat
PelaajaMaara = 5
KierrosMaara = 8
KierrosNumero = 0
ValittuKierros = 0
SijaintiX = 170
SijaintiY = 45
JakajanSijainti = 720
Jakaja = 0
Syotto = OFF
SarakkeenLeveys = 291
'Luodaan Vakiot
Const FonttiKoko = 60
Const FonttiKokoIso = 130
Const FonttiKokoPieni = 30
Const IkkunaX = 1920
Const IkkunaY = 1080
Const VasenMarginaali = 5
Const YlaMarginaali = 45
Const KokoPisteMarginaali = 660
Const SijaintiXOletus = 170
Const SijaintiYOletus = 45
Const Minus = 1
Const Plus = 3
'Asetetaan näyttö oikean kokoiseksi
SCREEN IkkunaX,IkkunaY,0,2
'Ladataan Fontit
PerusFontti=LoadFont("cambria",FonttiKoko)
IsoFontti=LoadFont("cambria",FonttiKokoIso,ON)
PieniFontti=LoadFont("Cambria",FonttiKokoPieni)
SetFont PerusFontti //Valitaan oletusfontiksi Fontti
'Luodaan tarvittavat taulukot peliin
Dim Pelaaja(PelaajaMaara,2) As String
Dim Pisteet(PelaajaMaara,KierrosMaara) As Byte
Dim Kierros(KierrosMaara) As String
Dim Kokopiste(PelaajaMaara) As Short
Dim Pelaajatemp(PelaajaMaara,2) As String
Dim PisteetSyotetty(PelaajaMaara)
Dim Voittaja(KierrosMaara) As Byte
Dim Sarake(PelaajaMaara) As Short
'Nimetään kierrokset
Kierros(0)= "Kirjoita pelaajien nimet"
Kierros(1)= "Kahdet kolmoset"
Kierros(2)= "Suora ja kolmoset"
Kierros(3)= "Kaksi suoraa"
Kierros(4)= "Kolmet kolmoset"
Kierros(5)= "Suora ja kahdet kolmoset"
Kierros(6)= "Kaksi suoraa ja kolmoset"
Kierros(7)= "Kolme suoraa"
Kierros(8)= "Neljät kolmoset"
'Kerrotaan Sarakkeiden leveys
SarakkeenLaskenta()
Pohja:
ClearText
CloseInput
ClearKeys
'Nollataan kaikki tilastot
PelaajaMaara = 5
ReDim Pelaaja(PelaajaMaara,2) As String
ReDim Pisteet(PelaajaMaara,KierrosMaara)As Byte
ReDim KokoPiste(PelaajaMaara) As Short
ReDim Pelaajatemp(PelaajaMaara,2) As String
ReDim PisteetSyotetty(PelaajaMaara)
ReDim Voittaja(KierrosMaara) As Byte
'Käydään kierrokset läpi ja +1, jotta nähdään tulokset vielä viimeisen kierroksen jälkeen.
For ka = 0 To KierrosMaara+1
Virhe = 0 //Nollataan varmuudeksi Virheilmoitukset
Repeat
Repeat
Gosub Tulostus //Mikäli tapahtuu mitään muutoksia, niin tulostetaan näyttö uusiksi
Painettu = 0
ClearKeys
Repeat //Tarkistetaan kokoajan onko painettu jotain
Painallus() //Ja jos on painettu, niin poistutaan silmukasta
KirjoitusPainallus()
PiirraNaytto()
Until Painettu > 0
'Toimitaan painalluksen mukaisesti
If Painettu < 100 Then Gosub Kirjoitus
If Painettu > 109 Then Valinta()
If Painettu = 103 Then Goto Loppu
If Painettu = 101 Then Exit //Mikäli painetaan Enter, niin yritetään vaihtaa kierrosta
If Painettu = 106 Then Execute "media\saannot.pdf"
Forever
Gosub Kierroksenvaihtaminen
Until Virhe=0 //Vaihdetaan kierrosta vain, jos vaihdossa ei tapahdu virheitä
Next ka
Goto Pohja //Aloitetaan uusi peli
Tulostus:
'Tässä aliohjelmassa tulostetaan Näyttöön kaikki
If Ohjeet = ON Then
//Tulostetaan pelaajalle ohjeet
ClearText
SetFont PerusFontti
AddText "OHJEET"
SetFont PieniFontti
AddText ""
AddText "Voit liikkua ohjelmassa nuolinäppäimillä tai käyttämällä hiirtä. "
AddText ""
AddText "Valitse nuolinäppäimillä pelaajan istumapaikka "
AddText "Viimeisen nimen jälkeen siirrytään pisteensyöttöön painamalla 'Enter'. "
AddText "Kun kirjoitat pelaajat istumajärjestyksessä, ohjelma pystyy tunnistamaan jakajan "
AddText ""
AddText "Voit valita jakajan nuolinäppäimillä ylös ja alas kun kirjoitat nimiä. "
AddText "Jakajan valitseminen onnistuu tämän jälkeenkin klikkaamalla henkilöä kokonaispisteluettelossa. "
AddText "Jakaja ilmoitetaan ympyröidyllä J kirjaimella pelaajan nimen vieressä. "
AddText ""
AddText "Saat pelin säännöt näkyviin painamalla 'F11' "
AddText "Laita pelatun kierroksen pisteet ja siirry seuraavalle kierrokselle painamalla 'Enter' "
AddText ""
AddText "Poistu ohjeista painamalla 'F1' "
AddText "Poistu ohjelmasta painamalla 'ESC' "
Locate 1750,1030
AddText "Versio 2.0 Beta"
SetFont PerusFontti
PiirraNaytto()
Else
ClearText
PisteenSijainti = SijaintiXOletus
KokoPisteSijainti = 720
If Virhe > 0 Then Gosub Virheentulostus //Kirjoitetaan tarvittaessa virhe
For kb = 0 To PelaajaMaara //Kirjoitetaan Pelaaja kerrallaan pisteet ja nimet
Pituus = (TextWidth(Str(Pelaaja(kb,0))))/2 //Kun pisteet tulostetaan, keskitetään
PisteenSijaintiTemp = (PisteenSijainti + ((SarakkeenLeveys/2)-Pituus))
Locate PisteenSijaintiTemp, YlaMarginaali //Siirretään oikean pelaajan kohdalle
AddText Pelaaja(kb,0) //Tulostetaan pelaajan nimi
For kc = 1 To (KierrosNumero) //Tulostetaan pelattujen kierrosten pisteet
If kb = Valittu And kc=ValittuKierros And Syotto = ON Then //Ei tulosteta pisteitä, jos ollaan kirjoittamassa
AddText ""
ElseIf PisteetSyotetty(kb) = OFF And Kc = KierrosNumero Then //Jos pisteitä ei ole kirjoitettu, ei tulosteta turhaan
AddText "" //turhaan numeroa 0
Else
Pituus = (TextWidth(Str(Pisteet(kb,kc))))/2 //Kun pisteet tulostetaan, keskitetään
PisteenSijaintiTemp = (PisteenSijainti + ((SarakkeenLeveys/2)-Pituus))
YSijaintiTemp = YlaMarginaali + kc*FonttiKoko
Locate PisteenSijaintiTemp, YSijaintiTemp
AddText "" + Pisteet(kb,kc)
EndIf
Next kc
PisteenSijainti = Pisteensijainti + SarakkeenLeveys //Siirretään kohdistus seuraavan pelaajan kohdalle
Next kb
'Piirretään ">" osoittamaan mikä sarake on valittu
'Box SijaintiX,SijaintiY,SarakkeenLeveys,FonttiKoko,0
'Tulostetaan kierrosten nimet
Locate VasenMarginaali,YlaMarginaali
AddText ""
AddText "2xK"
AddText "S&K"
AddText "2xS"
AddText "3xK"
AddText "S&2xK"
AddText "2xS&K"
AddText "3xS"
AddText "4xK"
AddText ""
Locate VasenMarginaali, KokoPisteMarginaali
AddText "Kokonaispisteet:"
'Tulostetaan pelaajien nimet, mikäli ollaan Nimen kirjoitusvaiheessa
If KierrosNumero = 0 Then
For kb = 0 To PelaajaMaara
AddText " " +Pelaaja(kb,0)
Next kb
EndIf
'Tulostetaan pelaajien nimet ja pisteet oikeassa järjestyksessä, mikäli ollaan jo pelaamassa kierroksia
If KierrosNumero > 0 Then
For kb=0 To PelaajaMaara //Tarkistetaan pelaaja kerrallaan
For kc=0 To PelaajaMaara //Onko pelaaja kyseisellä sijoituksella
If Pelaaja(kc,2)=kb Then //Kun oikea pelaaja löytyy, kirjoitetaan nimi ja pisteet
Locate 5,KokoPisteSijainti
AddText " " +Pelaaja(kc,0)
Locate 420,KokoPisteSijainti
AddText "" +Kokopiste(kc)
KokoPistesijainti = KokoPisteSijainti+FonttiKoko
EndIf
Next kc
Next kb
EndIf
'Kirjoitetaan ohje tekstit pelaajalle
Locate 600,900
AddText "OHJEET painamalla 'F1'"
If KierrosNumero < 9 Then //Jos peli on käynnissä kerrotaan kierroksen nimi
Locate 600,670
SetFont IsoFontti
AddText Kierros(KierrosNumero)
Else //Jos peli on loppu, onnitellaan voittajaa
Locate 600,600
AddText "Peli Loppu!"
AddText "Voittajalle onnittelut"
AddText "ja häviäjille parempaa onnea ensikertaan"
AddText "Aloita uusi peli painamalla 'Enter'"
EndIf
SetFont PieniFontti //Kirjoitetaan aina versionumero ja jakajan merkki
Locate 25,(JakajanSijainti+10)
AddText "J"
Locate 1750,1030
AddText "Versio 2.0 Beta"
SetFont PerusFontti
// Jos painat 'F11' niin avaat netti sivun jossa on säännöt
PiirraNaytto()
EndIf
Return
Virheentulostus:
'Tässä aliohjelmassa tulostetaan virheilmoitusnäytölle, mikäli pisteiden syötössä tai muualla on sattunut virhetilanne
Color cbRed
Locate 800, 970
If virhe = 1 Then AddText "Et ole syöttänyt kaikille pisteitä"
If virhe = 2 Then AddText "Tarkista Pisteet"
If virhe = 3 Then AddText "Tarkista Nimet"
Color cbWhite
Return
Kirjoitus:
'Tässä aliohjelmassa kirjoitetaan joko nimi tai pistemäärä
Syotto = ON //Muistetaan, että nyt ollaan kirjoittamassa nimeä tai pisteitä
If ValittuKierros = 0 Then //Mikäli on valittu nimi-sarake, käytetään tekstin kirjoitus inputtia
Pelaaja(Valittu,0) = ""
Gosub Tulostus
Repeat
Locate SijaintiX,YlaMarginaali
Pelaaja(Valittu,0) = Input("")
Painallus()
If Painettu > 100 Then Exit
PiirraNaytto()
Forever
LyhennaNimet(12) //Lyhennetään nimet 12:sta merkkiin
Valinta()
CloseInput
EndIf
If ValittuKierros > 0 Then //Mikäli ollaan pisteiden syotto vaiheessa avataan numeroiden kirjoitus inputti
Gosub Tulostus
InputX(SijaintiX,SijaintiY,4) // Valitulle inputin avaaminen
Pisteet(Valittu,ValittuKierros) = PisteMaara
'Jos pisteet on syötetty aiemmille kierroksille, korjataan pisteet suoraan oikeiksi
If ValittuKierros < KierrosNumero And ValittuKierros > 0 Then PisteenLaskenta()
'Tarkistetaan näppäimen toiminto, vasta kun input on suljettu
HiirenValinta()
Valinta()
EndIf
ClearKeys
Syotto = OFF //Muistetaan, että nyt ei enää syötetä pisteitä
Return
Kierroksenvaihtaminen:
'Tässä aliohjelmassa yrietään vaihtaa kierrosta ja mikäli huomataan jokin virhe, niin luodaan virhekoodi
'Mikäli virhekoodi on luotu, niin kierroksen vaihtaminen estetään pääsilmukassa
Virhe = 0
If KierrosNumero = 0 Then //Pelaajien määrä tarkistetaan vain, kun siirrytään nimiensyötöstä eteenpäin
Gosub PelaajienLaskenta //koska myöhemmin pelissä, ei ole mahdollista muuttaa pelaajien määrää
PelaajaMaaraVirhe()
EndIf
If KierrosNumero > 0 Then VirheenTarkistus() //Pelin ollessa käynnissä tarkistetaan, ettei mukana ole virheellisiä pistemääriä
If Virhe = 0 Then //Tehdään kierroksenvaihtamistoimenpiteet, mikäli virheitä ei ilmaannu
If KierrosNumero = 0 Then
If Valittu > PelaajaMaara Then Valittu = 0
EndIf
If KierrosNumero > 0 And KierrosNumero < 9 Then
Jakaja = Jakaja+1
If Jakaja > PelaajaMaara Then Jakaja = 0
EndIf
If KierrosNumero < 8 Then ValittuKierros = KierrosNumero+1
ValittuKierros_SijaintiY()
Valittu_SijaintiX()
KierrosNumero = KierrosNumero+1
PisteenLaskenta()
ReDim PisteetSyotetty(PelaajaMaara)
EndIf
Return
PelaajienLaskenta:
'Lasketaan pelaajien määrä, jotta tiedetään paljonko pelaajia on pelissä
For kb = 0 To PelaajaMaara
Pelaajatemp(kb,1) = OFF
Next kb
For kb = 0 To PelaajaMaara
Pelaajatemp(kb,0) = Pelaaja(kb,0)
Next kb
kx = 0
For kb = 0 To 5
If Pelaajatemp(kb,0) = "" Then //Tyhjästä nimipaikasta tiedetään, ettei tällä pelipaikalla ole pelaajaa
PelaajaMaara = PelaajaMaara-1
Else
If Jakaja = kb Then Jakaja = kx //Mikäli pelipaikalla on pelaaja, tiivistetään pelajat ensimmäisiin peli
Pelaaja(kx,0) = Pelaajatemp(kb,0) //pelipaikkoihin, jotta väliin ei jää tyhjiä pelipaikkoja
kx = kx +1
EndIf
Next kb
PelaajienJarjestaminen() //järjestetään lopuksi pelaajat pistemäärän mukaisesti
SarakkeenLaskenta() //Muutetaan sarakkeen leveys vastaamaan pelaajamäärää
Return
Loppu:
'Mikäli suljetaan ohjelma, niin hyvästellään pelaajat
DrawScreen
ClearText
CloseInput
keskitysX = IkkunaX/2 //Luodaan keskitys ikkunan leveyden mukaan
'Keskiteteen tekstit keskelle
CenterText KeskitysX,450,"Kiitokset pelaamisesta!"
CenterText KeskitysX,510,"Ohjelman tehnyt:"
CenterText KeskitysX,570,"Samu Korhonen"
CenterText KeskitysX,630,"Ja"
CenterText KeskitysX,690,"Aksel Korhonen"
DrawScreen
Wait 3000
End
Function InputX(x_position=0,y_position=0,tab=4)
'pisteiden syotto funktiossa tarkistetaan näppäinpainallukset ja kirjoitetaan pisteet sen mukaisesti
Repeat
If KeyDown(pressed_button) Then
speed = 200
Else
speed =1
EndIf
If Timer()>pressed+speed //Kirjoitetaan kirjain vain, mikäli näppäintä on painettu riittävän pitkään
'Tarkistetaan näppäin kerrallaan, onko näppäin alhaalla
For kb = 2 To 10
If KeyDown(kb)
user_input$ = kb-1 : key_pressed = True
pressed = Timer() : pressed_button = kb
EndIf
Next kb
If KeyDown(11)
user_input$ = "0" : key_pressed = True
pressed = Timer() : pressed_button = 11
ElseIf KeyDown(12)
user_input$ = "-" : key_pressed = True
pressed = Timer() : pressed_button = 12
EndIf
For kb = 71 To 73
If KeyDown(kb)
user_input$ = kb-64 : key_pressed = True
pressed = Timer() : pressed_button = kb
EndIf
Next kb
If KeyDown(74)
user_input$ = "-" : key_pressed = True
pressed = Timer() : pressed_button = 74
EndIf
For kb = 75 To 82
kz = 71
If KeyDown(kb) Then
user_input$ = kb-kz : key_pressed = True
pressed = Timer() : pressed_button = kb
EndIf
If kb = 78 Then kz = 78
If kb = 81 Then kz = 82
Next kb
If KeyDown(14)
user_input$ = "" : key_pressed = True
pressed = Timer() : pressed_button = 14
EndIf
'Jos näppäintä on painettu, kirjoitetaan oikea numero tai poistetaan yksi numero lopusta
If key_pressed = True
If KeyDown(14) And Len(X_String$)>0 Then
X_String$ = StrRemove(X_String$,Len(X_String$),1) : key_pressed = False
ElseIf Len(X_String$)<3 //Sallitaan korkeintaan 3 merkkiä pitkä luku
X_String$ = StrInsert(X_String$,Len(X_String$),user_input$) : key_pressed = False
EndIf
EndIf
EndIf
Pituus = (TextWidth(X_String$))/2 //Kun pisteet tulostetaan, keskitetään
SijaintiXTemp = (x_position + ((SarakkeenLeveys/2)-Pituus))
Color 255,255,255
Text SijaintiXTemp,y_position,X_String$ //Tulostetaan teksti
Painallus()
PiirraNaytto()
Until Painettu > 100
If ValittuKierros=KierrosNumero Then PisteetSyotetty(Valittu) = 1 //Merkataan, että pisteet on syötetty
Color 255,255,255
PisteMaara = X_String //Otetaan muistiin, mikä pistemäärä on
EndFunction
Function Painallus()
'Tarkistetaan, onko painettu jotain näppäintä, jolla käytetään ohjelmaa
If KeyHit(cbkeyright) Or KeyHit(15) Then Painettu = 110 //Painallus oikealle tai TABilla
If KeyHit(cbkeyleft) Then Painettu = 111 //Painallus vasemmalle
If KeyHit(cbkeyup) Then Painettu = 112 //Painallus ylös
If KeyHit(cbkeydown) Then Painettu = 113 //Painallus alas
If KeyHit(87) Then Painettu = 106 //Painallus 'F11'
If KeyHit(1) Then Painettu = 103 //Painallus 'ESC'
If KeyHit(28) Or KeyHit(156) Then Painettu = 101 //Painallus 'Enter'
If KeyHit(59) //Painallus 'F1'
If Ohjeet = OFF
Ohjeet = ON
Else
Ohjeet = OFF
EndIf
Painettu = 102
EndIf
If MouseHit(1) Then HiirenTarkistus() //Painallus hiirellä
EndFunction
Function KirjoitusPainallus() //Tarkistetaan onko alettu kirjoittamaan näppäimistöllä jotain
If ValittuKierros = 0 Then //Kirjaimet tarksitetaan vain, mikäli valittuna on nimi-sarake
For ki = 16 To 27
If KeyHit(ki) Then Painettu = 1
Next ki
For ki = 30 To 54
If KeyHit(ki) Then Painettu = 1
Next ki
EndIf
'Tarkistetaan numeronäppäimet, onko niitä painettu
For ki = 2 To 12
If KeyHit(ki) Then Painettu = 1
Next ki
For ki = 71 To 82
If KeyHit(ki) Then Painettu = 1
If KeyHit(ki) = 78 Then Painettu = 0
Next Ki
EndFunction
Function Ympyra()
Circle 10,(JakajanSijainti+12),35,0 //Piirretään ympyrä J:n ympärille
Box SijaintiX,SijaintiY,SarakkeenLeveys,FonttiKoko,0
EndFunction
Function PiirraNaytto()
DrawScreen
If Ohjeet = OFF Then Ympyra() //Piirretään ympyrä vain silloin jos ei katsota ohjeita
EndFunction
Function Valinta()
'Mikäli jotain näppäintä on painettu, tässä funktiossa tarkistetaan, mitä tehdään seuraavaksi
If Painettu = 110
Valittu = Valittu+1
If Valittu = (PelaajaMaara+1) Then Valittu = 0
Valittu_SijaintiX()
Painettu = 0
EndIf
If Painettu = 111
Valittu = Valittu-1
If Valittu < 0 Then Valittu = PelaajaMaara
Valittu_SijaintiX()
Painettu = 0
EndIf
If Painettu = 113 Then
If KierrosNumero = 0 Then
Jakaja = Jakaja+1
If Jakaja = (PelaajaMaara+1) Then Jakaja =0
Jakaja_JakajanSijainti()
Else
ValittuKierros = ValittuKierros+1
If ValittuKierros > KierrosNumero Then ValittuKierros = 1
If ValittuKierros > 8 Then ValittuKierros = 1
ValittuKierros_SijaintiY()
EndIf
Painettu = 0
EndIf
If Painettu = 112 Then
If KierrosNumero = 0 Then
Jakaja = Jakaja-1
If Jakaja = -1 Then Jakaja = PelaajaMaara
Jakaja_JakajanSijainti()
Else
ValittuKierros = ValittuKierros-1
If ValittuKierros < 1 Then ValittuKierros = KierrosNumero
If ValittuKierros > 8 Then ValittuKierros = 8
ValittuKierros_SijaintiY()
EndIf
Painettu = 0
EndIf
EndFunction
Function Valittu_SijaintiX()
'Muutetaan SijaintiX sen mukaan, kuka on valittu
SijaintiX = ((Valittu*Sarakkeenleveys)+SijaintiXOletus)
EndFunction
Function ValittuKierros_SijaintiY()
'Muutetaan SijaintiY Valitun kierroksen mukaisesti
SijaintiY = ((ValittuKierros*FonttiKoko)+SijaintiYOletus)
EndFunction
Function Jakaja_JakajanSijainti()
'Muutetaan JakajanSijainti sen mukaan, kuka on jakajana
JakajanSijainti = ((Jakaja*FonttiKoko)+(KokoPisteMarginaali+FonttiKoko))
EndFunction
Function PelaajaMaaraVirhe()
'Varmistetaan, että pelaajia on vähintään 3
If PelaajaMaara < 2 Then
Virhe = 3
PelaajaMaara = 5
EndIf
EndFunction
Function VirheenTarkistus()
'Varmistetaan, että syötetyissä pisteissä ei ole virheitä
ReDim Voittaja(KierrosMaara)
//Tarkistetaan, että jokaiselta kierrokselta löytyy voittaja, eikä voittajia ole useampia
For kb =1 To KierrosNumero //Tarkistetaan jokainen kierros erikseen
For kc=0 To PelaajaMaara //Tarkistetaan kuka on voittaja
If Pisteet(kc,kb)= 0 Then
Voittaja(kb) = 1
For kd=0 To PelaajaMaara //Kun voittaja löytyy taristetaan, ettei voittajia ole useampia
If kc = kd Then
temppi=kd 'Ei tehdä mitään
Else
If pisteet(kd,kb)=0 Then
Virhe = 1
EndIf
EndIf
Next kd
Exit
Else
Voittaja(kb)= 0
EndIf
Next kc
Next kb
//Jos voittajaa ei löydy, merkataan virhe
ReDim Voittaja(KierrosMaara)
For kb = 1 To KierrosNumero
For kc=0 To PelaajaMaara
If Pisteet(kc,kb) = 0 Then Voittaja(kb) = 1
Next kc
If Voittaja(kb) = 0 Then Virhe = 2
Next kb
//Unohdetaan voittajan löytyminen
ReDim Voittaja(KierrosMaara)
//Tarkistetaan kaikki pisteet, ettei joukossa ole mahdottomia pisteitä
For kb =1 To KierrosNumero
For kc=0 To PelaajaMaara
If Pisteet(kc,kb)=1 Or Pisteet(kc,kb)>199 Then virhe = 2
Next kc
Next kb
EndFunction
Function PisteenLaskenta()
//Nollataan kokonaispisteet, ja lasketaan ne myöhemmin uudelleen
ReDim KokoPiste(PelaajaMaara) As Short
For kb=0 To PelaajaMaara
If ValittuKierros < KierrosNumero And ValittuKierros > 0 Then //Mikäli aiempien kierrosten pisteisiin tehdään muutoksia, viimeisimmän kierroksen pisteitä ei lasketa
For kc=1 To (KierrosNumero-1)
Kokopiste(kb)=Kokopiste(kb)+Pisteet(kb,kc)
Next kc
Else
For kc=1 To 8 //Lasketaan jokaisen pelatun kierroksen pisteet yhteen
Kokopiste(kb)=Kokopiste(kb)+Pisteet(kb,kc)
Next kc
EndIf
Next kb
PelaajienJarjestaminen() //Järjestetään pelaajat pistejärjestykseen aina laskennan
//yhteydessä
EndFunction
Function PelaajienJarjestaminen()
'Varmistetaan pelaajien sijoitus toisiinsa nähden
For kb=0 To PelaajaMaara
Pelaaja(kb,1)=0
For kc=0 To PelaajaMaara
//jos on suurempi
If Kokopiste(kb) > Kokopiste(kc) Then
Pelaaja(kb,1)=Int(Pelaaja(kb,1))+1
//Pelaajan sijoitus pakotettava kokonaisluvuksi, koska muotoa String
EndIf
Next kc
Next kb
KokoPisteSijainti = 720
Indeksi = 0
'Muutetaan sijoitus niin, että kahdella henkilöllä ei voi olla samaa sijalukua
For kb = 0 To PelaajaMaara
For kc = 0 To PelaajaMaara
If Pelaaja(kc,1) = kb Then
If Jakaja = kc And KierrosNumero < 9 Then
JakajanSijainti = KokoPisteSijainti
EndIf
Pelaaja(kc,2) = Indeksi
KokoPisteSijainti = KokoPisteSijainti+FonttiKoko
Indeksi = Indeksi + 1
EndIf
Next kc
Next kb
EndFunction
Function HiirenTarkistus()
'Tarkistetaan, missä kohtaa hiiri on ollut kilkkauksen aikana
hx = MouseX()
hy = MouseY()
hiiri = 0
hiiritemp = 0
'Tarkistetaan ensin pelaaja kerrallaan, ja sitten kierroskerrallaan, onko hiiri kyseisen sarakkeen kohdalla. Tarkistus katsotaan pikselikerrallaan
'kb = Pelaaja
'kc = Kierrosnumero
'Ensiksi tarkistetaan pistetaulukko
If hx > SijaintiXOletus And hy > SijaintiYOletus Then
If hy < KokoPisteMarginaali Then
For kb = 0 To PelaajaMaara
hiiritemp = (kb*10) //muutetaan indeksi luku oikeaan pelaajaan
For kc = SijaintiYOletus To (KierrosNumero*FonttiKoko+(SijaintiYOletus+FonttiKoko)) Step FonttiKoko
If hx < Sarake(kb) And hy < kc Then
If hx > Sarake(kb)-SarakkeenLeveys And hy > kc-FonttiKoko Then hiiri = hiiritemp //Jos hiiri oli kohdalla otetaan
EndIf //hiirenpaikka muistiin.
hiiritemp = hiiritemp+1 //Mikäli hiiri ei ollut kohdalla
Next kc //lisätään indeksi lukuun yksi
Next kb //Pelaajan kohdalle
EndIf
EndIf
'Luodaan muuttuja funktiota varten, jotta kaavat yksinkertaistuvat
JakajanSijaintiOletus = KokoPisteMarginaali+FonttiKoko
'Mikäli hiiri on kokonaispistetaulukossa, niin muutetaan jakajaa
If hx > VasenMarginaali And hy > JakajanSijaintiOletus Then
If hx < 400 Then
hiiritemp = 61
For kb = (JakajanSijaintiOletus+FonttiKoko) To (PelaajaMaara*FonttiKoko+(JakajanSijaintiOletus+FonttiKoko)) Step FonttiKoko
If hy < kb And hy > kb-FonttiKoko Then
hiiri = hiiritemp //Jos hiiri on pelaajan kohdalla, merkataan hiiren paikka muistiin
EndIf
hiiritemp = hiiritemp+1
Next kb
EndIf
EndIf
hiiritemp = 0
If hiiri > 0 And Syotto = OFF Then HiirenValinta() //Mikäli pisteitä ei olla kirjoittamassa, tarkistetaan heti, mitä tehdään
If hiiri > 0 And Syotto = ON Then Painettu = 105 //Mikäli syöttö on päällä niin tarkistetaan manuaalisesti syötön sulkeuduttua
EndFunction
Function HiirenValinta()
'Tarkistetaan aiemmassa funktiossa selvitetyn hiiren paikan mukaan, mitä tehdään
For kc = 1 To 9 //Tarkisteaan kierros kerrallaan (kierroksen indeksi on ykköset)
For kb = kc To (50+kc) Step 10 //Tarkistetaan pelaaja kerrallaan (pelaajan indeksi on kymmenet)
If hiiri = kb Then //Kun oikea pelaaja löytyy, niin muutetaan valitun sijainti tämän mukaisesti
Valittu = (kb - kc)/10
Valittu_SijaintiX()
ValittuKierros = kc-1
ValittuKierros_SijaintiY()
Painettu = 105
EndIf
Next kb
Next kc
'Mikäli ollaan valitsemassa jakajaa, tarkistetaan, kuka valitaan jakajaksi tällä algoritmillä
For kb = 61 To 66
If hiiri = kb Then
numero = kb-61 //Luodaan 'numero' indeksi, jonka avulla muutetaan hiirenpaikka
Painettu = 105 //pelaajan paikaksi
If KierrosNumero = 0 Then //Nimiern kirjoitusvaiheessa tiedetään ennalta pelaajan sijainti
Jakaja = numero
Jakaja_JakajanSijainti()
Else
For kc = 0 To PelaajaMaara //Tarkistetaan kuka pelaajista on tällä kohtaa
If Int(Pelaaja(kc,2)) = numero Then //Varmistetaan pelaajan sijoituksen mukaan, onko pelaaja kohdalla
Jakaja = kc //Löytyessä kerrotaan, että tämä pelaaja on jakaja
PelaajienJarjestaminen()
EndIf
Next kc
EndIf
EndIf
Next kb
'Lopuksi unohdetaan, mitä kohtaa hiirellä on painettu
hiiri = 0
EndFunction
Function LyhennaNimet(maara)
'Lyhennetään nimet functiossa koodissa ilmoitettuun mittaan ottamalla ylimääräiset pois lopusta
For kb=0 To PelaajaMaara
Pelaaja(kb,0) = Left(Pelaaja(kb,0),maara)
Next kb
EndFunction
Function SarakkeenLaskenta()
'Lasketaan sarakkeen leveys pelaajamäärän mukaisesti
SarakkeenLeveys = (IkkunaX - SijaintiXOletus) / (PelaajaMaara+1)
ReDim Sarake(PelaajaMaara) As Short
'Lasketaan taulukkoon sarakkeen reunojen paikat, jotta tiedetään, onko hiiri tuolla kohdalla.
For kb = 0 To PelaajaMaara
Sarake(kb) = (SijaintiXOletus+SarakkeenLeveys) + (SarakkeenLeveys*kb)
Next kb
EndFunction