\( \newcommand{\NOT}{\neg} \newcommand{\AND}{\wedge} \newcommand{\OR}{\vee} \newcommand{\XOR}{\oplus} \newcommand{\IMP}{\Rightarrow} \newcommand{\IFF}{\Leftrightarrow} \newcommand{\TRUE}{\text{True}\xspace} \newcommand{\FALSE}{\text{False}\xspace} \newcommand{\IN}{\,{\in}\,} \newcommand{\NOTIN}{\,{\notin}\,} \newcommand{\TO}{\rightarrow} \newcommand{\DIV}{\mid} \newcommand{\NDIV}{\nmid} \newcommand{\MOD}[1]{\pmod{#1}} \newcommand{\MODS}[1]{\ (\text{mod}\ #1)} \newcommand{\N}{\mathbb N} \newcommand{\Z}{\mathbb Z} \newcommand{\Q}{\mathbb Q} \newcommand{\R}{\mathbb R} \newcommand{\C}{\mathbb C} \newcommand{\cA}{\mathcal A} \newcommand{\cB}{\mathcal B} \newcommand{\cC}{\mathcal C} \newcommand{\cD}{\mathcal D} \newcommand{\cE}{\mathcal E} \newcommand{\cF}{\mathcal F} \newcommand{\cG}{\mathcal G} \newcommand{\cH}{\mathcal H} \newcommand{\cI}{\mathcal I} \newcommand{\cJ}{\mathcal J} \newcommand{\cL}{\mathcal L} \newcommand{\cK}{\mathcal K} \newcommand{\cN}{\mathcal N} \newcommand{\cO}{\mathcal O} \newcommand{\cP}{\mathcal P} \newcommand{\cQ}{\mathcal Q} \newcommand{\cS}{\mathcal S} \newcommand{\cT}{\mathcal T} \newcommand{\cV}{\mathcal V} \newcommand{\cW}{\mathcal W} \newcommand{\cZ}{\mathcal Z} \newcommand{\emp}{\emptyset} \newcommand{\bs}{\backslash} \newcommand{\floor}[1]{\left \lfloor #1 \right \rfloor} \newcommand{\ceil}[1]{\left \lceil #1 \right \rceil} \newcommand{\abs}[1]{\left | #1 \right |} \newcommand{\xspace}{} \newcommand{\proofheader}[1]{\underline{\textbf{#1}}} \)

CSC111 Winter 2026 Assignment 2: Minichess Overview

[Back to assignment handout]

In this assignment, we study a simplified version of Chess called Minichess (in fact, there are multiple variation of Minichess that you can read about on Wikipedia), which we introduce on this page. We want you to be familiar with the terminology and rules as you work through the assignment, but you are not responsible for implementing anything on this page! In the assignment starter files, we have provided a Python library that represents and visualizes Minichess games—you will benefit from abstraction by using this library to complete this assignment, without worrying about how it is implemented.

Rules of Minichess

Minichess is a game with two players, called White and Black. Each player starts with eight pieces, arranged in a 4-by-4 board. The pieces always start in the following locations, called the initial game board:

Minichess initial game board

The game proceeds with players alternating taking turns, starting with White. On their turn, a player makes a move by choosing one of their pieces and moving it to move to a different square, which may be empty or occupied by one of their opponent’s pieces.

Each type of piece has a name and different rules governing its movement:

Piece type Movement
Pawn Image of pawn Can move forward one space into an unoccupied square, or can move diagonally forward one space to capture an opponent’s piece.
Rook Image of rook Can move and capture by travelling any number of spaces horizontally or vertically. Cannot jump over other pieces.
Queen Image of queen Can move and capture by travelling any number of spaces horizontally, vertically, or diagonally. Cannot jump over other pieces.
King Image of king Can move and capture by one square in any direction, including diagonals. Cannot move into a square that would allow it to be captured by the opponent’s next move.

Game objective

The objective of the game is to capture the opposing player’s king. If it is your turn and your king is currently threatened (can be captured) by at least one of your opponent’s pieces, you must make a move to prevent this capture:

End of game

A Minichess game can end in three ways:

  1. Checkmate: it is a player’s turn and their king is threatened, and they have no possible move to prevent this capture. In this case, the checkmated player loses, and their opponent wins.
  2. Exhaustion: it is a player’s turn and they have no valid moves. In this case, that player loses, and their opponent wins.
  3. Draw: if neither player has been checkmated in 50 moves (25 moves per player), then the game ends in a draw.

Differences from chess

If you are familiar with the rules of chess, there are a few differences between Minichess and Chess to be aware of:

  1. Pawns can only ever move one space, never two.
  2. Pawns do not get promoted when reaching the opposing row of the board.
  3. There is no castling.
  4. Games end in a draw after 50 moves, regardless of what previous moves have been made. (This is stricter than real chess-ending rules.)
  5. Games can end in a loss when a player has no valid moves but is not in check. (In real chess, this is a stalemate and counts as a draw.)

Encoding Minichess moves

When humans play Minichess or chess, we can make moves by physically moving pieces (when in person) or clicking on a graphical interface (online). But for computers to process chess games, we need a simpler way of encoding moves that is easy for a Python program to process. This section describes how we’ll use strings to represent Minichess move (The notation we’ll use here is similar to standard chess algebraic notation, but simplified for the purposes of this assignment).

First, we assign coordinates to the 4-by-4 board as follows:

Empty minichess board showing grid

Second, a move is represented as a string of four characters, where the first two characters are the column and row of where the piece started from, and the last two characters are the column and row of where the piece moved to.

For example, the string 'a2b3' indicates that a piece moved from the square at “column a, row 2” to the square at “column b, row 3”.

You might wonder how we know which piece was actually moved, if we only know the coordinates! It will be the responsibility of one of our provided Python classes (MiniChessGame) to keep track of the state of the board, so that it knows which piece is at which square. We discuss this more on the assignment handout.