croupier
Version:
A library written in Typescript to create and handle a deck of playing cards
88 lines • 2.54 kB
JavaScript
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const Card_1 = __importStar(require("./Card"));
/**
* @classdesc
* A Deck represents a deck of cards.
* @class Deck
*/
class Deck {
/**
*
* @param options
*/
constructor(options = {}) {
this.cards = [];
// TODO add jokers
const { seed = Math.random(), shuffle = true } = options;
for (const suit of Card_1.suits) {
for (const rank of Card_1.ranks) {
this.cards.push(new Card_1.default(suit, rank));
}
}
if (shuffle) {
this.shuffle(seed);
}
}
/**
*
*/
get Cards() {
return this.cards;
}
/**
*
*/
get Count() {
return this.cards.length;
}
/**
*
* @param amount
* @returns
*/
take(amount) {
return this.cards.splice(-Math.abs(amount), amount);
}
/**
*
* @param seed
*/
shuffle(seed = Math.random()) {
let currentIndex = this.cards.length;
let temporaryValue;
let randomIndex;
while (0 !== currentIndex) {
randomIndex = Math.floor(seed * currentIndex);
currentIndex -= 1;
temporaryValue = this.cards[currentIndex];
this.cards[currentIndex] = this.cards[randomIndex];
this.cards[randomIndex] = temporaryValue;
}
}
}
exports.default = Deck;
//# sourceMappingURL=Deck.js.map
;