Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- if(!isObject(DeckDataGroup))
- {
- new SimGroup(DeckDataGroup);
- new SimGroup(DeckGroup);
- }
- function newDeckData(%name,%values)
- {
- if(getWordCount(%values) > 15)
- {
- error("Deck " @ %name @ " contains more than 15 values");
- return;
- }
- %d = "Deck" @ %name @ "Data";
- if(isObject(%d))
- {
- error("Deck " @ %name @ " exists, replacing.");
- %d.delete();
- }
- %do = new ScriptObject()
- {
- class = "DeckDataSO";
- name = %name;
- };
- %do.setName(%d);
- for(%x=0;%x<getWordCount(%values);%x++)
- %do.value[%x] = getWord(%values,%x);
- %do.values = %x;
- %do.cards = 0;
- DeckDataGroup.add(%do);
- }
- function DeckDataSO::addCard(%this,%v0,%v1,%v2,%v3,%v4,%v5,%v6,%v7,%v8,%v9,%v10,%v11,%v12,%v13,%v14)
- {
- for(%x=0;%x<%this.values;%x++)
- %this.cv[%this.cards,%this.value[%x]] = %v[%x];
- %this.cards++;
- }
- function DeckDataSO::makeDeck(%this)
- {
- %do = new ScriptObject()
- {
- class = "DeckSO";
- cards = %this.cards;
- data = %this;
- };
- for(%x=0;%x<%this.cards;%x++)
- %do.card[%x] = %x;
- DeckGroup.add(%do);
- return %do;
- }
- function DeckSO::shuffleDeck(%this)
- {
- for(%x=0;%x<%this.cards;%x++)
- %temp[%x] = %this.card[%x];
- for(%x=0;%x<%this.cards;%x++)
- {
- %tlcount = 0;
- for(%y=0;%y<%this.cards;%y++)
- if(!%ct[%y])
- {
- %tl[%tlcount] = %y;
- %tlcount++;
- }
- %c = getRandom(0,%tlcount-1);
- %ct[%tl[%c]] = 1;
- %this.card[%x] = %temp[%tl[%c]];
- }
- }
- function DeckSO::drawCard(%this)
- {
- //We draw from the 'top', to make things simple, it's the highest .card[%x]
- %card = %this.card[%this.cards-1];
- %this.card[%this.cards-1] = "";
- %this.cards--;
- return %card;
- }
- function DeckSO::drawCardPos(%this,%pos)
- {
- if(%pos >= %this.cards || %pos < 0 || !isInt(%pos))
- {
- error("Invalid position, drawing from top instead. (DECK ID: " @ %this @ ")");
- return %this.drawCard();
- }
- %card = %this.card[%pos];
- for(%x=%pos;%x<%this.cards;%x++)
- %this.card[%x] = %this.card[%x+1];
- %this.cards--;
- return %card;
- }
- function DeckSO::drawCardNum(%this,%num)
- {
- %flag = 1;
- for(%x=0;%x<%this.cards;%x++;)
- {
- if(%this.card[%x] == %num)
- {
- %flag = 0;
- %pos = %x;
- break;
- }
- }
- if(%flag || !isInt(%num))
- {
- error("Invalid card, drawing from top instead. (DECK ID: " @ %this @ ")");
- return %this.drawCard();
- }
- for(%x=%pos;%x<%this.cards;%x++)
- %this.card[%x] = %this.card[%x+1];
- %this.cards--;
- return %num;
- }
- function DeckSO::addCard(%this,%num,%pos)
- {
- //%pos is 0 for bottom, 1 for top
- for(%x=0;%x<%this.cards;%x++)
- {
- if(%this.card[%x] == %num)
- {
- error("Card " @ %this.data.cv[%num,0] @ " (" @ %num @ ") already in deck.");
- return;
- }
- }
- if(%pos)
- {
- for(%x=%this.cards-1;%x>=0;%x--)
- %this.card[%x+1] = %this.card[%x];
- %this.card[0] = %num;
- }
- else
- %this.card[%this.cards] = %num;
- %this.cards++;
- }
- if(!isFunction(isInt))
- exec("./isint.cs");
- //Standard Decks//
- newDeckData("Standard","name suit color rank");
- newDeckData("JokersStandard","name suit color rank");
- for(%x=0;%x<4;%x++)
- {
- switch(%x)
- {
- case 0:
- %s = "Spades";
- %c = "Black";
- case 1:
- %s = "Hearts";
- %c = "Red";
- case 2:
- %s = "Clubs";
- %c = "Black";
- case 3:
- %s = "Diamonds";
- %c = "Red";
- }
- %n = "Ace";
- DeckStandardData.addCard(%n @ " of " @ %s,%s,%c,%n);
- DeckJokersStandardData.addCard(%n @ " of " @ %s,%s,%c,%n);
- for(%y=2;%y<11;%y++)
- {
- %n = %y;
- DeckStandardData.addCard(%n @ " of " @ %s,%s,%c,%n);
- DeckJokersStandardData.addCard(%n @ " of " @ %s,%s,%c,%n);
- }
- %n = "Jack";
- DeckStandardData.addCard(%n @ " of " @ %s,%s,%c,%n);
- DeckJokersStandardData.addCard(%n @ " of " @ %s,%s,%c,%n);
- %n = "Queen";
- DeckStandardData.addCard(%n @ " of " @ %s,%s,%c,%n);
- DeckJokersStandardData.addCard(%n @ " of " @ %s,%s,%c,%n);
- %n = "King";
- DeckStandardData.addCard(%n @ " of " @ %s,%s,%c,%n);
- DeckJokersStandardData.addCard(%n @ " of " @ %s,%s,%c,%n);
- }
- DeckJokersStandardData.addCard("Black Joker",Joker,Black,Joker);
- DeckJokersStandardData.addCard("Red Joker",Joker,Red,Joker);
Advertisement
Add Comment
Please, Sign In to add comment