Here's a yugioh program me and my son are working on. Each player has their own deck but it illustrates using arrays in types to track which cards are where.
When you have arrays pointing to types you can use the Null value to set that slot to empty, so to move a card from a player's hand into play-
where p is the current player, i is the card from their hand they are playing and j is the playarea which in yugioh is an array of 5 cards in front of the player.
The method of shuffle swaps two random cards in the deck multiple times. Also note the use of the command SeedRnd MilliSecs() to make sure you get a random deal every time you run the game.
When you have arrays pointing to types you can use the Null value to set that slot to empty, so to move a card from a player's hand into play-
p\inplay[j]=c p\hand[i]=Null
where p is the current player, i is the card from their hand they are playing and j is the playarea which in yugioh is an array of 5 cards in front of the player.
The method of shuffle swaps two random cards in the deck multiple times. Also note the use of the command SeedRnd MilliSecs() to make sure you get a random deal every time you run the game.
; yugioh.bb ; by simon and harley Type card Field name$ Field attack Field defence Field effect$ Field stars Field place End Type Type player Field name$ Field decksize Field deck.card[256] Field hand.card[7] Field inplay.card[5] Field graveyard.card[256] Field lifepoints End Type Function createplayer.player(name$) ; read in deck p.player=New player p\name=name Read size p\decksize=size For i=1 To size c.card=New card Read c\name$ Read c\attack Read c\defence Read c\effect$ Read c\stars p\deck[i]=c Next p\lifepoints=8000 Return p End Function Function ShuffleDeck(p.player) For i=1 To 50 a=Rnd(p\decksize) b=Rnd(p\decksize) ; swap 2 cards in the deck c.card=p\deck[a] p\deck[a]=p\deck[b] p\deck[b]=c Next End Function Function DealCards(p.player) For i=1 To 5 p\hand[i]=p\deck[p\decksize] p\decksize=p\decksize-1 Next End Function Function PlayTurn(p.player,q.player) Print "" Print p\name+"'s Turn" ; deal card For i=1 To 7 If p\hand[i]=Null p\hand[i]=p\deck[p\decksize] p\decksize=p\decksize-1 Exit EndIf Next summons=7 ; command loop While True ; print out commands Print "" For i=1 To summons If p\hand[i]<>Null Print " [S"+i+"] Summon "+p\hand[i]\name EndIf Next attacks=0 For i=1 To 5 If p\inplay[i]<>Null For j=1 To 5 If q\inplay[j]<>Null Print " [A"+i+""+j+"] Attack "+q\inplay[j]\name+" with "+ p\inplay[i]\name attacks=attacks+1 EndIf Next EndIf Next If (summons+attacks=0) Return Print "" ; input command a$=Input("("+p\lifepoints+") >") Print "" ; finish turn If a$="" Then Return ; quit game? If a$="q" Then End ; summon monster ? If (summons>0 And Left$(a$,1))="S" Or (Left$(a$,1))="s" i=Mid$(a$,2) c.card=p\hand[i] If c<>Null Print p\name+" summons "+c\name For j=1 To 5 If p\inplay[j]=Null p\inplay[j]=c p\hand[i]=Null Exit EndIf Next EndIf EndIf ; attack monster ? If (Left$(a$,1))="A" Or (Left$(a$,1))="a" i=Mid$(a$,2,1) j=Mid$(a$,3,1) If (i<6 And j<6) c.card=p\inplay[i] cc.card=q\inplay[j] If c<>Null And cc<>Null If (c\attack>cc\defence) pts=c\attack-cc\defence Print c\name+" wins! "+cc\name+" dies, "+q\name+" looses "+pts+" lifepoints." q\lifepoints=q\lifepoints-pts q\inplay[j]=Null Else pts=cc\defence-c\attack Print c\name+" dies "+p\name+" looses, "+pts+" lifepoints," ;destroy monster p\lifepoints=p\lifepoints-pts p\inplay[i]=Null EndIf EndIf EndIf EndIf summons=0 Wend End Function ; main program ; to have different deck for each player change the Restore points SeedRnd MilliSecs() a$=Input("Player 1 name-") Restore HarleyDeck p1.player=CreatePlayer(a$) a$=Input("Player 2 name-") Restore HarleyDeck p2.player=CreatePlayer(a$) ShuffleDeck(p1) ShuffleDeck(p2) DealCards(p1) DealCards(p2) .gameloop PlayTurn(p1,p2) PlayTurn(p2,p1) Goto gameloop ;PlayTurn(deck1) ; Print c\name+" "+Left$("*************",c\stars) ;MouseWait Print "Game Over Dudes" Input "Hit Return To Quit" End .HarleyDeck Data 21 Data "LordOfD",1200,1100,"No Dragon Effects",4 Data "LordOfD",1200,1100,"No Dragon Effects",4 Data "LordOfD",1200,1100,"No Dragon Effects",4 Data "Blue-Eyes",3000,2500,"No Effect",8 Data "Blue-Eyes",3000,2500,"No Effect",8 Data "Blue-Eyes",3000,2500,"No Effect",8 Data "Rude Kaiser",1800,1600,"No Effect",5 Data "Swordstalker",2000,1600,"No Effect",6 Data "Battle Ox",1700,1000,"No Effect",5 Data "Battle Ox",1700,1000,"No Effect",5 Data "Hane-Hane",450,500,"FLIP:1 monster back to owners hand",2 Data "Dark Assailant",1200,1200,"No Effect",4 Data "Skull Red Bird",1550,1200,"No Effect",4 Data "La Ginn The Mgical Genie Of The Lamp",1800,1000,"No Effect",4 Data "Master & Expert",1200,1000,"No Effect",4 Data "Orge Of The Black Shadow",1200,1400,"No Effect",4 Data "Ryu-Kishin",1000,500,"No Effect",3 Data "Hitotsu-Me Giant",1200,1000,"No Effect",4 Data "Trap Master",500,1100,"No Effect",3 Data "Rouge Doll",1600,1000,"No Effect",4 Data "Ray & Temprature",1000,1000,"No Effect",3