wynham-games 1.0.0-beta.10
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 +270 -0
- package/dist/games/Connect4.d.ts +37 -0
- package/dist/games/Connect4.d.ts.map +1 -0
- package/dist/games/Connect4.js +279 -0
- package/dist/games/Connect4.js.map +1 -0
- package/dist/games/Hangman.d.ts +30 -0
- package/dist/games/Hangman.d.ts.map +1 -0
- package/dist/games/Hangman.js +259 -0
- package/dist/games/Hangman.js.map +1 -0
- package/dist/games/RPS.d.ts +25 -0
- package/dist/games/RPS.d.ts.map +1 -0
- package/dist/games/RPS.js +187 -0
- package/dist/games/RPS.js.map +1 -0
- package/dist/games/Snake.d.ts +33 -0
- package/dist/games/Snake.d.ts.map +1 -0
- package/dist/games/Snake.js +222 -0
- package/dist/games/Snake.js.map +1 -0
- package/dist/games/TicTacToe.d.ts +32 -0
- package/dist/games/TicTacToe.d.ts.map +1 -0
- package/dist/games/TicTacToe.js +293 -0
- package/dist/games/TicTacToe.js.map +1 -0
- package/dist/games/index.d.ts +6 -0
- package/dist/games/index.d.ts.map +1 -0
- package/dist/games/index.js +17 -0
- package/dist/games/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/locales/en-US.d.ts +103 -0
- package/dist/locales/en-US.d.ts.map +1 -0
- package/dist/locales/en-US.js +169 -0
- package/dist/locales/en-US.js.map +1 -0
- package/dist/locales/es.d.ts +103 -0
- package/dist/locales/es.d.ts.map +1 -0
- package/dist/locales/es.js +169 -0
- package/dist/locales/es.js.map +1 -0
- package/dist/locales/fr.d.ts +103 -0
- package/dist/locales/fr.d.ts.map +1 -0
- package/dist/locales/fr.js +169 -0
- package/dist/locales/fr.js.map +1 -0
- package/dist/locales/index.d.ts +522 -0
- package/dist/locales/index.d.ts.map +1 -0
- package/dist/locales/index.js +29 -0
- package/dist/locales/index.js.map +1 -0
- package/dist/locales/it.d.ts +103 -0
- package/dist/locales/it.d.ts.map +1 -0
- package/dist/locales/it.js +169 -0
- package/dist/locales/it.js.map +1 -0
- package/dist/structures/GameManager.d.ts +32 -0
- package/dist/structures/GameManager.d.ts.map +1 -0
- package/dist/structures/GameManager.js +183 -0
- package/dist/structures/GameManager.js.map +1 -0
- package/dist/structures/Types.d.ts +241 -0
- package/dist/structures/Types.d.ts.map +1 -0
- package/dist/structures/Types.js +51 -0
- package/dist/structures/Types.js.map +1 -0
- package/dist/structures/Utils.d.ts +49 -0
- package/dist/structures/Utils.d.ts.map +1 -0
- package/dist/structures/Utils.js +197 -0
- package/dist/structures/Utils.js.map +1 -0
- package/dist/variables/Game.d.ts +5 -0
- package/dist/variables/Game.d.ts.map +1 -0
- package/dist/variables/Game.js +84 -0
- package/dist/variables/Game.js.map +1 -0
- package/dist/variables/index.d.ts +2 -0
- package/dist/variables/index.d.ts.map +1 -0
- package/dist/variables/index.js +18 -0
- package/dist/variables/index.js.map +1 -0
- package/package.json +36 -0
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const Types_1 = require("../structures/Types");
|
|
4
|
+
const discord_js_1 = require("discord.js");
|
|
5
|
+
const DELTAS = {
|
|
6
|
+
up: { x: 0, y: -1 },
|
|
7
|
+
down: { x: 0, y: 1 },
|
|
8
|
+
left: { x: -1, y: 0 },
|
|
9
|
+
right: { x: 1, y: 0 },
|
|
10
|
+
};
|
|
11
|
+
const OPPOSITE = {
|
|
12
|
+
up: "down",
|
|
13
|
+
down: "up",
|
|
14
|
+
left: "right",
|
|
15
|
+
right: "left",
|
|
16
|
+
};
|
|
17
|
+
const clamp = (value, min, max) => Math.max(min, Math.min(max, value));
|
|
18
|
+
class Snake {
|
|
19
|
+
gameName = Types_1.GameNameType.Snake;
|
|
20
|
+
manager;
|
|
21
|
+
interaction;
|
|
22
|
+
player;
|
|
23
|
+
colors;
|
|
24
|
+
emojis;
|
|
25
|
+
title;
|
|
26
|
+
loc;
|
|
27
|
+
width;
|
|
28
|
+
height;
|
|
29
|
+
turnTimeout;
|
|
30
|
+
cooldownKey;
|
|
31
|
+
collector = null;
|
|
32
|
+
// Snake body, head first.
|
|
33
|
+
snake = [];
|
|
34
|
+
direction = "right";
|
|
35
|
+
food = { x: 0, y: 0 };
|
|
36
|
+
score = 0;
|
|
37
|
+
over = false;
|
|
38
|
+
won = false;
|
|
39
|
+
constructor(manager, interaction, options, gameLocale) {
|
|
40
|
+
this.manager = manager;
|
|
41
|
+
this.interaction = interaction;
|
|
42
|
+
this.player = options.player;
|
|
43
|
+
this.cooldownKey = `${this.player.id}-${this.gameName}`;
|
|
44
|
+
this.turnTimeout = (options.turnTimeout ?? 30) * 1000;
|
|
45
|
+
this.loc = gameLocale.snake;
|
|
46
|
+
const theme = options.theme ?? {};
|
|
47
|
+
this.colors = {
|
|
48
|
+
play: theme.colors?.play ?? 0x5865f2,
|
|
49
|
+
win: theme.colors?.win ?? 0xffd700,
|
|
50
|
+
lose: theme.colors?.lose ?? 0x808080,
|
|
51
|
+
};
|
|
52
|
+
this.emojis = {
|
|
53
|
+
head: theme.emojis?.head ?? "🟢",
|
|
54
|
+
body: theme.emojis?.body ?? "🟩",
|
|
55
|
+
food: theme.emojis?.food ?? "🍎",
|
|
56
|
+
empty: theme.emojis?.empty ?? "⬛",
|
|
57
|
+
};
|
|
58
|
+
this.title = options.lang?.title ?? this.loc.title;
|
|
59
|
+
this.width = clamp(options.boardWidth ?? 10, 5, 12);
|
|
60
|
+
this.height = clamp(options.boardHeight ?? 10, 5, 12);
|
|
61
|
+
// Start with a single-cell snake in the middle of the board.
|
|
62
|
+
const start = { x: Math.floor(this.width / 2), y: Math.floor(this.height / 2) };
|
|
63
|
+
this.snake = [start];
|
|
64
|
+
this.spawnFood();
|
|
65
|
+
}
|
|
66
|
+
async launch() {
|
|
67
|
+
this.manager.cooldowns.replace(this.cooldownKey, 600_000);
|
|
68
|
+
const message = await this.interaction.editReply({
|
|
69
|
+
components: [this.buildContainer(this.loc.start, this.colors.play)],
|
|
70
|
+
flags: discord_js_1.MessageFlags.IsComponentsV2,
|
|
71
|
+
});
|
|
72
|
+
this.collector = message.createMessageComponentCollector({
|
|
73
|
+
componentType: discord_js_1.ComponentType.Button,
|
|
74
|
+
time: 600_000,
|
|
75
|
+
idle: this.turnTimeout,
|
|
76
|
+
filter: btn => {
|
|
77
|
+
if (btn.user.id === this.player.id)
|
|
78
|
+
return true;
|
|
79
|
+
btn.reply({
|
|
80
|
+
embeds: [{ description: this.loc.notYourGame, color: discord_js_1.Colors.Red }],
|
|
81
|
+
flags: discord_js_1.MessageFlags.Ephemeral,
|
|
82
|
+
});
|
|
83
|
+
return false;
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
this.collector.on("collect", (btn) => this.handleButton(btn));
|
|
87
|
+
this.collector.on("end", async (_, reason) => {
|
|
88
|
+
if (reason === "time" || reason === "idle") {
|
|
89
|
+
await this.interaction
|
|
90
|
+
.editReply({
|
|
91
|
+
components: [this.buildContainer(this.loc.timeout(this.score), this.colors.lose, true)],
|
|
92
|
+
flags: discord_js_1.MessageFlags.IsComponentsV2,
|
|
93
|
+
})
|
|
94
|
+
.catch(() => { });
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
async handleButton(btn) {
|
|
99
|
+
await btn.deferUpdate();
|
|
100
|
+
this.interaction = btn;
|
|
101
|
+
const action = btn.customId.split("_")[1];
|
|
102
|
+
if (action === "stop") {
|
|
103
|
+
this.cleanup();
|
|
104
|
+
return void (await this.interaction.editReply({
|
|
105
|
+
components: [this.buildContainer(this.loc.quit(this.score), this.colors.lose, true)],
|
|
106
|
+
flags: discord_js_1.MessageFlags.IsComponentsV2,
|
|
107
|
+
}));
|
|
108
|
+
}
|
|
109
|
+
const direction = action;
|
|
110
|
+
// Ignore a 180° turn into the snake's own neck.
|
|
111
|
+
if (this.snake.length > 1 && OPPOSITE[this.direction] === direction)
|
|
112
|
+
return;
|
|
113
|
+
this.direction = direction;
|
|
114
|
+
this.step();
|
|
115
|
+
if (this.won) {
|
|
116
|
+
this.cleanup();
|
|
117
|
+
return void (await this.interaction.editReply({
|
|
118
|
+
components: [this.buildContainer(this.loc.win(this.score), this.colors.win, true)],
|
|
119
|
+
flags: discord_js_1.MessageFlags.IsComponentsV2,
|
|
120
|
+
}));
|
|
121
|
+
}
|
|
122
|
+
if (this.over) {
|
|
123
|
+
this.cleanup();
|
|
124
|
+
return void (await this.interaction.editReply({
|
|
125
|
+
components: [this.buildContainer(this.loc.gameOver(this.score), this.colors.lose, true)],
|
|
126
|
+
flags: discord_js_1.MessageFlags.IsComponentsV2,
|
|
127
|
+
}));
|
|
128
|
+
}
|
|
129
|
+
this.collector?.resetTimer();
|
|
130
|
+
this.manager.cooldowns.reset(this.cooldownKey, 600_000);
|
|
131
|
+
await this.interaction.editReply({
|
|
132
|
+
components: [this.buildContainer(this.loc.start, this.colors.play)],
|
|
133
|
+
flags: discord_js_1.MessageFlags.IsComponentsV2,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
// Advances the snake one cell in the current direction, resolving collisions and food.
|
|
137
|
+
step() {
|
|
138
|
+
const head = this.snake[0];
|
|
139
|
+
const delta = DELTAS[this.direction];
|
|
140
|
+
const nx = head.x + delta.x;
|
|
141
|
+
const ny = head.y + delta.y;
|
|
142
|
+
// Wall collision.
|
|
143
|
+
if (nx < 0 || ny < 0 || nx >= this.width || ny >= this.height) {
|
|
144
|
+
this.over = true;
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
const ate = nx === this.food.x && ny === this.food.y;
|
|
148
|
+
// When not eating, the tail frees up, so it isn't an obstacle this step.
|
|
149
|
+
const body = ate ? this.snake : this.snake.slice(0, -1);
|
|
150
|
+
if (body.some(s => s.x === nx && s.y === ny)) {
|
|
151
|
+
this.over = true;
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
this.snake.unshift({ x: nx, y: ny });
|
|
155
|
+
if (ate) {
|
|
156
|
+
this.score++;
|
|
157
|
+
if (this.snake.length === this.width * this.height) {
|
|
158
|
+
this.won = true;
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
this.spawnFood();
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
this.snake.pop();
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// Places the food on a random empty cell.
|
|
168
|
+
spawnFood() {
|
|
169
|
+
const empty = [];
|
|
170
|
+
for (let y = 0; y < this.height; y++) {
|
|
171
|
+
for (let x = 0; x < this.width; x++) {
|
|
172
|
+
if (!this.snake.some(s => s.x === x && s.y === y))
|
|
173
|
+
empty.push({ x, y });
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
if (empty.length === 0)
|
|
177
|
+
return;
|
|
178
|
+
this.food = empty[Math.floor(Math.random() * empty.length)];
|
|
179
|
+
}
|
|
180
|
+
buildBoard() {
|
|
181
|
+
const rows = [];
|
|
182
|
+
for (let y = 0; y < this.height; y++) {
|
|
183
|
+
let row = "";
|
|
184
|
+
for (let x = 0; x < this.width; x++) {
|
|
185
|
+
const head = this.snake[0];
|
|
186
|
+
if (head.x === x && head.y === y)
|
|
187
|
+
row += this.emojis.head;
|
|
188
|
+
else if (this.snake.some(s => s.x === x && s.y === y))
|
|
189
|
+
row += this.emojis.body;
|
|
190
|
+
else if (this.food.x === x && this.food.y === y)
|
|
191
|
+
row += this.emojis.food;
|
|
192
|
+
else
|
|
193
|
+
row += this.emojis.empty;
|
|
194
|
+
}
|
|
195
|
+
rows.push(row);
|
|
196
|
+
}
|
|
197
|
+
return rows.join("\n");
|
|
198
|
+
}
|
|
199
|
+
buildControls(disabled = false) {
|
|
200
|
+
return new discord_js_1.ActionRowBuilder().addComponents(new discord_js_1.ButtonBuilder().setCustomId("snake_left").setEmoji("⬅️").setStyle(discord_js_1.ButtonStyle.Primary).setDisabled(disabled), new discord_js_1.ButtonBuilder().setCustomId("snake_up").setEmoji("⬆️").setStyle(discord_js_1.ButtonStyle.Primary).setDisabled(disabled), new discord_js_1.ButtonBuilder().setCustomId("snake_down").setEmoji("⬇️").setStyle(discord_js_1.ButtonStyle.Primary).setDisabled(disabled), new discord_js_1.ButtonBuilder().setCustomId("snake_right").setEmoji("➡️").setStyle(discord_js_1.ButtonStyle.Primary).setDisabled(disabled), new discord_js_1.ButtonBuilder().setCustomId("snake_stop").setEmoji("⏹️").setStyle(discord_js_1.ButtonStyle.Danger).setDisabled(disabled));
|
|
201
|
+
}
|
|
202
|
+
buildContainer(status, color, disabled = false) {
|
|
203
|
+
const base = new discord_js_1.ContainerBuilder()
|
|
204
|
+
.setAccentColor(color)
|
|
205
|
+
.addTextDisplayComponents(new discord_js_1.TextDisplayBuilder().setContent(`## 🐍 ${this.title}`))
|
|
206
|
+
.addTextDisplayComponents(new discord_js_1.TextDisplayBuilder().setContent(this.buildBoard()))
|
|
207
|
+
.addSeparatorComponents(new discord_js_1.SeparatorBuilder().setDivider(true).setSpacing(discord_js_1.SeparatorSpacingSize.Small))
|
|
208
|
+
.addTextDisplayComponents(new discord_js_1.TextDisplayBuilder().setContent(`${this.loc.score(this.score)}\n${status}`));
|
|
209
|
+
if (!disabled)
|
|
210
|
+
base.addActionRowComponents(this.buildControls());
|
|
211
|
+
return base;
|
|
212
|
+
}
|
|
213
|
+
cleanup() {
|
|
214
|
+
if (this.collector) {
|
|
215
|
+
this.collector.stop("cleanup");
|
|
216
|
+
this.collector = null;
|
|
217
|
+
}
|
|
218
|
+
this.manager.cooldowns.delete(this.cooldownKey);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
exports.default = Snake;
|
|
222
|
+
//# sourceMappingURL=Snake.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Snake.js","sourceRoot":"","sources":["../../src/games/Snake.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { GameNameType, type TicTacToeOptions, type IGame, type GameLocale, type GameManagerType } from "../structures/Types";
|
|
2
|
+
import { RepliableInteraction } from "discord.js";
|
|
3
|
+
export default class TicTacToe implements IGame {
|
|
4
|
+
readonly gameName = GameNameType.TicTacToe;
|
|
5
|
+
private readonly manager;
|
|
6
|
+
private interaction;
|
|
7
|
+
private readonly players;
|
|
8
|
+
private readonly colors;
|
|
9
|
+
private readonly emojis;
|
|
10
|
+
private readonly title;
|
|
11
|
+
private readonly loc;
|
|
12
|
+
private readonly difficulty;
|
|
13
|
+
private readonly board;
|
|
14
|
+
private currentPlayer;
|
|
15
|
+
private winLine;
|
|
16
|
+
private collector;
|
|
17
|
+
private readonly turnTimeout;
|
|
18
|
+
private readonly cooldownKey;
|
|
19
|
+
constructor(manager: GameManagerType, interaction: RepliableInteraction, options: TicTacToeOptions, gameLocale: GameLocale);
|
|
20
|
+
private checkWin;
|
|
21
|
+
private isDraw;
|
|
22
|
+
private createButtons;
|
|
23
|
+
private buildContainer;
|
|
24
|
+
launch(): Promise<void>;
|
|
25
|
+
private handleButton;
|
|
26
|
+
private playBotMove;
|
|
27
|
+
private getBotCell;
|
|
28
|
+
private isWinningMove;
|
|
29
|
+
private minimax;
|
|
30
|
+
private cleanup;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=TicTacToe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TicTacToe.d.ts","sourceRoot":"","sources":["../../src/games/TicTacToe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,YAAY,EAAE,KAAK,gBAAgB,EAAE,KAAK,KAAK,EAAE,KAAK,UAAU,EAAwB,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEjK,OAAO,EAYH,oBAAoB,EAGvB,MAAM,YAAY,CAAC;AAqBpB,MAAM,CAAC,OAAO,OAAO,SAAU,YAAW,KAAK;IAC3C,SAAgB,QAAQ,0BAA0B;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8C;IACrE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4C;IACnE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkB;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAE3C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;IAC1C,OAAO,CAAC,aAAa,CAAQ;IAE7B,OAAO,CAAC,OAAO,CAAkD;IACjE,OAAO,CAAC,SAAS,CAAwD;IACzE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,oBAAoB,EAAE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,UAAU;IAuB1H,OAAO,CAAC,QAAQ;IAWhB,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,aAAa;IAyBrB,OAAO,CAAC,cAAc;IAWhB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;YAuCf,YAAY;YAsDZ,WAAW;IAmCzB,OAAO,CAAC,UAAU;IA6BlB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,OAAO;IA+Bf,OAAO,CAAC,OAAO;CAOlB"}
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const Types_1 = require("../structures/Types");
|
|
4
|
+
const discord_js_1 = require("discord.js");
|
|
5
|
+
// Cell indices in the flat 9-cell board:
|
|
6
|
+
// 0 | 1 | 2
|
|
7
|
+
// 3 | 4 | 5
|
|
8
|
+
// 6 | 7 | 8
|
|
9
|
+
const WIN_LINES = [
|
|
10
|
+
[0, 1, 2],
|
|
11
|
+
[3, 4, 5],
|
|
12
|
+
[6, 7, 8], // rows
|
|
13
|
+
[0, 3, 6],
|
|
14
|
+
[1, 4, 7],
|
|
15
|
+
[2, 5, 8], // columns
|
|
16
|
+
[0, 4, 8],
|
|
17
|
+
[2, 4, 6], // diagonals
|
|
18
|
+
];
|
|
19
|
+
// For each cell, the win lines passing through it, so the minimax only checks
|
|
20
|
+
// the lines affected by the last move instead of all 8.
|
|
21
|
+
const LINES_THROUGH = Array.from({ length: 9 }, (_, cell) => WIN_LINES.filter(line => line[0] === cell || line[1] === cell || line[2] === cell));
|
|
22
|
+
class TicTacToe {
|
|
23
|
+
gameName = Types_1.GameNameType.TicTacToe;
|
|
24
|
+
manager;
|
|
25
|
+
interaction;
|
|
26
|
+
players;
|
|
27
|
+
colors;
|
|
28
|
+
emojis;
|
|
29
|
+
title;
|
|
30
|
+
loc;
|
|
31
|
+
difficulty;
|
|
32
|
+
// 0 — empty, 1 — Player 1, 2 — Player 2.
|
|
33
|
+
board = new Int8Array(9);
|
|
34
|
+
currentPlayer;
|
|
35
|
+
// Set once a win is detected, used to highlight the winning cells.
|
|
36
|
+
winLine = null;
|
|
37
|
+
collector = null;
|
|
38
|
+
turnTimeout;
|
|
39
|
+
cooldownKey;
|
|
40
|
+
constructor(manager, interaction, options, gameLocale) {
|
|
41
|
+
this.manager = manager;
|
|
42
|
+
this.interaction = interaction;
|
|
43
|
+
this.players = options.players;
|
|
44
|
+
this.cooldownKey = `${this.players[0].id}-${this.players[1].id}-${this.gameName}`;
|
|
45
|
+
this.turnTimeout = (options.turnTimeout ?? 30) * 1000;
|
|
46
|
+
this.currentPlayer = Math.random() < 0.5 ? 0 : 1;
|
|
47
|
+
this.difficulty = options.difficulty ?? Types_1.BotDifficulty.Hard;
|
|
48
|
+
this.loc = gameLocale.tictactoe;
|
|
49
|
+
const theme = options.theme;
|
|
50
|
+
this.colors = {
|
|
51
|
+
play: theme?.colors?.play ?? 0x5865f2,
|
|
52
|
+
win: theme?.colors?.win ?? 0xffd700,
|
|
53
|
+
draw: theme?.colors?.draw ?? 0x808080,
|
|
54
|
+
};
|
|
55
|
+
this.emojis = {
|
|
56
|
+
p1: theme?.emojis?.player1 ?? "❌",
|
|
57
|
+
p2: theme?.emojis?.player2 ?? "⭕",
|
|
58
|
+
empty: theme?.emojis?.empty ?? "⬜",
|
|
59
|
+
};
|
|
60
|
+
this.title = options.lang?.title ?? this.loc.title;
|
|
61
|
+
}
|
|
62
|
+
checkWin() {
|
|
63
|
+
for (const line of WIN_LINES) {
|
|
64
|
+
const [a, b, c] = line;
|
|
65
|
+
if (this.board[a] !== 0 && this.board[a] === this.board[b] && this.board[b] === this.board[c]) {
|
|
66
|
+
this.winLine = line;
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
isDraw() {
|
|
73
|
+
return this.board.every(c => c !== 0);
|
|
74
|
+
}
|
|
75
|
+
createButtons(disabled = false) {
|
|
76
|
+
const rows = [];
|
|
77
|
+
for (let r = 0; r < 3; r++) {
|
|
78
|
+
const row = new discord_js_1.ActionRowBuilder();
|
|
79
|
+
for (let c = 0; c < 3; c++) {
|
|
80
|
+
const i = r * 3 + c;
|
|
81
|
+
const cell = this.board[i];
|
|
82
|
+
const win = this.winLine?.includes(i) ?? false;
|
|
83
|
+
const emoji = cell === 1 ? this.emojis.p1 : cell === 2 ? this.emojis.p2 : this.emojis.empty;
|
|
84
|
+
const style = win ? discord_js_1.ButtonStyle.Success : cell === 1 ? discord_js_1.ButtonStyle.Primary : cell === 2 ? discord_js_1.ButtonStyle.Danger : discord_js_1.ButtonStyle.Secondary;
|
|
85
|
+
row.addComponents(new discord_js_1.ButtonBuilder()
|
|
86
|
+
.setCustomId(`ttt_${i}`)
|
|
87
|
+
.setEmoji(emoji)
|
|
88
|
+
.setStyle(style)
|
|
89
|
+
.setDisabled(disabled || cell !== 0));
|
|
90
|
+
}
|
|
91
|
+
rows.push(row);
|
|
92
|
+
}
|
|
93
|
+
return rows;
|
|
94
|
+
}
|
|
95
|
+
buildContainer(status, color, disabled = false) {
|
|
96
|
+
const [p1, p2] = this.players;
|
|
97
|
+
return new discord_js_1.ContainerBuilder()
|
|
98
|
+
.setAccentColor(color)
|
|
99
|
+
.addTextDisplayComponents(new discord_js_1.TextDisplayBuilder().setContent(`## ${this.title}`))
|
|
100
|
+
.addTextDisplayComponents(new discord_js_1.TextDisplayBuilder().setContent(`${this.emojis.p1} **${p1.username}** vs ${this.emojis.p2} **${p2.username}**`))
|
|
101
|
+
.addSeparatorComponents(new discord_js_1.SeparatorBuilder().setDivider(true).setSpacing(discord_js_1.SeparatorSpacingSize.Small))
|
|
102
|
+
.addTextDisplayComponents(new discord_js_1.TextDisplayBuilder().setContent(status))
|
|
103
|
+
.addActionRowComponents(...this.createButtons(disabled));
|
|
104
|
+
}
|
|
105
|
+
async launch() {
|
|
106
|
+
this.manager.cooldowns.replace(this.cooldownKey, 300_000);
|
|
107
|
+
const first = this.players[this.currentPlayer];
|
|
108
|
+
const emoji = this.currentPlayer === 0 ? this.emojis.p1 : this.emojis.p2;
|
|
109
|
+
const status = this.loc.turn(emoji, first.username);
|
|
110
|
+
const message = await this.interaction.editReply({
|
|
111
|
+
components: [this.buildContainer(status, this.colors.play)],
|
|
112
|
+
flags: discord_js_1.MessageFlags.IsComponentsV2,
|
|
113
|
+
});
|
|
114
|
+
this.collector = message.createMessageComponentCollector({
|
|
115
|
+
componentType: discord_js_1.ComponentType.Button,
|
|
116
|
+
time: 300_000,
|
|
117
|
+
idle: this.turnTimeout,
|
|
118
|
+
filter: btn => {
|
|
119
|
+
if (this.players.some(p => p.id === btn.user.id))
|
|
120
|
+
return true;
|
|
121
|
+
btn.reply({
|
|
122
|
+
embeds: [{ description: this.loc.notYourGame, color: discord_js_1.Colors.Red }],
|
|
123
|
+
flags: discord_js_1.MessageFlags.Ephemeral,
|
|
124
|
+
});
|
|
125
|
+
return false;
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
this.collector.on("collect", (btn) => this.handleButton(btn));
|
|
129
|
+
this.collector.on("end", async (_, reason) => {
|
|
130
|
+
if (reason === "time" || reason === "idle") {
|
|
131
|
+
await this.interaction.editReply({
|
|
132
|
+
components: [this.buildContainer(this.loc.timeout, this.colors.draw, true)],
|
|
133
|
+
flags: discord_js_1.MessageFlags.IsComponentsV2,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
if (first.bot)
|
|
138
|
+
setTimeout(() => this.playBotMove().catch(() => { }), 800);
|
|
139
|
+
}
|
|
140
|
+
async handleButton(components) {
|
|
141
|
+
const player = this.players[this.currentPlayer];
|
|
142
|
+
await components.deferUpdate();
|
|
143
|
+
this.interaction = components;
|
|
144
|
+
if (components.user.id !== player.id) {
|
|
145
|
+
return void (await components.followUp({
|
|
146
|
+
embeds: [{ description: this.loc.notYourTurn, color: discord_js_1.Colors.Red }],
|
|
147
|
+
flags: discord_js_1.MessageFlags.Ephemeral,
|
|
148
|
+
}));
|
|
149
|
+
}
|
|
150
|
+
const cell = Number(components.customId.replace("ttt_", ""));
|
|
151
|
+
if (this.board[cell] !== 0) {
|
|
152
|
+
return void components.followUp({
|
|
153
|
+
embeds: [{ description: this.loc.cellTaken, color: discord_js_1.Colors.Red }],
|
|
154
|
+
flags: discord_js_1.MessageFlags.Ephemeral,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
this.board[cell] = this.currentPlayer + 1;
|
|
158
|
+
if (this.checkWin()) {
|
|
159
|
+
this.cleanup();
|
|
160
|
+
const emoji = this.currentPlayer === 0 ? this.emojis.p1 : this.emojis.p2;
|
|
161
|
+
return void (await this.interaction.editReply({
|
|
162
|
+
components: [this.buildContainer(this.loc.win(emoji, player.username), this.colors.win, true)],
|
|
163
|
+
flags: discord_js_1.MessageFlags.IsComponentsV2,
|
|
164
|
+
}));
|
|
165
|
+
}
|
|
166
|
+
if (this.isDraw()) {
|
|
167
|
+
this.cleanup();
|
|
168
|
+
return void (await this.interaction.editReply({
|
|
169
|
+
components: [this.buildContainer(this.loc.draw, this.colors.draw, true)],
|
|
170
|
+
flags: discord_js_1.MessageFlags.IsComponentsV2,
|
|
171
|
+
}));
|
|
172
|
+
}
|
|
173
|
+
this.collector?.resetTimer();
|
|
174
|
+
this.manager.cooldowns.reset(this.cooldownKey, 300_000);
|
|
175
|
+
this.currentPlayer = this.currentPlayer === 0 ? 1 : 0;
|
|
176
|
+
const next = this.players[this.currentPlayer];
|
|
177
|
+
const emoji = this.currentPlayer === 0 ? this.emojis.p1 : this.emojis.p2;
|
|
178
|
+
await this.interaction.editReply({
|
|
179
|
+
components: [this.buildContainer(this.loc.turn(emoji, next.username), this.colors.play)],
|
|
180
|
+
flags: discord_js_1.MessageFlags.IsComponentsV2,
|
|
181
|
+
});
|
|
182
|
+
if (next.bot)
|
|
183
|
+
setTimeout(() => this.playBotMove().catch(() => { }), 800);
|
|
184
|
+
}
|
|
185
|
+
async playBotMove() {
|
|
186
|
+
const cell = this.getBotCell();
|
|
187
|
+
this.board[cell] = (this.currentPlayer + 1);
|
|
188
|
+
const player = this.players[this.currentPlayer];
|
|
189
|
+
if (this.checkWin()) {
|
|
190
|
+
this.cleanup();
|
|
191
|
+
const emoji = this.currentPlayer === 0 ? this.emojis.p1 : this.emojis.p2;
|
|
192
|
+
return void (await this.interaction.editReply({
|
|
193
|
+
components: [this.buildContainer(this.loc.win(emoji, player.username), this.colors.win, true)],
|
|
194
|
+
flags: discord_js_1.MessageFlags.IsComponentsV2,
|
|
195
|
+
}));
|
|
196
|
+
}
|
|
197
|
+
if (this.isDraw()) {
|
|
198
|
+
this.cleanup();
|
|
199
|
+
return void (await this.interaction.editReply({
|
|
200
|
+
components: [this.buildContainer(this.loc.draw, this.colors.draw, true)],
|
|
201
|
+
flags: discord_js_1.MessageFlags.IsComponentsV2,
|
|
202
|
+
}));
|
|
203
|
+
}
|
|
204
|
+
this.collector?.resetTimer();
|
|
205
|
+
this.manager.cooldowns.reset(this.cooldownKey, 300_000);
|
|
206
|
+
this.currentPlayer = this.currentPlayer === 0 ? 1 : 0;
|
|
207
|
+
const next = this.players[this.currentPlayer];
|
|
208
|
+
const emoji = this.currentPlayer === 0 ? this.emojis.p1 : this.emojis.p2;
|
|
209
|
+
await this.interaction.editReply({
|
|
210
|
+
components: [this.buildContainer(this.loc.turn(emoji, next.username), this.colors.play)],
|
|
211
|
+
flags: discord_js_1.MessageFlags.IsComponentsV2,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
getBotCell() {
|
|
215
|
+
const empty = [];
|
|
216
|
+
for (let i = 0; i < 9; i++)
|
|
217
|
+
if (this.board[i] === 0)
|
|
218
|
+
empty.push(i);
|
|
219
|
+
const randomCell = () => empty[Math.floor(Math.random() * empty.length)];
|
|
220
|
+
if (this.difficulty === Types_1.BotDifficulty.Easy)
|
|
221
|
+
return randomCell();
|
|
222
|
+
const optimalChance = this.difficulty === Types_1.BotDifficulty.Normal ? 0.5 : this.difficulty === Types_1.BotDifficulty.Hard ? 0.8 : 1;
|
|
223
|
+
if (Math.random() > optimalChance)
|
|
224
|
+
return randomCell();
|
|
225
|
+
// Every opening leads to a draw under perfect play, so skip the full search and take the centre.
|
|
226
|
+
if (empty.length === 9)
|
|
227
|
+
return 4;
|
|
228
|
+
const botPiece = (this.currentPlayer + 1);
|
|
229
|
+
let bestScore = -Infinity;
|
|
230
|
+
let bestCell = empty[0];
|
|
231
|
+
for (const i of empty) {
|
|
232
|
+
this.board[i] = botPiece;
|
|
233
|
+
const s = this.minimax(i, botPiece, false, botPiece, empty.length - 1, 9, -Infinity, Infinity);
|
|
234
|
+
this.board[i] = 0;
|
|
235
|
+
if (s > bestScore) {
|
|
236
|
+
bestScore = s;
|
|
237
|
+
bestCell = i;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
return bestCell;
|
|
241
|
+
}
|
|
242
|
+
isWinningMove(cell, piece) {
|
|
243
|
+
for (const [a, b, c] of LINES_THROUGH[cell]) {
|
|
244
|
+
if (this.board[a] === piece && this.board[b] === piece && this.board[c] === piece)
|
|
245
|
+
return true;
|
|
246
|
+
}
|
|
247
|
+
return false;
|
|
248
|
+
}
|
|
249
|
+
// Depth-weighted minimax with alpha-beta pruning: win → +depth, loss → -depth, draw → 0,
|
|
250
|
+
// so the bot prefers faster wins and slower losses.
|
|
251
|
+
minimax(lastMove, lastPiece, isMax, botPiece, movesLeft, depth, alpha, beta) {
|
|
252
|
+
if (this.isWinningMove(lastMove, lastPiece))
|
|
253
|
+
return lastPiece === botPiece ? depth : -depth;
|
|
254
|
+
if (movesLeft === 0)
|
|
255
|
+
return 0;
|
|
256
|
+
const piece = isMax ? botPiece : (3 - botPiece);
|
|
257
|
+
if (isMax) {
|
|
258
|
+
let best = -Infinity;
|
|
259
|
+
for (let i = 0; i < 9; i++) {
|
|
260
|
+
if (this.board[i] !== 0)
|
|
261
|
+
continue;
|
|
262
|
+
this.board[i] = piece;
|
|
263
|
+
best = Math.max(best, this.minimax(i, piece, false, botPiece, movesLeft - 1, depth - 1, alpha, beta));
|
|
264
|
+
this.board[i] = 0;
|
|
265
|
+
alpha = Math.max(alpha, best);
|
|
266
|
+
if (beta <= alpha)
|
|
267
|
+
break;
|
|
268
|
+
}
|
|
269
|
+
return best;
|
|
270
|
+
}
|
|
271
|
+
let best = Infinity;
|
|
272
|
+
for (let i = 0; i < 9; i++) {
|
|
273
|
+
if (this.board[i] !== 0)
|
|
274
|
+
continue;
|
|
275
|
+
this.board[i] = piece;
|
|
276
|
+
best = Math.min(best, this.minimax(i, piece, true, botPiece, movesLeft - 1, depth - 1, alpha, beta));
|
|
277
|
+
this.board[i] = 0;
|
|
278
|
+
beta = Math.min(beta, best);
|
|
279
|
+
if (beta <= alpha)
|
|
280
|
+
break;
|
|
281
|
+
}
|
|
282
|
+
return best;
|
|
283
|
+
}
|
|
284
|
+
cleanup() {
|
|
285
|
+
if (this.collector) {
|
|
286
|
+
this.collector.stop("cleanup");
|
|
287
|
+
this.collector = null;
|
|
288
|
+
}
|
|
289
|
+
this.manager.cooldowns.delete(this.cooldownKey);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
exports.default = TicTacToe;
|
|
293
|
+
//# sourceMappingURL=TicTacToe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TicTacToe.js","sourceRoot":"","sources":["../../src/games/TicTacToe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { default as Connect4 } from "./Connect4";
|
|
2
|
+
export { default as TicTacToe } from "./TicTacToe";
|
|
3
|
+
export { default as RPS } from "./RPS";
|
|
4
|
+
export { default as Hangman } from "./Hangman";
|
|
5
|
+
export { default as Snake } from "./Snake";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/games/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Snake = exports.Hangman = exports.RPS = exports.TicTacToe = exports.Connect4 = void 0;
|
|
7
|
+
var Connect4_1 = require("./Connect4");
|
|
8
|
+
Object.defineProperty(exports, "Connect4", { enumerable: true, get: function () { return __importDefault(Connect4_1).default; } });
|
|
9
|
+
var TicTacToe_1 = require("./TicTacToe");
|
|
10
|
+
Object.defineProperty(exports, "TicTacToe", { enumerable: true, get: function () { return __importDefault(TicTacToe_1).default; } });
|
|
11
|
+
var RPS_1 = require("./RPS");
|
|
12
|
+
Object.defineProperty(exports, "RPS", { enumerable: true, get: function () { return __importDefault(RPS_1).default; } });
|
|
13
|
+
var Hangman_1 = require("./Hangman");
|
|
14
|
+
Object.defineProperty(exports, "Hangman", { enumerable: true, get: function () { return __importDefault(Hangman_1).default; } });
|
|
15
|
+
var Snake_1 = require("./Snake");
|
|
16
|
+
Object.defineProperty(exports, "Snake", { enumerable: true, get: function () { return __importDefault(Snake_1).default; } });
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/games/index.ts"],"names":[],"mappings":";;;;;;AAAA,uCAAiD;AAAxC,qHAAA,OAAO,OAAY;AAC5B,yCAAmD;AAA1C,uHAAA,OAAO,OAAa;AAC7B,6BAAuC;AAA9B,2GAAA,OAAO,OAAO;AACvB,qCAA+C;AAAtC,mHAAA,OAAO,OAAW;AAC3B,iCAA2C;AAAlC,+GAAA,OAAO,OAAS"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC"}
|