Kirjoittaja: Antti Laaksonen
Kirjoitettu: 19.01.2008 – 19.01.2008
Tagit: koodi näytille, vinkki
Tässä on esimerkki tietokilpailusta VB6:lle. Kysymykset ladataan tekstitiedostosta ja näytetään automaattisesti ohjelmassa. Toisin sanoen ohjelmaan ei tarvitse tehdä mitään muutoksia, kun kysymyksiä tulee lisää. Ohjelma kysyy käyttäjältä kaikki tiedoston kysymykset ja näyttää lopuksi oikeiden vastausten lukumäärän.
Ohjelma muodostuu moduulista (kilpa.bas) ja kysymyksen näyttävästä formista (kilpa.frm). Ohjelman suoritus alkaa moduulissa, joten valikosta Project->Properties täytyy merkitä kohtaan Startup Object moduulin aliohjelma Sub Main.
Formin nimeksi täytyy muuttaa fKilpa, ja siinä on oltava otsikko (Label), valintanappi (OptionButton) ja painonappi (CommandButton), joiden nimet ovat vastaavasti lKysymys, oVastaus ja cNappi. Lisäksi valintanapin oVastaus ominaisuuden Index arvon täytyy olla 0.
Tärkeimmät aliohjelmat ovat LataaKysymykset ja NaytaKysymys. Ensimmäinen lataa kysymykset annetusta tiedostosta Kysymykset-taulukkoon. Toinen valmistelee formin uutta kysymystä varten ja lopuksi näyttää sen. Valintanappeja luodaan aina formille niin monta kuin kysymyksessä on vastauksia.
Uuden kysymyksen luonnissa kannattaa huomata, että formi ladataan kysymysten välillä uudestaan (peräkkäin Unload ja Load), jolloin se palautuu aloitustilaansa. Tämän jälkeen tarvittavat valintanapit luodaan oVastaus(0):n perusteella, joka kuitenkin piilotetaan, ja ensimmäinen käyttäjälle näkyvä valintanappi on oVastaus(1).
Ohjelmassa ei ole virheentarkistuksia, joten jos kysymykset sisältävä tiedosto on virheellinen, voi tapahtua kummia. Lisäksi ohjelma olettaa, että kysymyksiä on korkeintaan 100 ja jokaisessa on korkeintaan 10 vastausta. Näitä rajoja voi luonnollisesti kasvattaa moduulin alun määrittelyissä.
kilpa.txt
Mikä on Tanskan pääkaupunki?|Kööpenhamina|Oslo|Reykjavik|Tukholma|1 Mitä on ranskaksi "vesi"?|aeu|aue|eau|eua|uae|uea|3 Kuinka paljon on tusina tusinoita?|136|144|152|156|160|2
kilpa.frm
Option Explicit Private Sub cNappi_Click() Dim kohta As Integer kohta = NykyinenKysymys ' vastasiko käyttäjä oikein? If oVastaus(Kysymykset(kohta).oikeavastaus).Value = True Then OikeaMaara = OikeaMaara + 1 End If ' seuraava kysymys NaytaKysymys NykyinenKysymys + 1 End Sub
kilpa.bas
Option Explicit Type TKysymys kysymys As String vastaukset(10) As String vastausmaara As Integer oikeavastaus As Integer End Type Public Kysymykset(100) As TKysymys Public Kysymysmaara As Integer Public NykyinenKysymys As Integer Public OikeaMaara As Integer Sub LataaKysymykset(tiedosto As String) Dim rivi As String, tiedot() As String Dim kohta As Integer Dim i As Integer Open tiedosto For Input As #1 ' luetaan kaikki tiedoston rivit While Not EOF(1) ' kasvatetaan kysymysmäärälaskuria Kysymysmaara = Kysymysmaara + 1 kohta = Kysymysmaara ' luetaan seuraava rivi Line Input #1, rivi ' jaetaan rivi taulukkoon pystyviivojen kohdalta tiedot = Split(rivi, "|") ' erotetaan kysymys ja vastaukset Kysymykset(kohta).kysymys = tiedot(0) For i = 1 To UBound(tiedot) - 1 Kysymykset(kohta).vastaukset(i) = tiedot(i) Next Kysymykset(kohta).vastausmaara = UBound(tiedot) - 1 Kysymykset(kohta).oikeavastaus = tiedot(UBound(tiedot)) Wend Close #1 End Sub Sub NaytaKysymys(kysymys As Integer) Dim i As Integer ' onko kaikki kysymykset jo kysytty? If kysymys > Kysymysmaara Then MsgBox "Tietokilpailu päättyi, vastasit oikein " & OikeaMaara & " kertaa!" End End If ' poistetaan vanha formi ja aloitetaan uusi Unload fKilpa Load fKilpa ' formin otsikko ja keskitys fKilpa.Caption = "Kysymys " & kysymys fKilpa.Left = Screen.Width / 2 - fKilpa.Width / 2 fKilpa.Top = Screen.Height / 2 - fKilpa.Height / 2 ' kysymysteksti ja napin teksti fKilpa.lKysymys = Kysymykset(kysymys).kysymys fKilpa.cNappi.Caption = "Vastaa" ' tästä valintanapista luodaan muut fKilpa.oVastaus(0).Visible = False For i = 1 To Kysymykset(kysymys).vastausmaara ' uuden napin luonti Load fKilpa.oVastaus(i) ' pystysuuntainen sijainti fKilpa.oVastaus(i).Top = fKilpa.oVastaus(0).Top + (i - 1) * 400 ' kysymyksen teksti fKilpa.oVastaus(i).Caption = Kysymykset(kysymys).vastaukset(i) ' valintanappi näkyväksi fKilpa.oVastaus(i).Visible = True Next NykyinenKysymys = kysymys ' näytetään uusi kysymys fKilpa.Show End Sub Sub Main() LataaKysymykset App.Path + "\kilpa.txt" NaytaKysymys 1 End Sub