Archief - [PROG][VB.NET] Mijnenveger (opdracht toekennen aan knop)

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Duffman-

Legacy Member
Beste

ik ben van plan een mijnenveger te maken, gelijkaardig aan diegene die we allemaal kennen vanuit Windows. Ongeveer zelfde interface enzo maar ik was aan het denken hoe ik dit moest gaan doen en ik moet om te beginnen al vrij veel knoppen genereren als ik het spel opstart. Nu is mijn vraag hoe kan ik dit doen? Want ik kan geen arrays gebruiken onder het type "new button".
Hetgeen ik nu heb is
Code:
Dim G As New Button
        G.Location = New Point(50, 50)
        G.Text = "kank er nog 1 maken?"
        G.Size = New Size(50, 50)
 Me.Controls.Add(G)

Nuja, 1 knop maken kan ik dus maar hoe kan ik er meerdere maken. En nu denk ik meer in de toekomst hoe kan ik aan deze knoppen een gebeurtenis toekennen. Ik vermoed iets met een eventhandler maar weet niet juist hoe de vork in de steel zit. Ik weet dat ik veel vraag maar ik zou er wel veel mee kunnen leren.

In ieder geval bedankt,
Duffman-

BuiZe

Legacy Member
Hier kan je normaal wel enige informatie uithalen: http://gbit.be/Mijnenveger.rar

Het komt ruwweg op het volgende neer:
Code:
Dim knoppen(,) As Button

...

        knoppen = New Button(intVeldGrootte, intVeldGrootte) {}

        For i = 1 To intVeldGrootte
            For j = 1 To intVeldGrootte
                knoppen(i, j) = New Button
                Controls.Add(knoppen(i, j))
                AddHandler knoppen(i, j).MouseUp, AddressOf Knoppen_ClickHandler
            Next
        Next

...

Public Sub Knoppen_ClickHandler(ByVal sender As System.Object, ByVal e As System.windows.Forms.MouseEventArgs)
    ...
End Sub

Duffman-

Legacy Member
BuiZe zei:
Hier kan je normaal wel enige informatie uithalen: http://gbit.be/Mijnenveger.rar

Het komt ruwweg op het volgende neer:
Code:
Dim knoppen(,) As Button

...

        knoppen = New Button(intVeldGrootte, intVeldGrootte) {}

        For i = 1 To intVeldGrootte
            For j = 1 To intVeldGrootte
                knoppen(i, j) = New Button
                Controls.Add(knoppen(i, j))
                AddHandler knoppen(i, j).MouseUp, AddressOf Knoppen_ClickHandler
            Next
        Next

...

Public Sub Knoppen_ClickHandler(ByVal sender As System.Object, ByVal e As System.windows.Forms.MouseEventArgs)
    ...
End Sub
Bedankt dit helpt me al hard, toch heb ik nog 2 vraagjes
die (,) in de declaratie waar staat die voor?
En waar staan de accolades voor?

BuiZe

Legacy Member
http://www.startvbdotnet.com/language/arrays.aspx

- Dim knoppen(,) As Button definieert knoppen als zijnde een (rechthoekige) 2D-array van nog onbepaalde grootte.
- knoppen = New Button(a, b) {} kent een feitelijke grootte toe aan de dimensies, de { ... } bevat de initiele waarden. Deze laten we hier leeg omdat we elk object apart moeten aanmaken.

Duffman-

Legacy Member
Hey buize, bedankt voor je hulp, ik zit ondertussen al heel wat verder. Men bommen en getallen enzovoort worden al gegenereerd. Nu ga ik moeten uitzoeken hoe ik weet op welke knop er geklikt wordt.

screenshot:http://users.pandora.be/duffman/woot.JPG

edit:
Code:
' Visual Basic
Public Sub ClickHandler(ByVal sender As Object, ByVal e As _
   System.EventArgs)
   MessageBox.Show("you have clicked button " & CType(CType(sender, _
      System.Windows.Forms.Button).Tag, String))
End Sub
werkt niet. Weet iemand misschien hoe ik dit kan weten, welke knop er aangeklikt is?
Grtz,
Duffman-

//edit: tis nu helemaal in orde me die knop, nen tag meegeve :doh:

Duffman-

Legacy Member
Als het iemand interesseert.
Kben nu in de fase waarin het zou moete gebeuren dat als je in een ruimte klikt waar nergens in de buurt zich een bom bevind, dat er knoppen rond ook zichtbaar worden maar dit is nogal moeilijk but working on it...
nu slapen en morgen verderdoen.

BuiZe

Legacy Member
Kijk eens in mijn code, ik heb dat recursief opgelost, door op elke knop errond te "klikken" (ClickHandler aanroepen) waar geen mijn ligt en nog niet op geklikt werd. (Het stuk tussen de '__TEST__ comments)

Duffman-

Legacy Member
Io, men mijnenveger is bijna af (ben enkele weken weggeweest) maar hij is echt enorm traag eigenlijk. Als ik op een leeg vakje klik dan moet ik echt lijk een paar seconde wachten totdat hem laat zien wat hij moet laten zien. Als er iemand geïnteresseerd is in de code PM Mij dan met uw emailadres en kstuur da wel door dan. Kben nu met recursieve functies aant werken om die lege vakjes zichtbaar te maken. Mijn oplossing is een pak omslachtiger dan die van BuiZe ... das wel een feit.

Linwe

Legacy Member
Heb ooit ook iets dergelijks gemaakt toen nog in .NET en voor zover ik me nog kan herinneren had ik net hetzelfde "traag probleem". Ik had toen een kalender geschreven die in een form dynamisch labels ging createn per dag afhankelijk van de geselecteerde maand. (was de bedoeling om dat fixed op mijn desktop te krijgen zoals er veel van die tools te vinden zijn. Daar heb'k jammer genoeg nooit een oplossing voor gevonden:/) Maar doordat die dynamisch in dien array gestoken werden, vertraagde dat dus gans de boel. Ze gewoon als kadertjes painten ging een pak sneller :)
Voor u knoppen zal dat moeilijker zijn om dan ook nog effectief een push_effect te verkrijgen

Duffman-

Legacy Member
Mja kan bijna gans opnieuw beginnen me images dan eigenlijk. Dno yet hoe ik het ga doen. Tis vanaf die recursieve functies (functies die zichzelf oproepen) dat het traag is beginne ngaan.

Duffman-

Legacy Member
Hey, ja kben nog steeds bezig met mijnenveger maar kheb net vakantiewerk moeten doen dus toen ben ik er heel wat minder mee bezig geweest om niet te zeggen niets. Ik zat nu ondertussen met de vraag: hoe komt het dat dit niet werkt:

Code:
        For intTeller = 1 To intVeldgrootte
            Controls.Remove(btnKnop(intTeller, intVeldgrootte))
        Next
er wordt nog geen enkele knop verwijderd ...

Duffman-

Legacy Member
Up up..

kheb nu dus dit

Code:
    Private Function bla()
        For intTeller1 = 1 To intVeldgrootte
            For intTeller = 1 To intVeldgrootte
                Controls.Remove(btnKnop(intTeller, intVeldgrootte))
            Next
        Next
    End Function

waarom worden die knoppen ni verwijderd?

Cakeman

Legacy Member
Duffman- zei:
Up up..

kheb nu dus dit

Code:
    Private Function bla()
        For intTeller1 = 1 To intVeldgrootte
            For intTeller = 1 To intVeldgrootte
                Controls.Remove(btnKnop(intTeller, intVeldgrootte))
            Next
        Next
    End Function

waarom worden die knoppen ni verwijderd?
Wordt er helemaal niets verwijderd?

Probeer eens "Controls.Remove(btnKnop(intTeller, intVeldgrootte))" te vervangen door "Controls.Remove(btnKnop(intTeller, intTeller1))"

Op die manier ga je alle knoppen overlopen en niet enkel de onderste rij.

sabaoth

Legacy Member
ik kan u een volledige mijneveger geve me highscores en al :p vorig jaar moette make

Duffman-

Legacy Member
Menne mijnenveger werkt nu volledig
maar sabaoth ... kvroeg mij nu af, uw mijnenveger was met highscores enal ... ik vroeg me af hoe kan je ervoor zorgen dat je werkelijk highscores bijhoudt ook al zet je de PC/toepassing af? Hoe sla je dat op?

Cakeman

Legacy Member
Duffman- zei:
Menne mijnenveger werkt nu volledig
maar sabaoth ... kvroeg mij nu af, uw mijnenveger was met highscores enal ... ik vroeg me af hoe kan je ervoor zorgen dat je werkelijk highscores bijhoudt ook al zet je de PC/toepassing af? Hoe sla je dat op?
Ik weet dat ik vroeger, toen we nog Windows 98 hadden, ontdekt had dat Minesweeper de scores opsloeg in een .ini bestand. Ik heb toen manueel die scores aangepast. Mijn pa had natuurlijk niks door en vond het heel straf dat ik dat spel zo goed kon :)

Je kan het dus gewoon in een bestand wegschrijven. Desnoods geef je het bestand een speciale extensie (.duff ofzo :)) zodat de mensen er niet meteen in zouden neuzen. Je kan de inhoud van je bestand ook encoding en decoden met de ASCII encoding die standaard in .NET zit.

Obliv`

Legacy Member
Cakeman zei:
Ik weet dat ik vroeger, toen we nog Windows 98 hadden, ontdekt had dat Minesweeper de scores opsloeg in een .ini bestand. Ik heb toen manueel die scores aangepast. Mijn pa had natuurlijk niks door en vond het heel straf dat ik dat spel zo goed kon :)

Je kan het dus gewoon in een bestand wegschrijven. Desnoods geef je het bestand een speciale extensie (.duff ofzo :)) zodat de mensen er niet meteen in zouden neuzen. Je kan de inhoud van je bestand ook encoding en decoden met de ASCII encoding die standaard in .NET zit.

Ik zou dit in een xml bestand opslagen.

Krueger

Legacy Member
Obliv` zei:
Ik zou dit in een xml bestand opslagen.
Waarom perse een XML bestand. Is dat formaat volgens jou zou uitmuntend veel beter dan andere formaten om de combinatie user-tijd bij te houden?

killgore

Legacy Member
Krueger zei:
Waarom perse een XML bestand. Is dat formaat volgens jou zou uitmuntend veel beter dan andere formaten om de combinatie user-tijd bij te houden?
:offtopic: Nee, maar xml is wel handiger (duidelijker) voor vrij grote hoeveelheden data bij te houden & zeker als je met een zekere vorm van parent/children zit.

Dan is het maar logisch dat je in een app een vorm van continuïteit gebruikt en voor zowat het meeste xml gebruikt?

Ik bouw meestal gewoon zowel .xml als .ini reader & writer in zodat ik kan switchen.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan