diff --git a/include/fruit.hpp b/include/fruit.hpp index 7604313..4e5c511 100644 --- a/include/fruit.hpp +++ b/include/fruit.hpp @@ -5,12 +5,8 @@ struct Fruit { Fruit(); - int unsigned m_row; - int unsigned m_col; - int unsigned m_total_eaten; Point m_point; - - void create_point(); - void reset(std::array, ROW> &arr, int row, int col, int &score); + void reset(std::array, ROW> &board, int row, int col, int &score); }; + #endif // FRUIT_HPP diff --git a/include/globals.hpp b/include/globals.hpp index 9cd596a..b8783bb 100644 --- a/include/globals.hpp +++ b/include/globals.hpp @@ -3,8 +3,8 @@ #include -constexpr uint16_t ROW = 10; -constexpr uint16_t COL = 10; +constexpr uint16_t ROW = 11; +constexpr uint16_t COL = 11; constexpr uint16_t FPS = 5; #endif // GLOBALS_HPP diff --git a/include/snake.hpp b/include/snake.hpp index 5bfcad9..76fb9bb 100644 --- a/include/snake.hpp +++ b/include/snake.hpp @@ -5,6 +5,7 @@ #include "point.hpp" struct Head { + Head(); Head(int default_direction, int row, int col); Point m_head; Point m_previous_head; diff --git a/include/window.hpp b/include/window.hpp index 2f99804..047620e 100644 --- a/include/window.hpp +++ b/include/window.hpp @@ -13,7 +13,6 @@ struct Window { int m_previous_reset; void draw_window(); - void clear_window(); void tick(double frames_per_second); void kill(bool &running); void update_score(Fruit &fruit, Body &body); diff --git a/src/fruit.cpp b/src/fruit.cpp index 9e218fc..a9bd36d 100644 --- a/src/fruit.cpp +++ b/src/fruit.cpp @@ -4,21 +4,16 @@ #include "globals.hpp" Fruit::Fruit() { - std::srand(std::time(0)); - create_point(); - m_total_eaten = 0; + std::srand(std::time(0)); + m_point.m_row = (rand() % 9); + m_point.m_col = (rand() % 9); } -void Fruit::create_point() { - m_point = Point {rand() % 9, rand() % 9}; - m_row = m_point.m_row; - m_col = m_point.m_col; -} - -void Fruit::reset(std::array, ROW> &arr, int row, int col, int &score) { - if(m_row == row && m_col == col) { - m_point.clear(arr); - create_point(); - score++; - } +void Fruit::reset(std::array, ROW> &board, int row, int col, int &score) { + if(m_point.m_row == row && m_point.m_col == col) { + m_point.clear(board); + m_point.m_row = (rand() % 9); + m_point.m_col = (rand() % 9); + score++; + } } diff --git a/src/main.cpp b/src/main.cpp index 612c809..43e1a87 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -6,12 +6,12 @@ #include "globals.hpp" #include "input.hpp" -int main (int argc, char *argv[]) { +int main () { Window window; Input input; Fruit fruit; Body body; - Head head { 2, 0, 0 }; + Head head; bool running = true; bool collision = false; std::thread input_thread( @@ -19,6 +19,7 @@ int main (int argc, char *argv[]) { std::ref(head.m_head.m_direction), std::ref(collision), std::ref(running)); + while (running) { body.collision(head, collision); window.update_score(fruit, body); @@ -29,7 +30,7 @@ int main (int argc, char *argv[]) { fruit.reset(window.m_board, head.m_head.m_row, head.m_head.m_col, window.m_score); window.m_board[head.m_head.m_row][head.m_head.m_col] = '*'; - window.m_board[fruit.m_row][fruit.m_col] = 'X'; + window.m_board[fruit.m_point.m_row][fruit.m_point.m_col] = 'X'; body.draw(window.m_board); window.update_display(FPS); body.clear(window.m_board); diff --git a/src/snake.cpp b/src/snake.cpp index e868a54..4e01725 100644 --- a/src/snake.cpp +++ b/src/snake.cpp @@ -1,5 +1,9 @@ #include "snake.hpp" -#include + +Head::Head() { + m_head = Point { 5, 5, 2 }; + m_previous_head.set_new_point(m_previous_head.m_row = 0, m_previous_head.m_col = 0, m_previous_head.m_direction = 2); +} Head::Head(int default_direction, int row, int col) { m_head = Point { row, col, default_direction }; @@ -58,7 +62,9 @@ void Body::clear(std::array, ROW> &arr) { void Body::draw(std::array, ROW> &arr) { for(int i = 0; i < m_body.size(); i++) { - arr[m_body.at(i).m_tail_pos.m_row][m_body.at(i).m_tail_pos.m_col] = '0'; + if(i < m_body.size()) { + arr[m_body.at(i).m_tail_pos.m_row][m_body.at(i).m_tail_pos.m_col] = '0'; + } } } diff --git a/src/window.cpp b/src/window.cpp index 370473e..55f5a55 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -33,17 +33,8 @@ void Window::draw_window() { std::cout << std::flush; } -void Window::clear_window() { - std::cout<<"\033[H" << std::flush; -} - -void Window::tick(double frames_per_second) { - std::this_thread::sleep_for(std::chrono::milliseconds((int) (1000 / frames_per_second))); -} - void Window::update_score(Fruit &fruit, Body &body) { - if(m_score % 1 == 0 && m_score >= 1) { - fruit.m_total_eaten++; + if(m_score >= 1) { m_score = 0; body.m_body.push_back(Tail{2, 0, 0}); } @@ -54,7 +45,7 @@ void Window::kill(bool &running) { } void Window::update_display(int fps) { - clear_window(); + std::cout<<"\033[H" << std::flush; draw_window(); - tick(fps); + std::this_thread::sleep_for(std::chrono::milliseconds((int) (200))); // 1000 / fps; 200ms = 5fps }