From e36ab27f2bbc6ceb8f1cc1645ec82bdbace3288c Mon Sep 17 00:00:00 2001 From: DarthMooMancer Date: Fri, 12 Sep 2025 20:55:56 -0400 Subject: [PATCH] fruit: fixed bug where fruit could generate under tail --- include/element.hpp | 13 +++++++++---- src/element.cpp | 23 ++++++++++------------- src/main.cpp | 3 ++- 3 files changed, 21 insertions(+), 18 deletions(-) diff --git a/include/element.hpp b/include/element.hpp index 5beda9a..48483df 100644 --- a/include/element.hpp +++ b/include/element.hpp @@ -4,6 +4,12 @@ #include #include "globals.hpp" +struct Point; +struct Head; +struct Tail; +struct Body; +struct Fruit; + struct Point { int m_row; int m_col; @@ -11,12 +17,11 @@ struct Point { 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); }; struct Head { - Head(); + Head() : m_head(5, 5, 2) {}; Point m_head; Point m_previous_head; void get_new_pos(); @@ -28,7 +33,7 @@ struct Tail { }; struct Body { - Body(); + Body() : m_score(0), m_collision(false) {}; std::vector m_body; int m_score; bool m_collision; @@ -38,7 +43,7 @@ struct Body { }; struct Fruit { - Fruit(); + Fruit(char (&board)[ROW][COL]); Point m_point; void get_new_pos(char (&board)[ROW][COL], Head &head, int &score); }; diff --git a/src/element.cpp b/src/element.cpp index ba96e55..3a545fe 100644 --- a/src/element.cpp +++ b/src/element.cpp @@ -8,22 +8,24 @@ void Point::set_new_point(int row, int col, int dir) { m_direction = dir; } -Fruit::Fruit() { - std::srand(std::time(0)); - m_point.set_new_point((rand() % 9), (rand() % 9), 0); +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) { + int row, col; if(m_point.m_row == head.m_head.m_row && m_point.m_col == head.m_head.m_col) { - m_point.set_new_point((rand() % 9), (rand() % 9), 0); + do { + row = (rand() % ROW); + col = (rand() % COL); + } while (board[row][col] != '.'); + m_point.set_new_point(row, col, 0); score++; } } -Head::Head() { - m_head.set_new_point(5, 5, 2); -} - void Head::get_new_pos() { if (m_head.m_direction == -1) { if (m_head.m_col <= 0) m_head.m_col = COL - 1; @@ -40,11 +42,6 @@ void Head::get_new_pos() { } } -Body::Body() { - m_score = 0; - m_collision = false; -} - void 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) { diff --git a/src/main.cpp b/src/main.cpp index 38c68e1..ef29ce1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -6,9 +6,10 @@ #include "input.hpp" int main () { + std::srand(std::time(0)); Window window; Input input; - Fruit fruit; + Fruit fruit(window.m_board); Body body; Head head; bool running = true;