Avatar billede adagio Nybegynder
31. juli 2001 - 16:09 Der er 18 kommentarer og
1 løsning

Ved ikke lige hvordan dette problem kan beskrives kort!!!

Men her kommer problemet så:

Jeg har (delvist) lavet spillet Gigant Yatzee (Kan hentes her: http://www.planet-source-code.com/xq/ASP/txtCodeId.25638/lngWId.1/qx/vb/scripts/ShowCode.htm), men der er opstået nogle problemer som jeg (heller) ikke har nogen anelse om hvordan den skal klares.

Her er koden for 2 par, som jeg har nu:

Private Function chkHouseTwoPair(NoOfPair1 As Integer, NoOfPair2 As Integer) As Integer
Dim x, i, j As Integer

For i = 0 To 11
If chkPair(DiceValue(i), NoOfPair1) = True Then
        j = DiceValue(i)
        Exit For
End If
Next

For i = 0 To 11
If chkPair(DiceValue(i), NoOfPair2) = True Then
    If Not DiceValue(i) = j Then
        x = DiceValue(i)
        Exit For
    End If
End If
Next

If Not x = 0 Then
If Not j = 0 Then
    chkHouseTwoPair = (x * NoOfPair2) + (j * NoOfPair1)
End If
End If
End Function

Problemet ligger i at når man får flere par en 1 par tager den bare to tilfældige terningepar!?!
Avatar billede roenving Novice
31. juli 2001 - 19:08 #1
Jeg er godt nok ikke sikker men ...

Bliver sammenligningsoperatoren (=) ikke evalueret efter Not (jeg kan simpelthen ikke huske det);

dvs. at Not x evalueres først til true/false (-1/0) og derefter sammenlignes med 0, hvilket vil betyde at hvis x og j er forskellige fra 0 så returnerer den resultatet -- det er vel også godt nok, men ...

Not DiceValue(i) vil altid evalueres til 0 (du har vel ikke 0 som DiceValue !?) og sikkert være forskellig fra j -- hvis du bruger 0 som dicevalue vil x altid være 1 !!

hth
jes
Avatar billede adagio Nybegynder
31. juli 2001 - 22:13 #2
Nej, der findes ingen DiceValue som er 0, men jeg kan ikke lige se hvordan jeg kan bruge det der!?!
Avatar billede tdaugaard Nybegynder
31. juli 2001 - 22:20 #3
roenving:>

If Not expr1 = expr2 Then

bliver på en måde oversat til:

If Not (expr1 = expr2) Then

dvs., hvis expr1 = expr2 vil udfaldet blive False, eller True.

Not DiceValue(i)

Immediate:

?not 5
-6

Så det vil sige at Not DiceValue(i) IKKE altid vil evaluere til 0. I det tilfælde at DiceValue(i)  = -1 vil det være 0, alt andet vil have en værdi større eller mindre end False.
Avatar billede roenving Novice
31. juli 2001 - 22:31 #4
Som skrevet var jeg usikker på operator precedence, altså hvornår hvilke operatorer evalueres før andre.
Generelt set er det sådan, at logiske operatorer (AND, OR, XOR m.fl.) har en lavere prioritet end de fleste andre, men NOT var jeg usikker på -- og der kunne jeg se en mulighed for fejl.

Jeg er meget overrasket over at immediate:NOT returnerer en værdi, som ikke er 0 eller -1, fordi det er standarden for boolean values [false/true (0/ikke 0)] -- at true er alt, som har sat bare en enkelt bit og false er den værdi, som ingen bits har sat; så returværdien for false er 0 (ingen bits sat) og returværdien for true er -1 (alle bits sat).

Det kan så jo lige bemærkes at jeg sjældent arbejder i VB, som regel er det andre varianter af Basic (varianter af ANSI Basic) jeg har fingrene i!~]
Avatar billede tdaugaard Nybegynder
31. juli 2001 - 22:32 #5
adg:> Lad mig spørge, med al respekt, er du nybegynder ? Først vil jeg lave lidt om på din funktion:

Private Function chkHouseTwoPair(NoOfPair1 As Integer, NoOfPair2 As Integer) As Integer
    \' Dim var1, var2 as integer giver kun var2 som Integer mens var1 er en Variant
    Dim x As Integer
    Dim i As Integer
    Dim j As Integer

    j = -1
    x = -1
    For i = 0 To 11
        If chkPair(DiceValue(i), NoOfPair1) = True Then j = DiceValue(i)
        If chkPair(DiceValue(i), NoOfPair2) = True And j > 0 Then
            If Not DiceValue(i) = j Then
                x = DiceValue(i)
                Exit For
            End If
        End If
    Next
   
    If j > 0 And x > 0 Then chkHouseTwoPair = (x * NoOfPair2) + (j * NoOfPair1)
End Function
Avatar billede tdaugaard Nybegynder
31. juli 2001 - 22:34 #6
roenvig:> Jeg tror det er fordi VB\'s Not, Or, Xor osv. er, som du selv siger, logical og ikke bitwise ...
Avatar billede adagio Nybegynder
31. juli 2001 - 22:43 #7
Ja, jeg er nybegynder til VB...dvs jeg har arbejdet med det i ca. 4-5 måneder, men jeg har først nu endelig fået tid til at kigge lidt nærmere på det, på grund af ferie :)

Jeg har ikke lige prøvet koden endnu, men det gør jeg nu
Avatar billede tdaugaard Nybegynder
31. juli 2001 - 22:46 #8
adg:> ahh okay .. meget rart at vide hvor komplext man kan tillade sig at lave det, og det stadig er forståeligt for den der skal bruge det *S*

Hvordan ser din chkPair() funktion ud ?
Avatar billede adagio Nybegynder
31. juli 2001 - 22:48 #9
ah ja, den glemte jeg at skrive, den ser sådan ud:

Private Function chkPair(ByVal ValDie As Integer, ByVal NoOfPair As Integer) As Boolean
Dim i, Pair As Integer

For i = 0 To 11
    If DiceValue(i) = ValDie Then Pair = Pair + 1
Next
If Pair >= NoOfPair Then chkPair = True
If Pair < NoOfPair Then chkPair = False

End Function
Avatar billede adagio Nybegynder
31. juli 2001 - 22:49 #10
Og det andet der giver bare 0, så den ved ikke at jeg har 2+ par
Avatar billede adagio Nybegynder
04. august 2001 - 23:10 #11
Den eneste mulige løsning jeg har fundet er noget usmart tror jeg. Den løsning går ud på at skrive all mulige par-udfald og en sådan ummidelbar hovedregning kommer koderne for 2 par til at fylde flere 100 linjer, der må findes en bedre løsning!?!
Avatar billede tdaugaard Nybegynder
04. august 2001 - 23:12 #12
ups .. for pokker da ... jeg havde slet ikke set din seneste kommentar *hmm*
Avatar billede adagio Nybegynder
04. august 2001 - 23:15 #13
hehe, det kan ske :)
Avatar billede tdaugaard Nybegynder
04. august 2001 - 23:21 #14
hmm .. er det et program du har mulighed for (og lyst til) at sende til mig ? det er lidt nemmere end at sidde og kigge på halv kode ...
Avatar billede adagio Nybegynder
04. august 2001 - 23:25 #15
ja, du kan hente koden på den link jeg gav til først, det skulle være den nyeste version jeg har
Avatar billede tdaugaard Nybegynder
04. august 2001 - 23:26 #16
ahh okay *S*
Avatar billede tdaugaard Nybegynder
05. august 2001 - 05:49 #17
Hmm .. jeg kan ikke lige overskue dit program .. sorry :-(
Avatar billede adagio Nybegynder
05. august 2001 - 13:00 #18
Det kunne være at det er lettere at overskue det original program, som jeg startede det hele med. Den kan hentes her:

http://www.planet-source-code.com/xq/ASP/txtCodeId.24535/lngWId.1/qx/vb/scripts/ShowCode.htm
Avatar billede adagio Nybegynder
09. august 2001 - 12:31 #19
Det ser ikke ud som at der kommer flere her :(
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester