Skip to content

Rock-Paper-Scissors Game

This example demonstrates a Rock-Paper-Scissors game state machine that manages the game flow, tracks scores, and determines winners. It shows how state machines can handle complex conditional logic and state transitions in an interactive application.

import { defineStates } from "matchina";
export type Move = "rock" | "paper" | "scissors";
export const states = defineStates({
WaitingForPlayer: (playerScore: number = 0, computerScore: number = 0) => ({
playerScore,
computerScore,
}),
PlayerChose: (
playerMove: Move,
playerScore: number,
computerScore: number
) => ({
playerMove,
playerScore,
computerScore,
}),
Judging: (
playerMove: Move,
computerMove: Move,
playerScore: number,
computerScore: number
) => ({
playerMove,
computerMove,
playerScore,
computerScore,
}),
RoundComplete: (
playerMove: Move,
computerMove: Move,
roundWinner: "player" | "computer" | "tie",
playerScore: number,
computerScore: number
) => ({
playerMove,
computerMove,
roundWinner,
playerScore,
computerScore,
}),
GameOver: (
winner: "player" | "computer",
playerScore: number,
computerScore: number
) => ({
winner,
playerScore,
computerScore,
}),
});