Toon posts:

[VB] Memory spel, bij 2 gelijke laten staan

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een opdracht waarbij is een memoryspel moet maken met de volgende code:
code:
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Private Sub Form_Load()
Dim C(8)
Dim B(15)
Dim P1
Dim P2
Dim C1
Dim C12
Dim klik
Dim r
Randomize
 Me.Left = Screen.Width / 2 - Me.Width / 2
    Me.Top = Screen.Height / 2 - Me.Height / 2
    Randomize Timer
    For i = 0 To 15
      picture1(i).Picture = plaatjes.Picture2.Picture
    Next i
    For i = 0 To 15
      Do
        r = Int(Rnd * 9)
      Loop Until C(r) < 2
      C(r) = C(r) + 1
      B(i) = r
    Next i
    Cl = 0


End Sub
Private Sub Picture1_Click(Index As Integer)
Dim C(8)
Dim B(15)
Dim P1
Dim P2
Dim Cl
Dim Cl2
Dim klik
Dim r

 Cl = Cl + 1
    If Cl = 1 Then Cl2 = Index
    If Cl = 2 And Cl2 = Index Then
      Cl = 1
      Exit Sub
    End If
    
    picture1(Index).Picture = plaatjes.picture1(B(Index)).Picture
    If Cl = 2 Then
      For i = 0 To 2000000: Next i
      If B(Cl2) = B(Index) Then
        picture1(Cl2).Visible = True
        picture1(Cl2).Enabled = True
        picture1(Index).Visible = True
        picture1(Index).Enabled = True
      Else
        picture1(Cl2).Picture = plaatjes.Picture2.Picture
        picture1(Index).Picture = plaatjes.Picture2.Picture
              End If
      Cl = 0: Cl2 = 0
    End If
    For i = 1 To 20
        For i2 = 1 To 350000: Next i2
    Next i
End Sub

Nu wil ik als er 2 plaatjes hetzelfde zijn dat deze blijven staan. Hoe doe ik dit, nu krijg ik dit:
Afbeeldingslocatie: http://www.endoria.net/upload/?bekijk=1718660638
Ook wil ik dat hij de plaatjes bij het laden random neerzet !

Wie helpt ?

Verwijderd

Misschien zou je var namen kunnen gebruiken die iets minder kort door de bocht gaan. Snel werken is leuk, maar het debuggen is veel belangrijker.

  • Maestro.mosjuh
  • Registratie: Augustus 2001
  • Niet online
zie ook:

FAQ linkje

At the beginning there was nothing. So God said 'apt-get install light'.


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15:13
Dit is zoooooooooooooooooooooooooooooooooooooo Basic:
For i = 0 To 2000000: Next i
:r

  • Bananeman
  • Registratie: Juli 2000
  • Niet online
Op woensdag 06 maart 2002 23:21 schreef Soultaker het volgende:
Dit is zoooooooooooooooooooooooooooooooooooooo Basic:
[..]

:r
Oh wow, die had ik nog niet staan! This brings back memories! (van slechte coding-praktijken, wel te verstaan :P )

Motor-forum.nl


  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 14:48

johnwoo

3S-GTE

Deze code is vrij onleesbaar, en er zitten n paar foute constructies in... Wat algemene tips:
- Geef bij je declaraties altijd het type op, anders worden het Variants, en die zijn inefficient :)
- Geef de variabelen ook veelzeggende namen. Het maakt voor de efficientie van je uiteindelijke programma helemaal niks uit of je namen van 2 karakters of van 25 karakters gebruikt :)
- Om de form in het midden van het scherm te krijgen kun je ook zijn StartupPosition property op CenterScreen zetten
- De allergrootste fout is het maken van loopjes om vertragingen in te bouwen. Tijdens de loop hangt je programma, en bovendien is de vertraging lang niet altijd hetzelfde. Gebruik hier timers voor.

Om toch alvast wat mogelijke oplossingen te geven:
- Het laten staan van matchende plaatjes lijkt me vrij simpel. Gebruik bijvoorbeeld de Tag property van je pictureboxen om aan te geven welk plaatje bij welk plaatje hoort. Bij de tweede klik kijk je of de plaatjes overeenkomen. Zo ja, dan doe je verder niets (je laat ze openstaan), zo nee dan draai je ze allebei weer dicht, desnoods na een vertraging (met timers dan wel he :P ).
- Het random plaatsen van de plaatjes doe je idd met Rnd. Ik zou per plaatje een random locatie kiezen, en als die bezet is, circulair doorlopen naar de eerstvolgende vrije positie. Waarschijnlijk kan dit nog wel op een iets snellere manier ook. drZymo zegt: je kunt het beste de plaatjes eerst gewoon op volgorde plaatsen, en daarna wat random swaps tussen verschillende plaatjes onderling doen.

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15:13
Op woensdag 06 maart 2002 23:42 schreef johnwoo het volgende:
- Het random plaatsen van de plaatjes doe je idd met Rnd. Ik zou per plaatje een random locatie kiezen, en als die bezet is, circulair doorlopen naar de eerstvolgende vrije positie. Waarschijnlijk kan dit nog wel op een iets snellere manier ook. drZymo zegt: je kunt het beste de plaatjes eerst gewoon op volgorde plaatsen, en daarna wat random swaps tussen verschillende plaatjes onderling doen.
Ik opteer toch echt voor een fatsoenlijk algoritme, dat met een minimaal aantal stappen en gegarandeerd willekeurige plaatsing oplevert (voor zover je random number generator willekeurig is natuurlijk).

Dat hebben we recentelijk behandeld en wel hier:
[topic=428554/1/25]
Mijn suggestie (en naar mijn mening de beste methode) hierin was de volgende:
code:
1
2
3
4
5
6
7
N = (lengte van array) - 1
while(N>0)
begin
  P = random getal (0 <= P <= N)
  verwissel (array[N], array[P])
  N = N - 1
end

In dit specifieke geval vervang je je array dus door een stelletje plaatjes. Geen idee hoe dat in VisualBasic werkt, maar dat weet jij dan wel weer.

Het bezwaar bij de door johnwoo eerstgenoemde methode is het feit dat je nooit kan garanderen dat je algoritme na een zeker aantal stappen klaar is. Dit kan in het tweede algoritme wel, maar daarbij is het mogelijk dat verschillende stappen elkaar opheffen. Hierbij heb je na een zeker aantal verwisselingen niet de mate van randomness die gewenst is.

  • StratoFarmer
  • Registratie: April 2000
  • Laatst online: 04-09 21:10

StratoFarmer

Anke :*

gesnapt ouwe VB-prutser >:)

* StratoFarmer doet dezelfde opleiding en kent deze opdracht. :z

Mijn plekkie + Sympathisant van 'GoT voor Behoud der Nederlandsche Taal' [GvBdNT]

Pagina: 1