2018-05-16 22:59:22 +02:00
|
|
|
function Hanafuda(modules) {
|
2018-05-13 18:08:12 +02:00
|
|
|
var Flower = Object.freeze({
|
|
|
|
Pine: 0,
|
|
|
|
Plum: 1,
|
|
|
|
Cherry: 2,
|
|
|
|
Wisteria: 3,
|
|
|
|
Iris: 4,
|
|
|
|
Peony: 5,
|
|
|
|
BushClover: 6,
|
|
|
|
SusukiGrass: 7,
|
|
|
|
Chrysanthemum: 8,
|
|
|
|
Maple: 9,
|
|
|
|
Willow: 10,
|
|
|
|
Paulownia: 11
|
|
|
|
});
|
2018-05-16 22:59:22 +02:00
|
|
|
|
|
|
|
var Family = Object.freeze(
|
|
|
|
["Kasu", "Tan", "Tane", "Hikari"].reduce(function(o, name) {
|
|
|
|
o[name] = {class: name[0].toLowerCase() + name.slice(1)};
|
|
|
|
return o;
|
|
|
|
}, {})
|
|
|
|
);
|
|
|
|
|
|
|
|
var CardNames = [
|
|
|
|
"Pine0", "Pine1", "PinePoetry", "Crane",
|
|
|
|
"Plum0", "Plum1", "PlumPoetry", "BushWarbler",
|
|
|
|
"Cherry0", "Cherry1", "CherryPoetry", "CampCurtain",
|
|
|
|
"Wisteria0", "Wisteria1", "WisteriaRed", "Cuckoo",
|
|
|
|
"Iris0", "Iris1", "IrisRed", "EightPlankBridge",
|
|
|
|
"Peony0", "Peony1", "PeonyBlue", "Butterflies",
|
|
|
|
"BushClover0", "BushClover1", "BushCloverRed", "Boar",
|
|
|
|
"SusukiGrass0", "SusukiGrass1", "Geese", "FullMoon",
|
|
|
|
"Chrysanthemum0", "Chrysanthemum1", "ChrysanthemumBlue", "SakeCup",
|
|
|
|
"Maple0", "Maple1", "MapleBlue", "Deer",
|
|
|
|
"Lightning", "WillowRed", "Swallow", "RainMan",
|
|
|
|
"Paulownia0", "Paulownia1", "Sand", "Phoenix"
|
|
|
|
];
|
|
|
|
|
|
|
|
var Card = Object.freeze(
|
|
|
|
CardNames.reduce(function(o, name, i) {
|
|
|
|
o[name] = {
|
|
|
|
id: i,
|
|
|
|
family: findFamily(name, i),
|
|
|
|
flower: Math.floor(i / 4),
|
|
|
|
name: name
|
|
|
|
};
|
|
|
|
return o;
|
|
|
|
}, {})
|
|
|
|
);
|
|
|
|
|
|
|
|
function findFamily(name, i) {
|
|
|
|
if((i % 4 < 2 && i < 41) || (i > 43 && i < 47)) {
|
|
|
|
return Family.Kasu;
|
|
|
|
} else if(name.match(/(Blue|Poetry|Red)/)) {
|
|
|
|
return Family.Tan;
|
|
|
|
} else if(["Crane", "CampCurtain", "FullMoon", "RainMan", "Phoenix"].includes(name)) {
|
|
|
|
return Family.Hikari;
|
|
|
|
} else {
|
|
|
|
return Family.Tane;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-05-13 18:08:12 +02:00
|
|
|
return {
|
|
|
|
Flower: Flower,
|
2018-05-16 22:59:22 +02:00
|
|
|
Family: Family,
|
2018-05-13 18:08:12 +02:00
|
|
|
Card: Card,
|
2018-05-20 19:15:06 +02:00
|
|
|
getValue: getValue,
|
2018-05-13 18:08:12 +02:00
|
|
|
sameMonth: sameMonth
|
|
|
|
};
|
|
|
|
|
|
|
|
function sameMonth(card) {
|
2018-05-16 22:59:22 +02:00
|
|
|
var first = 4 * card.flower;
|
|
|
|
return [0,1,2,3].map(function(i) {return Card[CardNames[first + i]];});
|
2018-05-13 18:08:12 +02:00
|
|
|
}
|
|
|
|
|
2018-05-20 19:15:06 +02:00
|
|
|
function getValue(card) {
|
|
|
|
var first = 4 * card.flower;
|
|
|
|
return card.id - first;
|
|
|
|
}
|
|
|
|
|
2018-05-13 18:08:12 +02:00
|
|
|
}
|