Comment puis-je passer le tableau deck (52) de la fonction Newgame à la fonction deckshuffle
FUNCTION deckshuffle
'first card
CALL carddeck(deck(1))
deck(1) = INT(RND * 52)
deckindex = 2
DO
DO
cardok = 1
newcard = INT(RND * 52)
FOR j = 1 TO (deckindex - 1) STEP 1
IF newcard = deck(j) THEN
cardok = 0
EXIT FOR
END IF
NEXT j
LOOP UNTIL cardok = 1
deck(deckindex) = newcard
deckindex = deckindex + 1
LOOP UNTIL deckindex > 52
deckindex = 1
PRINT "* * * DECK SHUFFLED * * *"
END FUNCTION
FUNCTION newgame 'New game RANDOMIZE TIMER CALL cardsuit 'heart$ = CHR$(3): diamond$ = CHR$(4): club$ = CHR$(5): spade$ = CHR$(6) quitgame = 0 DIM playercards(maxhand), dealercards(maxhand), deck(52) END FUNCTION
actuellement je reçois un "Array non défini "erreur lorsque j'essaye d'exécuter le programme.
3 Réponses :
Vous passez un tableau à un Je ne suis pas tout à fait certain de ce que SUB ou FUNCTION en ajoutant des parenthèses à l'argument sub / function lorsque vous l'appelez, comme dans deck () code> ci-dessous: et DIM SHARED playercards(maxhand), dealercards(maxhand), deck(52)
...
CALL newgame
SUB newgame
...
END SUB
SUB deckshuffle
...
END SUB
PRINT deckshuffle (deck ()) devrait afficher, donc je suis raisonnablement certain que vous vouliez faire deckshuffle newgame , pas des fonctions. Après tout, une fonction est censée renvoyer des valeurs. Vous devriez utiliser un sous s'il n'y a pas de valeur de retour.
De plus, vos fonctions n'ont pas d'arguments définis, c'est pourquoi vous obtenez probablement une erreur:
FUNCTION newgame
' This is a function with 0 arguments.
...
END FUNCTION
SUB deckshuffle (deck())
' This is a subroutine with 1 argument:
' - an array of numbers named "deck"
...
END SUB
FUNCTION myATN (x)
' This is a function with 1 argument:
' - a number named "x"
myATN = ATN(x)
END FUNCTION
Je les ai changés en routines SUB, mais maintenant j'obtiens une erreur de non-concordance de paramètres lorsque j'essaye d'exécuter le SUB deckshuffle.
Voici un exemple de programme de mélange de deck utilisant une fonction de tableau:
DIM deck(1 TO 54)
CONST ShuffleTimes = 10
FOR L = 1 TO 54
deck(L) = L
NEXT
CALL shuffle(deck())
FOR L = 1 TO 54
PRINT deck(L);
NEXT
END
SUB shuffle (deck())
FOR L = 1 TO ShuffleTimes
X = INT(RND * 54 + 1)
Y = INT(RND * 54 + 1)
SWAP deck(X), deck(Y)
NEXT
END SUB
Voici un sous-programme pour randomiser un jeu de cartes:
' init deck
DIM deck(1 TO 54)
' store deck
FOR L = 1 TO 54
deck(L) = L
NEXT
' randomize deck
FOR L = 1 TO 20
X = INT(RND * 54 + 1)
Y = INT(RND * 54 + 1)
SWAP deck(X), deck(Y)
NEXT
' spades/hearts/diamonds/clubs
FOR L = 1 TO 54
X = deck(L)
SELECT CASE X
CASE 1 TO 13
M = X
S$ = "spades"
CASE 14 TO 26
M = X - 13
S$ = "hearts"
CASE 27 TO 39
M = X - 26
S$ = "diamonds"
CASE 40 TO 52
M = X - 39
S$ = "clubs"
CASE 53, 54
PRINT "Joker"
M = 0
END SELECT
SELECT CASE M
CASE 1 ' ace
PRINT "Ace of "; S$
CASE 2 TO 10 ' 2-10
PRINT M; " of "; S$
CASE 11 ' jack
PRINT "Jack of "; S$
CASE 12 ' queen
PRINT "Queen of "; S$
CASE 13 ' king
PRINT "King of "; S$
END SELECT
NEXT
END