diff --git a/include/elements.hpp b/include/elements.hpp index 4f4b4ea..bec937c 100644 --- a/include/elements.hpp +++ b/include/elements.hpp @@ -4,39 +4,46 @@ #include "globals.hpp" enum Direction { - NONE = 0, - UP = -1, - DOWN = 1 + NONE, UP, DOWN }; -struct Point { - Point() : m_row(0), m_col(0) {}; - Point(int r, int c, char s) : m_row(r), m_col(c), m_symbol(s) {}; - int m_row; - int m_col; +struct vec2 { + vec2() : y(0), x(0) {}; + vec2(int r, int c, char s) : y(r), x(c), m_symbol(s) {} + int x, y; char m_symbol; }; - struct Ball { Ball() : m_vx(1), m_vy(-1) {}; - Point* m_origin; + vec2* m_origin; int m_vx; int m_vy; - bool determine_next_valid_position(Point* (*board)[COL]); + bool determine_next_valid_position(); }; struct Paddle { Paddle() : m_score(0) {}; int m_score; int m_size; - Point** m_nodes; + vec2** m_nodes; enum Direction m_dir; - void determine_new_position(Point* (*board)[COL]); + void determine_new_position(vec2* (*board)[COL]); }; -void on_collision_with_ball(Point** segments, Ball &ball, int t_size); -Ball create_ball(Point** segments, int row, int col, char symbol, int t_size); -Paddle create_paddle(Point** segments, int starting_index, int ending_index, int column, char symbol); +class Engine { +public: + Engine(); + ~Engine(); + void run(); + +private: + + +}; + +void on_collision_with_ball(vec2** segments, Ball &ball, int t_size); +Ball create_ball(vec2** segments, int row, int col, char symbol, int t_size); +Paddle create_paddle(vec2** segments, int starting_index, int ending_index, int column, char symbol); #endif diff --git a/include/window.hpp b/include/window.hpp index 50b1463..ef7a8da 100644 --- a/include/window.hpp +++ b/include/window.hpp @@ -5,9 +5,9 @@ #include "elements.hpp" struct Window { - Point* m_board[ROW][COL] = {}; + vec2* m_board[ROW][COL] = {}; void clear_display(); void draw_display(int milliseconds); - void update_display(Point** segments); + void update_display(vec2** segments); }; #endif diff --git a/src/elements.cpp b/src/elements.cpp index cce4d65..43db836 100644 --- a/src/elements.cpp +++ b/src/elements.cpp @@ -1,68 +1,68 @@ #include "elements.hpp" #include "globals.hpp" -Ball create_ball(Point** segments, int row, int col, char symbol, int t_size) { +Ball create_ball(vec2** segments, int row, int col, char symbol, int t_size) { Ball ball; - segments[t_size - 1] = new Point { row, col, symbol }; + segments[t_size - 1] = new vec2 { row, col, symbol }; ball.m_origin = segments[t_size - 1]; return ball; } -Paddle create_paddle(Point** segments, int starting_index, int ending_index, int column, char symbol) { +Paddle create_paddle(vec2** segments, int starting_index, int ending_index, int column, char symbol) { Paddle paddle; paddle.m_size = ending_index - starting_index; - paddle.m_nodes = new Point*[paddle.m_size]; + paddle.m_nodes = new vec2*[paddle.m_size]; int starting_y_index = (ROW / 2) - (paddle.m_size / 2); for(int i = 0; i < paddle.m_size; i++) { - paddle.m_nodes[i] = new Point { starting_y_index + i, column, symbol }; + paddle.m_nodes[i] = new vec2 { starting_y_index + i, column, symbol }; segments[starting_index + i] = paddle.m_nodes[i]; } return paddle; } -void Paddle::determine_new_position(Point* (*board)[COL]) { +void Paddle::determine_new_position(vec2* (*board)[COL]) { if(m_dir == UP) { - if(board[(m_nodes[0]->m_row) - 1][m_nodes[0]->m_col] == nullptr) { + if(board[(m_nodes[0]->y) - 1][m_nodes[0]->x] == nullptr) { for(int i = 0; i < m_size; i++) { - m_nodes[i]->m_row--; + m_nodes[i]->y--; } } } else if(m_dir == DOWN) { - if(board[(m_nodes[m_size - 1]->m_row) + 1][m_nodes[m_size - 1]->m_col] == nullptr) { + if(board[(m_nodes[m_size - 1]->y) + 1][m_nodes[m_size - 1]->x] == nullptr) { for(int i = 0; i < m_size; i++) { - m_nodes[i]->m_row++; + m_nodes[i]->y++; } } } m_dir = NONE; } -void on_collision_with_ball(Point** segments, Ball &ball, int t_size) { +void on_collision_with_ball(vec2** segments, Ball &ball, int t_size) { for(int i = 0; i < t_size - 1; i++) { - if(segments[i]->m_row != ball.m_origin->m_row) continue; - if(segments[i]->m_col != ball.m_origin->m_col) continue; + if(segments[i]->y != ball.m_origin->y) continue; + if(segments[i]->x != ball.m_origin->x) continue; if (ball.m_vx == 1) ball.m_vx = -1; else ball.m_vx = 1; } } -bool Ball::determine_next_valid_position(Point* (*board)[COL]) { - if(m_origin->m_row <= 0 || m_origin->m_row >= ROW - 1) { +bool Ball::determine_next_valid_position() { + if(m_origin->y <= 0 || m_origin->y >= ROW - 1) { if (m_vy == 1) m_vy = -1; else m_vy = 1; } - if(m_origin->m_col <= 0 || m_origin->m_col >= COL - 1) return false; + if(m_origin->x <= 0 || m_origin->x >= COL - 1) return false; if(m_vx == 1) { - m_origin->m_col++; + m_origin->x++; } else if(m_vx == -1) { - m_origin->m_col--; + m_origin->x--; } if(m_vy == 1) { - m_origin->m_row++; + m_origin->y++; } else if(m_vy == -1) { - m_origin->m_row--; + m_origin->y--; } return true; } diff --git a/src/main.cpp b/src/main.cpp index 491513e..07e2bc3 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -7,12 +7,12 @@ #include "globals.hpp" int main() { - int time_seconds = 5; + int time_seconds = 30; Input input; Timer timer; Window window; bool running = true; - Point* segments[8] = {}; + vec2* segments[8] = {}; Paddle left = create_paddle(segments, 0, 3, 1, '|'); Paddle right = create_paddle(segments, 3, 6, COL - 2, '|'); @@ -24,14 +24,14 @@ int main() { while (running) { left.determine_new_position(window.m_board); right.determine_new_position(window.m_board); - if(!ball.determine_next_valid_position(window.m_board)) { - if(ball.m_origin->m_col < 1) { + if(!ball.determine_next_valid_position()) { + if(ball.m_origin->x < 1) { left.m_score++; - } else if(ball.m_origin->m_col > COL - 2) { + } else if(ball.m_origin->x > COL - 2) { right.m_score++; } - ball.m_origin->m_row = ROW / 2; - ball.m_origin->m_col = COL / 2; + ball.m_origin->y = ROW / 2; + ball.m_origin->x = COL / 2; } on_collision_with_ball(segments, ball, 7); if(time_seconds <= 0) { diff --git a/src/window.cpp b/src/window.cpp index c022c32..2eae535 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -12,6 +12,7 @@ void Window::clear_display() { } void Window::draw_display(int milliseconds) { + std::cout << "\033[H" << std::flush; // Clear screen for(int i = 0; i < ROW; i++) { for(int j = 0; j < COL; j++) { if(m_board[i][j] == nullptr) std::cout << ". "; @@ -22,10 +23,9 @@ void Window::draw_display(int milliseconds) { std::this_thread::sleep_for(std::chrono::milliseconds(milliseconds)); // 1000 / fps; 200ms = 5fps } -void Window::update_display(Point** segments) { - std::cout << "\033[H" << std::flush; // Clear screen +void Window::update_display(vec2** segments) { for(int i = 10; i >= 0; i--) { if(segments[i] == nullptr) continue; - m_board[segments[i]->m_row][segments[i]->m_col] = segments[i]; + m_board[segments[i]->y][segments[i]->x] = segments[i]; } }