From 8d4b3990d172ad7cdbbfc4fc5e434ad107725433 Mon Sep 17 00:00:00 2001 From: DarthMooMancer <107283522+DarthMooMancer@users.noreply.github.com> Date: Fri, 14 Nov 2025 10:20:00 -0500 Subject: [PATCH] wip --- include/engine.hpp | 12 +++++------- src/engine.cpp | 13 ++++++++----- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/include/engine.hpp b/include/engine.hpp index cd45f1d..47d3fa1 100644 --- a/include/engine.hpp +++ b/include/engine.hpp @@ -1,8 +1,8 @@ -#ifndef ENGINE_HPP -#define ENGINE_HPP +#pragma once #include -#include +#include +#include constexpr int ROW = 11; constexpr int COL = 11; @@ -21,7 +21,7 @@ struct vec2 { struct Window { std::array, ROW> view; void draw_display(); - void update_display(vec2 &head, vec2 &fruit, std::vector &buf); + void update_display(vec2 &head, vec2 &fruit, std::deque &buf); }; class Engine { @@ -32,7 +32,7 @@ public: private: Window win; - std::vector tail; + std::deque tail; std::string status; vec2 head { COL / 2, ROW / 2 }; vec2 fruit { rand() % COL, rand() % ROW }; @@ -45,5 +45,3 @@ private: void add_tail_and_respawn_fruit(); bool exit_summary(); }; - -#endif // ELEMENT_HPP diff --git a/src/engine.cpp b/src/engine.cpp index d703f44..ff1ae6e 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -17,8 +17,7 @@ void Window::draw_display() { refresh(); } -void Window::update_display(vec2 &head, vec2 &fruit, std::vector &buf) { - for(auto& row : view) row.fill('.'); +void Window::update_display(vec2 &head, vec2 &fruit, std::deque &buf) { view[head.y][head.x] = '*'; view[fruit.y][fruit.x] = 'o'; @@ -36,6 +35,7 @@ Engine::Engine() { noecho(); curs_set(0); nodelay(stdscr, true); + for(auto& row : win.view) row.fill('.'); } Engine::~Engine() { endwin(); } @@ -59,7 +59,7 @@ void Engine::run() { bool Engine::process_input() { int ch; while((ch = getch()) != ERR) { - if(ch == 'q') { return false; } + if(ch == 'q') { return status = "Quitting", false; } else if(ch == 'w') { if(dir != Direction::DOWN) dir = Direction::UP; } else if(ch == 's') { if(dir != Direction::UP) dir = Direction::DOWN; } else if(ch == 'd') { if(dir != Direction::LEFT) dir = Direction::RIGHT; } @@ -85,12 +85,15 @@ void Engine::determine_index_zero_pos() { else if(dir == Direction::RIGHT) { head.x = (head.x + 1) % COL; } else if(dir == Direction::UP) { head.y = (head.y + ROW - 1) % ROW; } else if(dir == Direction::DOWN) { head.y = (head.y + 1) % ROW; } + win.view[prev_head.y][prev_head.x] = '.'; } void Engine::move_tail_indicies() { if(tail.empty()) return; + vec2 last_tail = tail.back(); tail.pop_back(); - tail.insert(tail.begin(), prev_head); + tail.push_front(prev_head); + if(last_tail.x < COL && last_tail.y < ROW) { win.view[last_tail.y][last_tail.x] = '.'; } } void Engine::add_tail_and_respawn_fruit() { @@ -99,6 +102,6 @@ void Engine::add_tail_and_respawn_fruit() { do { new_pos.set((rand() % ROW), (rand() % COL)); } while (new_pos == head || std::any_of(tail.begin(), tail.end(), [&](const vec2& seg) { return seg == new_pos; })); fruit = new_pos; - tail.insert(tail.begin(), vec2 { ROW, COL }); + tail.push_front(vec2 { ROW, COL }); m_score++; }