Skip to content

Semestral assignment for the Object-oriented Programming course @ Warsaw University of Technology

Notifications You must be signed in to change notification settings

mbienkowsk/proi-chess

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Chess

Projekt semestralny z Programowania Obiektowego (2023, semestr letni)

Autorzy

  • Maksym Bieńkowski
  • Mikołaj Garbowski
  • Michał Łuszczek

Funkcjonalności

Projekt umożliwia grę w szachy z drugą osobą lub z botem za pośrednictwem interfejsu graficznego lub tekstowego, wspiera import i eksport stanu gry w formacie FEN.

Projekt wykorzystuje

  • CMake do budowania projektu
  • bibliotekę Qt do interfejsu graficznego i zarządzania komunikacją międzyprocesową
  • framework GoogleTest do testów jednostkowych
  • silnik szachowy Stockfish jako backend dla jednej z implementacji bota szachowego

Projekt jest podzielony na 4 moduły oraz moduł z testami jednostkowymi.

Biblioteka chess

Zawiera podstawową logikę gry w szachy, linkowana jako zależność do różnych implementacji interfejsu użytkownika.

Główna funkcjonalność (wykonywanie ruchu, cofanie ruchu, sprawdzanie stanu zakończenia gry) jest dostępna z poziomu obiektu klasy Game reprezentującego partię szachów, najważniejsze metody do wykorzystania przez interfejs użytkownika to:

(plik Game.h)

class Game {
    ...
public:
    GameOver isOver() const;
    void makeMove(const Move& move, bool updateHistory = true);
    void undoMove();
    void redoMove();
};

Do importowania i eksportowania stanu gry w notacji FEN służy klasa FENParser

class FENParser {
    ...
public:
    static Game parseGame(const std::string &fen);

    static std::string gameToString(const Game &game);
};

Wyliczenie GameOver informuje o powodzie zakończenia gry

enum class GameOver {
    NOT_OVER,
    MATE,
    STALEMATE,
    INSUFFICIENT_MATERIAL,
    FIFTY_MOVE_RULE,
    THREEFOLD_REPETITION,
};

Biblioteka bot

Zawiera interfejs ChessBot do bota szachowego, wyliczającego najlepszy ruch w danym momencie gry.

Implementacja StockfishBot wykorzystuje silnik szachowy stockfish

class ChessBot {
    ...
public:
    virtual Move getBestNextMove() const = 0;
    
    ...
};

Aplikacja cli

Tekstowy interfejs użytkownika umożliwiający grę w 2 osoby lub grę z botem. Zależy od bibliotek chess i bot.

Jako opcjonalny pierwszy argument pozycyjny przyjmuje początkowy stan gry zapisany w notacji FEN (wspierany przez popularne serwisy jak https://chess.com)

8  ♜  ♞  ♝  ♛  ♚  ♝  ♞  ♜  
7  ♟  ♟  ♟  ♟  ♟  ♟  ♟  ♟ 
6                       
5
4              
3
2  ♙  ♙  ♙  ♙  ♙  ♙  ♙  ♙
1  ♖  ♘  ♗  ♕  ♔  ♗  ♘  ♖
   A  B  C  D  E  F  G  H
   
White move >

Aplikacja gui

Graficzny interfejs użytkownika umożliwiający grę w 2 osoby lub grę z botem. Zależy od bibliotek chess i bot oraz Qt.

Wspiera import i eksport stanu gry do notacji FEN, a także cofanie i odcofywanie ruchów klawiszami strzałek lub z poziomu paska menu.

Zrzut ekranu

Testy jednostkowe all-unit-tests

Testy wykorzystują framework GoogleTest

Wszystkie testy można uruchomić jako aplikację all-unit-tests dostępna jako cel kompilacji dla CMake

Zalety i potencjał na dalszy rozwój

  • Poprawne działanie logiki jest zapewniane przez pokrycie testami
  • Zastosowanie inwersji zależności umożliwia rozbudowanie projektu o więcej implementajci bota szachowego lub dodanie wsparcia dla większej liczby standardowych formatów
  • Modularna budowa projektu pozwala na reużywania logiki gry przez różne implementacje interfejsu użytkownika
  • Zastosowanie dynamicznego polimorfizmu i wzorców projektowych eliminuje duplikację kodu

Diagram klas

Narzędzie do edycji - Visual Paradigm

Plik do zaimportowania w aplikacji ./docs/class-diagram.vpd

Instrukcja uruchamiania (Linux)

Zależności

Instalacja stockfish

Pobierz plik binarny właściwy dla danej platformy ze strony lub skompiluj ze źródeł

Dodaj lokalną instalację do PATH, (zmodyfikuj zmienną środowiskową PATH lub dodaj symlink do pliku wykonywalnego w katalogu znajdującym się w PATH)

sudo ln -s  <ścieżka do pliku wykonywalnego> /usr/local/bin/stockfish

Kompilacja pliku wykonywalnego z użyciem CMake

Utwórz katalog docelowy

mkdir chess-build
cd chess-build

Załaduj konfigurację CMake, wymaga podania ściezki do lokalnej instalacji biblioteki

cmake <główny katalog projektu> -DQt6_DIR:PATH=<ścieżka do instalacji Qt>

Na przykład:

cmake /home/mgarbowski/proi/chess -DQt6_DIR:PATH=~/Qt/6.5.0/gcc_64/lib/cmake/Qt6

Aby skompilować projekt należy wskazać target, dostępne to

  • gui dla interfejsu graficznego
  • cli dla interfejsu tekstowego
  • all-unit-tests - dla testów jendostkowych
cmake --build . --target gui

Uruchomienie pliku wykonywalnego

./src/gui/gui

About

Semestral assignment for the Object-oriented Programming course @ Warsaw University of Technology

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •