Overview

This is the final project for the CS 247 Software Engineering Principles course. Shoutout to Krish Shah and Chris Abey to being great partners for this project. The Chess Engine Development project aimed to design and implement a versatile chess engine capable of delivering engaging gameplay experiences for both human players and AI-controlled opponents.

Project Highlights:

Flexible Gameplay Modes

Our chess engine offers support for both human players and computer-controlled opponents. The computer mode features multiple difficulty levels, accommodating players of various skill levels, from beginners to advanced.

Comprehensive Chess Functionality

The project covered a wide range of chess functionalities, including move generation, move validation, board representation, piece movements, check detection, and special moves like castling and en passant. The goal was to strike a balance between computational efficiency and strategic depth.

Design Patterns and Principles

The project showcased the application of key design patterns and software development principles, including the Model-View-Controller (MVC) pattern, a modified decorator pattern, and a modified observer pattern. These patterns promoted maintainability, flexibility, and minimal coupling within the codebase.

Unlimited Move Undo Feature

An extra credit feature was implemented, allowing all players (human and computer) to undo their moves an unlimited number of times during the game. This feature utilized a stack of board states to facilitate seamless move reversal.

Resilience to Change

The design of the chess engine demonstrated a high degree of resilience to change, making it adaptable to future modifications and expansions. New pieces, move validators, and game rules could be introduced without the need for extensive code modifications or refactoring following the open-closed principle.

UML Diagram

Results

Terminal View:

GUI View:

Tech Stack

C++, XQuartz