Problem with an array

Blitz3D Forums/Blitz3D Beginners Area/Problem with an array

Q(Posted 2005) [#1]
First off, here's my code:

Dim DICE(5)
DICE(1) = 1
DICE(2) = 2
DICE(3) = 2
DICE(4) = 1
DICE(5) = 5

Global COUNT = 0
Global THREE_OF_A_KIND = False

For I = 1 To 5
	For J = 1 To 5
	
		If DICE(I) = J
			COUNT = COUNT + 1
			Print COUNT
		EndIf
		
	Next
Next

If COUNT > 2
	THREE_OF_A_KIND = True
EndIf

If THREE_OF_A_KIND = True
	Print "ASD"
	WaitKey()
EndIf


I'm trying to make a Yahtzee game, and i've come across a error trying to calculate wether or not a roll is a three of a kind.

For some reason it keeps showing that dice(I) always equals J, which shouldn't happen. Should it? Why does it keep showing this?


degac(Posted 2005) [#2]
Probably you need to track the count of the single number..
Dim DICE(5)
Dim acount(5)

DICE(1) = 1
DICE(2) = 2
DICE(3) = 2
DICE(4) = 2 
DICE(5) = 5

Global THREE_OF_A_KIND = False

For i=1 To 5
For j=1 To 5
If i=dice(j)
	acount(i)=acount(i)+1
	Print "DICE: "+dice(i)+" = "+acount(i)
	End If
Next
Next

For i=1 To 5
If acount(i)>2 three_of_a_kind=True
;you can control the frequency of the extraction per single number if you want
Next


If THREE_OF_A_KIND = True
	Print "ASD"
	WaitKey()
EndIf
End



Q(Posted 2005) [#3]
With the code you posted it shows that the dice are the following values:

dice 1: 1
dice 2: 1
dice 3: 2
dice 4: 3
dice 5: 1

when it's actually 1,2,2,2,3... Odd.


Shambler(Posted 2005) [#4]
Your just reading it wrong val, try changing the print statement to this, might make the info clearer.

Print "DICE "+j+" value is '"+dice(i)+"'  / "+acount(i)+" of these found so far"



degac(Posted 2005) [#5]
acount(i) counts how many times the number i in Dice(i) is present.
For i=1 To 5
Print "DICE: "+i+" = "+acount(i)
Next

maybe this is more clear...


Q(Posted 2005) [#6]
Makes sense now. . Hehe. Thanks guys.


Q(Posted 2005) [#7]
I got the arrays down, but now I have another problem. How do you calculate a fullhouse so that ANY order of the dice works. I'm stuck here :s


degac(Posted 2005) [#8]
what is a FULLHOUSE? Sorry but english in not my natural language.


BlackJumper(Posted 2005) [#9]
I would suggest that you do a sort on your dice data so that order will no longer be a problem... That way you can just check to see if

Case1: the first three and last two are the same
Case2: the first two and last three are the same

If Case1 or Case2 are true you have a full house... unless they are all the same in which case you have Yahtzee (5 of a kind)


Shambler(Posted 2005) [#10]
I just checked the rules and I think this works,

I changed the >2 for the 3 of a kind check since this would detect 4 of a kind too which I assume is wrong...not sure on the rules for that but you can tell us ;)

Dim DICE(5)
Dim acount(5)

DICE(1) = 2
DICE(2) = 2
DICE(3) = 2
DICE(4) = 5 
DICE(5) = 3

Global THREE_OF_A_KIND = False
Global fullhouse=0

For i=1 To 5
For j=1 To 5
If i=dice(j)
	acount(i)=acount(i)+1
	Print "DICE: "+dice(j)+" = "+acount(i)
	End If
Next
Next


For i=1 To 5
If acount(i)=3 Then  three_of_a_kind=True ;changed since >2 might mean there are 4 dice of the same value
;you can control the frequency of the extraction per single number if you want
Next

;Fullhouse check
For i=1 To 5
If acount(i)=2 Then fullhouse=fullhouse+2
If acount(i)=3 Then fullhouse=fullhouse+3
Next

If fullhouse=5
THREE_OF_A_KIND=False ;we have a fullhouse so ignore 3 of a kind...is this an ok rule?
Print "Fullhouse!"
WaitKey()
EndIf



If THREE_OF_A_KIND = True
	Print "3 of a Kind"
	WaitKey()
EndIf
End
  



Q(Posted 2005) [#11]
.