[VB6] Mijnenveger maken

Pagina: 1
Acties:

  • Jeldert
  • Registratie: Juni 2001
  • Niet online

Jeldert

Rozijntjes

Topicstarter
Hallo, ik moet voor school met VB6 een mijnenveger maken.
Nee, dit is geen huiswerk vraag, maar omdat de leraar ziek is, en ik dus niet verder kom.

Ik heb al een interface met knoppen (een array), en kan ook al bepalen waar de mijnen komen (met de RND funtie), alhoewel dit niet goed gaat voor een veld groter dan 100 knoppen. Ook het nummeren van hoeveel mijnen er om een knop heen liggen gaat goed.

Het probleem is dat als ik een knop aan de rand indruk hier ook een '1' komt te staan, omdat op de volgende regel helemaal links een mijn zit dus. Hij denkt dus dat de mijn er gewoon naast zit.
Nu zei die leraar dat er een functie/commando is die kan kijken of een getal deelbaar is door een ander getal, maar ik weet niet meer welke dit is.
Als ik dit weet kan ik dus een voorwaarde meegeven dat als dit het geval is hij niet meer naar de knop rechts moet kijken, omdat die er dus eigenlijk niet aan grenst.

Hier het stukje code dat ik nu gebruik:
Visual Basic 6:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
For i = 1 To Procent
    If Index - 1 = Mijn(i) Then 'Links van de ingedrukte knop
        g = g + 1
        tgbKnop(Index).Caption = g
    End If
    If Index + 1 = Mijn(i) Then 'Rechts
        g = g + 1
        tgbKnop(Index).Caption = g
    End If
    If Index - 10 = Mijn(i) Then 'Boven
        g = g + 1
        tgbKnop(Index).Caption = g
    End If
    If Index + 10 = Mijn(i) Then 'Onder
        g = g + 1
        tgbKnop(Index).Caption = g
    End If
    If Index - 11 = Mijn(i) Then 'Linksboven
        g = g + 1
        tgbKnop(Index).Caption = g
    End If
    If Index - 9 = Mijn(i) Then 'Rechtsboven
        g = g + 1
        tgbKnop(Index).Caption = g
    End If
    If Index + 9 = Mijn(i) Then 'Linksonder
        g = g + 1
        tgbKnop(Index).Caption = g
    End If
    If Index + 11 = Mijn(i) Then 'Rechtsonder
        g = g + 1
        tgbKnop(Index).Caption = g
    End If
Next i

For i = 1 To Procent
    If Index = Mijn(i) Then 'Mijn op deze knop
        tgbKnop(Index).Caption = "M"
        'Label van aantal mijnen gevonden met 1 verhogen
        MijnenGevonden = MijnenGevonden + 1
        lblMijnenGevonden.Caption = MijnenGevonden
    End If
Next i

Index is het indexnumemr van de ingedrukte knop, en in g komt het aantal aangrendzende mijnen.

En als iemand een goede manier heeft om een random getal aan te maken ben ik diegene ook zeer dankbaar.

Juist


  • Pink Panther
  • Registratie: Juni 2003
  • Laatst online: 23-05 23:18
Ik ben niet echt thuis in VB maar weet wel e.e.a. van VBA.
Je kunt eens proberen met het commando MOD.
In VBA geeft 35 MOD 3 als resultaat 2, ofwel, als je 35 deelt door 3 krijg je 11 uit met een rest van 2. Wil je dus weten of een getal deelbaar is door een ander getal dan moet het volgende gelden:

getal1 MOD getal 2 = 0

indien dit resultaat niet 0 is, dan is het getal1 dus niet deelbaar door getal2.

  • mrfatmen
  • Registratie: Februari 2001
  • Laatst online: 20:51
Jeldert schreef op 26 november 2003 @ 16:39:
Hallo, ik moet voor school met VB6 een mijnenveger maken.
Nee, dit is geen huiswerk vraag, maar omdat de leraar ziek is, en ik dus niet verder kom.

Ik heb al een interface met knoppen (een array), en kan ook al bepalen waar de mijnen komen (met de RND funtie), alhoewel dit niet goed gaat voor een veld groter dan 100 knoppen. Ook het nummeren van hoeveel mijnen er om een knop heen liggen gaat goed.

Het probleem is dat als ik een knop aan de rand indruk hier ook een '1' komt te staan, omdat op de volgende regel helemaal links een mijn zit dus. Hij denkt dus dat de mijn er gewoon naast zit.
Nu zei die leraar dat er een functie/commando is die kan kijken of een getal deelbaar is door een ander getal, maar ik weet niet meer welke dit is.
Als ik dit weet kan ik dus een voorwaarde meegeven dat als dit het geval is hij niet meer naar de knop rechts moet kijken, omdat die er dus eigenlijk niet aan grenst.

Hier het stukje code dat ik nu gebruik:
Visual Basic 6:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
For i = 1 To Procent
    If Index - 1 = Mijn(i) Then 'Links van de ingedrukte knop
        g = g + 1
        tgbKnop(Index).Caption = g
    End If
    If Index + 1 = Mijn(i) Then 'Rechts
        g = g + 1
        tgbKnop(Index).Caption = g
    End If
    If Index - 10 = Mijn(i) Then 'Boven
        g = g + 1
        tgbKnop(Index).Caption = g
    End If
    If Index + 10 = Mijn(i) Then 'Onder
        g = g + 1
        tgbKnop(Index).Caption = g
    End If
    If Index - 11 = Mijn(i) Then 'Linksboven
        g = g + 1
        tgbKnop(Index).Caption = g
    End If
    If Index - 9 = Mijn(i) Then 'Rechtsboven
        g = g + 1
        tgbKnop(Index).Caption = g
    End If
    If Index + 9 = Mijn(i) Then 'Linksonder
        g = g + 1
        tgbKnop(Index).Caption = g
    End If
    If Index + 11 = Mijn(i) Then 'Rechtsonder
        g = g + 1
        tgbKnop(Index).Caption = g
    End If
Next i

For i = 1 To Procent
    If Index = Mijn(i) Then 'Mijn op deze knop
        tgbKnop(Index).Caption = "M"
        'Label van aantal mijnen gevonden met 1 verhogen
        MijnenGevonden = MijnenGevonden + 1
        lblMijnenGevonden.Caption = MijnenGevonden
    End If
Next i

Index is het indexnumemr van de ingedrukte knop, en in g komt het aantal aangrendzende mijnen.

En als iemand een goede manier heeft om een random getal aan te maken ben ik diegene ook zeer dankbaar.
de functie die jij zoekt is modulo.
deze deelt iets door iets en geeft de rest terug.
voorbeeld.
23 module 7 = 2
23 / 7 = 3,xxx
3*7 = 21
23-21 = 2

je krijgt dus de rest terug.

Deze functie heet in vb MOD.

a = 23 MOD 7

Heeft uw auto pijn? Ga dan naar de onderdelenlijn
Het bedrijf waar ik met veel plezier werk - Mijn eigen vertrouwde domein


  • jaapbrandhof
  • Registratie: November 2002
  • Laatst online: 20-05 09:34
Is het niet iets van 5 % 2 (is alleen maar een voorbeeld) ofzo zodat je kan delen en er een rest getal uit krijg. bedoel je vast en zeker niet

was net te laat en MrFatMen is duidelijker.

[ Voor 15% gewijzigd door jaapbrandhof op 26-11-2003 16:53 ]

Intel P4 3.0 800MHz, 1024DDR PC3200(Twinmos), 160GB Maxtor S-ATA 150MB, Chieftec midi bleu, 360 Watt voeding.


  • DaCoTa
  • Registratie: April 2002
  • Laatst online: 12:06
Zo te zien zitten alle velden in een lineaire array. Is het mogelijk om het om te toveren naar een 2D array, oftewel Mijn(x,y). Dan kun je met hele eenvoudige vergelijkingen testen of je dan wel op de x-as, dan wel op de y-as aan de rand zit en een special case test maken.

  • Sjeik
  • Registratie: Augustus 2001
  • Laatst online: 09-05 13:47
Dat wat DaCoTa zegt zat ik ook al aan te denken. Dan moet je kijken hoeveel mijnen er zitten voor (x+1,y),(x+1,y+1),(x+1,y-1),(x-1,y),(x-1,y+1),(x-1,y-1), (x,y+1), (x,y-1) enz... Denk dat dat veel beter zal werken en minder snel bugs creeerd...

Was ik maar rijk en niet zo knap...


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
De praktijk truc hiervoor is een onzichtbare rand zonder mijnen. Rij 1 en rij N+2 laat je mijnvrij, en je tekent rijen 2 tot en met N+1

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1