// 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 int _score = 0; void Point::set_new_point(int row, int col) { m_row = row; m_col = col; } void Point::set_new_point(Point &point) { set_new_point(point.m_row, point.m_col); } Fruit::Fruit() { m_point.set_new_point((rand() % ROW), (rand() % COL)); } 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 { row = (rand() % ROW); col = (rand() % COL); } while (board[row][col] != '.'); m_point.set_new_point(row, col); _score++; } } void get_new_pos(Point* (*board)[COL], Point** segments) { Point new_point; new_point.m_row = segments[0]->m_row; new_point.m_col = segments[0]->m_col; if (segments[0]->m_direction == -1) { if (new_point.m_col <= 0) new_point.m_col = COL - 1; else new_point.m_col--; } else if (segments[0]->m_direction == 1) { if (new_point.m_col >= COL - 1) new_point.m_col = 0; else new_point.m_col++; } else if (segments[0]->m_direction == -2) { if (new_point.m_row <= 0) new_point.m_row = ROW - 1; else new_point.m_row--; } else if (segments[0]->m_direction == 2) { if (new_point.m_row >= ROW - 1) new_point.m_row = 0; else new_point.m_row++; } board[segments[0]->m_row][segments[0]->m_col] = nullptr; segments[0]->m_row = new_point.m_row; segments[0]->m_col = new_point.m_col; board[segments[0]->m_row][segments[0]->m_col] = segments[0]; } 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::check_new_tail() { if(_score > m_body.size()) m_body.push_back(Tail{}); } 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); } }