#include "element.hpp" #include #include #include int _score = 0; void Point::set_new_point(int row, int col, int dir) { m_row = row; m_col = col; m_direction = dir; } void Point::set_new_point(Point &point) { m_row = point.m_row; m_col = point.m_col; m_direction = point.m_direction; } 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 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, 0); _score++; } } void Head::get_new_pos() { if (m_head.m_direction == -1) { if (m_head.m_col <= 0) m_head.m_col = COL - 1; else m_head.m_col--; } else if (m_head.m_direction == 1) { if (m_head.m_col >= COL - 1) m_head.m_col = 0; else m_head.m_col++; } else if (m_head.m_direction == -2) { if (m_head.m_row <= 0) m_head.m_row = ROW - 1; else m_head.m_row--; } else if (m_head.m_direction == 2) { if (m_head.m_row >= ROW - 1) m_head.m_row = 0; else m_head.m_row++; } } bool 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) { if(m_body.at(i).m_tail_pos.m_col == head.m_head.m_col) { 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.at(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.at(i).m_tail_pos.set_new_point(m_body[i].m_previous_tail_pos); } }