diff --git a/cmake.log b/cmake.log new file mode 100644 index 0000000..f44d4d7 --- /dev/null +++ b/cmake.log @@ -0,0 +1 @@ +[100%] Built target breakout diff --git a/include/elements.hpp b/include/elements.hpp index 9e01b43..ba49072 100644 --- a/include/elements.hpp +++ b/include/elements.hpp @@ -12,7 +12,7 @@ Ball create_new_ball(Point** buffer, int index, int default_vx, int default_vy, Block** create_block_buffer(int starting_array_index, int starting_symbol, int rows, int cols, int length); void rasterize_block(Point** buffer, Block* block, int starting_index); void rasterize_buffer(Point** buffer, Block** block_buffer, int offset); -void trim_block_buffer_on_collision(Block** block_buffer, int &block_buffer_size, Ball &ball); +void trim_block_buffer_on_collision(Point** buffer, int buffer_size, Block** block_buffer, int &block_buffer_size, Ball &ball); enum Direction { LEFT = -1, @@ -21,14 +21,13 @@ enum Direction { }; struct Point { - Point(); + Point() : m_row(0), m_col(0) {}; Point(int row, int col, char symbol) : m_row(row), m_col(col), m_symbol(symbol) {}; Point(int row, int col, int symbol) : m_row(row), m_col(col), m_symbol(symbol) {}; int m_row; int m_col; char m_symbol; void assign(int row, int col); - void to_string(); }; struct Ball { @@ -36,7 +35,6 @@ struct Ball { Point* m_origin; int vx; int vy; - int m_blocks_left; void determine_new_position(); void change_velocity(char d); }; @@ -56,11 +54,8 @@ struct Block { Block(int size, int row, int col, char symbol); ~Block(); int _size; - int _deleted; Point** m_nodes; - void get_pos(); bool check_collision(Ball &ball); - void _delete(); }; #endif diff --git a/include/window.hpp b/include/window.hpp index 0ebb6b0..d3076a2 100644 --- a/include/window.hpp +++ b/include/window.hpp @@ -5,14 +5,7 @@ #include "elements.hpp" struct Window { - Window(); Point* m_board[ROW][COL] = {}; - int m_lives; - // void update_display(Paddle &paddle, Ball &ball, Block (&block_list)[15]); - void tick(int fps); - void clear(); - void terminate(Ball &ball, bool &running); - void clear_display(); void draw_display(int fps); void update_board(Point** buffer, int buffer_size); diff --git a/src/elements.cpp b/src/elements.cpp index 8a7d469..9e4e757 100644 --- a/src/elements.cpp +++ b/src/elements.cpp @@ -1,16 +1,5 @@ #include "elements.hpp" #include "globals.hpp" -#include - - -Point::Point() { - m_row = 0; - m_col = 0; -} - -void Point::to_string() { - std::cout << "(" << m_row << ", " << m_col << ")\n"; -} Paddle create_new_paddle(Point** buffer, int starting_array_index, int size, int row, char symbol) { Paddle paddle { size }; @@ -59,20 +48,36 @@ void rasterize_buffer(Point** buffer, Block** block_buffer, int offset) { } } -void trim_block_buffer_on_collision(Block** block_buffer, int &block_buffer_size, Ball &ball) { +void trim_block_buffer_on_collision(Point** buffer, int buffer_size, Block** block_buffer, int &block_buffer_size, Ball &ball) { for(int i = 0; i < block_buffer_size; i++) { if(block_buffer[i] == nullptr) continue; if(block_buffer[i]->check_collision(ball)) { ball.change_velocity('y'); + for(int a = 0; a < block_buffer[i]->_size; a++) { + Point* doomed = block_buffer[i]->m_nodes[a]; + // delete doomed; + // block_buffer[i]->m_nodes[a] = nullptr; + for(int j = 0; j < buffer_size; j++) { + if(buffer[j] == doomed) { + buffer[j] = nullptr; + } + } + } delete block_buffer[i]; block_buffer[i] = nullptr; - // block_buffer_size--; } } } Paddle::~Paddle() { - delete[] m_nodes; + if(m_nodes) { + for(int i = 0; i < _size; i++) { + delete m_nodes[i]; + m_nodes[i] = nullptr; + } + delete[] m_nodes; + m_nodes = nullptr; + } } void Paddle::determine_new_position(Point* (*board)[COL]) { @@ -110,18 +115,30 @@ void Ball::change_velocity(char d) { } void Ball::determine_new_position() { - if(m_origin->m_row <= 0 || m_origin->m_row >= ROW - 1) change_velocity('y'); - if(m_origin->m_col <= 0 || m_origin->m_col >= COL - 1) change_velocity('x'); + if(m_origin->m_row <= 0) { + vy = 1; + } else if(m_origin->m_row >= ROW - 1) { + vy = -1; + } + if(m_origin->m_col <= 0) { + vx = 1; + } else if(m_origin->m_col >= COL - 1) { + vx = -1; + } - if(vx == -1) m_origin->m_col--; - else if(vx == 1) m_origin->m_col++; - - if(vy == -1) m_origin->m_row--; - else if(vy == 1) m_origin->m_row++; + m_origin->m_col += vx; + m_origin->m_row += vy; } Block::~Block() { - delete[] m_nodes; + if(m_nodes) { + for(int i = 0; i < _size; i++) { + delete m_nodes[i]; + m_nodes[i] = nullptr; + } + delete[] m_nodes; + m_nodes = nullptr; + } } Block::Block(int size, int row, int col, char symbol) { @@ -140,5 +157,3 @@ bool Block::check_collision(Ball &ball) { } return false; } - -// ball.change_velocity('y'); diff --git a/src/input.cpp b/src/input.cpp index 5271e8b..8aeee16 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -16,7 +16,6 @@ void Input::get_input(bool &running, enum Direction &dir) { case 68: dir = LEFT; break; - break; case 113: running = false; break; diff --git a/src/main.cpp b/src/main.cpp index d814f73..4b3df5c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5,44 +5,36 @@ #include "window.hpp" #include "elements.hpp" -int main(int argc, char **argv) { +int main() { + int buffer_size = 50, buffer_block_size = 15; + bool running = true; + Point* buffer[50] = {}; Input input; Window window; - Point* buffer[50] = {}; Paddle paddle = create_new_paddle(buffer, 1, 3, ROW - 2, '-'); - // Ball ball = create_new_ball(buffer, 0, 1, -1, (ROW - 5), (COL / 2), '*' ); - Ball ball = create_new_ball(buffer, 0, 1, -1, 0, 0, '*' ); - int buffer_block_size = 15; + Ball ball = create_new_ball(buffer, 0, 1, -1, (ROW - 5), (COL / 2), '*' ); Block** block_buffer = create_block_buffer(4, '3', 3, 5, 3); rasterize_buffer(buffer, block_buffer, 4); - bool running = true; - for(int i = 0; i < buffer_block_size; i++) { - std::cout << block_buffer[i] << "\n"; + std::thread input_thread([&] { input.get_input(running, paddle.m_direction); } ); + + while (running) { + paddle.determine_new_position(window.m_board); + paddle.check_collision(ball); + trim_block_buffer_on_collision(buffer, buffer_size, block_buffer, buffer_block_size, ball); + ball.determine_new_position(); + window.clear_display(); + window.update_board(buffer, 50); + window.draw_display(FPMS); } - trim_block_buffer_on_collision(block_buffer, buffer_block_size, ball); - rasterize_buffer(buffer, block_buffer, 4); - std::cout << "\n"; + input_thread.join(); for(int i = 0; i < buffer_block_size; i++) { - std::cout << block_buffer[i] << "\n"; - } - // std::thread input_thread([&] { input.get_input(running, paddle.m_direction); } ); - // - // while (running) { - // paddle.determine_new_position(window.m_board); - // paddle.check_collision(ball); - // trim_block_buffer_on_collision(block_buffer, buffer_block_size, ball); - // ball.determine_new_position(); - // window.clear_display(); - // window.update_board(buffer, 50); - // window.draw_display(FPMS); - // } - // input_thread.join(); - for(int i = 0; i < 50; i++) { - if(buffer[i] == nullptr) continue; - delete buffer[i]; + delete block_buffer[i]; } delete[] block_buffer; + for(int i = 0; i < 50; i++) { + delete buffer[i]; + } return 0; } diff --git a/src/window.cpp b/src/window.cpp index 1c5c4e1..3dc3a58 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -3,29 +3,6 @@ #include #include -Window::Window() { - m_lives = 3; -} -void Window::tick(int fps) { - std::this_thread::sleep_for(std::chrono::milliseconds(fps)); // 1000 / fps; 200ms = 5fps -} - -void Window::clear() { - std::cout << "\033[H" << std::flush; -} - -void Window::terminate(Ball &ball, bool &running) { - if(m_lives <= 0) { - clear(); - std::cout << "You lose!" << std::endl; - running = false; - } if(ball.m_blocks_left <= 0) { - clear(); - std::cout << "You win!" << std::endl; - running = false; - } -} - void Window::clear_display() { for(int i = 0; i < ROW; i++) { for(int j = 0; j < COL; j++) {