ttt-ts is a TypeScript library for creating and managing a Tic-Tac-Toe game. It provides functions to determine the best move using the minimax algorithm, check the game status, and manage the game board.
You can install the ttt-ts package using npm, yarn, or pnpm.
npm install ttt-tsyarn add ttt-tspnpm add ttt-tsconst { TicTacToe, Status } = require("ttt-ts")
const board = [
[null, "x", "o"],
["x", "o", "x"],
["x", null, null]
]
const bot = "o"
const result = TicTacToe(board, bot)
console.log(result)
// {
// status: Status.Continue,
// board: [
// [null, "x", "o"],
// ["x", "o", "x"],
// ["x", "o", null]
// ],
// placement: { row: 2, col: 1 }
// }import { TicTacToe, TicTacToeBoard, Status } from "ttt-ts"
const board: TicTacToeBoard = [
[null, "x", "o"],
["x", "o", "x"],
["x", null, null]
]
const bot = "o"
const result = TicTacToe(board, bot)
console.log(result)
// {
// status: Status.Continue,
// board: [
// [null, "x", "o"],
// ["x", "o", "x"],
// ["x", "o", null]
// ],
// placement: { row: 2, col: 1 }
// }Represents a cell in the TicTacToe board which can be "x", "o", or null.
export type Cell = "x" | "o" | nullRepresents a TicTacToe board.
export type TicTacToeBoard = [[Cell, Cell, Cell], [Cell, Cell, Cell], [Cell, Cell, Cell]]Enum for game status.
export const enum Status {
Continue,
Draw,
X,
O
}Represents the result of a move.
export type FindMove = { board: TicTacToeBoard } & (
| {
status: Status.Continue
placement: { row: number; col: number }
}
| {
status: Status.Draw | Status.X | Status.O
placement?: { row: number; col: number }
}
)A placeholder for an empty TicTacToe board.
export const Placeholder: TicTacToeBoard = [
[null, null, null],
[null, null, null],
[null, null, null]
]Finds the next move for the bot on the given TicTacToe board.
function TicTacToe(board: TicTacToeBoard, bot: "x" | "o", strict: boolean = true): FindMoveParameters:
board: TicTacToeBoard- The current state of the TicTacToe board.bot: "x" | "o"- The bot's marker ("x" or "o").strict: boolean- If true, makes a random move; otherwise, uses minimax to find the best move.
Returns:
FindMove- The result of the move.
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the Apache-2.0 License. See the LICENSE file for details.