# Overview GUI contains the main function and integrates SFML for rendering and event handling. --- ## Configuration ``` struct GameRendererConfig { static constexpr int kFPS = 30; static constexpr int kCellSize = 20; static constexpr int kBoardLeft = 20; static constexpr int kBoardTop = 60; static constexpr int kBorderSize = 1; }; ``` * <font color="#3398FF">Frames per second:</font> kFPS = 30 * <font color="#3398FF">Size of each cell:</font> kCellSize = 20 * <font color="#3398FF">Position offsets:</font> kBoardLeft = 20; kBoardTop = 60 * <font color="#3398FF">Size of the border:</font> kBorderSize = 1 --- ## Get Mouse ``` CellPosition GetMouseCellPosition(const sf::RenderWindow &window) { const sf::Vector2i mousePosition = sf::Mouse::getPosition(window); const sf::Vector2i relatedMousePosition = mousePosition - sf::Vector2i(GameRendererConfig::kBoardLeft, GameRendererConfig::kBoardTop); return {relatedMousePosition.y / GameRendererConfig::kCellSize, relatedMousePosition.x / GameRendererConfig::kCellSize}; } ``` * <font color="#3398FF">GetMouseCellPosition:</font> Calculates the mouse cursor relative to the game grid. ### Steps: 1. <font color="#3398FF">mousePosition:</font> Gets the mouse's position in the window. 2. <font color="#3398FF">relatedMousePosition:</font> Adjust the mouse position based on the board's top-left offset. 3. Finally returns the cell position by dividing the adjusted coordinates by the cell size.