Toon posts:

[VB6] Gebruikt voorwaarden niet

Pagina: 1
Acties:

Verwijderd

Topicstarter
Aloha, een tijdje geleden was ik hier ook al met een probleem. Dat werd heel netjes opgelost en hoop dat het ook met dit gaat.Onderstaand de code waar het mis gaat het index gedeelte werkt, maar dat is om iets aan te geven.
code:
1
2
3
4
5
6
7
8
9
10
11
12
If Index = intPos(1) Or Index = intPos(2) Or Index = intPos(3) Then


                If intKaart1 And intKaart2 = 0 Or 8 Or 16 Or 24 Then
                    pbxCard(intPositie1).Visible = False
                    pbxCard(intPositie2).Visible = False
                    blnKaartKlik = False
                   Msgbox "kaart 1 = " & intKaart1 & "kaart 2 = " & intKaart2
                ElseIf intKaart1 And intKaart2 = 1 Or 9 Or 17 Or 25 Then
                    pbxCard(intPositie1).Visible = False
                    pbxCard(intPositie2).Visible = False
                    blnKaartKlik = False


hij pakt standaard de eerste if. Hij kent de variabelen intkaart 1 & 2. Maar hij wil ze niet afwegen met 0 or 8 or 16 or 24. Dit zou wel moeten. Hoe het in m`n hoofd zit is: Als waarde intKaart1 overeenkomt met bijv 0 en intkaart2 komt overeen met 8 dan...

Dit is nodig omdat ik het type kaart met elkaar moet vergelijken, harten7 met bijvoorbeeld een klaver7 . ( 0 en 8 )

Mocht je je afvragen waarom ik
code:
1
 If Index = intPos(1) Or Index = intPos(2) Or Index = intPos(3) Then
heb staan en niet
code:
1
If Index = intPos(1) Or intPos(2) Or intPos(3) Then

Dat is heel erg makkelijk hij pakt die waardes dan namelijk niet.

Ik dacht dit probeer ik ook bij de eerste code, maar dan kom ik er niet uit hoe ik het neer moet zetten zodat het werkt.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Moet je intkaart1 en inkaart2 niet or-en i.p.v. and-en dan? (Of gewoon optellen)?
Kun je wat exacter omschrijven wat je nu probeert te doen? Wanneer moet wat gebeuren? (Waarheidstabelletje?)

Ik heb het idee dat je vanalles door elkaar haalt... Zoals je de "or" nu gebruikt, implementeer je effectief gewoon een "optelling" van bits. Als je de or wil gebruiken zoals je bedoelt dan doe je zoiets:

code:
1
If (voorwaardeA = 1) or (voorwaardeA = 3) or (voorwaardeB = 18) or (voorwaardeB = 21) then...


Om mijn verhaal wat te verduidelijken:
1 or 8 = 9
1 or 7 = 7
1 or 6 = 7
1 or 5 = 5
2 or 5 = 7
2 or 6 = 6
1 or 2 or 4 or 8 = 15
enz..

True or False = True
True or True = True
False or True = True
False or False = False

In het eerste rijtje krijg je een "optelling" van alle 8 de bits uit beide bytes (die worden ge-or-ed). In het tweede rijtje gebeurt hetzelfde, maar dan met maar 1 "bit"* (een boolean).

* Een "bit" is overigens geen bit, maar daar gaat het nu niet om...

Oh, en trust me: Als er in zoiets elementairs al een "bug" had gezeten in VB6 dan was het (indertijd) nooit zo populair geweest ;)

[ Voor 255% gewijzigd door RobIII op 19-10-2005 18:03 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
Het moet geen optelling zijn. Het is een kaartspel waar kaarten met dezelfde waardes weggeklikt kunnen worden. intKaart1 is de eerste kaart waar je op klikt. intKaart 2 is de 2e kaart.

Nu heb ik alle kaarten in het spel een unieke waarde gegeven de harten 7 is 0 de klaver 7 is 8 de ruiten 7 is 16 en de schoppen 7 is 24.

Nu moet het spel dus als kaart 1 een harten 7 en op de 2e kaart wordt geklikt controleren of die 2e kaart dan wel een klaver, ruiten of schoppen 7 is. Hoop dat dit al iets duidelijker is.

owh en ik geloof je

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
code:
1
If (dingesA mod 8) = (dingesB mod 8) then ... ?

of:
code:
1
if (dinges=0) or (dinges=8) or (dinges=16) or (dinges=24) then ... ?

en zo zijn er nog wel 1001 manieren om te doen wat je wil...
Ik vind alleen dat je "nummering" niet erg logisch is. En waarom zou je een kaart niet gewoon 2 eigenschappen geven? (Kleur en "Cijfer"? Dus Harten/Klaveren/... en 1/2/3..9/10/11/12 waarbij 11 dan boer is etc). Dan kun je gewoon zeggen:
code:
1
if kaartA.cijfer = kaartB.cijfer then ...

Dit kun je bereiken met een UDT (User Defined Type) of met een Class. Wat jij wil.
Nogmaals: Er zijn meer wegen die leiden naar Rome...

[ Voor 70% gewijzigd door RobIII op 19-10-2005 18:49 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:34

crisp

Devver

Pixelated

Om te kijken of je 2 dezelfde kaarten hebt kan in 1 afvraging:
code:
1
If (intKaart1 % 8) = (intKaart2 % 8)

Ik neem aan dat VB de modulus operator (%) ondersteund...

Intentionally left blank


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
crisp schreef op woensdag 19 oktober 2005 @ 18:47:
Om te kijken of je 2 dezelfde kaarten hebt kan in 1 afvraging:
code:
1
If (intKaart1 % 8) = (intKaart2 % 8)

Ik neem aan dat VB de modulus operator (%) ondersteund...
Lees die post boven je eens :P
% is in VB mod... :Y)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:34

crisp

Devver

Pixelated

RobIII schreef op woensdag 19 oktober 2005 @ 18:48:
[...]

Lees die post boven je eens :P
% is in VB mod... :Y)
Die stond er nog niet toen ik aan het typen was (ik ben oud en typ langzaam :P)
Maar thanks, weer wat geleerd ;)

Intentionally left blank


Verwijderd

Topicstarter
ehm, klinkt opzich goed. Ik snap wat je bedoelt. Het probleem is alleen dat ik nu gebruik maak van picturboxen en dat ik de waarde van die picturebox laat gaan langs een array zodat ik weet welke kaart er in zit. Zo kom ik aan de waarde wat z`n positie is en en welke kaart het is.

Heb 2 variabelen en 4 waardes die ze kunnen zijn en daar wil ik op reageren.
Dit is de gehele code voor dit onderdeel
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
            If Index = intPos(1) Or Index = intPos(2) Or Index = intPos(3) Then


                If intKaart1 And intKaart2 = 0 Or 8 Or 16 Or 24 Then
                    pbxCard(intPositie1).Visible = False
                    pbxCard(intPositie2).Visible = False
                    blnKaartKlik = False
                ElseIf intKaart1 And intKaart2 = 1 Or 9 Or 17 Or 25 Then
                    pbxCard(intPositie1).Visible = False
                    pbxCard(intPositie2).Visible = False
                    blnKaartKlik = False
                ElseIf intKaart1 And intKaart2 = 2 Or 10 Or 18 Or 26 Then
                    pbxCard(intPositie1).Visible = False
                    pbxCard(intPositie2).Visible = False
                    blnKaartKlik = False
                ElseIf intKaart1 And intKaart2 = 3 Or 11 Or 19 Or 27 Then
                    pbxCard(intPositie1).Visible = False
                    pbxCard(intPositie2).Visible = False
                    blnKaartKlik = False
                ElseIf intKaart1 And intKaart2 = 4 Or 12 Or 20 Or 28 Then
                    pbxCard(intPositie1).Visible = False
                    pbxCard(intPositie2).Visible = False
                    blnKaartKlik = False
                ElseIf intKaart1 And intKaart2 = 5 Or 13 Or 21 Or 29 Then
                    pbxCard(intPositie1).Visible = False
                    pbxCard(intPositie2).Visible = False
                    blnKaartKlik = False
                ElseIf intKaart1 And intKaart2 = 6 Or 14 Or 22 Or 30 Then
                    pbxCard(intPositie1).Visible = False
                    pbxCard(intPositie2).Visible = False
                    blnKaartKlik = False
                ElseIf intKaart1 And intKaart2 = 7 Or 15 Or 23 Or 31 Then
                    pbxCard(intPositie1).Visible = False
                    pbxCard(intPositie2).Visible = False
                    blnKaartKlik = False
                Else
                    MsgBox "Is het zo moeilijk om 2 kaarten te vinden met dezelfde waarde?"
                End If
            Else
                MsgBox "Je kan alleen de kaart er links-, rechts- of direct erboven aanklikken"
            End If

Ok nu de code die ik gebruik en die op dit moment zelfs werkt en waarvoor ik jullie wil bedanken, ik had al aan mod gedacht, maar had niet echt door hoe te gebruiken.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
If Index = intPos(1) Or Index = intPos(2) Or Index = intPos(3) Then


                If intKaart1 Mod 8 = intKaart2 Mod 8 Then
                    pbxCard(intPositie1).Visible = False
                    pbxCard(intPositie2).Visible = False
                    blnKaartKlik = False
                Else
                    MsgBox "Is het zo moeilijk om 2 kaarten te vinden met dezelfde waarde?"
                End If
            Else
                MsgBox "Je kan alleen de kaart er links-, rechts- of direct erboven aanklikken"
            End If


om een lang verhaal kort te maken: HET WERKT!!!
nog een klein vraagje om een andere code korter te maken.

ik heb 32 posities( 0 tot 31) ik heb nu als if statement de huidige positie van de eerstgeklikte kaart en die doe ik dan -7 -8 en -9 dan heb ik dus 3 posities die ik kan kiezen dat werkt. De bovenste rij is 0 tot 7 en als ik op 1 van die -7 -8 of -9 doe dan kom ik op een negatiefgetal uit hij zou eigenlijk moeten aan geven dat er geteld wordt van 0 tot 31 en dus geen -getallen. dus bijv. 1 - 3 = 30

[ Voor 24% gewijzigd door Verwijderd op 19-10-2005 19:11 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Uhm... zegt het begrip Arrays en Lussen ("loop") je iets?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
Jah ik doe de shuffle doormiddel van de array random in delen. Ik gebruik een For loop om de de kaarten te plaatsen. waarvoor ik het wil doen is 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
 If intPositie1 = 0 Then
        intPos(1) = 24
        intPos(2) = 25
        intPos(3) = 32
    ElseIf intPositie1 = 1 Then
        intPos(1) = 24
        intPos(2) = 25
        intPos(3) = 26
    ElseIf intPositie1 = 2 Then
        intPos(1) = 25
        intPos(2) = 26
        intPos(3) = 27
    ElseIf intPositie1 = 3 Then
        intPos(1) = 26
        intPos(2) = 27
        intPos(3) = 28
    ElseIf intPositie1 = 4 Then
        intPos(1) = 27
        intPos(2) = 28
        intPos(3) = 29
    ElseIf intPositie1 = 5 Then
        intPos(1) = 28
        intPos(2) = 29
        intPos(3) = 30
    ElseIf intPositie1 = 6 Then
        intPos(1) = 29
        intPos(2) = 30
        intPos(3) = 31
    ElseIf intPositie1 = 7 Then
        intPos(1) = 30
        intPos(2) = 31
        intPos(3) = 32
    ElseIf intPositie1 = 15 Or intPositie1 = 23 Or intPositie1 = 31 Then
        intPos(1) = intPositie1 - 8
        intPos(2) = intPositie1 - 9
        intPos(3) = 32 'Positie 32 bestaat niet loopt van 0 tot 31"
    ElseIf intPositie1 = 8 Or intPositie1 = 16 Or intPositie1 = 24 Then
        intPos(1) = intPositie1 - 7
        intPos(2) = intPositie1 - 8
        intPos(3) = 32
    ElseIf Not intPositie1 = 0 Or intPositie1 = 7 Or intPositie1 = 8 Or intPositie1 = 15 Or intPositie1 = 16 Or intPositie1 = 23 Or intPositie1 = 24 Or intPositie1 = 31 Then
        intPos(1) = intPositie1 - 7
        intPos(2) = intPositie1 - 8
        intPos(3) = intPositie1 - 9

    Else
        MsgBox "Gaat iets mis"
    End If


en de eerste 32 regels zijn zeer zeker te verbeteren, ik weet alleen niet hoe.

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

zoek gewoon het rekenkundig verband

ASSUME makes an ASS out of U and ME


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Stop AI Slop

Wat probeer je hiermee te bereiken:
Visual Basic:
1
If intKaart1 And intKaart2 = 0 Or 8 Or 16 Or 24 Then

Dat gaat denk ik nooit werken. Er staat namelijk dit:
Visual Basic:
1
If ((intKaart1) And (intKaart2 = 0)) Or (8) Or (16) Or (24) Then


Ik denk dat je zoiets wilt:

Visual Basic:
1
2
3
intTemp = intKaart1 And intKaart2
' of: intTemp = intKaart1 + intKaart2
If (intTemp = 0) Or (intTemp = 8) Or (intTemp = 16) Or (intTemp = 24) Then

[ Voor 7% gewijzigd door CodeCaster op 20-10-2005 11:13 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17:52

.oisyn

Moderator Devschuur®

Demotivational Speaker

Wat ik overigens niet snap:
Verwijderd schreef op woensdag 19 oktober 2005 @ 17:35:
Mocht je je afvragen waarom ik
code:
1
 If Index = intPos(1) Or Index = intPos(2) Or Index = intPos(3) Then
heb staan en niet
code:
1
If Index = intPos(1) Or intPos(2) Or intPos(3) Then

Dat is heel erg makkelijk hij pakt die waardes dan namelijk niet.
Dan moet er toch een lichtje gaan branden waarom
code:
1
If intKaart1 And intKaart2 = 0 Or 8 Or 16 Or 24
ook niet werkt om diezelfde reden? :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Visual Basic:
1
If intKaart1 And intKaart2 = 0 Or 8 Or 16 Or 24
werkt natuurlijk niet. alleen de intkaart2=0 kan een true of false leveren en de impliciete casting van intkaart1 naar een boolean is ook altijd true bij positieve waardes behalve als het de waarde 0 bevat. je vergelijking levert dus (t/f and t/f) or t or t or t, maw altijd waar(true).
je bedoelt waarschijnlijk:
Visual Basic:
1
If (intKaart1 = 0 And intKaart2 = 0) Or (intKaart1 = 8 And intKaart2 = 8) Or (intKaart1 = 16 And intKaart2 = 16) Or (intKaart1 = 24 And intKaart2 = 24) Then

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 26-04 19:33
Verwijderd schreef op vrijdag 21 oktober 2005 @ 10:47:
[...]
werkt natuurlijk niet. alleen de intkaart2=0 kan een true of false leveren en de impliciete casting van intkaart1 naar een boolean is ook altijd true bij positieve waardes behalve als het de waarde 0 bevat. je vergelijking levert dus (t/f and t/f) or t or t or t, maw altijd waar(true).
je bedoelt waarschijnlijk:
Visual Basic:
1
If (intKaart1 = 0 And intKaart2 = 0) Or (intKaart1 = 8 And intKaart2 = 8) Or (intKaart1 = 16 And intKaart2 = 16) Or (intKaart1 = 24 And intKaart2 = 24) Then
Deze code levert altijd true op omdat o.a 8 als boolean altijd true oplevert.

En als ik jouw code bekijk zou ie beter kunnen schrijven
code:
1
2
If Kaart1 = Kaart2 Then
End If


:)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1