diff --git a/include/element.hpp b/include/element.hpp index 3c11783..9276a76 100644 --- a/include/element.hpp +++ b/include/element.hpp @@ -4,6 +4,7 @@ #include #include "globals.hpp" +static int _score = 0; struct Point { int m_row; @@ -18,6 +19,7 @@ struct Point { }; void get_new_pos(Point* (*board)[COL], Point** segments); +void check_new_tail(Point** segments); struct Head { Head() : m_direction(2) {}; diff --git a/include/input.hpp b/include/input.hpp index 213dab1..70176c7 100644 --- a/include/input.hpp +++ b/include/input.hpp @@ -4,7 +4,7 @@ struct Input { int m_current_key = 0; int m_getch = 0; - void get_input(int &d, bool &r); + void get_input(int &d, bool &r, int &s); }; #endif // INPUT_HPP diff --git a/src/element.cpp b/src/element.cpp index c752d97..645d55d 100644 --- a/src/element.cpp +++ b/src/element.cpp @@ -1,10 +1,9 @@ // Used ptr to take a copy of the head, move head move tail at end of array to previous head position from copy and make the old tail a nullptr #include "element.hpp" +#include #include #include -int _score = 0; - void Point::set_new_point(int row, int col) { m_row = row; m_col = col; @@ -63,8 +62,33 @@ bool Body::check_collision(Head &head) { return false; } -void Body::check_new_tail() { - if(_score > m_body.size()) m_body.push_back(Tail{}); +void check_new_tail(Point** segments) { + int size = 0; + std::cout << size << "\n"; + for(int i = 1; i < ROW * COL; i++) { + if(segments[i] == nullptr) continue; + size++; + } + if(_score + 1 > size) { + for(int i = 0; i < ROW * COL; i++) { + if(segments[i] != nullptr) continue; + if(segments[i] == nullptr) { + if(segments[i - 1]->m_direction == -1) { + segments[i] = new Point { segments[i - 1]->m_row, segments[i - 1]->m_col + 1, '@', segments[i - 1]->m_direction }; + } + else if(segments[i - 1]->m_direction == 1) { + segments[i] = new Point { segments[i - 1]->m_row, segments[i - 1]->m_col - 1, '@', segments[i - 1]->m_direction }; + } + else if(segments[i - 1]->m_direction == -2) { + segments[i] = new Point { segments[i - 1]->m_row + 1, segments[i - 1]->m_col, '@', segments[i - 1]->m_direction }; + } + else if(segments[i - 1]->m_direction == 2) { + segments[i] = new Point { segments[i - 1]->m_row - 1, segments[i - 1]->m_col, '@', segments[i - 1]->m_direction }; + } + return; + } + } + } } void Body::get_new_pos(Head &head) { diff --git a/src/input.cpp b/src/input.cpp index 081051d..2422104 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -1,7 +1,8 @@ #include "input.hpp" #include +#include -void Input::get_input(int &direction, bool &running) { +void Input::get_input(int &direction, bool &running, int &score) { while(running) { initscr(); cbreak(); @@ -10,16 +11,20 @@ void Input::get_input(int &direction, bool &running) { m_getch = getch(); endwin(); switch (m_getch) { - case 65: + case 43: // + + score++; + m_getch = 0; + break; + case 65: // Up arrow if(m_current_key != 2) direction = m_current_key = -2; break; - case 66: + case 66: // Down arrow if(m_current_key != -2) direction = m_current_key = 2; break; - case 67: + case 67: // Right arrow if(m_current_key != -1) direction = m_current_key = 1; break; - case 68: + case 68: // Left arrow if(m_current_key != 1) direction = m_current_key = -1; break; case 113: diff --git a/src/main.cpp b/src/main.cpp index a1eb142..347c1c0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -15,15 +15,17 @@ int main () { Point* segments[ROW * COL] = {}; segments[0] = new Point { 5, 5, '*', 1 }; - // segments[1] = new Point { 6, 5, '@', 0 }; + segments[1] = new Point { 6, 5, '@', 0 }; std::thread input_thread( &Input::get_input, &input, std::ref(segments[0]->m_direction), - std::ref(running)); + std::ref(running), + std::ref(_score)); while (running) { get_new_pos(window.m_board, segments); + check_new_tail(segments); // 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; @@ -37,6 +39,7 @@ int main () { // body.get_new_pos(head); // // head.m_previous_head.set_new_point(head.m_head); + std::cout << _score << "\n"; window.draw_display(); window.update_display(segments); }