trucoshi 0.1.8 → 0.2.0

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.
Files changed (39) hide show
  1. package/LICENSE +674 -674
  2. package/README.md +60 -37
  3. package/dist/index.d.ts +2 -2
  4. package/dist/index.js +18 -18
  5. package/dist/lib/classes/Deck.d.ts +16 -16
  6. package/dist/lib/classes/Deck.js +38 -38
  7. package/dist/lib/classes/GameLoop.d.ts +20 -20
  8. package/dist/lib/classes/GameLoop.js +61 -103
  9. package/dist/lib/classes/Hand.d.ts +38 -38
  10. package/dist/lib/classes/Hand.js +184 -233
  11. package/dist/lib/classes/Lobby.d.ts +27 -27
  12. package/dist/lib/classes/Lobby.js +112 -113
  13. package/dist/lib/classes/Match.d.ts +18 -18
  14. package/dist/lib/classes/Match.js +72 -115
  15. package/dist/lib/classes/Play.d.ts +21 -21
  16. package/dist/lib/classes/Play.js +39 -39
  17. package/dist/lib/classes/Player.d.ts +26 -26
  18. package/dist/lib/classes/Player.js +67 -77
  19. package/dist/lib/classes/Round.d.ts +17 -17
  20. package/dist/lib/classes/Round.js +33 -34
  21. package/dist/lib/classes/Table.d.ts +12 -12
  22. package/dist/lib/classes/Table.js +30 -30
  23. package/dist/lib/classes/Team.d.ts +19 -19
  24. package/dist/lib/classes/Team.js +48 -50
  25. package/dist/lib/classes/Truco.d.ts +18 -18
  26. package/dist/lib/classes/Truco.js +70 -110
  27. package/dist/lib/classes/index.d.ts +11 -11
  28. package/dist/lib/classes/index.js +27 -27
  29. package/dist/lib/constants.d.ts +45 -45
  30. package/dist/lib/constants.js +84 -85
  31. package/dist/lib/index.d.ts +2 -2
  32. package/dist/lib/index.js +18 -18
  33. package/dist/lib/types.d.ts +50 -50
  34. package/dist/lib/types.js +34 -34
  35. package/dist/lib/utils.d.ts +5 -5
  36. package/dist/lib/utils.js +58 -59
  37. package/dist/types.d.ts +133 -101
  38. package/dist/types.js +65 -65
  39. package/package.json +1 -1
@@ -1,233 +1,184 @@
1
- "use strict";
2
- var __generator = (this && this.__generator) || function (thisArg, body) {
3
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
4
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
5
- function verb(n) { return function (v) { return step([n, v]); }; }
6
- function step(op) {
7
- if (f) throw new TypeError("Generator is already executing.");
8
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
9
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
10
- if (y = 0, t) op = [op[0] & 2, t.value];
11
- switch (op[0]) {
12
- case 0: case 1: t = op; break;
13
- case 4: _.label++; return { value: op[1], done: false };
14
- case 5: _.label++; y = op[1]; op = [0]; continue;
15
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
16
- default:
17
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
18
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
19
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
20
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
21
- if (t[2]) _.ops.pop();
22
- _.trys.pop(); continue;
23
- }
24
- op = body.call(thisArg, _);
25
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
26
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
27
- }
28
- };
29
- Object.defineProperty(exports, "__esModule", { value: true });
30
- exports.Hand = void 0;
31
- var types_1 = require("../../types");
32
- var utils_1 = require("../utils");
33
- var Deck_1 = require("./Deck");
34
- var Play_1 = require("./Play");
35
- var Round_1 = require("./Round");
36
- var Truco_1 = require("./Truco");
37
- function Hand(match, deck, idx) {
38
- var _a;
39
- match.teams.forEach(function (team) {
40
- team.players.forEach(function (player) {
41
- var playerHand = [deck.takeCard(), deck.takeCard(), deck.takeCard()];
42
- player.setHand(playerHand);
43
- player.enable();
44
- // player.setHand(["5c", "4c", "6c"])
45
- });
46
- });
47
- function roundsGeneratorSequence() {
48
- var currentRoundIdx, forehandTeamIdx, round, previousRound, newTurn, value, player, winnerTeamIdx;
49
- return __generator(this, function (_a) {
50
- switch (_a.label) {
51
- case 0:
52
- currentRoundIdx = 0;
53
- forehandTeamIdx = match.table.player(hand.turn).teamIdx;
54
- _a.label = 1;
55
- case 1:
56
- if (!(currentRoundIdx < 3 && !hand.finished())) return [3 /*break*/, 9];
57
- round = (0, Round_1.Round)(0);
58
- hand.setCurrentRound(round);
59
- hand.pushRound(round);
60
- previousRound = hand.rounds[currentRoundIdx - 1];
61
- // Put previous round winner as forehand
62
- if (previousRound && previousRound.winner && !previousRound.tie) {
63
- newTurn = match.table.getPlayerPosition(previousRound.winner.id);
64
- if (newTurn !== -1) {
65
- hand.setTurn(newTurn);
66
- }
67
- }
68
- _a.label = 2;
69
- case 2:
70
- if (!(round.turn < match.table.players.length)) return [3 /*break*/, 8];
71
- _a.label = 3;
72
- case 3:
73
- if (!(hand.state === types_1.EHandState.WAITING_FOR_TRUCO_ANSWER)) return [3 /*break*/, 6];
74
- value = hand.truco.getNextPlayer().value;
75
- if (!(value && value.currentPlayer)) return [3 /*break*/, 5];
76
- hand.setCurrentPlayer(value.currentPlayer);
77
- return [4 /*yield*/, hand];
78
- case 4:
79
- _a.sent();
80
- _a.label = 5;
81
- case 5: return [3 /*break*/, 3];
82
- case 6:
83
- player = match.table.player(hand.turn);
84
- hand.setCurrentPlayer(player);
85
- if (player.disabled) {
86
- hand.setCurrentPlayer(null);
87
- }
88
- return [4 /*yield*/, hand];
89
- case 7:
90
- _a.sent();
91
- return [3 /*break*/, 2];
92
- case 8:
93
- if (match.teams[0].isTeamDisabled() && match.teams[1].isTeamDisabled()) {
94
- hand.setState(types_1.EHandState.FINISHED);
95
- return [3 /*break*/, 9];
96
- }
97
- winnerTeamIdx = (0, utils_1.checkHandWinner)(hand.rounds, forehandTeamIdx);
98
- if (match.teams[0].isTeamDisabled()) {
99
- winnerTeamIdx = 1;
100
- }
101
- if (match.teams[1].isTeamDisabled()) {
102
- winnerTeamIdx = 0;
103
- }
104
- if (winnerTeamIdx !== null) {
105
- hand.addPoints(winnerTeamIdx, hand.truco.state);
106
- hand.setState(types_1.EHandState.FINISHED);
107
- }
108
- currentRoundIdx++;
109
- return [3 /*break*/, 1];
110
- case 9: return [4 /*yield*/, hand];
111
- case 10:
112
- _a.sent();
113
- return [2 /*return*/];
114
- }
115
- });
116
- }
117
- var roundsGenerator = roundsGeneratorSequence();
118
- var commands = (_a = {},
119
- _a[types_1.ESayCommand.MAZO] = function (player) {
120
- hand.disablePlayer(player);
121
- },
122
- _a[types_1.ESayCommand.TRUCO] = function (player) {
123
- var teamIdx = hand.truco.teamIdx;
124
- if (teamIdx === null || teamIdx !== player.teamIdx) {
125
- hand.setState(types_1.EHandState.WAITING_FOR_TRUCO_ANSWER);
126
- hand.truco.sayTruco(player.teamIdx, match.teams[Number(!player.teamIdx)].players);
127
- }
128
- },
129
- _a[types_1.ESayCommand.QUIERO] = function () {
130
- if (hand.state === types_1.EHandState.WAITING_FOR_TRUCO_ANSWER) {
131
- hand.truco.setAnswer(true);
132
- hand.setState(types_1.EHandState.WAITING_PLAY);
133
- }
134
- },
135
- _a[types_1.ESayCommand.NO_QUIERO] = function (player) {
136
- if (hand.state === types_1.EHandState.WAITING_FOR_TRUCO_ANSWER) {
137
- hand.truco.setAnswer(false);
138
- hand.setState(types_1.EHandState.WAITING_PLAY);
139
- }
140
- },
141
- _a[types_1.ESayCommand.FLOR] = function () { },
142
- _a[types_1.ESayCommand.CONTRAFLOR] = function () { },
143
- _a[types_1.EEnvidoCommand.ENVIDO] = function () { },
144
- _a[types_1.EEnvidoCommand.ENVIDO_ENVIDO] = function () { },
145
- _a[types_1.EEnvidoCommand.REAL_ENVIDO] = function () { },
146
- _a[types_1.EEnvidoCommand.FALTA_ENVIDO] = function () { },
147
- _a);
148
- var hand = {
149
- idx: idx,
150
- turn: Number(match.table.forehandIdx),
151
- state: types_1.EHandState.WAITING_PLAY,
152
- rounds: [],
153
- truco: (0, Truco_1.Truco)(),
154
- envido: {
155
- accept: 1,
156
- decline: 2,
157
- teamIdx: null,
158
- },
159
- points: [0, 0],
160
- currentRound: null,
161
- _currentPlayer: null,
162
- set currentPlayer(player) {
163
- hand._currentPlayer = player;
164
- },
165
- get currentPlayer() {
166
- if (hand.state === types_1.EHandState.WAITING_FOR_TRUCO_ANSWER) {
167
- return hand.truco.currentPlayer;
168
- }
169
- return hand._currentPlayer;
170
- },
171
- commands: commands,
172
- play: function () {
173
- return (0, Play_1.PlayInstance)(hand, match.teams);
174
- },
175
- use: function (idx, card) {
176
- var player = hand.currentPlayer;
177
- var round = hand.currentRound;
178
- if (!player || !round) {
179
- return null;
180
- }
181
- var playerCard = player.useCard(idx, card);
182
- if (playerCard) {
183
- hand.nextTurn();
184
- return round.use((0, Deck_1.PlayedCard)(player, playerCard));
185
- }
186
- return null;
187
- },
188
- nextTurn: function () {
189
- var _a;
190
- if (hand.turn >= match.table.players.length - 1) {
191
- hand.setTurn(0);
192
- }
193
- else {
194
- hand.setTurn(hand.turn + 1);
195
- }
196
- (_a = hand.currentRound) === null || _a === void 0 ? void 0 : _a.nextTurn();
197
- },
198
- getNextPlayer: function () {
199
- return roundsGenerator.next();
200
- },
201
- disablePlayer: function (player) {
202
- match.teams[player.teamIdx].disable(player);
203
- },
204
- addPoints: function (team, points) {
205
- hand.points[team] = hand.points[team] + points;
206
- },
207
- pushRound: function (round) {
208
- hand.rounds.push(round);
209
- return round;
210
- },
211
- setTurn: function (turn) {
212
- hand.turn = turn;
213
- return match.table.player(hand.turn);
214
- },
215
- setCurrentRound: function (round) {
216
- hand.currentRound = round;
217
- return hand.currentRound;
218
- },
219
- setCurrentPlayer: function (player) {
220
- hand._currentPlayer = player;
221
- return hand._currentPlayer;
222
- },
223
- setState: function (state) {
224
- hand.state = state;
225
- return hand.state;
226
- },
227
- finished: function () {
228
- return hand.state === types_1.EHandState.FINISHED;
229
- },
230
- };
231
- return hand;
232
- }
233
- exports.Hand = Hand;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Hand = void 0;
4
+ const types_1 = require("../../types");
5
+ const utils_1 = require("../utils");
6
+ const Deck_1 = require("./Deck");
7
+ const Play_1 = require("./Play");
8
+ const Round_1 = require("./Round");
9
+ const Truco_1 = require("./Truco");
10
+ function Hand(match, deck, idx) {
11
+ match.teams.forEach((team) => {
12
+ team.players.forEach((player) => {
13
+ const playerHand = [deck.takeCard(), deck.takeCard(), deck.takeCard()];
14
+ player.setHand(playerHand);
15
+ player.enable();
16
+ // player.setHand(["5c", "4c", "6c"])
17
+ });
18
+ });
19
+ function* roundsGeneratorSequence() {
20
+ let currentRoundIdx = 0;
21
+ let forehandTeamIdx = match.table.player(hand.turn).teamIdx;
22
+ while (currentRoundIdx < 3 && !hand.finished()) {
23
+ const round = (0, Round_1.Round)(0);
24
+ hand.setCurrentRound(round);
25
+ hand.pushRound(round);
26
+ let previousRound = hand.rounds[currentRoundIdx - 1];
27
+ // Put previous round winner as forehand
28
+ if (previousRound && previousRound.winner && !previousRound.tie) {
29
+ const newTurn = match.table.getPlayerPosition(previousRound.winner.id);
30
+ if (newTurn !== -1) {
31
+ hand.setTurn(newTurn);
32
+ }
33
+ }
34
+ while (round.turn < match.table.players.length) {
35
+ while (hand.state === types_1.EHandState.WAITING_FOR_TRUCO_ANSWER) {
36
+ const { value } = hand.truco.getNextPlayer();
37
+ if (value && value.currentPlayer) {
38
+ hand.setCurrentPlayer(value.currentPlayer);
39
+ yield hand;
40
+ }
41
+ }
42
+ const player = match.table.player(hand.turn);
43
+ hand.setCurrentPlayer(player);
44
+ if (player.disabled) {
45
+ hand.setCurrentPlayer(null);
46
+ }
47
+ yield hand;
48
+ }
49
+ if (match.teams[0].isTeamDisabled() && match.teams[1].isTeamDisabled()) {
50
+ hand.setState(types_1.EHandState.FINISHED);
51
+ break;
52
+ }
53
+ let winnerTeamIdx = (0, utils_1.checkHandWinner)(hand.rounds, forehandTeamIdx);
54
+ if (match.teams[0].isTeamDisabled()) {
55
+ winnerTeamIdx = 1;
56
+ }
57
+ if (match.teams[1].isTeamDisabled()) {
58
+ winnerTeamIdx = 0;
59
+ }
60
+ if (winnerTeamIdx !== null) {
61
+ hand.addPoints(winnerTeamIdx, hand.truco.state);
62
+ hand.setState(types_1.EHandState.FINISHED);
63
+ }
64
+ currentRoundIdx++;
65
+ }
66
+ yield hand;
67
+ }
68
+ const roundsGenerator = roundsGeneratorSequence();
69
+ const commands = {
70
+ [types_1.ESayCommand.MAZO]: (player) => {
71
+ hand.disablePlayer(player);
72
+ },
73
+ [types_1.ESayCommand.TRUCO]: (player) => {
74
+ const { teamIdx } = hand.truco;
75
+ if (teamIdx === null || teamIdx !== player.teamIdx) {
76
+ hand.setState(types_1.EHandState.WAITING_FOR_TRUCO_ANSWER);
77
+ hand.truco.sayTruco(player.teamIdx, match.teams[Number(!player.teamIdx)].players);
78
+ }
79
+ },
80
+ [types_1.ESayCommand.QUIERO]: () => {
81
+ if (hand.state === types_1.EHandState.WAITING_FOR_TRUCO_ANSWER) {
82
+ hand.truco.setAnswer(true);
83
+ hand.setState(types_1.EHandState.WAITING_PLAY);
84
+ }
85
+ },
86
+ [types_1.ESayCommand.NO_QUIERO]: (player) => {
87
+ if (hand.state === types_1.EHandState.WAITING_FOR_TRUCO_ANSWER) {
88
+ hand.truco.setAnswer(false);
89
+ hand.setState(types_1.EHandState.WAITING_PLAY);
90
+ }
91
+ },
92
+ [types_1.ESayCommand.FLOR]: () => { },
93
+ [types_1.ESayCommand.CONTRAFLOR]: () => { },
94
+ [types_1.EEnvidoCommand.ENVIDO]: () => { },
95
+ [types_1.EEnvidoCommand.ENVIDO_ENVIDO]: () => { },
96
+ [types_1.EEnvidoCommand.REAL_ENVIDO]: () => { },
97
+ [types_1.EEnvidoCommand.FALTA_ENVIDO]: () => { },
98
+ };
99
+ const hand = {
100
+ idx,
101
+ turn: Number(match.table.forehandIdx),
102
+ state: types_1.EHandState.WAITING_PLAY,
103
+ rounds: [],
104
+ truco: (0, Truco_1.Truco)(),
105
+ envido: {
106
+ accept: 1,
107
+ decline: 2,
108
+ teamIdx: null,
109
+ },
110
+ points: [0, 0],
111
+ currentRound: null,
112
+ _currentPlayer: null,
113
+ set currentPlayer(player) {
114
+ hand._currentPlayer = player;
115
+ },
116
+ get currentPlayer() {
117
+ if (hand.state === types_1.EHandState.WAITING_FOR_TRUCO_ANSWER) {
118
+ return hand.truco.currentPlayer;
119
+ }
120
+ return hand._currentPlayer;
121
+ },
122
+ commands,
123
+ play() {
124
+ return (0, Play_1.PlayInstance)(hand, match.teams);
125
+ },
126
+ use(idx, card) {
127
+ const player = hand.currentPlayer;
128
+ const round = hand.currentRound;
129
+ if (!player || !round) {
130
+ return null;
131
+ }
132
+ const playerCard = player.useCard(idx, card);
133
+ if (playerCard) {
134
+ hand.nextTurn();
135
+ return round.use((0, Deck_1.PlayedCard)(player, playerCard));
136
+ }
137
+ return null;
138
+ },
139
+ nextTurn() {
140
+ var _a;
141
+ if (hand.turn >= match.table.players.length - 1) {
142
+ hand.setTurn(0);
143
+ }
144
+ else {
145
+ hand.setTurn(hand.turn + 1);
146
+ }
147
+ (_a = hand.currentRound) === null || _a === void 0 ? void 0 : _a.nextTurn();
148
+ },
149
+ getNextPlayer() {
150
+ return roundsGenerator.next();
151
+ },
152
+ disablePlayer(player) {
153
+ match.teams[player.teamIdx].disable(player);
154
+ },
155
+ addPoints(team, points) {
156
+ hand.points[team] = hand.points[team] + points;
157
+ },
158
+ pushRound(round) {
159
+ hand.rounds.push(round);
160
+ return round;
161
+ },
162
+ setTurn(turn) {
163
+ hand.turn = turn;
164
+ return match.table.player(hand.turn);
165
+ },
166
+ setCurrentRound(round) {
167
+ hand.currentRound = round;
168
+ return hand.currentRound;
169
+ },
170
+ setCurrentPlayer(player) {
171
+ hand._currentPlayer = player;
172
+ return hand._currentPlayer;
173
+ },
174
+ setState(state) {
175
+ hand.state = state;
176
+ return hand.state;
177
+ },
178
+ finished: () => {
179
+ return hand.state === types_1.EHandState.FINISHED;
180
+ },
181
+ };
182
+ return hand;
183
+ }
184
+ exports.Hand = Hand;
@@ -1,27 +1,27 @@
1
- import { IGameLoop } from "./GameLoop";
2
- import { IPlayer } from "./Player";
3
- import { ITable } from "./Table";
4
- import { ITeam } from "./Team";
5
- export interface IPrivateLobby {
6
- gameLoop?: IGameLoop;
7
- lastTeamIdx: 0 | 1;
8
- _players: Array<IPlayer | {
9
- id?: undefined;
10
- session?: undefined;
11
- }>;
12
- get players(): Array<IPlayer>;
13
- teams: Array<ITeam>;
14
- maxPlayers: number;
15
- table: ITable | null;
16
- full: boolean;
17
- ready: boolean;
18
- started: boolean;
19
- addPlayer(id: string, session: string, teamIdx?: 0 | 1, isOwner?: boolean): IPlayer;
20
- removePlayer(id: string): ILobby;
21
- calculateReady(): boolean;
22
- calculateFull(): boolean;
23
- startMatch(matchPoint?: 9 | 12 | 15): IGameLoop;
24
- }
25
- export interface ILobby extends Pick<IPrivateLobby, "addPlayer" | "removePlayer" | "startMatch" | "ready" | "full" | "started" | "teams" | "players" | "gameLoop" | "table" | "calculateReady"> {
26
- }
27
- export declare function Lobby(teamSize?: 1 | 2 | 3): ILobby;
1
+ import { IGameLoop } from "./GameLoop";
2
+ import { IPlayer } from "./Player";
3
+ import { ITable } from "./Table";
4
+ import { ITeam } from "./Team";
5
+ export interface IPrivateLobby {
6
+ gameLoop?: IGameLoop;
7
+ lastTeamIdx: 0 | 1;
8
+ _players: Array<IPlayer | {
9
+ id?: undefined;
10
+ session?: undefined;
11
+ }>;
12
+ get players(): Array<IPlayer>;
13
+ teams: Array<ITeam>;
14
+ maxPlayers: number;
15
+ table: ITable | null;
16
+ full: boolean;
17
+ ready: boolean;
18
+ started: boolean;
19
+ addPlayer(id: string, session: string, teamIdx?: 0 | 1, isOwner?: boolean): IPlayer;
20
+ removePlayer(id: string): ILobby;
21
+ calculateReady(): boolean;
22
+ calculateFull(): boolean;
23
+ startMatch(matchPoint?: 9 | 12 | 15): IGameLoop;
24
+ }
25
+ export interface ILobby extends Pick<IPrivateLobby, "addPlayer" | "removePlayer" | "startMatch" | "ready" | "full" | "started" | "teams" | "players" | "gameLoop" | "table" | "maxPlayers" | "calculateReady"> {
26
+ }
27
+ export declare function Lobby(teamSize?: 1 | 2 | 3): ILobby;