From 702be0363f1dcf31ca64adcb16b0560d8ba68dd5 Mon Sep 17 00:00:00 2001 From: DarthMooMancer <107283522+DarthMooMancer@users.noreply.github.com> Date: Mon, 1 Sep 2025 04:41:38 -0400 Subject: [PATCH] feat: added blocks. Forgot basics of looping arrays in process and cried --- include/elements.hpp | 32 ++++++++++++++++++++------------ include/window.hpp | 3 ++- src/elements.cpp | 30 +++++++++++++++++++++++++++--- src/main.cpp | 28 ++++++++++++++++++++++++++-- src/window.cpp | 13 +++++++++++-- 5 files changed, 86 insertions(+), 20 deletions(-) diff --git a/include/elements.hpp b/include/elements.hpp index 4d4a4c2..6e3ca49 100644 --- a/include/elements.hpp +++ b/include/elements.hpp @@ -1,6 +1,8 @@ #ifndef ELEMENTS_HPP #define ELEMENTS_HPP +#include + struct Point { Point(); int m_row; @@ -9,25 +11,31 @@ struct Point { void to_string(); }; -struct Paddle { - Paddle(); - int _size; - Point m_nodes[3]; - void get_new_pos(); -}; - struct Ball { Ball(); Point m_origin; int vx; int vy; void get_new_pos(); - void check_collision(); + void check_collision(int &lives); void change_velocity(char d); }; -// struct Block { -// -// }; -// +struct Paddle { + Paddle(); + int _size; + Point m_nodes[3]; + void get_new_pos(); + void check_collision(Ball &ball); +}; + +struct Block { + Block(char symbol, int row, int col); + int _size; + char m_symbol; + Point m_nodes[3]; + void get_pos(); + void check_collision(Ball &ball); +}; + #endif diff --git a/include/window.hpp b/include/window.hpp index 0ced018..112a1b1 100644 --- a/include/window.hpp +++ b/include/window.hpp @@ -7,6 +7,7 @@ struct Window { std::array, ROW> m_board = {}; - void update_display(Paddle &paddle, Ball &ball); + void update_display(Paddle &paddle, Ball &ball, Block (&block_list)[15]); + void tick(int fps); }; #endif diff --git a/src/elements.cpp b/src/elements.cpp index 8bc983d..9ce00cd 100644 --- a/src/elements.cpp +++ b/src/elements.cpp @@ -21,7 +21,6 @@ Paddle::Paddle() { m_nodes[0].m_col = 6; for(int i = 0; i < _size; i++) { m_nodes[i].m_row = 8; - } } @@ -31,8 +30,18 @@ void Paddle::get_new_pos() { } } +void Paddle::check_collision(Ball &ball) { + for(int i = 0; i < _size; i++) { + if(ball.m_origin.m_row == m_nodes[i].m_row) { + if(ball.m_origin.m_col == m_nodes[i].m_col) { + ball.change_velocity('y'); + } + } + } +} + Ball::Ball() { - m_origin.assign(ROW - 3, (COL / 2)); + m_origin.assign(ROW - 5, (COL / 2)); vx = 1; vy = -1; } @@ -47,7 +56,7 @@ void Ball::change_velocity(char d) { } } -void Ball::check_collision() { +void Ball::check_collision(int &lives) { 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) { @@ -66,3 +75,18 @@ void Ball::get_new_pos() { m_origin.m_row++; } } + +Block::Block(char symbol, int row, int col) { + _size = 3; + m_symbol = symbol; + m_nodes[0].m_col = col; + for(int i = 0; i < _size; i++) { + m_nodes[i].m_row = row; + } +} + +void Block::get_pos() { + for(int i = 1; i < _size; i++) { + m_nodes[i].m_col = m_nodes[0].m_col + i; + } +} diff --git a/src/main.cpp b/src/main.cpp index 4404bb5..6ef345d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,3 +1,4 @@ +#include #include #include "input.hpp" #include "window.hpp" @@ -8,15 +9,38 @@ int main() { Window window; Paddle paddle; Ball ball; + Block block_list[15] = { + Block('3', 0, 0), Block('3', 0, 3), Block('3', 0, 6), Block('3', 0, 9), Block('3', 0, 12), + Block('2', 1, 0), Block('2', 1, 3), Block('2', 1, 6), Block('2', 1, 9), Block('2', 1, 12), + Block('1', 2, 0), Block('1', 2, 3), Block('1', 2, 6), Block('1', 2, 9), Block('1', 2, 12), + }; bool running = true; + int lives = 3; std::thread input_thread(&Input::get_input, &input, std::ref(running), std::ref(paddle)); while (running) { - window.update_display(paddle, ball); + window.update_display(paddle, ball, block_list); paddle.get_new_pos(); - ball.check_collision(); + ball.check_collision(lives); + for(int i = 0; i < 15; i++) { + block_list[i].get_pos(); + } + // if(ball.m_origin.m_row >= ROW -1) { + // lives--; + // ball.m_origin.assign(ROW - 5, (COL / 2)); + // ball.vy = 1; + // window.update_display(paddle, ball, block_list); + // window.tick(500); + // } + + paddle.check_collision(ball); ball.get_new_pos(); + // std::cout << "Lives left: " << lives << std::endl; + // if(lives <= 0) { + // std::cout << "You lose!" << std::endl; + // running = false; + // } } input_thread.join(); return 0; diff --git a/src/window.cpp b/src/window.cpp index 622d8d7..ac3fcf0 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -3,11 +3,20 @@ #include #include -void Window::update_display(Paddle &paddle, Ball &ball) { +void Window::tick(int fps) { + std::this_thread::sleep_for(std::chrono::milliseconds(fps)); // 1000 / fps; 200ms = 5fps +} + +void Window::update_display(Paddle &paddle, Ball &ball, Block (&block_list)[15]) { for(std::array &row : m_board) { row.fill('.'); } for(int i = 0; i < paddle._size; i++) { m_board[paddle.m_nodes[i].m_row][paddle.m_nodes[i].m_col] = '-'; } + for(int i = 0; i < 15; i++) { + for(int j = 0; j < block_list[i]._size; j++) { + m_board[block_list[i].m_nodes[j].m_row][block_list[i].m_nodes[j].m_col] = block_list[i].m_symbol; + } + } m_board[ball.m_origin.m_row][ball.m_origin.m_col] = '*'; std::cout << "\033[H" << std::flush; for(std::array &row : m_board) { @@ -16,5 +25,5 @@ void Window::update_display(Paddle &paddle, Ball &ball) { } std::cout << "\r\n"; } - std::this_thread::sleep_for(std::chrono::milliseconds(300)); // 1000 / fps; 200ms = 5fps + tick(150); }