#ifndef ELEMENT_HPP #define ELEMENT_HPP #include #include #include #include "globals.hpp" class Window; enum Direction { UP, DOWN, LEFT, RIGHT }; struct vec { int x, y; vec() : x(0), y(0) {} vec(int x, int y) : x(x), y(y) {} void set(int _x, int _y) { x = _x; y = _y; } auto operator <=> (const vec&) const = default; }; class SnakeGame { public: SnakeGame(); ~SnakeGame(); void run(); private: std::unique_ptr win; std::vector buf; bool running = true; enum Direction m_dir; uint8_t m_score = 0; void process_input(); void determine_index_zero_pos(); void move_tail_indicies(); void add_tail_and_respawn_fruit(std::array, ROW> board); bool segment_overlap(); bool exit_summary(); }; #endif // ELEMENT_HPP