Everyone go ponya !

This commit is contained in:
Didictateur 2025-03-24 23:10:20 +01:00
parent 69a2cc043b
commit 1831a7ac91
3 changed files with 65 additions and 39 deletions

View file

@ -122,7 +122,10 @@ export class Game {
} else { // nothing unusual
if (this.turn === 0 && this.selectedTile !== undefined) {
this.discard(0, this.selectedTile as NonNullable<number>);
this.turn++;
this.checkPon();
console.log("turn", this.turn, "\n");
this.turn = (this.turn + 1) % 4;
console.log("new turn", this.turn, "\n");
}
}
}
@ -157,6 +160,7 @@ export class Game {
if (
this.turn !== 0
) { // bot playing
console.log(this.turn, '\n');
if (!this.hasPicked) { // begin of his turn
this.lastPlayed = Date.now();
this.pick(this.turn);
@ -167,6 +171,7 @@ export class Game {
let n = Math.floor(this.hands[this.turn].length() * Math.random());
this.discard(this.turn, n);
this.hasPlayed = true;
this.checkPon();
this.canCall = this.canDoAChii().length > 0 || this.canDoAPon();
}
} else if (!this.canCall) { // end of his turn
@ -232,28 +237,39 @@ export class Game {
console.log("Chii !\n");
}
private canDoAPon(): boolean {
private checkPon(): void {
for (var p = 1; p < 4; p++) {
if (this.canDoAPon(p)) {
console.log(p, '\n');
this.pon(this.lastDiscard as NonNullable<number>, p);
break;
}
}
}
private canDoAPon(player: number = 0): boolean {
if (
this.lastDiscard !== undefined &&
this.lastDiscard !== 0 &&
this.turn !== 0
this.lastDiscard !== player &&
this.turn !== player
) {
let t = this.discards[this.lastDiscard][this.discards[this.lastDiscard].length-1];
return this.hands[0].count(t.getFamily(), t.getValue()) >= 2;
return this.hands[player].count(t.getFamily(), t.getValue()) >= 2;
} else {
return false;
}
}
private pon(p: number): void {
private pon(p: number, thief: number = 0): void {
console.log(thief, "stole", p, '\n');
let t = this.discards[p].pop() as NonNullable<Tile>;
this.lastDiscard = undefined;
let t2 = this.hands[0].find(t.getFamily(), t.getValue()) as NonNullable<Tile>;
let t3 = this.hands[0].find(t.getFamily(), t.getValue()) as NonNullable<Tile>;
let t2 = this.hands[thief].find(t.getFamily(), t.getValue()) as NonNullable<Tile>;
let t3 = this.hands[thief].find(t.getFamily(), t.getValue()) as NonNullable<Tile>;
[t, t2, t3].forEach(t => t.setTilt());
this.groups[0].push(new Group([t, t2, t3], p));
this.groups[thief].push(new Group([t, t2, t3], p, thief));
this.turn = 0;
this.turn = thief;
this.hasPicked = true;
this.hasPlayed = false;
}
@ -310,7 +326,7 @@ export class Game {
5 * this.sizeHiddenHand,
this.sizeHiddenHand,
undefined,
true,
false,
- pi / 2
);
this.hands[2].drawHand(
@ -320,7 +336,7 @@ export class Game {
5 * this.sizeHiddenHand,
this.sizeHiddenHand,
undefined,
true,
false,
- pi
);
this.hands[3].drawHand(
@ -330,7 +346,7 @@ export class Game {
5 * this.sizeHiddenHand,
this.sizeHiddenHand,
undefined,
true,
false,
pi / 2
);

View file

@ -2,11 +2,17 @@ import { Tile } from "./tile"
export class Group {
private tiles: Array<Tile>;
private stolenFrom: number|undefined;
private stolenFrom: number;
private belongsTo: number
public constructor(tiles: Array<Tile> = [], stolenFrom: number|undefined = undefined) {
public constructor(
tiles: Array<Tile>,
stolenFrom: number,
belongsTo: number
) {
this.tiles = tiles;
this.stolenFrom = stolenFrom;
this.belongsTo = belongsTo;
}
public push(tile: Tile): void {
@ -29,21 +35,23 @@ export class Group {
size: number,
rotation: number,
): void {
ctx.save();
ctx.translate(525, 525);
ctx.rotate(rotation);
ctx.translate(-525, -525);
console.log(x, y, '\n');
rotation = 0;
let v = 75 * size;
let w = 90 * size;
let vx = Math.cos(rotation);
let vy = Math.sin(rotation);
let osx = Math.sin(rotation) * 25 * size / 2;
let osy = Math.cos(rotation) * 25 * size / 2;
if (!this.stolenFrom) {
//TODO error
}
let p = 3 - (this.stolenFrom as NonNullable<number>);
let osy = 25 * size / 2;
let p = (this.belongsTo - this.stolenFrom - 1 + 4) % 4;
if (p === 0) {
this.tiles[0].drawTile(
ctx,
x + osx,
x,
y + osy,
size,
false,
@ -52,8 +60,8 @@ export class Group {
);
this.tiles[1].drawTile(
ctx,
x + vx * w,
y + vy * w,
x + w,
y,
size,
false,
0,
@ -61,8 +69,8 @@ export class Group {
);
this.tiles[2].drawTile(
ctx,
x + vx * (w + v + os * size),
y + vy * (w + v + os * size),
x + w + v + os * size,
y,
size,
false,
0,
@ -81,8 +89,8 @@ export class Group {
);
this.tiles[1].drawTile(
ctx,
x + vx * w + osx,
y + vy * w + osy,
x + w,
y + osy,
size,
false,
0 - 3.141592 / 2,
@ -90,8 +98,8 @@ export class Group {
);
this.tiles[2].drawTile(
ctx,
x + vx * (w + v + 3 *os * size),
y + vy * (w + v + 3 *os * size),
x + w + v + 3 *os * size,
y,
size,
false,
0,
@ -110,8 +118,8 @@ export class Group {
);
this.tiles[1].drawTile(
ctx,
x + vx * (v + os * size),
y + vy * (v + os * size),
x + v + os * size,
y,
size,
false,
0,
@ -119,8 +127,8 @@ export class Group {
);
this.tiles[2].drawTile(
ctx,
x + vx * (w + v + os * size) + osx,
y + vy * (w + v + os * size) + osy,
x + w + v + os * size,
y + osy,
size,
false,
0 - 3.141592 / 2,
@ -130,5 +138,7 @@ export class Group {
} else {
//TODO error
}
ctx.restore();
}
}

View file

@ -97,7 +97,7 @@ export class Hand {
if (groups !== undefined) {
this.tiles.push(t1);
this.sort();
groups.push(new Group([t1, t2]));
groups.push(new Group([t1, t2], 0, 0));
return groups;
}
}
@ -109,7 +109,7 @@ export class Hand {
this.tiles.push(t3);
this.sort();
if (groups !== undefined) {
groups.push(new Group([t1, t2, t3]));
groups.push(new Group([t1, t2, t3], 0, 0));
this.tiles.push(t1);
this.sort();
return groups;
@ -126,7 +126,7 @@ export class Hand {
this.tiles.push(t3);
this.sort();
if (groups !== undefined) {
groups.push(new Group([t3, t2, t1]));
groups.push(new Group([t3, t2, t1], 0, 0));
this.tiles.push(t1);
this.sort();
return groups;