PDA

View Full Version : [vb.net] Project


Awoujol
30-05-2007, 19:21
We zitten hier met een project waar we een theoretische oefening moeten maken voor mensen die aan hun rij opleiding beginnen. Ik zit zelf nog met enkele vragen waar iemand van jullie misschien wel een antwoord op weet.

Er is dus de volgende code:

Private Sub bordenGenereren()
Dim inputStream As StreamReader
Dim line As String
Dim lines(200) As String
Dim lines2() As String
Dim randomgetal(6) As Integer
Dim random As Random = New Random()

If rBtnGebod.Checked Then
inputStream = File.OpenText("gebodsborden.txt")
ElseIf rBtnGevaar.Checked Then
inputStream = File.OpenText("gevaarsborden.txt")
ElseIf rBtnStilenPark.Checked Then
inputStream = File.OpenText("stilstaanenparkeren.txt")
ElseIf rBtnVerbod.Checked Then
inputStream = File.OpenText("verbodsborden.txt")
ElseIf rBtnVoorrang.Checked Then
inputStream = File.OpenText("voorrangsborden.txt")
Else
inputStream = File.OpenText("aanwijzingsborden.txt")
End If

line = inputStream.ReadLine()

While (line <> "")
lines2 = Split(line, ";")
lines(count) = lines2(0)
lines(count + 1) = lines2(1)
count = count + 2
line = inputStream.ReadLine()
End While

For count = 0 To 5
randomgetal(count) = random.Next(0, 7) * 2
Next

lblBord1.Image = Image.FromFile(lines(randomgetal(0)))
lblBord2.Image = Image.FromFile(lines(randomgetal(1)))
lblBord3.Image = Image.FromFile(lines(randomgetal(2)))
lblBord4.Image = Image.FromFile(lines(randomgetal(3)))
lblBord5.Image = Image.FromFile(lines(randomgetal(4)))
lblBord6.Image = Image.FromFile(lines(randomgetal(5)))
lblSolDesc1.Text = lines(randomgetal(4) + 1)
lblSolDesc2.Text = lines(randomgetal(2) + 1)
lblSolDesc3.Text = lines(randomgetal(5) + 1)
lblSolDesc4.Text = lines(randomgetal(1) + 1)
lblSolDesc5.Text = lines(randomgetal(3) + 1)
lblSolDesc6.Text = lines(randomgetal(0) + 1)
inputStream.Close()

End Sub

Je kan dus met radio buttons kiezen welk soort borden je wil oefenen. Via een .txt bestand is er dus eerst de naam van het bestand opgegeven met daarna de tekst die bij het bord hoort, gescheiden door een ; zoals je aan de code kan zien.

Nu was mijn vraag: Hoe kan ik ervoor zorgen dat in 6 labels er random verkeersborden gezet worden zonder dat er dubbele inzitten. Verder moeten er in lagere labels de tekst komen van die 6 verkeersborden in willekeurige volgorde. Door middel van drag en drop kan de gebruiker dan het juiste verkeersbord naar de juiste uitleg slepen.

Laatste probleem: Hoe kan ik het best het gesleepte verkeersbord vergelijken met de uitleg om te zien of deze juist is, kwestie om het aantal juist en foute antwoorden te berekenen.

Voor meer uitleg en info kan je altijd het project downloaden op http://users.telenet.be/nvdw/ProjectChallengeDeel1.rar (700kb groot)


Alvast bedankt aan de mensen die hier de tijd en moeite willen insteken om mij verder te helpen.

Random
30-05-2007, 20:25
Nu was mijn vraag: Hoe kan ik ervoor zorgen dat in 6 labels er random verkeersborden gezet worden zonder dat er dubbele inzitten. Verder moeten er in lagere labels de tekst komen van die 6 verkeersborden in willekeurige volgorde.

Ik denk dat je best de 1e 6 elementen van je array met borden overloopt en de elementen telkens verwisselt met een willekeurig element uit dezelfde array. Omdat je enkel maar verwisselt, zal je nooit een dubbel hebben op die manier. VB is mijn ding niet, maar het zal denk ik iets in deze zin zijn:


Dim tmpLine1 As String
Dim tmpLine2 As String
Dim randomGetal As Integer

For i = 0 To 5

randomGetal = random.Next(0, 99) * 2
'Bovenstaand moet een getal tussen 0*2 en 99*2 zijn dus

tmpLine1 = lines(randomGetal)
tmpLine2 = lines(randomGetal + 1)

lines(randomGetal) = lines(i)
lines(randomGetal + 1) = lines(i + 1)

lines(i) = tmpLine1
lines(i + 1) = tmpLine2

Next

Random
30-05-2007, 20:47
Ja, ik zie nu dat dat maar de helft van de vraag was natuurlijk. Dan zit je met een array met 6 * 2 willekeurige elementen per bord als 1e 12. Bekijk nu die 1e 12 apart. Wat je dan nog moet doen is je omschrijvingen op de zelfde manier shuffelen, maar deze keer moet je natuurlijk wel de verwisselingen bijhouden aangezien je wil weten bij welk bord je omschrijving paste:

Dim relaties(6) As Integer
Dim tmpIndex As Integer

'relaties vullen met de indices van de lijnen van de omschrijvingen: 1, 3, 5, ..., 11
For i = 0 To 5
relaties(i) = i*2+1
Next

'Shuffelen van de volgorde van omschrijvingsindices
For i = 0 To 5

randomGetal = random.Next(0, 5)
'Bovenstaand moet een getal tussen 0 en 5 zijn dus

tmpIndex = relaties(randomGetal)
relaties(randomGetal) = relaties(i)
relaties(i) = tmpIndex

Next
'relaties is nu bv. (11, 5, 1, 7, 3, 9)

lblSolDesc1.Text = lines(relaties(0))
lblSolDesc2.Text = lines(relaties(1))
lblSolDesc3.Text = lines(relaties(2))
lblSolDesc4.Text = lines(relaties(3))
lblSolDesc5.Text = lines(relaties(4))
lblSolDesc6.Text = lines(relaties(5))



((relaties(i)-1)/2) bevat nu de bijhorende omschrijving, met i de index van je bord. Na het droppen van het verkeersbord zal je er dus voor moeten zorgen dat je beide indices te weten komt (borden tussen 0 en 5, en omschrijvingen ook tussen 0 en 5). Hetgeen je dan nog moet doen is dus:


If (relaties(bordindex)-1)/2 = omschrijvingsindex Then
correctAntwoorden = correctAntwoorden + 1
Else
fouteAntwoorden = fouteAntwoorden + 1
End If
schakelBordUit(bordindex)

Awoujol
30-05-2007, 20:51
Morgen eens bezien. Alvast merci voor de info.