121 lines
2.3 KiB
JavaScript
121 lines
2.3 KiB
JavaScript
var deck = {};
|
|
var hand = {};
|
|
|
|
var deckElement = document.getElementById('deck');
|
|
var handElement = document.getElementById('hand');
|
|
|
|
var colors = [ "red", "blue", "yellow" ];
|
|
var handSize = 5;
|
|
var maxNumber = 8;
|
|
|
|
fillDeck();
|
|
updateUI();
|
|
|
|
function cardToId(card) {
|
|
return card.color + "_" + card.number.toString();
|
|
}
|
|
|
|
function cardToElement(card, forDeck = false) {
|
|
var element = document.createElement("okey-card");
|
|
element.innerHTML = card.number.toString();
|
|
|
|
if (forDeck) {
|
|
element.setAttribute("onclick", "drawCard('" + cardToId(card) + "')");
|
|
if (isHandFull()) {
|
|
element.setAttribute("hand-full", "");
|
|
}
|
|
}
|
|
else {
|
|
element.setAttribute("onclick", "discard('" + cardToId(card) + "')");
|
|
}
|
|
|
|
if (forDeck && card.drawn) {
|
|
element.classList.add("drawn-" + card.color);
|
|
}
|
|
else {
|
|
element.classList.add(card.color);
|
|
element.setAttribute("clickable", "");
|
|
}
|
|
|
|
return element.outerHTML;
|
|
}
|
|
|
|
function isHandFull() {
|
|
return Object.entries(hand).length >= handSize;
|
|
}
|
|
|
|
function fillDeck() {
|
|
for (let color of colors)
|
|
{
|
|
for (let i = 1; i <= maxNumber; i++)
|
|
{
|
|
let card = {
|
|
color: color,
|
|
number: i,
|
|
drawn: false
|
|
};
|
|
|
|
deck[cardToId(card)] = card;
|
|
}
|
|
}
|
|
}
|
|
|
|
function discard(cardId) {
|
|
delete hand[cardId];
|
|
updateUI();
|
|
}
|
|
|
|
function drawCard(cardId) {
|
|
if (!deck[cardId].drawn && !isHandFull()) {
|
|
hand[cardId] = deck[cardId];
|
|
deck[cardId].drawn = true;
|
|
updateUI();
|
|
}
|
|
}
|
|
|
|
function getPatterns(thisHand = null) {
|
|
if (thisHand == null) {
|
|
thisHand = hand;
|
|
}
|
|
|
|
let patterns = [];
|
|
|
|
for (let i = 1; i <= maxNumber; i++) {
|
|
sameNumber = 0;
|
|
for (let card of Object.values(thisHand)) {
|
|
if (card.number == i) {
|
|
sameNumber++;
|
|
}
|
|
}
|
|
|
|
if (sameNumber >= colors.length) {
|
|
let patternName = i + "-" + i + "-" + i;
|
|
patterns[patternName] = (i + 1) * 10;
|
|
}
|
|
}
|
|
|
|
console.log(Object.keys(patterns));
|
|
|
|
patterns = patterns.sort((a,b) => (a.last_nom > b.last_nom) ? -1 : ((b.last_nom > a.last_nom) ? 1 : 0));
|
|
|
|
return Object.keys(patterns);
|
|
}
|
|
|
|
function updateUI() {
|
|
handElement.innerHTML = "";
|
|
for (let card of Object.values(hand)) {
|
|
handElement.innerHTML += cardToElement(card);
|
|
}
|
|
|
|
deckElement.innerHTML = "";
|
|
for (let card of Object.values(deck)) {
|
|
deckElement.innerHTML += cardToElement(card, true);
|
|
}
|
|
}
|
|
|
|
function reset() {
|
|
deck = {};
|
|
hand = {};
|
|
fillDeck();
|
|
updateUI();
|
|
} |