Add the Deck object made for Phantom-Ink-Online

This commit is contained in:
Oliver-Akins 2022-01-09 01:02:57 -06:00
parent ab4bad308a
commit 34eb19e340

View file

@ -0,0 +1,66 @@
export class Deck<T> {
private _discard: T[];
private _unknown: T[];
private _deck: T[];
constructor(cards: T[]) {
this._deck = cards;
this._discard = [];
this._unknown = [];
};
get size(): number { return this._deck.length; }
/**
* Draws X cards from the deck
*
* @param quantity The number of cards to draw
* @throws Error If quantity is <= 0
* @throws Error If quantity > size
*/
public draw(quantity: number): T[] {
if (quantity <= 0) {
throw new Error(`Cannot get ${quantity} cards.`);
} else if (quantity > this.size) {
throw new Error(`Cannot draw more cards than there are in the deck.`);
};
let cards: T[] = [];
// Draw the cards for the player and move them into the unknown group
for (var i = 0; i < quantity; i++) {
// Determine the card for the player(s)
let index = Math.floor(Math.random() * this.size);
let card = this._deck[index];
// Move it from the arrays
cards.push(card);
this._deck.splice(index, 1);
this._unknown.push(card);
};
return cards;
};
/**
* Adds the specific card to the discard pile
*
* @param card The card to add to the discard pile
*/
public discard(card: T) {
this._unknown = this._unknown.filter(x => x != card);
this._discard.push(card);
};
public reset() {
this._deck.push(...this._discard, ...this._unknown);
this._discard = [];
this._unknown = [];
};
};