trucoshi 0.0.4 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/build/lib/classes/Hand.js +87 -29
- package/build/lib/classes/Match.d.ts +2 -2
- package/build/lib/classes/Match.js +2 -3
- package/build/lib/classes/Play.js +6 -12
- package/build/lib/classes/Player.js +12 -0
- package/build/lib/classes/Round.d.ts +1 -1
- package/build/lib/classes/Round.js +5 -1
- package/build/lib/classes/Table.d.ts +2 -2
- package/build/lib/classes/Table.js +3 -10
- package/build/lib/classes/Team.js +8 -0
- package/build/lib/classes/Truco.d.ts +2 -0
- package/build/lib/classes/Truco.js +110 -0
- package/build/lib/constants.d.ts +6 -0
- package/build/lib/constants.js +8 -1
- package/build/lib/index.d.ts +13 -6
- package/build/lib/index.js +83 -10
- package/build/lib/types.d.ts +50 -5
- package/build/lib/types.js +2 -0
- package/build/lib/utils.d.ts +2 -2
- package/build/lib/utils.js +1 -18
- package/build/server/match.d.ts +0 -0
- package/build/server/match.js +1 -0
- package/build/test/autoplay.js +11 -2
- package/build/test/play.js +70 -51
- package/package.json +3 -2
- package/src/lib/classes/Hand.ts +82 -26
- package/src/lib/classes/Match.ts +3 -4
- package/src/lib/classes/Play.ts +9 -17
- package/src/lib/classes/Player.ts +13 -1
- package/src/lib/classes/Round.ts +5 -1
- package/src/lib/classes/Table.ts +8 -13
- package/src/lib/classes/Team.ts +7 -0
- package/src/lib/classes/Truco.ts +72 -0
- package/src/lib/constants.ts +8 -0
- package/src/lib/index.ts +95 -17
- package/src/lib/types.ts +51 -5
- package/src/lib/utils.ts +1 -22
- package/src/server/match.ts +0 -0
- package/src/test/autoplay.ts +12 -2
- package/src/test/play.ts +64 -55
package/build/lib/index.js
CHANGED
|
@@ -39,11 +39,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
39
39
|
exports.Trucoshi = void 0;
|
|
40
40
|
var Match_1 = require("./classes/Match");
|
|
41
41
|
var Player_1 = require("./classes/Player");
|
|
42
|
+
var Table_1 = require("./classes/Table");
|
|
42
43
|
var Team_1 = require("./classes/Team");
|
|
44
|
+
var constants_1 = require("./constants");
|
|
45
|
+
var types_1 = require("./types");
|
|
43
46
|
var GameLoop = function (match) {
|
|
44
47
|
var gameloop = {
|
|
48
|
+
_onTruco: function () { return Promise.resolve(); },
|
|
45
49
|
_onTurn: function () { return Promise.resolve(); },
|
|
46
50
|
_onWinner: function () { return Promise.resolve(); },
|
|
51
|
+
onTruco: function (callback) {
|
|
52
|
+
gameloop._onTruco = callback;
|
|
53
|
+
return gameloop;
|
|
54
|
+
},
|
|
47
55
|
onTurn: function (callback) {
|
|
48
56
|
gameloop._onTurn = callback;
|
|
49
57
|
return gameloop;
|
|
@@ -52,23 +60,31 @@ var GameLoop = function (match) {
|
|
|
52
60
|
gameloop._onWinner = callback;
|
|
53
61
|
return gameloop;
|
|
54
62
|
},
|
|
55
|
-
|
|
63
|
+
begin: function () {
|
|
56
64
|
return __awaiter(this, void 0, void 0, function () {
|
|
57
65
|
var play;
|
|
58
66
|
return __generator(this, function (_a) {
|
|
59
67
|
switch (_a.label) {
|
|
60
68
|
case 0:
|
|
61
|
-
if (!!match.winner) return [3 /*break*/,
|
|
69
|
+
if (!!match.winner) return [3 /*break*/, 5];
|
|
62
70
|
play = match.play();
|
|
63
71
|
if (!play || !play.player) {
|
|
64
72
|
return [3 /*break*/, 0];
|
|
65
73
|
}
|
|
66
|
-
return [
|
|
74
|
+
if (!(play.state === types_1.EHandState.WAITING_FOR_TRUCO_ANSWER)) return [3 /*break*/, 2];
|
|
75
|
+
return [4 /*yield*/, gameloop._onTruco(play)];
|
|
67
76
|
case 1:
|
|
68
77
|
_a.sent();
|
|
69
78
|
return [3 /*break*/, 0];
|
|
70
|
-
case 2:
|
|
79
|
+
case 2:
|
|
80
|
+
if (!(play.state === types_1.EHandState.WAITING_PLAY)) return [3 /*break*/, 4];
|
|
81
|
+
return [4 /*yield*/, gameloop._onTurn(play)];
|
|
71
82
|
case 3:
|
|
83
|
+
_a.sent();
|
|
84
|
+
return [3 /*break*/, 0];
|
|
85
|
+
case 4: return [3 /*break*/, 0];
|
|
86
|
+
case 5: return [4 /*yield*/, gameloop._onWinner(match.winner, match.teams)];
|
|
87
|
+
case 6:
|
|
72
88
|
_a.sent();
|
|
73
89
|
return [2 /*return*/];
|
|
74
90
|
}
|
|
@@ -78,11 +94,68 @@ var GameLoop = function (match) {
|
|
|
78
94
|
};
|
|
79
95
|
return gameloop;
|
|
80
96
|
};
|
|
81
|
-
function Trucoshi(
|
|
82
|
-
var
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
97
|
+
function Trucoshi(teamSize) {
|
|
98
|
+
var trucoshi = {
|
|
99
|
+
lastTeamIdx: 1,
|
|
100
|
+
_players: new Map(),
|
|
101
|
+
get players() {
|
|
102
|
+
return Array.from(trucoshi._players.values());
|
|
103
|
+
},
|
|
104
|
+
teams: [],
|
|
105
|
+
table: null,
|
|
106
|
+
maxPlayers: teamSize ? teamSize * 2 : 6,
|
|
107
|
+
full: false,
|
|
108
|
+
ready: false,
|
|
109
|
+
calculateReady: function () {
|
|
110
|
+
trucoshi.ready = trucoshi.players.reduce(function (prev, curr) { return prev && curr.ready; }, true);
|
|
111
|
+
return trucoshi.ready;
|
|
112
|
+
},
|
|
113
|
+
calculateFull: function () {
|
|
114
|
+
trucoshi.full = trucoshi._players.size >= trucoshi.maxPlayers;
|
|
115
|
+
return trucoshi.full;
|
|
116
|
+
},
|
|
117
|
+
addPlayer: function (id, teamIdx) {
|
|
118
|
+
var maxSize = teamSize ? teamSize : 3;
|
|
119
|
+
if (trucoshi.full || trucoshi.players.filter(function (p) { return p.teamIdx === teamIdx; }).length > maxSize) {
|
|
120
|
+
throw new Error(constants_1.GAME_ERROR.TEAM_IS_FULL);
|
|
121
|
+
}
|
|
122
|
+
var player = (0, Player_1.Player)(id, teamIdx !== undefined ? teamIdx : Number(!trucoshi.lastTeamIdx));
|
|
123
|
+
trucoshi.lastTeamIdx = Number(!trucoshi.lastTeamIdx);
|
|
124
|
+
trucoshi._players.set(id, player);
|
|
125
|
+
trucoshi.calculateFull();
|
|
126
|
+
trucoshi.calculateReady();
|
|
127
|
+
return player;
|
|
128
|
+
},
|
|
129
|
+
removePlayer: function (id) {
|
|
130
|
+
trucoshi._players.delete(id);
|
|
131
|
+
trucoshi.calculateFull();
|
|
132
|
+
trucoshi.calculateReady();
|
|
133
|
+
return trucoshi;
|
|
134
|
+
},
|
|
135
|
+
startMatch: function (matchPoint) {
|
|
136
|
+
if (matchPoint === void 0) { matchPoint = 9; }
|
|
137
|
+
trucoshi.calculateReady();
|
|
138
|
+
var teamSize = trucoshi._players.size / 2;
|
|
139
|
+
if (!constants_1.TEAM_SIZE_VALUES.includes(teamSize)) {
|
|
140
|
+
throw new Error(constants_1.GAME_ERROR.UNEXPECTED_TEAM_SIZE);
|
|
141
|
+
}
|
|
142
|
+
if (!trucoshi.ready) {
|
|
143
|
+
throw new Error(constants_1.GAME_ERROR.TEAM_NOT_READY);
|
|
144
|
+
}
|
|
145
|
+
trucoshi.teams.push((0, Team_1.Team)(trucoshi.players.filter(function (p) { return p.teamIdx === 0; })));
|
|
146
|
+
trucoshi.teams.push((0, Team_1.Team)(trucoshi.players.filter(function (p) { return p.teamIdx === 1; })));
|
|
147
|
+
if (trucoshi.teams[0].players.length !== teamSize ||
|
|
148
|
+
trucoshi.teams[1].players.length !== teamSize) {
|
|
149
|
+
throw new Error(constants_1.GAME_ERROR.UNEXPECTED_TEAM_SIZE);
|
|
150
|
+
}
|
|
151
|
+
trucoshi.table = (0, Table_1.Table)(trucoshi.players, trucoshi.teams);
|
|
152
|
+
return GameLoop((0, Match_1.Match)(trucoshi.table, trucoshi.teams, matchPoint));
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
return {
|
|
156
|
+
addPlayer: trucoshi.addPlayer,
|
|
157
|
+
removePlayer: trucoshi.removePlayer,
|
|
158
|
+
startMatch: trucoshi.startMatch,
|
|
159
|
+
};
|
|
87
160
|
}
|
|
88
161
|
exports.Trucoshi = Trucoshi;
|
package/build/lib/types.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { IGameLoop } from ".";
|
|
1
2
|
import { CARDS } from "./constants";
|
|
2
3
|
export type ICard = keyof typeof CARDS;
|
|
3
4
|
export interface IDeck {
|
|
@@ -14,7 +15,13 @@ export interface IPlayer {
|
|
|
14
15
|
teamIdx: number;
|
|
15
16
|
id: string;
|
|
16
17
|
hand: Array<ICard>;
|
|
18
|
+
commands: Array<ECommand>;
|
|
17
19
|
usedHand: Array<ICard>;
|
|
20
|
+
disabled: boolean;
|
|
21
|
+
ready: boolean;
|
|
22
|
+
enable(): void;
|
|
23
|
+
disable(): void;
|
|
24
|
+
setReady(ready: boolean): void;
|
|
18
25
|
setHand(hand: Array<ICard>): Array<ICard>;
|
|
19
26
|
useCard(idx: number): ICard | null;
|
|
20
27
|
}
|
|
@@ -22,6 +29,8 @@ export interface ITeam {
|
|
|
22
29
|
_players: Map<string, IPlayer>;
|
|
23
30
|
players: Array<IPlayer>;
|
|
24
31
|
points: TeamPoints;
|
|
32
|
+
isTeamDisabled(): boolean;
|
|
33
|
+
disable(player: IPlayer): boolean;
|
|
25
34
|
addPoints(matchPoint: number, points: number): TeamPoints;
|
|
26
35
|
}
|
|
27
36
|
export interface IMatch {
|
|
@@ -52,6 +61,8 @@ export interface RoundPoints {
|
|
|
52
61
|
ties: number;
|
|
53
62
|
}
|
|
54
63
|
export declare enum ESayCommand {
|
|
64
|
+
QUIERO = "QUIERO",
|
|
65
|
+
NO_QUIERO = "NO_QUIERO",
|
|
55
66
|
TRUCO = "TRUCO",
|
|
56
67
|
MAZO = "MAZO",
|
|
57
68
|
FLOR = "FLOR",
|
|
@@ -64,9 +75,21 @@ export declare enum EEnvidoCommand {
|
|
|
64
75
|
FALTA_ENVIDO = "FALTA_ENVIDO"
|
|
65
76
|
}
|
|
66
77
|
export type ECommand = ESayCommand | EEnvidoCommand;
|
|
67
|
-
export interface
|
|
78
|
+
export interface ITruco {
|
|
68
79
|
state: 1 | 2 | 3 | 4;
|
|
69
80
|
teamIdx: 0 | 1 | null;
|
|
81
|
+
answer: boolean | null;
|
|
82
|
+
turn: number;
|
|
83
|
+
players: Array<IPlayer>;
|
|
84
|
+
currentPlayer: IPlayer | null;
|
|
85
|
+
generator: Generator<ITruco, void, unknown>;
|
|
86
|
+
sayTruco(teamIdx: 0 | 1, players: Array<IPlayer>): ITruco;
|
|
87
|
+
setPlayers(players: Array<IPlayer>): void;
|
|
88
|
+
setAnswer(answer: boolean | null): ITruco;
|
|
89
|
+
setTurn(turn: number): number;
|
|
90
|
+
setTeam(idx: 0 | 1): 0 | 1;
|
|
91
|
+
setCurrentPlayer(player: IPlayer | null): IPlayer | null;
|
|
92
|
+
getNextPlayer(): IteratorResult<ITruco, ITruco | void>;
|
|
70
93
|
}
|
|
71
94
|
export interface EnvidoState {
|
|
72
95
|
accept: number;
|
|
@@ -78,7 +101,7 @@ export interface IPlayInstance {
|
|
|
78
101
|
handIdx: number;
|
|
79
102
|
roundIdx: number;
|
|
80
103
|
state: EHandState;
|
|
81
|
-
truco:
|
|
104
|
+
truco: ITruco;
|
|
82
105
|
envido: EnvidoState;
|
|
83
106
|
player: IPlayer | null;
|
|
84
107
|
commands: Array<ECommand> | null;
|
|
@@ -100,15 +123,18 @@ export interface IHand {
|
|
|
100
123
|
state: EHandState;
|
|
101
124
|
turn: number;
|
|
102
125
|
points: HandPoints;
|
|
103
|
-
truco:
|
|
126
|
+
truco: ITruco;
|
|
104
127
|
envido: EnvidoState;
|
|
105
128
|
rounds: Array<IRound>;
|
|
106
|
-
|
|
129
|
+
_currentPlayer: IPlayer | null;
|
|
130
|
+
get currentPlayer(): IPlayer | null;
|
|
131
|
+
set currentPlayer(player: IPlayer | null);
|
|
107
132
|
currentRound: IRound | null;
|
|
108
|
-
disabledPlayerIds: Array<string>;
|
|
109
133
|
commands: IHandCommands;
|
|
110
134
|
finished: () => boolean;
|
|
111
135
|
play(): IPlayInstance | null;
|
|
136
|
+
nextTurn(): void;
|
|
137
|
+
use(idx: number): ICard | null;
|
|
112
138
|
pushRound(round: IRound): IRound;
|
|
113
139
|
setTurn(turn: number): IPlayer;
|
|
114
140
|
addPoints(team: 0 | 1, points: number): void;
|
|
@@ -118,6 +144,23 @@ export interface IHand {
|
|
|
118
144
|
setState(state: EHandState): EHandState;
|
|
119
145
|
getNextPlayer(): IteratorResult<IHand, IHand | void>;
|
|
120
146
|
}
|
|
147
|
+
export interface IPrivateTrucoshi {
|
|
148
|
+
lastTeamIdx: 0 | 1;
|
|
149
|
+
_players: Map<string, IPlayer>;
|
|
150
|
+
get players(): Array<IPlayer>;
|
|
151
|
+
teams: Array<ITeam>;
|
|
152
|
+
maxPlayers: number;
|
|
153
|
+
table: ITable | null;
|
|
154
|
+
ready: boolean;
|
|
155
|
+
full: boolean;
|
|
156
|
+
addPlayer(id: string, teamIdx?: 0 | 1): IPlayer;
|
|
157
|
+
removePlayer(id: string): ITrucoshi;
|
|
158
|
+
calculateReady(): boolean;
|
|
159
|
+
calculateFull(): boolean;
|
|
160
|
+
startMatch(matchPoint?: 9 | 12 | 15): IGameLoop;
|
|
161
|
+
}
|
|
162
|
+
export interface ITrucoshi extends Pick<IPrivateTrucoshi, 'addPlayer' | 'removePlayer' | 'startMatch'> {
|
|
163
|
+
}
|
|
121
164
|
export interface ITable {
|
|
122
165
|
forehandIdx: number;
|
|
123
166
|
cards: Array<Array<IPlayedCard>>;
|
|
@@ -131,6 +174,8 @@ export interface IRound {
|
|
|
131
174
|
winner: IPlayer | null;
|
|
132
175
|
highest: number;
|
|
133
176
|
cards: Array<IPlayedCard>;
|
|
177
|
+
turn: number;
|
|
178
|
+
nextTurn(): void;
|
|
134
179
|
use(playedCard: IPlayedCard): ICard;
|
|
135
180
|
}
|
|
136
181
|
export type IEnvidoCalculatorResult = {
|
package/build/lib/types.js
CHANGED
|
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.EHandState = exports.EEnvidoCommand = exports.ESayCommand = void 0;
|
|
4
4
|
var ESayCommand;
|
|
5
5
|
(function (ESayCommand) {
|
|
6
|
+
ESayCommand["QUIERO"] = "QUIERO";
|
|
7
|
+
ESayCommand["NO_QUIERO"] = "NO_QUIERO";
|
|
6
8
|
ESayCommand["TRUCO"] = "TRUCO";
|
|
7
9
|
ESayCommand["MAZO"] = "MAZO";
|
|
8
10
|
ESayCommand["FLOR"] = "FLOR";
|
package/build/lib/utils.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ICard, IRound
|
|
1
|
+
import { ICard, IRound } from "./types";
|
|
2
2
|
export declare function getMaxNumberIndex<T = number>(array: Array<T>): number;
|
|
3
3
|
export declare function getCardValue(card: ICard): number;
|
|
4
4
|
export declare function shuffleArray<T = unknown>(array: Array<T>): T[];
|
|
5
|
-
export declare function checkHandWinner(rounds: Array<IRound>, forehandTeamIdx: 0 | 1
|
|
5
|
+
export declare function checkHandWinner(rounds: Array<IRound>, forehandTeamIdx: 0 | 1): null | 0 | 1;
|
package/build/lib/utils.js
CHANGED
|
@@ -23,25 +23,8 @@ function shuffleArray(array) {
|
|
|
23
23
|
return array;
|
|
24
24
|
}
|
|
25
25
|
exports.shuffleArray = shuffleArray;
|
|
26
|
-
function checkHandWinner(rounds, forehandTeamIdx
|
|
26
|
+
function checkHandWinner(rounds, forehandTeamIdx) {
|
|
27
27
|
var _a, _b;
|
|
28
|
-
var winningTeamIdx = null;
|
|
29
|
-
// End hand if all players in one team go MAZO
|
|
30
|
-
if (disabledPlayerIds.length) {
|
|
31
|
-
var disabledTeams = teams.map(function (team) {
|
|
32
|
-
var forfeited = team.players.filter(function (player) { return disabledPlayerIds.includes(player.id); });
|
|
33
|
-
return forfeited.length === team.players.length;
|
|
34
|
-
});
|
|
35
|
-
if (disabledTeams[0] && disabledTeams[1]) {
|
|
36
|
-
return forehandTeamIdx;
|
|
37
|
-
}
|
|
38
|
-
if (disabledTeams[0]) {
|
|
39
|
-
return 1;
|
|
40
|
-
}
|
|
41
|
-
if (disabledTeams[1]) {
|
|
42
|
-
return 0;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
28
|
var roundsWon = {
|
|
46
29
|
0: 0,
|
|
47
30
|
1: 0,
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
package/build/test/autoplay.js
CHANGED
|
@@ -38,8 +38,17 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
var lib_1 = require("../lib");
|
|
40
40
|
(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
41
|
+
var trucoshi;
|
|
41
42
|
return __generator(this, function (_a) {
|
|
42
|
-
(0, lib_1.Trucoshi)(
|
|
43
|
+
trucoshi = (0, lib_1.Trucoshi)();
|
|
44
|
+
trucoshi.addPlayer("lukini").setReady(true);
|
|
45
|
+
trucoshi.addPlayer("denoph").setReady(true);
|
|
46
|
+
trucoshi.addPlayer("guada").setReady(true);
|
|
47
|
+
trucoshi.addPlayer("juli").setReady(true);
|
|
48
|
+
trucoshi.addPlayer("day").setReady(true);
|
|
49
|
+
trucoshi.addPlayer("fran").setReady(true);
|
|
50
|
+
trucoshi
|
|
51
|
+
.startMatch()
|
|
43
52
|
.onTurn(function (play) { return __awaiter(void 0, void 0, void 0, function () {
|
|
44
53
|
var name, randomIdx, handString, card;
|
|
45
54
|
var _a;
|
|
@@ -79,7 +88,7 @@ var lib_1 = require("../lib");
|
|
|
79
88
|
return [2 /*return*/];
|
|
80
89
|
});
|
|
81
90
|
}); })
|
|
82
|
-
.
|
|
91
|
+
.begin();
|
|
83
92
|
return [2 /*return*/];
|
|
84
93
|
});
|
|
85
94
|
}); })();
|
package/build/test/play.js
CHANGED
|
@@ -70,7 +70,6 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
70
70
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
71
71
|
var readline = __importStar(require("readline"));
|
|
72
72
|
var lib_1 = require("../lib");
|
|
73
|
-
var types_1 = require("../lib/types");
|
|
74
73
|
var command = function (title, onLine) {
|
|
75
74
|
var promise = function () {
|
|
76
75
|
return new Promise(function (resolve) {
|
|
@@ -111,70 +110,90 @@ var command = function (title, onLine) {
|
|
|
111
110
|
};
|
|
112
111
|
return promise;
|
|
113
112
|
};
|
|
113
|
+
var playCommand = function (play) {
|
|
114
|
+
var _a, _b, _d;
|
|
115
|
+
return command("".concat((_a = play.player) === null || _a === void 0 ? void 0 : _a.id, " elije una carta [").concat((_b = play.player) === null || _b === void 0 ? void 0 : _b.hand.map(function (_c, i) { return i + 1; }), "]: ").concat(JSON.stringify((_d = play.player) === null || _d === void 0 ? void 0 : _d.hand), "\n"), function (idx) { return __awaiter(void 0, void 0, void 0, function () {
|
|
116
|
+
var playedCard, handString;
|
|
117
|
+
var _a;
|
|
118
|
+
return __generator(this, function (_b) {
|
|
119
|
+
playedCard = play.use(Number(idx) - 1);
|
|
120
|
+
if (!playedCard) {
|
|
121
|
+
return [2 /*return*/, Promise.reject()];
|
|
122
|
+
}
|
|
123
|
+
handString = JSON.stringify((_a = play.player) === null || _a === void 0 ? void 0 : _a.hand);
|
|
124
|
+
console.log("\n".concat(handString, "\nUsing ").concat(playedCard));
|
|
125
|
+
console.log(play.rounds && play.rounds.length
|
|
126
|
+
? play.rounds.map(function (round) {
|
|
127
|
+
return round.cards.length ? round.cards.map(function (c) { return [c.player.id, c.card]; }) : "";
|
|
128
|
+
})
|
|
129
|
+
: "");
|
|
130
|
+
return [2 /*return*/, Promise.resolve()];
|
|
131
|
+
});
|
|
132
|
+
}); });
|
|
133
|
+
};
|
|
134
|
+
var sayCommand = function (play, canPlay) {
|
|
135
|
+
var _a, _b;
|
|
136
|
+
return command("".concat((_a = play.player) === null || _a === void 0 ? void 0 : _a.id, " elije una accion [").concat(canPlay ? "0," : "").concat((_b = play.commands) === null || _b === void 0 ? void 0 : _b.map(function (_c, i) { return i + 1; }), "]: ").concat(canPlay ? JSON.stringify(__spreadArray(["CARTA"], (play.commands || []), true)) : JSON.stringify(play.commands), "\n"), function (idx, close) { return __awaiter(void 0, void 0, void 0, function () {
|
|
137
|
+
var selectedCommand;
|
|
138
|
+
var _a;
|
|
139
|
+
return __generator(this, function (_b) {
|
|
140
|
+
switch (_b.label) {
|
|
141
|
+
case 0:
|
|
142
|
+
selectedCommand = (_a = play.commands) === null || _a === void 0 ? void 0 : _a[Number(idx) - 1];
|
|
143
|
+
if (selectedCommand) {
|
|
144
|
+
play.say(selectedCommand);
|
|
145
|
+
return [2 /*return*/, Promise.resolve()];
|
|
146
|
+
}
|
|
147
|
+
if (!(idx === "0" && canPlay)) return [3 /*break*/, 2];
|
|
148
|
+
close();
|
|
149
|
+
return [4 /*yield*/, playCommand(play)()];
|
|
150
|
+
case 1:
|
|
151
|
+
_b.sent();
|
|
152
|
+
return [2 /*return*/, Promise.resolve()];
|
|
153
|
+
case 2: return [2 /*return*/, Promise.reject()];
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
}); });
|
|
157
|
+
};
|
|
114
158
|
(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
159
|
+
var trucoshi;
|
|
115
160
|
return __generator(this, function (_a) {
|
|
116
|
-
(0, lib_1.Trucoshi)(
|
|
161
|
+
trucoshi = (0, lib_1.Trucoshi)();
|
|
162
|
+
trucoshi.addPlayer("lukini", 0).setReady(true);
|
|
163
|
+
trucoshi.addPlayer("guada", 0).setReady(true);
|
|
164
|
+
trucoshi.addPlayer("denoph", 1).setReady(true);
|
|
165
|
+
trucoshi.addPlayer("juli", 1).setReady(true);
|
|
166
|
+
trucoshi
|
|
167
|
+
.startMatch()
|
|
168
|
+
.onTruco(function (play) { return __awaiter(void 0, void 0, void 0, function () {
|
|
169
|
+
return __generator(this, function (_a) {
|
|
170
|
+
switch (_a.label) {
|
|
171
|
+
case 0: return [4 /*yield*/, sayCommand(play, false)()];
|
|
172
|
+
case 1:
|
|
173
|
+
_a.sent();
|
|
174
|
+
return [2 /*return*/];
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
}); })
|
|
117
178
|
.onTurn(function (play) { return __awaiter(void 0, void 0, void 0, function () {
|
|
118
|
-
var name
|
|
119
|
-
var _a
|
|
120
|
-
return __generator(this, function (
|
|
121
|
-
switch (
|
|
179
|
+
var name;
|
|
180
|
+
var _a;
|
|
181
|
+
return __generator(this, function (_b) {
|
|
182
|
+
switch (_b.label) {
|
|
122
183
|
case 0:
|
|
123
184
|
name = (_a = play.player) === null || _a === void 0 ? void 0 : _a.id.toUpperCase();
|
|
124
185
|
console.log("=== Mano ".concat(play.handIdx, " === Ronda ").concat(play.roundIdx, " === Turno de ").concat(name, " ==="));
|
|
125
186
|
play.teams.map(function (team, id) {
|
|
126
187
|
return console.log("=== Team ".concat(id, " = ").concat(team.points.malas, " malas ").concat(team.points.buenas, " buenas"));
|
|
127
188
|
});
|
|
128
|
-
canPlay = play.state === types_1.EHandState.WAITING_PLAY;
|
|
129
189
|
console.log(play.rounds && play.rounds.length
|
|
130
190
|
? play.rounds.map(function (round) {
|
|
131
191
|
return round.cards.length ? round.cards.map(function (c) { return [c.player.id, c.card]; }) : "";
|
|
132
192
|
})
|
|
133
193
|
: "");
|
|
134
|
-
|
|
135
|
-
? JSON.stringify(__spreadArray(["CARTA"], (play.commands || []), true))
|
|
136
|
-
: JSON.stringify(play.commands), "\n"), function (idx, close) { return __awaiter(void 0, void 0, void 0, function () {
|
|
137
|
-
var selectedCommand;
|
|
138
|
-
var _a;
|
|
139
|
-
return __generator(this, function (_b) {
|
|
140
|
-
switch (_b.label) {
|
|
141
|
-
case 0:
|
|
142
|
-
selectedCommand = (_a = play.commands) === null || _a === void 0 ? void 0 : _a[Number(idx) - 1];
|
|
143
|
-
if (selectedCommand) {
|
|
144
|
-
play.say(selectedCommand);
|
|
145
|
-
return [2 /*return*/, Promise.resolve()];
|
|
146
|
-
}
|
|
147
|
-
if (!(idx === "0" && canPlay)) return [3 /*break*/, 2];
|
|
148
|
-
close();
|
|
149
|
-
return [4 /*yield*/, playCommand()];
|
|
150
|
-
case 1:
|
|
151
|
-
_b.sent();
|
|
152
|
-
return [2 /*return*/, Promise.resolve()];
|
|
153
|
-
case 2: return [2 /*return*/, Promise.reject()];
|
|
154
|
-
}
|
|
155
|
-
});
|
|
156
|
-
}); });
|
|
157
|
-
playCommand = command("".concat((_e = play.player) === null || _e === void 0 ? void 0 : _e.id, " elije una carta [").concat((_f = play.player) === null || _f === void 0 ? void 0 : _f.hand.map(function (_c, i) { return i + 1; }), "]: ").concat(JSON.stringify((_g = play.player) === null || _g === void 0 ? void 0 : _g.hand), "\n"), function (idx) { return __awaiter(void 0, void 0, void 0, function () {
|
|
158
|
-
var playedCard, handString;
|
|
159
|
-
var _a;
|
|
160
|
-
return __generator(this, function (_b) {
|
|
161
|
-
playedCard = play.use(Number(idx) - 1);
|
|
162
|
-
if (!playedCard) {
|
|
163
|
-
return [2 /*return*/, Promise.reject()];
|
|
164
|
-
}
|
|
165
|
-
handString = JSON.stringify((_a = play.player) === null || _a === void 0 ? void 0 : _a.hand);
|
|
166
|
-
console.log("\n".concat(handString, "\nUsing ").concat(playedCard));
|
|
167
|
-
console.log(play.rounds && play.rounds.length
|
|
168
|
-
? play.rounds.map(function (round) {
|
|
169
|
-
return round.cards.length ? round.cards.map(function (c) { return [c.player.id, c.card]; }) : "";
|
|
170
|
-
})
|
|
171
|
-
: "");
|
|
172
|
-
return [2 /*return*/, Promise.resolve()];
|
|
173
|
-
});
|
|
174
|
-
}); });
|
|
175
|
-
return [4 /*yield*/, sayCommand()];
|
|
194
|
+
return [4 /*yield*/, sayCommand(play, true)()];
|
|
176
195
|
case 1:
|
|
177
|
-
|
|
196
|
+
_b.sent();
|
|
178
197
|
return [2 /*return*/];
|
|
179
198
|
}
|
|
180
199
|
});
|
|
@@ -188,7 +207,7 @@ var command = function (title, onLine) {
|
|
|
188
207
|
return [2 /*return*/];
|
|
189
208
|
});
|
|
190
209
|
}); })
|
|
191
|
-
.
|
|
210
|
+
.begin();
|
|
192
211
|
return [2 /*return*/];
|
|
193
212
|
});
|
|
194
213
|
}); })();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "trucoshi",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.6",
|
|
4
4
|
"main": "build/lib/trucoshi.js",
|
|
5
5
|
"license": "GPL-3.0",
|
|
6
6
|
"scripts": {
|
|
@@ -16,9 +16,10 @@
|
|
|
16
16
|
"nodemon": "^2.0.20"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"socket.io": "^4.5.4",
|
|
20
19
|
"rimraf": "^4.1.1",
|
|
20
|
+
"socket.io": "^4.5.4",
|
|
21
21
|
"ts-node": "^10.9.1",
|
|
22
|
+
"tsc": "^2.0.4",
|
|
22
23
|
"typescript": "^4.9.4"
|
|
23
24
|
}
|
|
24
25
|
}
|