final refinement for the day 1 challenge that was supposed to be a bigger project in my head
This commit is contained in:
@@ -1,23 +1,18 @@
|
||||
#ifndef ELEMENTS_HPP
|
||||
#define ELEMENTS_HPP
|
||||
#include "globals.hpp"
|
||||
#include <array>
|
||||
|
||||
struct Point {
|
||||
Point();
|
||||
int m_row;
|
||||
int m_col;
|
||||
Point();
|
||||
Point(int row, int col) : m_row(row), m_col(col) {};
|
||||
void to_string();
|
||||
void clear(std::array<std::array<char, COL>, ROW> &m_board);
|
||||
void assign(int row, int col);
|
||||
};
|
||||
|
||||
struct Ball {
|
||||
Ball();
|
||||
Point m_origin;
|
||||
int m_vx = 1;
|
||||
int m_vy = -1;
|
||||
int m_vx;
|
||||
int m_vy;
|
||||
bool m_goal;
|
||||
void get_new_pos();
|
||||
void check_collision();
|
||||
@@ -28,7 +23,7 @@ struct Paddle {
|
||||
Paddle(int col);
|
||||
int _size;
|
||||
int m_score;
|
||||
Point m_nodes[4];
|
||||
Point m_nodes[3];
|
||||
void get_new_pos(int col);
|
||||
void check_collision(Ball &ball);
|
||||
};
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
#ifndef GLOBALS_HPP
|
||||
#define GLOBALS_HPP
|
||||
|
||||
constexpr unsigned int ROW = 10;
|
||||
constexpr unsigned int COL = 21;
|
||||
constexpr unsigned int ROW = 15;
|
||||
constexpr unsigned int COL = 31;
|
||||
|
||||
#endif
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
#include "elements.hpp"
|
||||
|
||||
struct Input {
|
||||
int m_current_key = 0;
|
||||
char m_getch = ' ';
|
||||
void get_input(bool &r, Paddle &a, Paddle &b);
|
||||
};
|
||||
|
||||
+12
-33
@@ -1,13 +1,8 @@
|
||||
#include <iostream>
|
||||
#include "elements.hpp"
|
||||
#include "globals.hpp"
|
||||
|
||||
Point::Point() {
|
||||
m_col = 0;
|
||||
m_row = 0;
|
||||
}
|
||||
|
||||
void Point::clear(std::array<std::array<char, COL>, ROW> &m_board) {
|
||||
m_board[m_row][m_col] = '.';
|
||||
m_col = m_row = 0;
|
||||
}
|
||||
|
||||
void Point::assign(int row, int col) {
|
||||
@@ -15,22 +10,14 @@ void Point::assign(int row, int col) {
|
||||
m_col = col;
|
||||
}
|
||||
|
||||
void Point::to_string() {
|
||||
std::cout << "(" << m_row << ", " << m_col << ")";
|
||||
}
|
||||
|
||||
Paddle::Paddle(int col) {
|
||||
_size = 4;
|
||||
_size = 3;
|
||||
m_score = 0;
|
||||
for(int i = 0; i < _size; i++) {
|
||||
m_nodes[i].assign(i + 3, col);
|
||||
}
|
||||
for(int i = 0; i < _size; i++) { m_nodes[i].assign(i + (_size * 2), col); }
|
||||
}
|
||||
|
||||
void Paddle::get_new_pos(int col) {
|
||||
for(int i = 1; i < _size; i++) {
|
||||
m_nodes[i].assign(m_nodes[0].m_row + i, col);
|
||||
}
|
||||
for(int i = 1; i < _size; i++) { m_nodes[i].assign(m_nodes[0].m_row + i, col); }
|
||||
}
|
||||
|
||||
void Paddle::check_collision(Ball &ball) {
|
||||
@@ -42,7 +29,7 @@ void Paddle::check_collision(Ball &ball) {
|
||||
}
|
||||
|
||||
Ball::Ball() {
|
||||
m_origin.assign(5, 10);
|
||||
m_origin.assign((ROW / 2), (COL / 2));
|
||||
m_vx = 1;
|
||||
m_vy = -1;
|
||||
m_goal = false;
|
||||
@@ -59,21 +46,13 @@ void Ball::change_direction(char d) {
|
||||
}
|
||||
|
||||
void Ball::check_collision() {
|
||||
if(m_origin.m_row <= 0 || m_origin.m_row >= ROW - 1) {
|
||||
change_direction('y');
|
||||
} if(m_origin.m_col <= 0 || m_origin.m_col >= COL - 1) {
|
||||
m_goal = true;
|
||||
}
|
||||
if(m_origin.m_row <= 0 || m_origin.m_row >= ROW - 1) change_direction('y');
|
||||
if(m_origin.m_col <= 0 || m_origin.m_col >= COL - 1) m_goal = true;
|
||||
}
|
||||
|
||||
void Ball::get_new_pos() {
|
||||
if(m_vx == 1) {
|
||||
m_origin.m_col++;
|
||||
} else if(m_vx == -1) {
|
||||
m_origin.m_col--;
|
||||
} if(m_vy == 1) {
|
||||
m_origin.m_row++;
|
||||
} else if(m_vy == -1) {
|
||||
m_origin.m_row--;
|
||||
}
|
||||
if(m_vx == 1) m_origin.m_col++;
|
||||
else if(m_vx == -1) m_origin.m_col--;
|
||||
if(m_vy == 1) m_origin.m_row++;
|
||||
else if(m_vy == -1) m_origin.m_row--;
|
||||
}
|
||||
|
||||
+2
-2
@@ -17,7 +17,7 @@ void Input::get_input(bool &running, Paddle &a, Paddle &b) {
|
||||
m_getch = ' ';
|
||||
}
|
||||
} else if(m_getch == 's') {
|
||||
if(a.m_nodes[3].m_row < ROW - 1) {
|
||||
if(a.m_nodes[a._size - 1].m_row < ROW - 1) {
|
||||
a.m_nodes[0].m_row++;
|
||||
m_getch = ' ';
|
||||
}
|
||||
@@ -27,7 +27,7 @@ void Input::get_input(bool &running, Paddle &a, Paddle &b) {
|
||||
m_getch = ' ';
|
||||
}
|
||||
} else if(m_getch == 'B') {
|
||||
if(b.m_nodes[3].m_row < ROW - 1) {
|
||||
if(b.m_nodes[b._size - 1].m_row < ROW - 1) {
|
||||
b.m_nodes[0].m_row++;
|
||||
m_getch = ' ';
|
||||
}
|
||||
|
||||
+3
-2
@@ -4,6 +4,7 @@
|
||||
#include "timer.hpp"
|
||||
#include "window.hpp"
|
||||
#include "elements.hpp"
|
||||
#include "globals.hpp"
|
||||
|
||||
int main() {
|
||||
bool running = true;
|
||||
@@ -11,7 +12,7 @@ int main() {
|
||||
Timer timer;
|
||||
Window window;
|
||||
Paddle left(1);
|
||||
Paddle right(19);
|
||||
Paddle right(COL - 2);
|
||||
Ball ball;
|
||||
int time = 90;
|
||||
bool timer_active = true;
|
||||
@@ -20,7 +21,7 @@ int main() {
|
||||
while (running) {
|
||||
window.update_display(left, right, ball, time);
|
||||
left.get_new_pos(1);
|
||||
right.get_new_pos(19);
|
||||
right.get_new_pos(COL - 2);
|
||||
ball.get_new_pos();
|
||||
ball.check_collision();
|
||||
left.check_collision(ball);
|
||||
|
||||
+2
-2
@@ -5,7 +5,7 @@
|
||||
|
||||
void Window::update_display(Paddle &left, Paddle &right, Ball &ball, int &time) {
|
||||
for(std::array<char, COL> &row : m_board) { row.fill('.'); }
|
||||
for(int i = 0; i < 4; i++) {
|
||||
for(int i = 0; i < left._size; i++) {
|
||||
m_board[left.m_nodes[i].m_row][left.m_nodes[i].m_col] = '|';
|
||||
m_board[right.m_nodes[i].m_row][right.m_nodes[i].m_col] = '|';
|
||||
}
|
||||
@@ -18,5 +18,5 @@ void Window::update_display(Paddle &left, Paddle &right, Ball &ball, int &time)
|
||||
std::cout << "\r\n";
|
||||
}
|
||||
std::cout << "Time left: " << time << ", Score ( " << left.m_score << " : " << right.m_score << " )" << std::endl;
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(200)); // 1000 / fps; 200ms = 5fps
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(130)); // 1000 / fps; 200ms = 5fps
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user