This commit is contained in:
DarthMooMancer
2025-11-08 00:06:46 -05:00
parent 7c79f41b93
commit 69f7393adb
5 changed files with 55 additions and 48 deletions
+20 -20
View File
@@ -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;
}
+7 -7
View File
@@ -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) {
+3 -3
View File
@@ -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];
}
}