Kirjautuminen

Haku

Tehtävät

Koodit: VB6: Tietokilpailu

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

Kirjoita kommentti

Muista lukea kirjoitusohjeet.
Tietoa sivustosta