diff --git a/include/element.hpp b/include/element.hpp index 23bd140..56bdc0b 100644 --- a/include/element.hpp +++ b/include/element.hpp @@ -1,7 +1,6 @@ #ifndef ELEMENT_HPP #define ELEMENT_HPP -#include #include "globals.hpp" static int _score = 0; @@ -11,7 +10,7 @@ struct Point { int m_col; char m_symbol; int m_direction; - Point() : m_row(0), m_col(0), m_symbol(' ') {} + Point() : m_row(0), m_col(0), m_symbol('@') {} Point(int x, int y, char s) : m_row(x), m_col(y), m_symbol(s) {} Point(int x, int y, char s, int d) : m_row(x), m_col(y), m_symbol(s), m_direction(d) {} void to_string(); @@ -19,33 +18,14 @@ struct Point { }; void determine_index_zero_pos(Point* (*board)[COL], Point** segments); -bool check_new_tail(Point** segments); void move_tail_indicies(Point** segments); - -struct Head { - Head() : m_direction(2) {}; - Point m_head {5, 5, '*'}; - Point m_previous_head; - int m_direction; - void get_new_pos(); -}; - -struct Tail { - Point m_tail_pos {0, 0, '@'}; - Point m_previous_tail_pos; -}; - -struct Body { - std::vector m_body; - void check_new_tail(); - bool check_collision(Head &head); - void get_new_pos(Head &head); -}; +void input_new_tail(Point *(*board)[10], Point** segments); +void on_fruit_eaten(Point* (*board)[COL], Point** segments); struct Fruit { Fruit(); Point m_point {0, 0, 'o'}; - void get_new_pos(char (&board)[ROW][COL], Head &head); + void on_fruit_eaten(Point* (*board)[COL], Point** segments); }; #endif // ELEMENT_HPP diff --git a/include/input.hpp b/include/input.hpp index 70176c7..213dab1 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, int &s); + void get_input(int &d, bool &r); }; #endif // INPUT_HPP diff --git a/src/element.cpp b/src/element.cpp index 6a68cf1..5f5431f 100644 --- a/src/element.cpp +++ b/src/element.cpp @@ -1,4 +1,3 @@ -// 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 @@ -34,42 +33,28 @@ void determine_index_zero_pos(Point* (*board)[COL], Point** segments) { board[segments[0]->m_row][segments[0]->m_col] = segments[0]; } +void input_new_tail(Point *(*board)[10], Point** segments) { + for(int i = (ROW * COL) - 1; i >= 3; i--) { + segments[i] = segments[i - 1]; + } + determine_index_zero_pos(board, segments); + segments[3] = new Point {}; +} + void move_tail_indicies(Point** segments) { Point* previous_head = segments[1]; int new_row = segments[1]->m_row; int new_col = segments[1]->m_col; - Point* index; - for(int i = 10; i >= 2; i--) { + Point* index = nullptr; + for(int i = (ROW * COL) - 1; i >= 3; i--) { if(segments[i] == nullptr) { index = segments[i - 1]; continue; } segments[i] = segments[i - 1]; } - - segments[2] = index; - segments[2]->set_new_point(new_row, new_col); -} - -bool 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 }; - return true; - } - } - } - } - return false; + segments[3] = index; + segments[3]->set_new_point(new_row, new_col); } void Point::to_string() { @@ -81,38 +66,14 @@ void Point::set_new_point(int row, int col) { m_col = col; } -Fruit::Fruit() { - m_point.set_new_point((rand() % ROW), (rand() % COL)); -} - -void Fruit::get_new_pos(char (&board)[ROW][COL], Head &head) { +void on_fruit_eaten(Point* (*board)[COL], Point** segments) { int row, col; - if(m_point.m_row == head.m_head.m_row && m_point.m_col == head.m_head.m_col) { + if(segments[2]->m_row == segments[0]->m_row && segments[2]->m_col == segments[0]->m_col) { do { row = (rand() % ROW); col = (rand() % COL); - } while (board[row][col] != '.'); - m_point.set_new_point(row, col); - _score++; + } while (board[row][col] != nullptr); + segments[2]->set_new_point(row, col); + input_new_tail(board, segments); } } - -bool Body::check_collision(Head &head) { - for(int i = 0; i < m_body.size(); i++) { - if(m_body[i].m_tail_pos.m_row != head.m_head.m_row) continue; - if(m_body[i].m_tail_pos.m_col != head.m_head.m_col) continue; - return true; - } - return false; -} - -// void Body::get_new_pos(Head &head) { -// 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[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[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 2422104..cfea5c7 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -1,8 +1,7 @@ #include "input.hpp" #include -#include -void Input::get_input(int &direction, bool &running, int &score) { +void Input::get_input(int &direction, bool &running) { while(running) { initscr(); cbreak(); @@ -11,10 +10,6 @@ void Input::get_input(int &direction, bool &running, int &score) { m_getch = getch(); endwin(); switch (m_getch) { - case 43: // + - score++; - m_getch = 0; - break; case 65: // Up arrow if(m_current_key != 2) direction = m_current_key = -2; break; diff --git a/src/main.cpp b/src/main.cpp index 8143e1c..0249d40 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -6,111 +6,28 @@ #include "input.hpp" int main () { - // int g = 0; std::srand(std::time(0)); Window window; Input input; - Fruit fruit; - Body body; bool running = true; Point* segments[ROW * COL] = {}; - segments[0] = new Point { 5, 5, '*', 1 }; - segments[2] = new Point { 3, 5, '@', 0 }; - segments[3] = new Point { 4, 5, '@', 0 }; - segments[4] = new Point { 5, 5, '@', 0 }; - segments[5] = new Point { 6, 5, '@', 0 }; - // segments[3] = new Point { 4, 5, '@', 0 }; - // segments[4] = new Point { 5, 5, '@', 0 }; - // segments[5] = new Point { 6, 5, '@', 0 }; + segments[0] = new Point { 5, 5, '*', 1 }; // Head + segments[2] = new Point { (rand() % ROW), (rand() % COL), 'o', 0 }; // Fruit - for(int i = 0; i < 10; i++) { - if(segments[i] != nullptr) segments[i]->to_string(); - else if(segments[i] == nullptr) std::cout << "NULLPTR" << "\n"; - } - std::cout << "\n"; - Point* index; - for(int i = 10; i >= 2; i--) { - if(segments[i] == nullptr) { - index = segments[i - 1]; - continue; - } - segments[i] = segments[i - 1]; - } + std::thread input_thread( + &Input::get_input, &input, + std::ref(segments[0]->m_direction), + std::ref(running)); - segments[2] = index; - for(int i = 0; i < 10; i++) { - if(segments[i] != nullptr) segments[i]->to_string(); - else if(segments[i] == nullptr) std::cout << "NULLPTR" << "\n"; - } - std::cout << "\n"; - segments[6] = new Point { 0, 0, '@', 0 }; - for(int i = 0; i < 10; i++) { - if(segments[i] != nullptr) segments[i]->to_string(); - else if(segments[i] == nullptr) std::cout << "NULLPTR" << "\n"; - } - std::cout << "\n"; - for(int i = 10; i >= 2; i--) { - if(segments[i] == nullptr) { - index = segments[i - 1]; - continue; - } - segments[i] = segments[i - 1]; - } - - segments[2] = index; - for(int i = 0; i < 10; i++) { - if(segments[i] != nullptr) segments[i]->to_string(); - else if(segments[i] == nullptr) std::cout << "NULLPTR" << "\n"; - } - std::cout << "\n"; - // segments[2]->set_new_point(new_row, new_col); - // move_tail_indicies(segments); - // for(int i = 0; i < 10; i++) { - // if(segments[i] != nullptr) segments[i]->to_string(); - // else if(segments[i] == nullptr) std::cout << "NULLPTR" << "\n"; - // } - // std::cout << "\n"; - // for(int i = ROW * COL; i > 0; i--) { - // if(segments[i] == nullptr) continue; - // if(segments[i] != nullptr) { - // segments[i] = new Point{ 10, 10, '*', 0 }; - // break; - // } - // } - // for(int i = 0; i < 10; i++) { - // if(segments[i] != nullptr) segments[i]->to_string(); - // else if(segments[i] == nullptr) std::cout << "NULLPTR" << "\n"; - // } - // std::cout << "\n"; - // move_tail_indicies(segments); - // for(int i = 0; i < 10; i++) { - // if(segments[i] != nullptr) segments[i]->to_string(); - // else if(segments[i] == nullptr) std::cout << "NULLPTR" << "\n"; - // } - // std::cout << "\n"; - // move_tail_indicies(segments); - // for(int i = 0; i < 10; i++) { - // if(segments[i] != nullptr) segments[i]->to_string(); - // else if(segments[i] == nullptr) std::cout << "NULLPTR" << "\n"; - // } - // std::cout << "\n"; - - // std::thread input_thread( - // &Input::get_input, &input, - // std::ref(segments[0]->m_direction), - // std::ref(running), - // std::ref(_score)); - - // while (g < 5) { - // while (running) { + while (running) { // for(int i = 0; i < 10; i++) { // if(segments[i] != nullptr) segments[i]->to_string(); // else if(segments[i] == nullptr) std::cout << "NULLPTR" << "\n"; // } // std::cout << "\n"; - // determine_index_zero_pos(window.m_board, segments); - // move_tail_indicies(segments); + determine_index_zero_pos(window.m_board, segments); + move_tail_indicies(segments); // g++; // for(int i = 0; i < ROW; i++) { // for(int j = 0; j < COL; j++) { @@ -139,12 +56,13 @@ int main () { // // head.m_previous_head.set_new_point(head.m_head); // std::cout << _score << "\n"; - // window.clear_display(); - // window.update_display(segments); - // window.draw_display(200); - // } - // input_thread.join(); - for(int i = 0; i < ROW * COL; i++) { + on_fruit_eaten(window.m_board, segments); + window.clear_display(); + window.update_display(segments); + window.draw_display(200); + } + input_thread.join(); + for(int i = (ROW * COL) - 1; i > 0; i--) { if(segments[i] == nullptr) continue; delete segments[i]; } diff --git a/src/window.cpp b/src/window.cpp index 6d139e4..540d888 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -26,7 +26,8 @@ void Window::draw_display(int milliseconds) { void Window::update_display(Point* segments[]) { m_board[segments[0]->m_row][segments[0]->m_col] = segments[0]; - for(int i = 2; i < ROW * COL; i++) { + m_board[segments[2]->m_row][segments[2]->m_col] = segments[2]; + for(int i = 3; i < ROW * COL; i++) { if(segments[i] != nullptr) { m_board[segments[i]->m_row][segments[i]->m_col] = segments[i]; }