From 9d3f6b3308c30ffae71a1f0a7eba27b16a86180c Mon Sep 17 00:00:00 2001 From: DarthMooMancer Date: Fri, 12 Sep 2025 22:18:36 -0400 Subject: [PATCH] refactor: removing a bunch of random bad code and fixing it with more readable code --- include/element.hpp | 22 ++++++++++------------ include/globals.hpp | 1 - include/input.hpp | 2 +- src/element.cpp | 43 ++++++++++++++++++++----------------------- src/input.cpp | 27 ++++++++++++++++----------- src/main.cpp | 5 ++--- 6 files changed, 49 insertions(+), 51 deletions(-) diff --git a/include/element.hpp b/include/element.hpp index 48483df..9d65f1b 100644 --- a/include/element.hpp +++ b/include/element.hpp @@ -11,13 +11,14 @@ struct Body; struct Fruit; struct Point { - int m_row; - int m_col; - int m_direction; - Point() {} - Point(int x, int y) : m_row(x), m_col(y) {} - Point(int x, int y, int dir) : m_row(x), m_col(y), m_direction(dir) {} - void set_new_point(int row, int col, int dir); + int m_row; + int m_col; + int m_direction; + Point() {} + Point(int x, int y) : m_row(x), m_col(y) {} + Point(int x, int y, int dir) : m_row(x), m_col(y), m_direction(dir) {} + void set_new_point(int row, int col, int dir); + void set_new_point(Point &point); }; struct Head { @@ -33,19 +34,16 @@ struct Tail { }; struct Body { - Body() : m_score(0), m_collision(false) {}; std::vector m_body; - int m_score; - bool m_collision; void check_new_tail(); - void check_collision(Head &head); + bool check_collision(Head &head); void get_new_pos(Head &head); }; struct Fruit { Fruit(char (&board)[ROW][COL]); Point m_point; - void get_new_pos(char (&board)[ROW][COL], Head &head, int &score); + void get_new_pos(char (&board)[ROW][COL], Head &head); }; #endif // ELEMENT_HPP diff --git a/include/globals.hpp b/include/globals.hpp index c7984cb..fee3fb3 100644 --- a/include/globals.hpp +++ b/include/globals.hpp @@ -2,5 +2,4 @@ #define GLOBALS_HPP #define ROW 10 #define COL 10 - #endif // GLOBALS_HPP diff --git a/include/input.hpp b/include/input.hpp index f2460b8..213dab1 100644 --- a/include/input.hpp +++ b/include/input.hpp @@ -3,7 +3,7 @@ struct Input { int m_current_key = 0; - char m_getch = ' '; + int m_getch = 0; void get_input(int &d, bool &r); }; diff --git a/src/element.cpp b/src/element.cpp index 3a545fe..8457b2f 100644 --- a/src/element.cpp +++ b/src/element.cpp @@ -1,6 +1,9 @@ #include "element.hpp" #include #include +#include + +int _score = 0; void Point::set_new_point(int row, int col, int dir) { m_row = row; @@ -8,13 +11,19 @@ void Point::set_new_point(int row, int col, int dir) { m_direction = dir; } +void Point::set_new_point(Point &point) { + m_row = point.m_row; + m_col = point.m_col; + m_direction = point.m_direction; +} + Fruit::Fruit(char (&board)[ROW][COL]) { int row = (rand() % ROW); int col = (rand() % COL); m_point.set_new_point(row, col, 0); } -void Fruit::get_new_pos(char (&board)[ROW][COL], Head &head, int &score) { +void Fruit::get_new_pos(char (&board)[ROW][COL], Head &head) { int row, col; if(m_point.m_row == head.m_head.m_row && m_point.m_col == head.m_head.m_col) { do { @@ -22,7 +31,7 @@ void Fruit::get_new_pos(char (&board)[ROW][COL], Head &head, int &score) { col = (rand() % COL); } while (board[row][col] != '.'); m_point.set_new_point(row, col, 0); - score++; + _score++; } } @@ -42,40 +51,28 @@ void Head::get_new_pos() { } } -void Body::check_collision(Head &head) { +bool Body::check_collision(Head &head) { for(int i = 0; i < m_body.size(); i++) { if(m_body.at(i).m_tail_pos.m_row == head.m_head.m_row) { if(m_body.at(i).m_tail_pos.m_col == head.m_head.m_col) { - m_collision = true; + return true; } } } + return false; } void Body::check_new_tail() { - if(m_score >= 1) { - m_score = 0; - m_body.push_back(Tail{}); - } + if(_score > m_body.size()) m_body.push_back(Tail{}); } void Body::get_new_pos(Head &head) { - for (int i = 0; i < m_body.size(); i++) { - m_body.front().m_previous_tail_pos.set_new_point( - head.m_previous_head.m_row, - head.m_previous_head.m_col, - head.m_previous_head.m_direction); - if(i > 0) { - m_body.at(i).m_previous_tail_pos.set_new_point( - m_body.at(i - 1).m_tail_pos.m_row, - m_body.at(i - 1).m_tail_pos.m_col, - m_body.at(i - 1).m_tail_pos.m_direction); - } + if(m_body.empty()) return; + m_body[0].m_previous_tail_pos.set_new_point(head.m_previous_head); + for (int i = 1; i < m_body.size(); i++) { + m_body.at(i).m_previous_tail_pos.set_new_point(m_body[i - 1].m_tail_pos); } for (int i = 0; i < m_body.size(); i++) { - m_body.at(i).m_tail_pos.set_new_point( - m_body.at(i).m_previous_tail_pos.m_row, - m_body.at(i).m_previous_tail_pos.m_col, - m_body.at(i).m_previous_tail_pos.m_direction); + m_body.at(i).m_tail_pos.set_new_point(m_body[i].m_previous_tail_pos); } } diff --git a/src/input.cpp b/src/input.cpp index 771e583..081051d 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -9,17 +9,22 @@ void Input::get_input(int &direction, bool &running) { m_getch = getch(); endwin(); - if(m_current_key != 1 && (m_getch == 'a' || m_getch == 'D')) { - direction = m_current_key = -1; - } else if(m_current_key != - 1 && (m_getch == 'd' || m_getch == 'C')) { - direction = m_current_key = 1; - } else if(m_current_key != -2 && (m_getch == 's' || m_getch == 'B')) { - direction = m_current_key = 2; - } else if(m_current_key != 2 && (m_getch == 'w' || m_getch == 'A')) { - direction = m_current_key = -2; - } else if(m_getch == 'q') { - running = false; + switch (m_getch) { + case 65: + if(m_current_key != 2) direction = m_current_key = -2; + break; + case 66: + if(m_current_key != -2) direction = m_current_key = 2; + break; + case 67: + if(m_current_key != -1) direction = m_current_key = 1; + break; + case 68: + if(m_current_key != 1) direction = m_current_key = -1; + break; + case 113: + running = false; + break; } } - } diff --git a/src/main.cpp b/src/main.cpp index ef29ce1..b6450f4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -19,17 +19,16 @@ int main () { std::ref(running)); while (running) { - body.check_collision(head); body.check_new_tail(); if(body.m_body.size() >= (ROW * COL)) { std::cout << "You win! Score: " + std::to_string(body.m_body.size()) << std::endl; running = false; - } else if(body.m_collision) { + } else if(body.check_collision(head)) { std::cout << "You died! Score: " + std::to_string(body.m_body.size()) << std::endl; running = false; } head.get_new_pos(); - fruit.get_new_pos(window.m_board, head, body.m_score); + fruit.get_new_pos(window.m_board, head); body.get_new_pos(head); head.m_previous_head.set_new_point(head.m_head.m_row, head.m_head.m_col, head.m_head.m_direction);