gonzal13
asked on
Save an Array Code included
The question is similar to 'Save and Read array, but this time I included all the previous code leading up to the final array of Cards(k,2) to hopefully address the confusion generated in the previous question.
'XXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX X
Public Sub mnuShuffle_Click()
' The program generates Random numbers in increments of 52
' The number of decks is set at 1
' The program produces an array of cards for an unsorted, and
' unshuffled deck example 2,2,2,2 4,4,4,4
' The number of cards with a '2' value depends on the number
' of decks
Dim UNSH(312) As Integer 'unshuffled, sorted deck
'( 1 to 6 decks)
Dim Random(312) As Integer ' A set of random non repeating
' numbers in increments 0f 52
Dim temp As Integer
Dim CD(312, 2) As Integer 'Final generated deck, sorted
' according to random set
Dim Cards(312, 2) As Integer ' Just renamed cd(312,2)
'Note, the arrays are variable, but I made it constant 312,2
' since program will not go past the number of decks used.
' It should be noted that the 0,2 is avoided
'------------------------- ---------- ---------- ---------- --
Decks = 1 'temporary input Actually there is a txt box
X = 2 ' Value of the first cards, in this case 2,2,2,2
' If decks = 2 then one would see 2,2,2,2,2,2,2,2
If Decks = 1 Then ' If decks = 1 then generate unshuffled
' deck first four cards with a value of 2
' Did not consider Y = 0
Y = 4 ' Last row of first 4 cards
End If
If Decks = 2 Then
Y = 8
End If
If Decks = 3 Then
Y = 12
End If
If Decks = 4 Then
Y = 16
End If
If Decks = 5 Then
Y = 20
End If
If Decks = 6 Then
Y = 24
End If
For Z = 1 To Y ' There are four cards with a value of 2
' in a deck
' First 4 cards of the unshuffled array
UNSH(Z) = X ' Unsh(1) = 2 Card value = 2 Row 1
Z = Z + 1
UNSH(Z) = X ' Unsh(2) = 2 Card value = 2 Row 2
Z = Z + 1
UNSH(Z) = X 'Unsh(2) = 2 Card value = 2 Row 3
Z = Z + 1
UNSH(Z) = X ' Unsh(2) = 2 Card value = 2 Row 4
Next Z
'------------------------- ---------- ---------- ---------- ----
X = 3 'value of the next card
If Decks = 1 Then
Y = 5 ' ' FIRST row of SECOND 4 cards
End If
If Decks = 2 Then
Y = 9
End If
If Decks = 3 Then
Y = 13
End If
If Decks = 4 Then
Y = 17
End If
If Decks = 5 Then
Y = 21
End If
If Decks = 6 Then
Y = 25
End If
For Z = Y To Y + Decks * 4 - 1 'Based on one deck
UNSH(Z) = X 'UNSH(5) = 3 ROW 5
Z = Z + 1
UNSH(Z) = X 'UNSH(6) = 3 ROW 6
Z = Z + 1
UNSH(Z) = X 'UNSH(7) = 3 ROW 7
Z = Z + 1
UNSH(Z) = X 'UNSH(8) = 3 ROW 8
Next Z
'------------------------- ---------- ---------- ---------- --
X = 4 'value of card
If Decks = 1 Then ' Starting position (9)in a sorted deck of
' 52 cards
Y = 9
End If
If Decks = 2 Then
Y = 17
End If
If Decks = 3 Then
Y = 25
End If
If Decks = 4 Then
Y = 33
End If
If Decks = 5 Then
Y = 41
End If
If Decks = 6 Then
Y = 49
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'------------------------- ---------- ---------- ---------- --
X = 5
If Decks = 1 Then
Y = 13
End If
If Decks = 2 Then
Y = 25
End If
If Decks = 3 Then
Y = 37
End If
If Decks = 4 Then
Y = 49
End If
If Decks = 5 Then
Y = 61
End If
If Decks = 6 Then
Y = 73
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'------------------------- ---------- ---------- ---------- --
X = 6
If Decks = 1 Then
Y = 17
End If
If Decks = 2 Then
Y = 33
End If
If Decks = 3 Then
Y = 49
End If
If Decks = 4 Then
Y = 65
End If
If Decks = 5 Then
Y = 81
End If
If Decks = 6 Then
Y = 97
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'------------------------- ---------- ---------- ---------- --
X = 7
If Decks = 1 Then
Y = 21
End If
If Decks = 2 Then
Y = 41
End If
If Decks = 3 Then
Y = 61
End If
If Decks = 4 Then
Y = 81
End If
If Decks = 5 Then
Y = 101
End If
If Decks = 6 Then
Y = 121
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'------------------------- ---------- ---------- ---------- --
X = 8
If Decks = 1 Then
Y = 25
End If
If Decks = 2 Then
Y = 49
End If
If Decks = 3 Then
Y = 73
End If
If Decks = 4 Then
Y = 97
End If
If Decks = 5 Then
Y = 121
End If
If Decks = 6 Then
Y = 145
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'------------------------- ---------- ---------- ---------- --
X = 9
If Decks = 1 Then
Y = 29
End If
If Decks = 2 Then
Y = 57
End If
If Decks = 3 Then
Y = 85
End If
If Decks = 4 Then
Y = 113
End If
If Decks = 5 Then
Y = 141
End If
If Decks = 6 Then
Y = 169
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'------------------------- ---------- ---------- ---------- --
X = 10
If Decks = 1 Then
Y = 33
End If
If Decks = 2 Then
Y = 65
End If
If Decks = 3 Then
Y = 97
End If
If Decks = 4 Then
Y = 129
End If
If Decks = 5 Then
Y = 161
End If
If Decks = 6 Then
Y = 193
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'------------------------- ---------- ---------- ---------- --
X = 10
If Decks = 1 Then
Y = 37
End If
If Decks = 2 Then
Y = 73
End If
If Decks = 3 Then
Y = 109
End If
If Decks = 4 Then
Y = 145
End If
If Decks = 5 Then
Y = 181
End If
If Decks = 6 Then
Y = 217
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'------------------------- ---------- ---------- ---------- --
X = 10
If Decks = 1 Then
Y = 41
End If
If Decks = 2 Then
Y = 81
End If
If Decks = 3 Then
Y = 121
End If
If Decks = 4 Then
Y = 161
End If
If Decks = 5 Then
Y = 201
End If
If Decks = 6 Then
Y = 241
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'------------------------- ---------- ---------- ---------- --
X = 10
If Decks = 1 Then
Y = 45
End If
If Decks = 2 Then
Y = 89
End If
If Decks = 3 Then
Y = 133
End If
If Decks = 4 Then
Y = 177
End If
If Decks = 5 Then
Y = 221
End If
If Decks = 6 Then
Y = 265
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
X = 11 'Ace value of 11 or 1 taken into
'in other code
If Decks = 1 Then
Y = 49
End If
If Decks = 2 Then
Y = 97
End If
If Decks = 3 Then
Y = 145
End If
If Decks = 4 Then
Y = 193
End If
If Decks = 5 Then
Y = 241
End If
If Decks = 6 Then
Y = 289
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'-------------------
'Generate Random Array for the deck DECK of 52 cards
L = 52 * Decks
For Y = 1 To L
POS = Int(Rnd() * (L - 1) + 1)
temp = UNSH(POS)
UNSH(POS) = UNSH(Y)
UNSH(Y) = temp
Next Y
'XXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXXX
'
For Y = 1 To L 'Generate an sorted array from 1 to 52
' based for example on 52 cards
Random(Y) = Y
Next Y
' "dis-order" array randomly:
Randomize Timer
For Y = 1 To L
POS = Int(Rnd() * (L - 1) + 1) ' RANDOM NUMBER FROM 1 TO L
temp = Random(POS)
Random(POS) = Random(Y)
Random(Y) = temp
Next Y
'Next
'xxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xx
'Sort Arrays Sort Arrays
For q = 1 To 52 * Decks
CD(q, 1) = Random(q)
CD(q, 2) = UNSH(q)
Next
'XXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXX
Cols = 2 'Two columns used because I have not figured out
'yet how to convert a two dimentional array to
'a one dimentional array. Anyway it works
Rows = Decks * 52
'Sort the 2-d array To be used to sort the cards based on one deck
'CD(J,1) IS THE RANDOM ARRAY
'CD(J,2) Is the deck of sorted cards that are resorted according
'to the random set of numbers CD(J,1)
For i = 1 To Rows
For j = 1 To Rows 'For example rows 1 to 52
If CD(j, 1) > CD(j + 1, 1) Then 'If CD(1,1)> CD(2,1)
For X = 1 To Cols
temp = CD(j, X) 'TEMP = CD(1,2)
CD(j, X) = CD(j + 1, X) 'CD(1,1) = CD(2,2)
CD(j + 1, X) = temp 'CD(2,1) = CD(1,2)
Next X
End If
Next j
Next i
Print Sorted; result
For k = 1 To Decks * 52
Print CD(k, 1) & " " & CD(k, 2) 'CD(K, 1) Row of 52 sorted
'numbers from 1 to 52
'CD(K, 2) of shuffled cards
'Some reason first row value
' is 0,0 It changed after I
'added commentary and removed
'commented code.
Next
Cards(k, 2) = CD(k, 2) 'renamed randomized deck of cards
'Would like to save CD(q,2) randomized deck
'Would like to clear the memory of the two arrays
'Would like to be able to 'call' the randomized
'deck Cards(k,2)back into memory in another click event
'The reason to save it by putting the code in a module,
'is to be able to consider it as a 'subroutine'
'This way all the subroutines can be in a module and
'called as necessary
'The skeleton of the 'subroutine' can be a module for
'other subroutines, not necessarily an array
'The first row is always 0,0. I know that there is a
'way to eliminate 0,0, but it escapes me. Would like
'some help here
'Sample of 6 rows
'0,0 ????
'1,3 CD(K,1), Cards(K,2)
'2,10
'3,5
'4,10
'5,11
End Sub
'XXXXXXXXXXXXXXXXXXXXXXXXX
Public Sub mnuShuffle_Click()
' The program generates Random numbers in increments of 52
' The number of decks is set at 1
' The program produces an array of cards for an unsorted, and
' unshuffled deck example 2,2,2,2 4,4,4,4
' The number of cards with a '2' value depends on the number
' of decks
Dim UNSH(312) As Integer 'unshuffled, sorted deck
'( 1 to 6 decks)
Dim Random(312) As Integer ' A set of random non repeating
' numbers in increments 0f 52
Dim temp As Integer
Dim CD(312, 2) As Integer 'Final generated deck, sorted
' according to random set
Dim Cards(312, 2) As Integer ' Just renamed cd(312,2)
'Note, the arrays are variable, but I made it constant 312,2
' since program will not go past the number of decks used.
' It should be noted that the 0,2 is avoided
'-------------------------
Decks = 1 'temporary input Actually there is a txt box
X = 2 ' Value of the first cards, in this case 2,2,2,2
' If decks = 2 then one would see 2,2,2,2,2,2,2,2
If Decks = 1 Then ' If decks = 1 then generate unshuffled
' deck first four cards with a value of 2
' Did not consider Y = 0
Y = 4 ' Last row of first 4 cards
End If
If Decks = 2 Then
Y = 8
End If
If Decks = 3 Then
Y = 12
End If
If Decks = 4 Then
Y = 16
End If
If Decks = 5 Then
Y = 20
End If
If Decks = 6 Then
Y = 24
End If
For Z = 1 To Y ' There are four cards with a value of 2
' in a deck
' First 4 cards of the unshuffled array
UNSH(Z) = X ' Unsh(1) = 2 Card value = 2 Row 1
Z = Z + 1
UNSH(Z) = X ' Unsh(2) = 2 Card value = 2 Row 2
Z = Z + 1
UNSH(Z) = X 'Unsh(2) = 2 Card value = 2 Row 3
Z = Z + 1
UNSH(Z) = X ' Unsh(2) = 2 Card value = 2 Row 4
Next Z
'-------------------------
X = 3 'value of the next card
If Decks = 1 Then
Y = 5 ' ' FIRST row of SECOND 4 cards
End If
If Decks = 2 Then
Y = 9
End If
If Decks = 3 Then
Y = 13
End If
If Decks = 4 Then
Y = 17
End If
If Decks = 5 Then
Y = 21
End If
If Decks = 6 Then
Y = 25
End If
For Z = Y To Y + Decks * 4 - 1 'Based on one deck
UNSH(Z) = X 'UNSH(5) = 3 ROW 5
Z = Z + 1
UNSH(Z) = X 'UNSH(6) = 3 ROW 6
Z = Z + 1
UNSH(Z) = X 'UNSH(7) = 3 ROW 7
Z = Z + 1
UNSH(Z) = X 'UNSH(8) = 3 ROW 8
Next Z
'-------------------------
X = 4 'value of card
If Decks = 1 Then ' Starting position (9)in a sorted deck of
' 52 cards
Y = 9
End If
If Decks = 2 Then
Y = 17
End If
If Decks = 3 Then
Y = 25
End If
If Decks = 4 Then
Y = 33
End If
If Decks = 5 Then
Y = 41
End If
If Decks = 6 Then
Y = 49
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'-------------------------
X = 5
If Decks = 1 Then
Y = 13
End If
If Decks = 2 Then
Y = 25
End If
If Decks = 3 Then
Y = 37
End If
If Decks = 4 Then
Y = 49
End If
If Decks = 5 Then
Y = 61
End If
If Decks = 6 Then
Y = 73
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'-------------------------
X = 6
If Decks = 1 Then
Y = 17
End If
If Decks = 2 Then
Y = 33
End If
If Decks = 3 Then
Y = 49
End If
If Decks = 4 Then
Y = 65
End If
If Decks = 5 Then
Y = 81
End If
If Decks = 6 Then
Y = 97
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'-------------------------
X = 7
If Decks = 1 Then
Y = 21
End If
If Decks = 2 Then
Y = 41
End If
If Decks = 3 Then
Y = 61
End If
If Decks = 4 Then
Y = 81
End If
If Decks = 5 Then
Y = 101
End If
If Decks = 6 Then
Y = 121
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'-------------------------
X = 8
If Decks = 1 Then
Y = 25
End If
If Decks = 2 Then
Y = 49
End If
If Decks = 3 Then
Y = 73
End If
If Decks = 4 Then
Y = 97
End If
If Decks = 5 Then
Y = 121
End If
If Decks = 6 Then
Y = 145
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'-------------------------
X = 9
If Decks = 1 Then
Y = 29
End If
If Decks = 2 Then
Y = 57
End If
If Decks = 3 Then
Y = 85
End If
If Decks = 4 Then
Y = 113
End If
If Decks = 5 Then
Y = 141
End If
If Decks = 6 Then
Y = 169
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'-------------------------
X = 10
If Decks = 1 Then
Y = 33
End If
If Decks = 2 Then
Y = 65
End If
If Decks = 3 Then
Y = 97
End If
If Decks = 4 Then
Y = 129
End If
If Decks = 5 Then
Y = 161
End If
If Decks = 6 Then
Y = 193
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'-------------------------
X = 10
If Decks = 1 Then
Y = 37
End If
If Decks = 2 Then
Y = 73
End If
If Decks = 3 Then
Y = 109
End If
If Decks = 4 Then
Y = 145
End If
If Decks = 5 Then
Y = 181
End If
If Decks = 6 Then
Y = 217
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'-------------------------
X = 10
If Decks = 1 Then
Y = 41
End If
If Decks = 2 Then
Y = 81
End If
If Decks = 3 Then
Y = 121
End If
If Decks = 4 Then
Y = 161
End If
If Decks = 5 Then
Y = 201
End If
If Decks = 6 Then
Y = 241
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'-------------------------
X = 10
If Decks = 1 Then
Y = 45
End If
If Decks = 2 Then
Y = 89
End If
If Decks = 3 Then
Y = 133
End If
If Decks = 4 Then
Y = 177
End If
If Decks = 5 Then
Y = 221
End If
If Decks = 6 Then
Y = 265
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
X = 11 'Ace value of 11 or 1 taken into
'in other code
If Decks = 1 Then
Y = 49
End If
If Decks = 2 Then
Y = 97
End If
If Decks = 3 Then
Y = 145
End If
If Decks = 4 Then
Y = 193
End If
If Decks = 5 Then
Y = 241
End If
If Decks = 6 Then
Y = 289
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'-------------------
'Generate Random Array for the deck DECK of 52 cards
L = 52 * Decks
For Y = 1 To L
POS = Int(Rnd() * (L - 1) + 1)
temp = UNSH(POS)
UNSH(POS) = UNSH(Y)
UNSH(Y) = temp
Next Y
'XXXXXXXXXXXXXXXXXXXXXXXXX
'
For Y = 1 To L 'Generate an sorted array from 1 to 52
' based for example on 52 cards
Random(Y) = Y
Next Y
' "dis-order" array randomly:
Randomize Timer
For Y = 1 To L
POS = Int(Rnd() * (L - 1) + 1) ' RANDOM NUMBER FROM 1 TO L
temp = Random(POS)
Random(POS) = Random(Y)
Random(Y) = temp
Next Y
'Next
'xxxxxxxxxxxxxxxxxxxxxxxxx
'Sort Arrays Sort Arrays
For q = 1 To 52 * Decks
CD(q, 1) = Random(q)
CD(q, 2) = UNSH(q)
Next
'XXXXXXXXXXXXXXXXXXXXXXXXX
Cols = 2 'Two columns used because I have not figured out
'yet how to convert a two dimentional array to
'a one dimentional array. Anyway it works
Rows = Decks * 52
'Sort the 2-d array To be used to sort the cards based on one deck
'CD(J,1) IS THE RANDOM ARRAY
'CD(J,2) Is the deck of sorted cards that are resorted according
'to the random set of numbers CD(J,1)
For i = 1 To Rows
For j = 1 To Rows 'For example rows 1 to 52
If CD(j, 1) > CD(j + 1, 1) Then 'If CD(1,1)> CD(2,1)
For X = 1 To Cols
temp = CD(j, X) 'TEMP = CD(1,2)
CD(j, X) = CD(j + 1, X) 'CD(1,1) = CD(2,2)
CD(j + 1, X) = temp 'CD(2,1) = CD(1,2)
Next X
End If
Next j
Next i
Print Sorted; result
For k = 1 To Decks * 52
Print CD(k, 1) & " " & CD(k, 2) 'CD(K, 1) Row of 52 sorted
'numbers from 1 to 52
'CD(K, 2) of shuffled cards
'Some reason first row value
' is 0,0 It changed after I
'added commentary and removed
'commented code.
Next
Cards(k, 2) = CD(k, 2) 'renamed randomized deck of cards
'Would like to save CD(q,2) randomized deck
'Would like to clear the memory of the two arrays
'Would like to be able to 'call' the randomized
'deck Cards(k,2)back into memory in another click event
'The reason to save it by putting the code in a module,
'is to be able to consider it as a 'subroutine'
'This way all the subroutines can be in a module and
'called as necessary
'The skeleton of the 'subroutine' can be a module for
'other subroutines, not necessarily an array
'The first row is always 0,0. I know that there is a
'way to eliminate 0,0, but it escapes me. Would like
'some help here
'Sample of 6 rows
'0,0 ????
'1,3 CD(K,1), Cards(K,2)
'2,10
'3,5
'4,10
'5,11
End Sub
Wow.
First things first -- you're going to have to start using variable names that mean something; X, Y, Z may be simple to you but, to others (and quite possibly to you when you come back to it in six months time), they are confusing.
But, here goes...
If you want to save the Cards array to a text file:
Open "MyCards.txt" for Output as #1 'OPEN A TEXT FILE TO WRITE TO
For k = 1 to Decks * 52 'LOOP THROUGH ALL ARRAY ELEMENTS
For a = 1 to 2
Print #1, Cards(k, a) & ","; 'WRITE ARRAY ELEMENT TO A FILE
Next a
Next k
Close #1 'SAVE AND CLOSE THE FILE
If you want to read back into the array:
Open "MyCards.txt" for Input as #1 'OPEN A TEXT FILE TO READ FROM
For k = 1 to Decks * 52 'LOOP THROUGH ALL ARRAY ELEMENTS
For a = 1 to 2
Input #1, Cards(k, a) & ","; 'WRITE ARRAY ELEMENT TO A FILE
Next a
Next k
Close #1 'CLOSE THE FILE
If you want to save the Cards array to memory, for use in other areas, place the following at the very beginning of the Form code (General/Declarations):
Public CD()
This will make the array, CD, available to every module/procedure/function/ etc. Now, after populating the Cards array, you can use:
CD() = Cards()
to copy your Cards array to your CD array. Note that, because I haven't put any element identifiers into the array (e.g. Cards(1, 1) = CD(1, 1)), the entire array is copied.
If you want to modularise your code, you should use Public declarations to allow all modules/forms/procedures/e tc to access each other. Private declarations, on the other hand, should be used for the code for control events, on forms:
[Module]
Public Sub myShuffleRoutine()
Public Sub mySaveRoutine()
Public Sub myLoadRoutine()
[Form]
Private Sub Command1_Click()
Private Sub Form_Load()
Private Sub Text1_Change()
HTH
J.
First things first -- you're going to have to start using variable names that mean something; X, Y, Z may be simple to you but, to others (and quite possibly to you when you come back to it in six months time), they are confusing.
But, here goes...
If you want to save the Cards array to a text file:
Open "MyCards.txt" for Output as #1 'OPEN A TEXT FILE TO WRITE TO
For k = 1 to Decks * 52 'LOOP THROUGH ALL ARRAY ELEMENTS
For a = 1 to 2
Print #1, Cards(k, a) & ","; 'WRITE ARRAY ELEMENT TO A FILE
Next a
Next k
Close #1 'SAVE AND CLOSE THE FILE
If you want to read back into the array:
Open "MyCards.txt" for Input as #1 'OPEN A TEXT FILE TO READ FROM
For k = 1 to Decks * 52 'LOOP THROUGH ALL ARRAY ELEMENTS
For a = 1 to 2
Input #1, Cards(k, a) & ","; 'WRITE ARRAY ELEMENT TO A FILE
Next a
Next k
Close #1 'CLOSE THE FILE
If you want to save the Cards array to memory, for use in other areas, place the following at the very beginning of the Form code (General/Declarations):
Public CD()
This will make the array, CD, available to every module/procedure/function/
CD() = Cards()
to copy your Cards array to your CD array. Note that, because I haven't put any element identifiers into the array (e.g. Cards(1, 1) = CD(1, 1)), the entire array is copied.
If you want to modularise your code, you should use Public declarations to allow all modules/forms/procedures/e
[Module]
Public Sub myShuffleRoutine()
Public Sub mySaveRoutine()
Public Sub myLoadRoutine()
[Form]
Private Sub Command1_Click()
Private Sub Form_Load()
Private Sub Text1_Change()
HTH
J.
ASKER
I tried first the simple code:
Since i did not need to save CD(k,1) I modified your code
I ran the program and opened Cards.txt with note pad
The print onto the form still has the same format as shown above
CD(k,1) and cd(k,2)
I checked thru Windows Explorer that indeed the txt file cards.txt was in the correct path
How does one eliminate the 0,0 row?
This was the result:
0,0,0,0,0,0,0,0, etc
Open "c:\program files\Microsoft Visual Studio\vb98\blackjack9\dar thmouth\ca rds.txt" _
For Output As #1 'OPEN A TEXT FILE TO WRITE TO
For k = 1 To Decks * 52 'LOOP THROUGH ALL ARRAY ELEMENTS
' For A = 1 To 2
Print #1, Cards(k, 2) & ","; 'WRITE ARRAY ELEMENT TO A FILE
' Next A
Next k
Close #1 'SAVE AND CLOSE THE FILE
Since i did not need to save CD(k,1) I modified your code
I ran the program and opened Cards.txt with note pad
The print onto the form still has the same format as shown above
CD(k,1) and cd(k,2)
I checked thru Windows Explorer that indeed the txt file cards.txt was in the correct path
How does one eliminate the 0,0 row?
This was the result:
0,0,0,0,0,0,0,0, etc
Open "c:\program files\Microsoft Visual Studio\vb98\blackjack9\dar
For Output As #1 'OPEN A TEXT FILE TO WRITE TO
For k = 1 To Decks * 52 'LOOP THROUGH ALL ARRAY ELEMENTS
' For A = 1 To 2
Print #1, Cards(k, 2) & ","; 'WRITE ARRAY ELEMENT TO A FILE
' Next A
Next k
Close #1 'SAVE AND CLOSE THE FILE
You have Jim's code slightly wrong. The Print statement should have an "a" not a 2
Print #1, Cards(k, a) & ","; 'WRITE ARRAY ELEMENT TO A FILE
The reason you have zeros is that the array is empty when you tested it I suspect. You need to run your population code against it.
ASKER
I ran the program and the two arrays printed out on the form. Thus, would it not save it also, since it is in memory?
The reason I had changed it to a '2' instead of an 'A' is because I only want to save theCards(k,2) Array.
gonzal13(joe)
The reason I had changed it to a '2' instead of an 'A' is because I only want to save theCards(k,2) Array.
gonzal13(joe)
ASKER
I tested the save coding with 'a' instead of 2 and I get the same in the cards.txt
gonzal13(joe)
gonzal13(joe)
If your code is returning 0s, that is because your array contains 0s. This could be due to where you are calling the save routine from.
If the Cards array is DIM'ed inside a Sub/Function, it is only available to that Sub/Function. It will not be available to another Sub/Function, unless you declare the Cards array as Public.
So, you have two choices:
1. Place that small block of code in the same sub/function as the code where you put the values into the array.
2. Make the Cards array public, by putting:
Public Cards()
at the very beginning of the code (the General/Declarations section). If that line is there, your Cards array will
be passed to all Subs/Functions.
If you are trying to call the Save routine when the user clicks a button, for example, you must go with option 2.
HTH
J.
If the Cards array is DIM'ed inside a Sub/Function, it is only available to that Sub/Function. It will not be available to another Sub/Function, unless you declare the Cards array as Public.
So, you have two choices:
1. Place that small block of code in the same sub/function as the code where you put the values into the array.
2. Make the Cards array public, by putting:
Public Cards()
at the very beginning of the code (the General/Declarations section). If that line is there, your Cards array will
be passed to all Subs/Functions.
If you are trying to call the Save routine when the user clicks a button, for example, you must go with option 2.
HTH
J.
I'm going to suggest something that will cause you no end of errors in the short term but will allow you and us to resolve some of these errors far more quickly.
Make a copy of your project and, in that copy, at the very top of all Form and Module code, place this command:
Option Explicit
This command makes Visual Basic only allow variables that have been declared before they are used. For example:
Option Explicit
Private Sub mySubroutine()
a = 5
b = 6
MsgBox (a + b)
End Sub
will return an error, whereas:
Option Explicit
Private Sub mySubroutine()
Dim a as Integer '<-- VARIABLE DECLARATION
Dim b as Integer
a = 5
b = 6
MsgBox (a + b)
End Sub
will run, without error.
The major benefit of this is that, when you run your program, if your Cards array has not been made available to your save routine, it will not allow the code to execute.
It's a big change but, I think, a necessary one -- all people who are learning Visual Basic should use Option Explicit, to allow them to track declaration errors.
HTH
J.
(BTW -- Do you know any other languages? Maybe we can put the Public/Private thing into perspective with examples from that...)
Make a copy of your project and, in that copy, at the very top of all Form and Module code, place this command:
Option Explicit
This command makes Visual Basic only allow variables that have been declared before they are used. For example:
Option Explicit
Private Sub mySubroutine()
a = 5
b = 6
MsgBox (a + b)
End Sub
will return an error, whereas:
Option Explicit
Private Sub mySubroutine()
Dim a as Integer '<-- VARIABLE DECLARATION
Dim b as Integer
a = 5
b = 6
MsgBox (a + b)
End Sub
will run, without error.
The major benefit of this is that, when you run your program, if your Cards array has not been made available to your save routine, it will not allow the code to execute.
It's a big change but, I think, a necessary one -- all people who are learning Visual Basic should use Option Explicit, to allow them to track declaration errors.
HTH
J.
(BTW -- Do you know any other languages? Maybe we can put the Public/Private thing into perspective with examples from that...)
ASKER
How about Spanish=) ????
I loved Basic when the Apples came out. I spent hours on the computer. My wife became a computer widow. She is now also, since I would rather be on the computer helping on Experts - Exchange and learning VB6
What I suggest is to copy and paste the program in vb6 and run it. The output prints out on a form as shown with the sample. The program has been checked many times after I finshed it and by hand to insure its accuracy.
Meanwhile I will look at your comments
Joe
I loved Basic when the Apples came out. I spent hours on the computer. My wife became a computer widow. She is now also, since I would rather be on the computer helping on Experts - Exchange and learning VB6
What I suggest is to copy and paste the program in vb6 and run it. The output prints out on a form as shown with the sample. The program has been checked many times after I finshed it and by hand to insure its accuracy.
Meanwhile I will look at your comments
Joe
ASKER
Oh, I hope that =) means smile !!
ASKER
Rogue Solutions
When you say you want to Save the arrays - what do you mean? Into a text file? Yes into a text file.
You can set your array bottom end values in two ways.
You can either put "Option Base 1" at the top of the module in which case all arrays declared will start with a 1.
At this moment it is declared in a click event. I would like to call it from a module eventually in this question.
or
Declare arrays as Cards(1 To 312, 1 To 2) This has been done.
In this case the "1 To" bit sets the lower bound of both dimensions of the array.
Still I get in the print out with the first row 0,0. This did not happen until I reworked the code to be a bit clearer to the Experts.
Select Case Decks
Case 1 : Y = 49
Case 2 : Y = 97
Case 3 : Y = 145
Case 4 : Y = 193
Case 5 : Y = 241
Case 6: Y = 289
End Select
Actually Y must vary from 4, 8, 12 etc because if there is one deck then there would be four 2s
two decks eight 2s etc
Sorry, but I don't think
Subprograma Público mnúBarajadura_tecleo()
...
Subprograma Del Final
will work =) :) ;) :-)
Looking over your comments again, in particular:
>> I ran the program and the two arrays printed out on the form. Thus, would it not save it also, since it is in
memory?
I am certain your problem lies with the fact that your Cards array is not Public. The following declarations:
Dim CD(312, 2) As Integer
Dim Cards(312, 2) As Integer
are _inside_ the
Private Sub mnuShuffle_Click()
...
End Sub
statements. This means they are declared _inside_ that Sub. It also means that they Private to that Sub and, as such are not available _outside_ that Sub.
What this means is that, when the End Sub statement is reached, all values within those arrays are lost (the memory addresses are reallocated).
My first guess is that your desired program structure is (the actual procedure names may be wrong):
1. Private Sub mnuShuffle_Click() - shuffles and populates the Cards() and CD() arrays
2. Private Sub btnSave_Click() - saves the shuffled CD() array to a text file
3. Private Sub btnOpen_Click() - reads the text file back into the CD() array
My second guess is that this statement:
Dim CD(312, 2) As Integer
exists in all three of the procedures, I listed in my first guess.
First step is to eliminate the problem in my second guess -- remove that line from all procedures. By using this line, you are reinitialising the CD() array (and resetting all values contained in it to 0).
Second step is to recreate the CD() array, somewhere else, and allow all procedures to use it, thus implementing the solution to my first guess at your requirements -- I assume all your code is inside one Form. Open the form's code and, from the two drop-down lists at the top, choose General and Declarations. You should now be able to enter code, before the very first Sub. Enter the following:
Public CD(1 To 312, 1 To 2) As Integer
Now the CD() array is DIM'ed, publicly, and is available to all following procedures -- you never need to use
Dim CD(312, 2) As Integer ever again.
Now, with the Dim CD(312, 2) As Integer statements removed and the Public CD(312, 2) in place, run your program again.
Let me know what happens...
J.
Subprograma Público mnúBarajadura_tecleo()
...
Subprograma Del Final
will work =) :) ;) :-)
Looking over your comments again, in particular:
>> I ran the program and the two arrays printed out on the form. Thus, would it not save it also, since it is in
memory?
I am certain your problem lies with the fact that your Cards array is not Public. The following declarations:
Dim CD(312, 2) As Integer
Dim Cards(312, 2) As Integer
are _inside_ the
Private Sub mnuShuffle_Click()
...
End Sub
statements. This means they are declared _inside_ that Sub. It also means that they Private to that Sub and, as such are not available _outside_ that Sub.
What this means is that, when the End Sub statement is reached, all values within those arrays are lost (the memory addresses are reallocated).
My first guess is that your desired program structure is (the actual procedure names may be wrong):
1. Private Sub mnuShuffle_Click() - shuffles and populates the Cards() and CD() arrays
2. Private Sub btnSave_Click() - saves the shuffled CD() array to a text file
3. Private Sub btnOpen_Click() - reads the text file back into the CD() array
My second guess is that this statement:
Dim CD(312, 2) As Integer
exists in all three of the procedures, I listed in my first guess.
First step is to eliminate the problem in my second guess -- remove that line from all procedures. By using this line, you are reinitialising the CD() array (and resetting all values contained in it to 0).
Second step is to recreate the CD() array, somewhere else, and allow all procedures to use it, thus implementing the solution to my first guess at your requirements -- I assume all your code is inside one Form. Open the form's code and, from the two drop-down lists at the top, choose General and Declarations. You should now be able to enter code, before the very first Sub. Enter the following:
Public CD(1 To 312, 1 To 2) As Integer
Now the CD() array is DIM'ed, publicly, and is available to all following procedures -- you never need to use
Dim CD(312, 2) As Integer ever again.
Now, with the Dim CD(312, 2) As Integer statements removed and the Public CD(312, 2) in place, run your program again.
Let me know what happens...
J.
ASKER
JimBob:
I sent you an e-mail on a subject outside of experts exchange topics
Also can you create a file called Cards.txt under the C:\ prompt. I will do the same.
This way you can as I can test the code
Change #1 5 Nov 2004
1. I am certain your problem lies with the fact that your Cards array is not Public.
2. I would like to start with the save code immediately after the print routine to avoid confusion for the moment. Once we get the save code working the we can continue with
A “subroutine” in the form of a call from the module.
3. I also in the Dim statements put in the boundries.
4. I also could not get Option Base 1 statement to work .It came back with an error. I am trying to remove the first row which always has 0,0
__________________________ __________ __________ __________ __________ __________ __________ _________
Dim UNSH(1 To 312) As Integer 'unshuffled, sorted deck
'( 1 to 6 decks)
Dim Random(1 To 312) As Integer ' A set of random non repeating
' numbers in increments 0f 52 {CHANGE 1}
Dim temp As Integer
Dim CD(1 To 312, 1 To 2) As Integer 'Final generated deck, sorted {CHANGE 1}
' according to random set
Dim Cards(1 To 312, 1 To 2) As Integer ' Just renamed cd(312,2){CHANGE 1}
__________________________ __________ __________ __________ __________ __________ __________ __________ _
gonzal13(joe)
I sent you an e-mail on a subject outside of experts exchange topics
Also can you create a file called Cards.txt under the C:\ prompt. I will do the same.
This way you can as I can test the code
Change #1 5 Nov 2004
1. I am certain your problem lies with the fact that your Cards array is not Public.
2. I would like to start with the save code immediately after the print routine to avoid confusion for the moment. Once we get the save code working the we can continue with
A “subroutine” in the form of a call from the module.
3. I also in the Dim statements put in the boundries.
4. I also could not get Option Base 1 statement to work .It came back with an error. I am trying to remove the first row which always has 0,0
__________________________
Dim UNSH(1 To 312) As Integer 'unshuffled, sorted deck
'( 1 to 6 decks)
Dim Random(1 To 312) As Integer ' A set of random non repeating
' numbers in increments 0f 52 {CHANGE 1}
Dim temp As Integer
Dim CD(1 To 312, 1 To 2) As Integer 'Final generated deck, sorted {CHANGE 1}
' according to random set
Dim Cards(1 To 312, 1 To 2) As Integer ' Just renamed cd(312,2){CHANGE 1}
__________________________
gonzal13(joe)
ASKER
I tried using Option Base 1 and it came back with an error. I wanted to remove from the array print out 0,0.
I also tried for example cards(1 to 312, 1, to 2) supposedly it is equivalent to the above. Thus far it did nothing for the print out. I shall look at it more deeply, since it was not happening prior to pasting the code for review.
I also tried for example cards(1 to 312, 1, to 2) supposedly it is equivalent to the above. Thus far it did nothing for the print out. I shall look at it more deeply, since it was not happening prior to pasting the code for review.
What error occured with Option Base 1?
What happened when you made the CD/Cards arrays public? With Public CD(312.2) as Integer?
J.
What happened when you made the CD/Cards arrays public? With Public CD(312.2) as Integer?
J.
ASKER
'(CHANGE 2)
'Option Base 1' "Compile error Invalid inside procedure"
'Public CD(1 To 312, 1 To 2) in click event " Invalid attribute in sub or function"
'In a module the following was placed:
'Global Cards() 'The () says 'Unknown Size' Global can be used anywhere
'Global UNSH(1 To 312 ) As Integer 'unshuffled, sorted deck
'( 1 to 6 decks)
'Global Random(1 To 312) As Integer
'The Respective DIM statements in the click evnt were changed to comments.
'The program still worked.
'Is the format above acceptable?
Oh I appreciate all the help I can get. With 'Unlimited' points, it makes life easy.
I realized a couple days ago, that most of my free time was commenting on questions. For me it is a shear delight
to help people. Been very active this past year.
Anyway, I started to neglect the project. I shall for the near future to answer questions until I get to 3000 points in one month so so as to not jeoperdize my standing.
I am putting into the top of the code 'change1,2,3, etc' so as to minimize confusion.
Joe
gonzal13
as not to jeoperdize my standing
'Option Base 1' "Compile error Invalid inside procedure"
'Public CD(1 To 312, 1 To 2) in click event " Invalid attribute in sub or function"
'In a module the following was placed:
'Global Cards() 'The () says 'Unknown Size' Global can be used anywhere
'Global UNSH(1 To 312 ) As Integer 'unshuffled, sorted deck
'( 1 to 6 decks)
'Global Random(1 To 312) As Integer
'The Respective DIM statements in the click evnt were changed to comments.
'The program still worked.
'Is the format above acceptable?
Oh I appreciate all the help I can get. With 'Unlimited' points, it makes life easy.
I realized a couple days ago, that most of my free time was commenting on questions. For me it is a shear delight
to help people. Been very active this past year.
Anyway, I started to neglect the project. I shall for the near future to answer questions until I get to 3000 points in one month so so as to not jeoperdize my standing.
I am putting into the top of the code 'change1,2,3, etc' so as to minimize confusion.
Joe
gonzal13
as not to jeoperdize my standing
>> "Compile error Invalid inside procedure"..." Invalid attribute in sub or function"
These errors both mean the same thing. You cannot put these between Sub/End Sub. e.g.:
Sub DoThis()
Option Base 1
Public CD(312, 2) As Integer
'...YOUR CODE HERE
End Sub
will never ever ever work. You need:
Option Base 1
Public CD(312, 2) As Integer
Sub DoThis()
'...YOUR CODE HERE
End Sub
and then those errors will go away. Code written outside a sub is called a Global Declaration.
You shouldn't mix Global with Public; they pretty much do the same thing and its 'preferential' to use Public.
Try this, as an exercise:
1. Create a new module; call it GLOBAL.BAS
2. Inside the module, do not write any subs or functions.
3. Place every public/global declaration in that module
It should look something like this:
-------------------Beginni ng of module-------------------- ---------
Public Cards(1 To 312, 1 To 2) As Integer
Public CD(1 To 312, 1 To 2) As Integer
Public UNSH(1 To 312) As Integer
Public Random(1 To 312) As Integer
'...ETC FOR ALL THE PUBLIC/GLOBALS YOU NEED
-----------------------End of module-------------------- ---------- --
4. Remove all public/global declarations (not functions/subs) from your existing code.
5. (optional -- _will_ cause errors initially) Place Option Explicit at the very top of your code (not inside a sub).
This will keep all your globals in one place.
J.
These errors both mean the same thing. You cannot put these between Sub/End Sub. e.g.:
Sub DoThis()
Option Base 1
Public CD(312, 2) As Integer
'...YOUR CODE HERE
End Sub
will never ever ever work. You need:
Option Base 1
Public CD(312, 2) As Integer
Sub DoThis()
'...YOUR CODE HERE
End Sub
and then those errors will go away. Code written outside a sub is called a Global Declaration.
You shouldn't mix Global with Public; they pretty much do the same thing and its 'preferential' to use Public.
Try this, as an exercise:
1. Create a new module; call it GLOBAL.BAS
2. Inside the module, do not write any subs or functions.
3. Place every public/global declaration in that module
It should look something like this:
-------------------Beginni
Public Cards(1 To 312, 1 To 2) As Integer
Public CD(1 To 312, 1 To 2) As Integer
Public UNSH(1 To 312) As Integer
Public Random(1 To 312) As Integer
'...ETC FOR ALL THE PUBLIC/GLOBALS YOU NEED
-----------------------End
4. Remove all public/global declarations (not functions/subs) from your existing code.
5. (optional -- _will_ cause errors initially) Place Option Explicit at the very top of your code (not inside a sub).
This will keep all your globals in one place.
J.
ASKER
Thanks for the lesson. I will try today the suggestions.
Joe
Joe
ASKER
JimboMcGee
'xxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxx
'Change 3
'Opened a module called Global
'Type Option base 1
'Pasted all Dim statements and replaced DIM with Global
'Ran the program and no error messages
'In order to test the save code, the code in the Module was made as comments
'In the Shuffle option, the code
'Open "c:\program files\Microsoft Visual Studio\vb98\blackjack9\dar thmouth\ca rds.txt" _
'For Output As #1 was replaced with the code below.
'This way a repondant can simply copy the whole code and paste it in vB6 and run it.
'The card.txt file was made in C:\
'Open "C:\cards.txt" For Output As #1
'xxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxx
'xxxxxxxxxxxxxxxxxxxxxxxxx
'Change 3
'Opened a module called Global
'Type Option base 1
'Pasted all Dim statements and replaced DIM with Global
'Ran the program and no error messages
'In order to test the save code, the code in the Module was made as comments
'In the Shuffle option, the code
'Open "c:\program files\Microsoft Visual Studio\vb98\blackjack9\dar
'For Output As #1 was replaced with the code below.
'This way a repondant can simply copy the whole code and paste it in vB6 and run it.
'The card.txt file was made in C:\
'Open "C:\cards.txt" For Output As #1
'xxxxxxxxxxxxxxxxxxxxxxxxx
ASKER
Triad several versions of the code below to first save the program from within the click event.
'Open "C:\Cards.txt" For Output As #1
'For K = 1 To Decks * 52
'Put #1, , DealersDeck(k) ' was cd(k,2)
'Next K
'Close #1
'Open "C:\Cards.txt" For Output As #1
'For K = 1 To Decks * 52
'Put #1, , DealersDeck(k) ' was cd(k,2)
'Next K
'Close #1
I am assuming that, in your code, the code is not commented out...
Use
Print #1, DealersDeck(K) & ",";
instead of Put #1, if you want to save comma-delimeted...
Use
Input #1, thisVariable
to read it in.
Use
Print #1, DealersDeck(K) & ",";
instead of Put #1, if you want to save comma-delimeted...
Use
Input #1, thisVariable
to read it in.
ASKER
confused:
Slightly confunsing:
Remember I am a frustrated novice trying to understand what is to me to be
A simple set of codes.
Would you please mark up the code based on ‘DealersDeck?’
Open "C:\Cards.txt" For Output As #1
For K = 1 To Decks * 52
Input #1, DealersDeck(K) 'Bad File mode. I kept for the moment the code in the Module commented out
Next K
Close #1
I would suggest that you first make under c: a file called Cards.txt
Also need to make a 'mnu' named 'private Sub mnuTempSaveShuffledDeck'
Now paste the complete code and see the error.
Thus you can modify the Save code until it works.
LATEST SAVE SHUFFLED DECK CODE
__________________________ _____
Private Sub mnuTempSaveShuffledDeck_Cl ick()
' The program generates Random numbers in increments of 52
' The number of decks is set at 1
' The program produces an array of cards for an unsorted, and
' unshuffled deck example 2,2,2,2 4,4,4,4
' The number of cards with a '2' value depends on the number
' of decks
' xxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxx
'{CHANGE 1} Nov 5
'1. I am certain your problem lies with the fact that your Cards array
'is not Public.
'2. I would like to start with the save code immediately after the
'print routine to avoid confusion for the moment. Once we get the
'save code working the we can continue with a "subroutine" in the form
'of a call from the moduleand the other changes
'3. I also in the Dim statements put in the boundries.
'4. I also could not get Option Base 1 statement to work .It came back
'with an error. I am trying to remove the first row which always has 0,0
'5. The array can vary from 52 to 312 Thus it will need to be defined later
'xxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx x
'(CHANGE 2)
'Option Base 1 Compile error Invalid inside procedure
'Public CD(1 To 312, 1 To 2) Invalid attribute in sub or function
'In a module the following was placed:
'Global Cards() 'The () says 'Unknown Size' Global can be used anywhere
'Global UNSH(1 To 312) As Integer 'unshuffled, sorted deck
'( 1 to 6 decks)
'Global Random(1 To 312) As Integer
'The Respective DIM statements in the click evnt were changed to comments.
'The program still worked.
'Is the format above acceptable?
'xxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxx
'Change 3
'Opened a module called Global
'Type Option base 1
'Pasted all Dim statements and replaced DIM with Global
'Ran the program and no error messages
'In order to test the save code, the code in the Module was made as comments
'In the Shuffle option, the code
'Open "c:\program files\Microsoft Visual Studio\vb98\blackjack9\dar thmouth\ca rds.txt" _
'For Output As #1 was replaced with the code below.
'This way a repondant can simply copy the whole code and paste it in vB6 and run it.
'The card.txt file was made in C:\
'Open "C:\cards.txt" For Output As #1
'xxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxx
Dim UNSH(1 To 312) As Integer 'unshuffled, sorted deck
'( 1 to 6 decks)
Dim Random(1 To 312) As Integer ' A set of random non repeating
' numbers in increments 0f 52 {CHANGE 1}
Dim temp As Integer
Dim CD(1 To 312, 1 To 2) As Integer 'Final generated deck, sorted {CHANGE 1}
' according to random set
Dim Cards(1 To 312, 1 To 2) As Integer ' Just renamed cd(312,2){CHANGE 1}
Dim DealersDeck(312) As Integer
'Note, the arrays are variable, but I made it constant 312,2
' since program will not go past the number of decks used.
' It should be noted that the 0,2 is avoided
'------------------------- ---------- ---------- ---------- --
' Added ShuffledDeck(1 to 312)
Decks = 1 'temporary input Actually there is a txt box
X = 2 ' Value of the first cards, in this case 2,2,2,2
' If decks = 2 then one would see 2,2,2,2,2,2,2,2
If Decks = 1 Then ' If decks = 1 then generate unshuffled
' deck first four cards with a value of 2
' Did not consider Y = 0
Y = 4 ' Last row of first 4 cards
End If
If Decks = 2 Then
Y = 8
End If
If Decks = 3 Then
Y = 12
End If
If Decks = 4 Then
Y = 16
End If
If Decks = 5 Then
Y = 20
End If
If Decks = 6 Then
Y = 24
End If
For Z = 1 To Y ' There are four cards with a value of 2
' in a deck
' First 4 cards of the unshuffled array
UNSH(Z) = X ' Unsh(1) = 2 Card value = 2 Row 1
Z = Z + 1
UNSH(Z) = X ' Unsh(2) = 2 Card value = 2 Row 2
Z = Z + 1
UNSH(Z) = X 'Unsh(2) = 2 Card value = 2 Row 3
Z = Z + 1
UNSH(Z) = X ' Unsh(2) = 2 Card value = 2 Row 4
Next Z
'------------------------- ---------- ---------- ---------- ----
X = 3 'value of the next card
If Decks = 1 Then
Y = 5 ' ' FIRST row of SECOND 4 cards
End If
If Decks = 2 Then
Y = 9
End If
If Decks = 3 Then
Y = 13
End If
If Decks = 4 Then
Y = 17
End If
If Decks = 5 Then
Y = 21
End If
If Decks = 6 Then
Y = 25
End If
For Z = Y To Y + Decks * 4 - 1 'Based on one deck
UNSH(Z) = X 'UNSH(5) = 3 ROW 5
Z = Z + 1
UNSH(Z) = X 'UNSH(6) = 3 ROW 6
Z = Z + 1
UNSH(Z) = X 'UNSH(7) = 3 ROW 7
Z = Z + 1
UNSH(Z) = X 'UNSH(8) = 3 ROW 8
Next Z
'------------------------- ---------- ---------- ---------- --
X = 4 'value of card
If Decks = 1 Then ' Starting position (9)in a sorted deck of
' 52 cards
Y = 9
End If
If Decks = 2 Then
Y = 17
End If
If Decks = 3 Then
Y = 25
End If
If Decks = 4 Then
Y = 33
End If
If Decks = 5 Then
Y = 41
End If
If Decks = 6 Then
Y = 49
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'------------------------- ---------- ---------- ---------- --
X = 5
If Decks = 1 Then
Y = 13
End If
If Decks = 2 Then
Y = 25
End If
If Decks = 3 Then
Y = 37
End If
If Decks = 4 Then
Y = 49
End If
If Decks = 5 Then
Y = 61
End If
If Decks = 6 Then
Y = 73
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'------------------------- ---------- ---------- ---------- --
X = 6
If Decks = 1 Then
Y = 17
End If
If Decks = 2 Then
Y = 33
End If
If Decks = 3 Then
Y = 49
End If
If Decks = 4 Then
Y = 65
End If
If Decks = 5 Then
Y = 81
End If
If Decks = 6 Then
Y = 97
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'------------------------- ---------- ---------- ---------- --
X = 7
If Decks = 1 Then
Y = 21
End If
If Decks = 2 Then
Y = 41
End If
If Decks = 3 Then
Y = 61
End If
If Decks = 4 Then
Y = 81
End If
If Decks = 5 Then
Y = 101
End If
If Decks = 6 Then
Y = 121
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'------------------------- ---------- ---------- ---------- --
X = 8
If Decks = 1 Then
Y = 25
End If
If Decks = 2 Then
Y = 49
End If
If Decks = 3 Then
Y = 73
End If
If Decks = 4 Then
Y = 97
End If
If Decks = 5 Then
Y = 121
End If
If Decks = 6 Then
Y = 145
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'------------------------- ---------- ---------- ---------- --
X = 9
If Decks = 1 Then
Y = 29
End If
If Decks = 2 Then
Y = 57
End If
If Decks = 3 Then
Y = 85
End If
If Decks = 4 Then
Y = 113
End If
If Decks = 5 Then
Y = 141
End If
If Decks = 6 Then
Y = 169
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'------------------------- ---------- ---------- ---------- --
X = 10
If Decks = 1 Then
Y = 33
End If
If Decks = 2 Then
Y = 65
End If
If Decks = 3 Then
Y = 97
End If
If Decks = 4 Then
Y = 129
End If
If Decks = 5 Then
Y = 161
End If
If Decks = 6 Then
Y = 193
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'------------------------- ---------- ---------- ---------- --
X = 10
If Decks = 1 Then
Y = 37
End If
If Decks = 2 Then
Y = 73
End If
If Decks = 3 Then
Y = 109
End If
If Decks = 4 Then
Y = 145
End If
If Decks = 5 Then
Y = 181
End If
If Decks = 6 Then
Y = 217
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'------------------------- ---------- ---------- ---------- --
X = 10
If Decks = 1 Then
Y = 41
End If
If Decks = 2 Then
Y = 81
End If
If Decks = 3 Then
Y = 121
End If
If Decks = 4 Then
Y = 161
End If
If Decks = 5 Then
Y = 201
End If
If Decks = 6 Then
Y = 241
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'------------------------- ---------- ---------- ---------- --
X = 10
If Decks = 1 Then
Y = 45
End If
If Decks = 2 Then
Y = 89
End If
If Decks = 3 Then
Y = 133
End If
If Decks = 4 Then
Y = 177
End If
If Decks = 5 Then
Y = 221
End If
If Decks = 6 Then
Y = 265
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
X = 1 'Ace value of 11 or 1
If Decks = 1 Then
Y = 49
End If
If Decks = 2 Then
Y = 97
End If
If Decks = 3 Then
Y = 145
End If
If Decks = 4 Then
Y = 193
End If
If Decks = 5 Then
Y = 241
End If
If Decks = 6 Then
Y = 289
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'-------------------
'Generate Random Array for the deck DECK of 52 cards
L = 52 * Decks
For Y = 1 To L
POS = Int(Rnd() * (L - 1) + 1)
temp = UNSH(POS)
UNSH(POS) = UNSH(Y)
UNSH(Y) = temp
Next Y
'XXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXXX
'
For Y = 1 To L 'Generate an sorted array from 1 to L
' based for example on 52 cards
Random(Y) = Y
Next Y
' "dis-order" array randomly:
Randomize Timer
For Y = 1 To L
POS = Int(Rnd() * (L - 1) + 1) ' RANDOM NUMBER FROM 1 TO L
temp = Random(POS)
Random(POS) = Random(Y)
Random(Y) = temp
Next Y
'Next
'xxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xx
'Sort Arrays Sort Arrays
For Q = 1 To 52 * Decks
CD(Q, 1) = Random(Q)
CD(Q, 2) = UNSH(Q)
Next
'XXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXX
Cols = 2 'Two columns used because I have not figured out
'yet how to convert a two dimentional array to
'a one dimentional array. Anyway it works
Rows = Decks * 52
'Sort the 2-d array To be used to sort the cards based on one deck
'CD(J,1) IS THE RANDOM ARRAY
'CD(J,2) Is the deck of sorted cards that are resorted according
'to the random set of numbers CD(J,1)
For I = 1 To Rows
For j = 1 To Rows 'For example rows 1 to 52
If CD(j, 1) > CD(j + 1, 1) Then 'If CD(1,1)> CD(2,1)
For X = 1 To Cols
temp = CD(j, X) 'TEMP = CD(1,2)
CD(j, X) = CD(j + 1, X) 'CD(1,1) = CD(2,2)
CD(j + 1, X) = temp 'CD(2,1) = CD(1,2)
Next X
End If
Next j
Next I
For K = 1 To Decks * 52 'populate the new array
DealersDeck(K) = CD(K, 2)
Next K
Print Sorted; result
For K = 1 To Decks * 52
Print DealersDeck(K) 'numbers from 1 to L
'CD(K, 2) of shuffled cards
'Some reason first row value
' is 0,0 It changed after I
'added commentary and removed
'commented code.
Next K
Open "C:\Cards.txt" For Output As #1
For K = 1 To Decks * 52
Input #1, DealersDeck(K)
Next K
Close #1
End Sub
XXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXX
Slightly confunsing:
Remember I am a frustrated novice trying to understand what is to me to be
A simple set of codes.
Would you please mark up the code based on ‘DealersDeck?’
Open "C:\Cards.txt" For Output As #1
For K = 1 To Decks * 52
Input #1, DealersDeck(K) 'Bad File mode. I kept for the moment the code in the Module commented out
Next K
Close #1
I would suggest that you first make under c: a file called Cards.txt
Also need to make a 'mnu' named 'private Sub mnuTempSaveShuffledDeck'
Now paste the complete code and see the error.
Thus you can modify the Save code until it works.
LATEST SAVE SHUFFLED DECK CODE
__________________________
Private Sub mnuTempSaveShuffledDeck_Cl
' The program generates Random numbers in increments of 52
' The number of decks is set at 1
' The program produces an array of cards for an unsorted, and
' unshuffled deck example 2,2,2,2 4,4,4,4
' The number of cards with a '2' value depends on the number
' of decks
' xxxxxxxxxxxxxxxxxxxxxxxxxx
'{CHANGE 1} Nov 5
'1. I am certain your problem lies with the fact that your Cards array
'is not Public.
'2. I would like to start with the save code immediately after the
'print routine to avoid confusion for the moment. Once we get the
'save code working the we can continue with a "subroutine" in the form
'of a call from the moduleand the other changes
'3. I also in the Dim statements put in the boundries.
'4. I also could not get Option Base 1 statement to work .It came back
'with an error. I am trying to remove the first row which always has 0,0
'5. The array can vary from 52 to 312 Thus it will need to be defined later
'xxxxxxxxxxxxxxxxxxxxxxxxx
'(CHANGE 2)
'Option Base 1 Compile error Invalid inside procedure
'Public CD(1 To 312, 1 To 2) Invalid attribute in sub or function
'In a module the following was placed:
'Global Cards() 'The () says 'Unknown Size' Global can be used anywhere
'Global UNSH(1 To 312) As Integer 'unshuffled, sorted deck
'( 1 to 6 decks)
'Global Random(1 To 312) As Integer
'The Respective DIM statements in the click evnt were changed to comments.
'The program still worked.
'Is the format above acceptable?
'xxxxxxxxxxxxxxxxxxxxxxxxx
'Change 3
'Opened a module called Global
'Type Option base 1
'Pasted all Dim statements and replaced DIM with Global
'Ran the program and no error messages
'In order to test the save code, the code in the Module was made as comments
'In the Shuffle option, the code
'Open "c:\program files\Microsoft Visual Studio\vb98\blackjack9\dar
'For Output As #1 was replaced with the code below.
'This way a repondant can simply copy the whole code and paste it in vB6 and run it.
'The card.txt file was made in C:\
'Open "C:\cards.txt" For Output As #1
'xxxxxxxxxxxxxxxxxxxxxxxxx
Dim UNSH(1 To 312) As Integer 'unshuffled, sorted deck
'( 1 to 6 decks)
Dim Random(1 To 312) As Integer ' A set of random non repeating
' numbers in increments 0f 52 {CHANGE 1}
Dim temp As Integer
Dim CD(1 To 312, 1 To 2) As Integer 'Final generated deck, sorted {CHANGE 1}
' according to random set
Dim Cards(1 To 312, 1 To 2) As Integer ' Just renamed cd(312,2){CHANGE 1}
Dim DealersDeck(312) As Integer
'Note, the arrays are variable, but I made it constant 312,2
' since program will not go past the number of decks used.
' It should be noted that the 0,2 is avoided
'-------------------------
' Added ShuffledDeck(1 to 312)
Decks = 1 'temporary input Actually there is a txt box
X = 2 ' Value of the first cards, in this case 2,2,2,2
' If decks = 2 then one would see 2,2,2,2,2,2,2,2
If Decks = 1 Then ' If decks = 1 then generate unshuffled
' deck first four cards with a value of 2
' Did not consider Y = 0
Y = 4 ' Last row of first 4 cards
End If
If Decks = 2 Then
Y = 8
End If
If Decks = 3 Then
Y = 12
End If
If Decks = 4 Then
Y = 16
End If
If Decks = 5 Then
Y = 20
End If
If Decks = 6 Then
Y = 24
End If
For Z = 1 To Y ' There are four cards with a value of 2
' in a deck
' First 4 cards of the unshuffled array
UNSH(Z) = X ' Unsh(1) = 2 Card value = 2 Row 1
Z = Z + 1
UNSH(Z) = X ' Unsh(2) = 2 Card value = 2 Row 2
Z = Z + 1
UNSH(Z) = X 'Unsh(2) = 2 Card value = 2 Row 3
Z = Z + 1
UNSH(Z) = X ' Unsh(2) = 2 Card value = 2 Row 4
Next Z
'-------------------------
X = 3 'value of the next card
If Decks = 1 Then
Y = 5 ' ' FIRST row of SECOND 4 cards
End If
If Decks = 2 Then
Y = 9
End If
If Decks = 3 Then
Y = 13
End If
If Decks = 4 Then
Y = 17
End If
If Decks = 5 Then
Y = 21
End If
If Decks = 6 Then
Y = 25
End If
For Z = Y To Y + Decks * 4 - 1 'Based on one deck
UNSH(Z) = X 'UNSH(5) = 3 ROW 5
Z = Z + 1
UNSH(Z) = X 'UNSH(6) = 3 ROW 6
Z = Z + 1
UNSH(Z) = X 'UNSH(7) = 3 ROW 7
Z = Z + 1
UNSH(Z) = X 'UNSH(8) = 3 ROW 8
Next Z
'-------------------------
X = 4 'value of card
If Decks = 1 Then ' Starting position (9)in a sorted deck of
' 52 cards
Y = 9
End If
If Decks = 2 Then
Y = 17
End If
If Decks = 3 Then
Y = 25
End If
If Decks = 4 Then
Y = 33
End If
If Decks = 5 Then
Y = 41
End If
If Decks = 6 Then
Y = 49
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'-------------------------
X = 5
If Decks = 1 Then
Y = 13
End If
If Decks = 2 Then
Y = 25
End If
If Decks = 3 Then
Y = 37
End If
If Decks = 4 Then
Y = 49
End If
If Decks = 5 Then
Y = 61
End If
If Decks = 6 Then
Y = 73
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'-------------------------
X = 6
If Decks = 1 Then
Y = 17
End If
If Decks = 2 Then
Y = 33
End If
If Decks = 3 Then
Y = 49
End If
If Decks = 4 Then
Y = 65
End If
If Decks = 5 Then
Y = 81
End If
If Decks = 6 Then
Y = 97
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'-------------------------
X = 7
If Decks = 1 Then
Y = 21
End If
If Decks = 2 Then
Y = 41
End If
If Decks = 3 Then
Y = 61
End If
If Decks = 4 Then
Y = 81
End If
If Decks = 5 Then
Y = 101
End If
If Decks = 6 Then
Y = 121
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'-------------------------
X = 8
If Decks = 1 Then
Y = 25
End If
If Decks = 2 Then
Y = 49
End If
If Decks = 3 Then
Y = 73
End If
If Decks = 4 Then
Y = 97
End If
If Decks = 5 Then
Y = 121
End If
If Decks = 6 Then
Y = 145
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'-------------------------
X = 9
If Decks = 1 Then
Y = 29
End If
If Decks = 2 Then
Y = 57
End If
If Decks = 3 Then
Y = 85
End If
If Decks = 4 Then
Y = 113
End If
If Decks = 5 Then
Y = 141
End If
If Decks = 6 Then
Y = 169
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'-------------------------
X = 10
If Decks = 1 Then
Y = 33
End If
If Decks = 2 Then
Y = 65
End If
If Decks = 3 Then
Y = 97
End If
If Decks = 4 Then
Y = 129
End If
If Decks = 5 Then
Y = 161
End If
If Decks = 6 Then
Y = 193
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'-------------------------
X = 10
If Decks = 1 Then
Y = 37
End If
If Decks = 2 Then
Y = 73
End If
If Decks = 3 Then
Y = 109
End If
If Decks = 4 Then
Y = 145
End If
If Decks = 5 Then
Y = 181
End If
If Decks = 6 Then
Y = 217
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'-------------------------
X = 10
If Decks = 1 Then
Y = 41
End If
If Decks = 2 Then
Y = 81
End If
If Decks = 3 Then
Y = 121
End If
If Decks = 4 Then
Y = 161
End If
If Decks = 5 Then
Y = 201
End If
If Decks = 6 Then
Y = 241
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'-------------------------
X = 10
If Decks = 1 Then
Y = 45
End If
If Decks = 2 Then
Y = 89
End If
If Decks = 3 Then
Y = 133
End If
If Decks = 4 Then
Y = 177
End If
If Decks = 5 Then
Y = 221
End If
If Decks = 6 Then
Y = 265
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
X = 1 'Ace value of 11 or 1
If Decks = 1 Then
Y = 49
End If
If Decks = 2 Then
Y = 97
End If
If Decks = 3 Then
Y = 145
End If
If Decks = 4 Then
Y = 193
End If
If Decks = 5 Then
Y = 241
End If
If Decks = 6 Then
Y = 289
End If
For Z = Y To Y + Decks * 4 - 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Z = Z + 1
UNSH(Z) = X
Next Z
'-------------------
'Generate Random Array for the deck DECK of 52 cards
L = 52 * Decks
For Y = 1 To L
POS = Int(Rnd() * (L - 1) + 1)
temp = UNSH(POS)
UNSH(POS) = UNSH(Y)
UNSH(Y) = temp
Next Y
'XXXXXXXXXXXXXXXXXXXXXXXXX
'
For Y = 1 To L 'Generate an sorted array from 1 to L
' based for example on 52 cards
Random(Y) = Y
Next Y
' "dis-order" array randomly:
Randomize Timer
For Y = 1 To L
POS = Int(Rnd() * (L - 1) + 1) ' RANDOM NUMBER FROM 1 TO L
temp = Random(POS)
Random(POS) = Random(Y)
Random(Y) = temp
Next Y
'Next
'xxxxxxxxxxxxxxxxxxxxxxxxx
'Sort Arrays Sort Arrays
For Q = 1 To 52 * Decks
CD(Q, 1) = Random(Q)
CD(Q, 2) = UNSH(Q)
Next
'XXXXXXXXXXXXXXXXXXXXXXXXX
Cols = 2 'Two columns used because I have not figured out
'yet how to convert a two dimentional array to
'a one dimentional array. Anyway it works
Rows = Decks * 52
'Sort the 2-d array To be used to sort the cards based on one deck
'CD(J,1) IS THE RANDOM ARRAY
'CD(J,2) Is the deck of sorted cards that are resorted according
'to the random set of numbers CD(J,1)
For I = 1 To Rows
For j = 1 To Rows 'For example rows 1 to 52
If CD(j, 1) > CD(j + 1, 1) Then 'If CD(1,1)> CD(2,1)
For X = 1 To Cols
temp = CD(j, X) 'TEMP = CD(1,2)
CD(j, X) = CD(j + 1, X) 'CD(1,1) = CD(2,2)
CD(j + 1, X) = temp 'CD(2,1) = CD(1,2)
Next X
End If
Next j
Next I
For K = 1 To Decks * 52 'populate the new array
DealersDeck(K) = CD(K, 2)
Next K
Print Sorted; result
For K = 1 To Decks * 52
Print DealersDeck(K) 'numbers from 1 to L
'CD(K, 2) of shuffled cards
'Some reason first row value
' is 0,0 It changed after I
'added commentary and removed
'commented code.
Next K
Open "C:\Cards.txt" For Output As #1
For K = 1 To Decks * 52
Input #1, DealersDeck(K)
Next K
Close #1
End Sub
XXXXXXXXXXXXXXXXXXXXXXXXXX
ASKER
I invite anyone to comment on this question.
OK, let's break it down a bit. Confirm your aims for us:
1. Populate a shuffled array of six decks of cards (each card numbered 1-52?), at the click of a menu.
2. Save that array, at the click of a button, to a file.
3. Read that file, at the click of another button, back into the array.
Is that right?
So, at any one time, your array holds 6 x 1s (Ace of Spades), 6 x 2s (2 of Spades), 6 x 3s (3 of Spades) ... 6 x 52s (King of Diamonds), all shuffled up?
Let me know, so I can see exactly what we're working with...
J.
1. Populate a shuffled array of six decks of cards (each card numbered 1-52?), at the click of a menu.
2. Save that array, at the click of a button, to a file.
3. Read that file, at the click of another button, back into the array.
Is that right?
So, at any one time, your array holds 6 x 1s (Ace of Spades), 6 x 2s (2 of Spades), 6 x 3s (3 of Spades) ... 6 x 52s (King of Diamonds), all shuffled up?
Let me know, so I can see exactly what we're working with...
J.
Here is my contribution. It's a more compact way of initialising the pack. That way we won't have to scroll through quite so many metres of code.
ASKER
The array with the code above is populated with 1 to 6 packs that are randomized according to another array.
You can just copy the code and paste in a click event in Visual Basic. This way you do not need to worry about the size. Only thing to do is make it a click event. I have used the menue option: FILE
SHUFFLE
Now when the program gets to the save program, it prints on the template the data, thus the array is populated.
Since the array is populated I cannot see why the following does not work:
Open "C:\Cards.txt" For Output As #1
For K = 1 To Decks * 52
Input #1, DealersDeck(K)
Next K
Close #1
Lets leave the save code in the code in the click event first.
I would like to save the array in the code that should follow the populated array.
Next I would like in another click event read the array into memory.
The purpose is that it will be a model for other save and read events.
Later if it is possible, I would like to know how to simply put the code into a Module and not a click event along with Global statements. Then I would like to 'Call it' from the Module.
The rest of the program is very straight forward. Also I would like to call subroutines from a global module to a click event.
You can just copy the code and paste in a click event in Visual Basic. This way you do not need to worry about the size. Only thing to do is make it a click event. I have used the menue option: FILE
SHUFFLE
Now when the program gets to the save program, it prints on the template the data, thus the array is populated.
Since the array is populated I cannot see why the following does not work:
Open "C:\Cards.txt" For Output As #1
For K = 1 To Decks * 52
Input #1, DealersDeck(K)
Next K
Close #1
Lets leave the save code in the code in the click event first.
I would like to save the array in the code that should follow the populated array.
Next I would like in another click event read the array into memory.
The purpose is that it will be a model for other save and read events.
Later if it is possible, I would like to know how to simply put the code into a Module and not a click event along with Global statements. Then I would like to 'Call it' from the Module.
The rest of the program is very straight forward. Also I would like to call subroutines from a global module to a click event.
ASKER
GrahammSkan
You mentioned your contribution but I think you left it out.
I just cut and pasted the above code to make sure that it worked into VB6. It worked, less the save.
It looks so simple, but somehow I am missing something in the save routine.
The arffay 'dealersdeck(k) is populated as evidenced by the print out.
Joe
You mentioned your contribution but I think you left it out.
I just cut and pasted the above code to make sure that it worked into VB6. It worked, less the save.
It looks so simple, but somehow I am missing something in the save routine.
The arffay 'dealersdeck(k) is populated as evidenced by the print out.
Joe
The following:
Open "C:\Cards.txt" For Output As #1
For K = 1 To Decks * 52
Input #1, DealersDeck(K)
Next K
Close #1
does not work because your access mode is wrong. You can't read from a text stream that has been opened for writing, likewise you can't write to a text stream that has been opened for reading:
Open "C:\Cards.txt" For Output As #1 '<-- THIS OPENS A FILE THAT YOU WRITE TO
For K = 1 To Decks * 52
Input #1, DealersDeck(K) '<-- THIS TRIES TO READ FROM THAT FILE
Next K
Close #1
If you want to write to the file, use:
Open "C:\Cards.txt" For Output As #1 '<-- THIS OPENS A FILE THAT YOU WRITE TO
For K = 1 To Decks * 52
Print #1, DealersDeck(K) '<-- THIS WRITES TO THAT FILE
Next K
Close #1
If you want to read from a file, use:
Open "C:\Cards.txt" For Input As #1 '<-- THIS OPENS A FILE THAT YOU READ FROM
For K = 1 To Decks * 52
Input #1, DealersDeck(K) '<-- THIS TRIES TO READ FROM THAT FILE
Next K
Close #1
HTH
J.
Open "C:\Cards.txt" For Output As #1
For K = 1 To Decks * 52
Input #1, DealersDeck(K)
Next K
Close #1
does not work because your access mode is wrong. You can't read from a text stream that has been opened for writing, likewise you can't write to a text stream that has been opened for reading:
Open "C:\Cards.txt" For Output As #1 '<-- THIS OPENS A FILE THAT YOU WRITE TO
For K = 1 To Decks * 52
Input #1, DealersDeck(K) '<-- THIS TRIES TO READ FROM THAT FILE
Next K
Close #1
If you want to write to the file, use:
Open "C:\Cards.txt" For Output As #1 '<-- THIS OPENS A FILE THAT YOU WRITE TO
For K = 1 To Decks * 52
Print #1, DealersDeck(K) '<-- THIS WRITES TO THAT FILE
Next K
Close #1
If you want to read from a file, use:
Open "C:\Cards.txt" For Input As #1 '<-- THIS OPENS A FILE THAT YOU READ FROM
For K = 1 To Decks * 52
Input #1, DealersDeck(K) '<-- THIS TRIES TO READ FROM THAT FILE
Next K
Close #1
HTH
J.
ASKER
Thanks, It finally worked!
Now the array is specified as an Integer. Thus is the program saving the data as integers or text?
gonzal13(JOE)
Now the array is specified as an Integer. Thus is the program saving the data as integers or text?
gonzal13(JOE)
ASKER
Now you state that two lines listed in the program 'TRIES TO READ FROM ..THE.FILE' . Since 'print' puts the data into the file, what line is used to read from the file?
How does one eliminate the zero that appears in the first row?
Yes have patience...
How does one eliminate the zero that appears in the first row?
Yes have patience...
>> what line is used to read from the file?
If you want to read from a file, use:
Open "C:\Cards.txt" For Input As #1 '<-- THIS OPENS A FILE THAT YOU READ FROM
For K = 1 To Decks * 52
Input #1, DealersDeck(K) '<-- THIS TRIES TO READ FROM THAT FILE
Next K
Close #1
>> How does one eliminate the zero that appears in the first row?
What zero? I imagine you'd have to not have a zero at the start of your array...
>> Yes have patience...
How about I email something I knocked up with you in mind. I'll post it here too. Open the VB app I've sent you and have a
read of the code/comments. Try running the app. How does it hold up to what you need?
HTH
J.
If you want to read from a file, use:
Open "C:\Cards.txt" For Input As #1 '<-- THIS OPENS A FILE THAT YOU READ FROM
For K = 1 To Decks * 52
Input #1, DealersDeck(K) '<-- THIS TRIES TO READ FROM THAT FILE
Next K
Close #1
>> How does one eliminate the zero that appears in the first row?
What zero? I imagine you'd have to not have a zero at the start of your array...
>> Yes have patience...
How about I email something I knocked up with you in mind. I'll post it here too. Open the VB app I've sent you and have a
read of the code/comments. Try running the app. How does it hold up to what you need?
HTH
J.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Wow!! You sure went to great lengths!
Thank you.
I shall now study the document
Joe
Thank you.
I shall now study the document
Joe
Did you get the e-mail, Joe; I've been having problems sending recently...
J.
J.
ASKER
Hi:
Did not receive your e-mail. I check to make sure mine was correct: it is fine.
Joe
Did not receive your e-mail. I check to make sure mine was correct: it is fine.
Joe
I shall send it again, this evening...
J.
J.
ASKER
Jimbob:
I shall for a while stop asking questions on arrays and programming style. Hopefully I have everything I need. I will be waiting for your e-mail.
I have about 50 pages of code that I have typed from the printouts I had saved. Now I have to convert them to VB6.
Joe
I shall for a while stop asking questions on arrays and programming style. Hopefully I have everything I need. I will be waiting for your e-mail.
I have about 50 pages of code that I have typed from the printouts I had saved. Now I have to convert them to VB6.
Joe
When you say you want to Save the arrays - what do you mean? Into a text file?
---
You can set your array bottom end values in two ways.
You can either put "Option Base 1" at the top of the module in which case all arrays declared will start with a 1.
or
Declare arrays as Cards(1 To 312, 1 To 2)
In this case the "1 To" bit sets the lower bound of both dimensions of the array.
This is more obvious to anyone looking at the code
---
btw Most of you IF 'lists' could be replaced by maths. For example ...
If Decks = 1 Then
Y = 49
End If
If Decks = 2 Then
Y = 97
End If
If Decks = 3 Then
Y = 145
End If
If Decks = 4 Then
Y = 193
End If
If Decks = 5 Then
Y = 241
End If
If Decks = 6 Then
Y = 289
End If
Could be done as Y = (49 * Decks) - (Decks - 1)
If you don't want to figure out the maths for each then a Select would look neater ...
Select Case Decks
Case 1 : Y = 49
Case 2 : Y = 97
Case 3 : Y = 145
Case 4 : Y = 193
Case 5 : Y = 241
Case 6: Y = 289
End Select
---