more yakus implemented
This commit is contained in:
parent
2a1267fefb
commit
3375fb8f7b
4 changed files with 160 additions and 16 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -5,13 +5,18 @@ import { Hand } from "../hand"
|
|||
let count = 0;
|
||||
let total = 0;
|
||||
|
||||
let h1 = new Hand("m1m2m3 m4m5m6 m7m8m9 p1p2p3 p5p5");
|
||||
let h1 = new Hand("m1m2m3 m4m5m6 m7m8m9 m1m2m3 m5m5");
|
||||
let h2 = new Hand("m1m1m1 m4m4m4 m7m7m7 p1p1p1 p5p5");
|
||||
let h3 = new Hand("m1m1m1 p9p9p9 s1s1s1 w2w2w2 d1d1");
|
||||
let h4 = new Hand("m2m3m4 p3p3p3 p4p5p6 s4s4 s6s7s8");
|
||||
let h5 = new Hand("m1m2m3 m1m2m3 p7p8p9 p7p8p9 w3w3");
|
||||
let h6 = new Hand("m1m2m3 m1m2m3 p6p7p8 p7p8p9 w3w3");
|
||||
let h7 = new Hand("m1m2m3 p1p2p3 s1s2s3 m7m8m9 p9p9");
|
||||
let h8 = new Hand("m1m2m3 m1m2m3 p6p6 w0w0w0 w3w3w3");
|
||||
let h9 = new Hand("m1m2m3 m1m2m3 d1d1d1 d2d2d2 d3d3");
|
||||
let h10 = new Hand("m1m2m3 p6p6 d1d1d1 d2d2d2 d3d3d3");
|
||||
let h11 = new Hand("m1m2m3 w1w1w1 w2w2w2 w3w3w3 w4w4");
|
||||
let h12 = new Hand("m1m1 w1w1w1 w2w2w2 w3w3w3 w4w4w4");
|
||||
|
||||
// lipeikou
|
||||
count += assert(yakus.lipekou(h5, [], 0) === 1, "m123 m123 p789 p789 w33 is Lipeikou");
|
||||
|
|
@ -33,10 +38,45 @@ count += assert(yakus.sanshokuDoujun(h7, [], 0) === 2, "m123 p123 s123 m789 p99
|
|||
count += assert(yakus.sanshokuDoujun(h2, [], 0) === 0, "m111 m444 m777 p111 p55 is not Shanshokou Doujun");
|
||||
total += 2;
|
||||
|
||||
// chanta
|
||||
count += assert(yakus.chanta(h3, [], 0) === 2, "m111 p999 s111 w222 d11 is Chanta");
|
||||
count += assert(yakus.chanta(h1, [], 0) === 0, "m123 m456 m789 m123 p55 is not Chanta");
|
||||
// ittsuu
|
||||
count += assert(yakus.ittsuu(h1, [], 0) === 2, "m123 m456 m789 m123 m55 is Ittsuu");
|
||||
count += assert(yakus.ittsuu(h2, [], 0) === 0, "m111 m444 m777 p111 p55 is not Ittsu");
|
||||
total += 2;
|
||||
|
||||
// tanyao
|
||||
count += assert(yakus.tanyao(h4, [], 0) === 1, "m234 p333 p456 s44 s678 is Tanyao");
|
||||
count += assert(yakus.tanyao(h1, [], 0) === 0, "m123 m456 m789 m123 p55 is not Tanyao");
|
||||
total += 2;
|
||||
|
||||
// yakuhai
|
||||
count += assert(yakus.yakuhai(h3, [], 2) === 1, "m111 p999 s111 w222 d11 West is Yakuhai");
|
||||
count += assert(yakus.yakuhai(h8, [], 3) === 2, "m123 m123 p66 w000 w333 North is double Yakuhai");
|
||||
count += assert(yakus.yakuhai(h3, [], 0) === 0, "m111 p999 s111 w222 d11 Est is not Yakuhai");
|
||||
total += 3;
|
||||
|
||||
// shousangen
|
||||
count += assert(yakus.shousangen(h9, [], 0) === 2, "m123 m123 d111 d222 d33 is Shousangen");
|
||||
count += assert(yakus.shousangen(h10, [], 0) === 0, "m123 p66 d111 d222 d333 is not Shousangen");
|
||||
count += assert(yakus.shousangen(h3, [], 0) === 0, "m111 p999 s111 w222 d11 is not Shousangen");
|
||||
total += 3;
|
||||
|
||||
// daisangen
|
||||
count += assert(yakus.daisangen(h10, [], 0) === 13, "m123 p66 d111 d222 d333 is Daisangen");
|
||||
count += assert(yakus.daisangen(h9, [], 0) === 0, "m123 m123 d111 d222 d33 is not Daisangen");
|
||||
count += assert(yakus.daisangen(h3, [], 0) === 0, "m111 p999 s111 w222 d11 is not Daisangen");
|
||||
total += 3;
|
||||
|
||||
// shousuushi
|
||||
count += assert(yakus.shousuushii(h11, [], 0) === 13, "m123 w111 w222 w333 w44 is Daisangen");
|
||||
count += assert(yakus.shousuushii(h12, [], 0) === 0, "m11 w111 w222 w333 w444 is not Daisangen");
|
||||
count += assert(yakus.shousuushii(h3, [], 0) === 0, "m111 p999 s111 w222 d11 is not Daisangen");
|
||||
total += 3;
|
||||
|
||||
// daisuushi
|
||||
count += assert(yakus.daisuushi(h12, [], 0) === 13, "m11 w111 w222 w333 w444 is Daisangen");
|
||||
count += assert(yakus.daisuushi(h11, [], 0) === 0, "m123 w111 w222 w333 w44 is not Daisangen");
|
||||
count += assert(yakus.daisuushi(h3, [], 0) === 0, "m111 p999 s111 w222 d11 is not Daisangen");
|
||||
total += 3;
|
||||
|
||||
// total
|
||||
console.log("Succès: " + count.toString() + "/" + total.toString());
|
||||
|
|
|
|||
|
|
@ -195,8 +195,8 @@ ittsuu: function(
|
|||
wind: number
|
||||
): number {
|
||||
let gr = groups.concat(hand.toGroup() as NonNullable<Array<Group>>);
|
||||
gr = gr.filter(g => chii(g));
|
||||
gr.sort((g1, g2) => g1.compare(g2));
|
||||
gr.filter(g => chii(g));
|
||||
if (gr.length < 3) { // trop peu de suite
|
||||
return 0;
|
||||
} else if (gr.length === 3) { // pile le bon nombre
|
||||
|
|
@ -213,7 +213,27 @@ ittsuu: function(
|
|||
return groups.length > 0 ? 1 : 2;
|
||||
}
|
||||
} else { // il y a un intrus
|
||||
return 0 //TODO
|
||||
for (let i = 0; i < 4; i++) {
|
||||
let index = []
|
||||
for (let j = 0; j < 4; j++) {
|
||||
if (j !== i) {
|
||||
index.push(j);
|
||||
}
|
||||
}
|
||||
let t0 = gr[index[0]].getTiles();
|
||||
let t1 = gr[index[1]].getTiles();
|
||||
let t2 = gr[index[2]].getTiles();
|
||||
if (
|
||||
t0[0].getValue() === 1 &&
|
||||
t1[0].getValue() === 4 &&
|
||||
t2[0].getValue() === 7 &&
|
||||
t0[0].getFamily() === t1[0].getFamily() &&
|
||||
t0[0].getFamily() === t2[0].getFamily()
|
||||
) {
|
||||
return groups.length > 0 ? 1 : 2;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
},
|
||||
|
|
@ -245,15 +265,33 @@ yakuhai: function(
|
|||
* brelan de valeur
|
||||
* 1/1
|
||||
*/
|
||||
// TODO multiplicité !
|
||||
hand: Hand,
|
||||
groups: Array<Group>,
|
||||
wind: number
|
||||
): number {
|
||||
return 0;
|
||||
let gr = groups.concat(hand.toGroup() as NonNullable<Array<Group>>);
|
||||
gr = gr.filter(g => pon(g) && g.getTiles().length === 3);
|
||||
let han = 0;
|
||||
gr.forEach(
|
||||
g => {
|
||||
let t = g.getTiles();
|
||||
let f = t[0].getFamily();
|
||||
let v = t[0].getValue();
|
||||
if (f === 5) { // brelan de dragon
|
||||
han++;
|
||||
}
|
||||
if (f === 4 && v === 0) { // vent d'est
|
||||
han++;
|
||||
}
|
||||
if (f === 4 && v === wind) { // vent du joueur
|
||||
han++;
|
||||
}
|
||||
}
|
||||
);
|
||||
return han;
|
||||
},
|
||||
|
||||
shousangen: function( //TODO
|
||||
shousangen: function(
|
||||
/**
|
||||
* trois petits dragons
|
||||
* 2/2
|
||||
|
|
@ -262,10 +300,29 @@ shousangen: function( //TODO
|
|||
groups: Array<Group>,
|
||||
wind: number
|
||||
): number {
|
||||
let gr = groups.concat(hand.toGroup() as NonNullable<Array<Group>>);
|
||||
gr = gr.filter(g => pon(g));
|
||||
let nbPon = 0;
|
||||
let nbPair = 0;
|
||||
gr.forEach(
|
||||
g => {
|
||||
let t = g.getTiles();
|
||||
if (t[0].getFamily() === 5) {
|
||||
if (t.length === 3) {
|
||||
nbPon++;
|
||||
} else {
|
||||
nbPair++;
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
if (nbPon == 2 && nbPair == 1) {
|
||||
return 2;
|
||||
}
|
||||
return 0;
|
||||
},
|
||||
|
||||
daisangen: function( //TODO
|
||||
daisangen: function(
|
||||
/**
|
||||
* trois grands dragons
|
||||
* 13/13
|
||||
|
|
@ -274,10 +331,19 @@ daisangen: function( //TODO
|
|||
groups: Array<Group>,
|
||||
wind: number
|
||||
): number {
|
||||
let gr = groups.concat(hand.toGroup() as NonNullable<Array<Group>>);
|
||||
gr = gr.filter(
|
||||
g => pon(g) &&
|
||||
g.getTiles().length === 3 &&
|
||||
g.getTiles()[0].getFamily() === 5
|
||||
);
|
||||
if (gr.length === 3) {
|
||||
return 13;
|
||||
}
|
||||
return 0;
|
||||
},
|
||||
|
||||
shousuushii: function( //TODO
|
||||
shousuushii: function(
|
||||
/**
|
||||
* quatre petits vents
|
||||
* 13/13
|
||||
|
|
@ -286,10 +352,29 @@ shousuushii: function( //TODO
|
|||
groups: Array<Group>,
|
||||
wind: number
|
||||
): number {
|
||||
let gr = groups.concat(hand.toGroup() as NonNullable<Array<Group>>);
|
||||
gr = gr.filter(g => pon(g));
|
||||
let nbPon = 0;
|
||||
let nbPair = 0;
|
||||
gr.forEach(
|
||||
g => {
|
||||
let t = g.getTiles();
|
||||
if (t[0].getFamily() === 4) {
|
||||
if (t.length === 3) {
|
||||
nbPon++;
|
||||
} else {
|
||||
nbPair++;
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
if (nbPon == 3 && nbPair == 1) {
|
||||
return 13;
|
||||
}
|
||||
return 0;
|
||||
},
|
||||
|
||||
daisuushi: function( //TODO
|
||||
daisuushi: function(
|
||||
/**
|
||||
* quatre grands vents
|
||||
* 13/13
|
||||
|
|
@ -298,6 +383,25 @@ daisuushi: function( //TODO
|
|||
groups: Array<Group>,
|
||||
wind: number
|
||||
): number {
|
||||
let gr = groups.concat(hand.toGroup() as NonNullable<Array<Group>>);
|
||||
gr = gr.filter(g => pon(g));
|
||||
let nbPon = 0;
|
||||
let nbPair = 0;
|
||||
gr.forEach(
|
||||
g => {
|
||||
let t = g.getTiles();
|
||||
if (t[0].getFamily() === 4) {
|
||||
if (t.length === 3) {
|
||||
nbPon++;
|
||||
} else {
|
||||
nbPair++;
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
if (nbPon == 4 && nbPair == 0) {
|
||||
return 13;
|
||||
}
|
||||
return 0;
|
||||
},
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue