wip
This commit is contained in:
+4
-3
@@ -14,12 +14,13 @@ struct Point {
|
|||||||
Point() : m_row(0), m_col(0), m_symbol(' ') {}
|
Point() : m_row(0), m_col(0), m_symbol(' ') {}
|
||||||
Point(int x, int y, char s) : m_row(x), m_col(y), m_symbol(s) {}
|
Point(int x, int y, char s) : m_row(x), m_col(y), m_symbol(s) {}
|
||||||
Point(int x, int y, char s, int d) : m_row(x), m_col(y), m_symbol(s), m_direction(d) {}
|
Point(int x, int y, char s, int d) : m_row(x), m_col(y), m_symbol(s), m_direction(d) {}
|
||||||
|
void to_string();
|
||||||
void set_new_point(int row, int col);
|
void set_new_point(int row, int col);
|
||||||
void set_new_point(Point &point);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void get_new_pos(Point* (*board)[COL], Point** segments);
|
void determine_index_zero_pos(Point* (*board)[COL], Point** segments);
|
||||||
void check_new_tail(Point** segments);
|
bool check_new_tail(Point** segments);
|
||||||
|
void move_tail_indicies(Point** segments);
|
||||||
|
|
||||||
struct Head {
|
struct Head {
|
||||||
Head() : m_direction(2) {};
|
Head() : m_direction(2) {};
|
||||||
|
|||||||
+2
-1
@@ -6,7 +6,8 @@
|
|||||||
|
|
||||||
struct Window {
|
struct Window {
|
||||||
Point* m_board[ROW][COL] = {};
|
Point* m_board[ROW][COL] = {};
|
||||||
void draw_display();
|
void clear_display();
|
||||||
|
void draw_display(int milliseconds);
|
||||||
void update_display(Point* segments[]);
|
void update_display(Point* segments[]);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
+82
-67
@@ -4,15 +4,83 @@
|
|||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <ctime>
|
#include <ctime>
|
||||||
|
|
||||||
|
void determine_index_zero_pos(Point* (*board)[COL], Point** segments) {
|
||||||
|
Point new_point;
|
||||||
|
Point old_point;
|
||||||
|
|
||||||
|
new_point.set_new_point(segments[0]->m_row, segments[0]->m_col);
|
||||||
|
old_point.set_new_point(segments[0]->m_row, segments[0]->m_col);
|
||||||
|
|
||||||
|
if (segments[0]->m_direction == -1) {
|
||||||
|
if (new_point.m_col <= 0) new_point.m_col = COL - 1;
|
||||||
|
else new_point.m_col--;
|
||||||
|
} else if (segments[0]->m_direction == 1) {
|
||||||
|
if (new_point.m_col >= COL - 1) new_point.m_col = 0;
|
||||||
|
else new_point.m_col++;
|
||||||
|
} else if (segments[0]->m_direction == -2) {
|
||||||
|
if (new_point.m_row <= 0) new_point.m_row = ROW - 1;
|
||||||
|
else new_point.m_row--;
|
||||||
|
} else if (segments[0]->m_direction == 2) {
|
||||||
|
if (new_point.m_row >= ROW - 1) new_point.m_row = 0;
|
||||||
|
else new_point.m_row++;
|
||||||
|
}
|
||||||
|
if(segments[1] == nullptr) {
|
||||||
|
segments[1] = new Point { old_point.m_row, old_point.m_col, '.' };
|
||||||
|
} else {
|
||||||
|
segments[1]->set_new_point(old_point.m_row, old_point.m_col);
|
||||||
|
}
|
||||||
|
board[segments[0]->m_row][segments[0]->m_col] = nullptr;
|
||||||
|
segments[0]->set_new_point(new_point.m_row, new_point.m_col);
|
||||||
|
board[segments[0]->m_row][segments[0]->m_col] = segments[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
void move_tail_indicies(Point** segments) {
|
||||||
|
Point* previous_head = segments[1];
|
||||||
|
int new_row = segments[1]->m_row;
|
||||||
|
int new_col = segments[1]->m_col;
|
||||||
|
Point* index;
|
||||||
|
for(int i = 10; i >= 2; i--) {
|
||||||
|
if(segments[i] == nullptr) {
|
||||||
|
index = segments[i - 1];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
segments[i] = segments[i - 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
segments[2] = index;
|
||||||
|
segments[2]->set_new_point(new_row, new_col);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool check_new_tail(Point** segments) {
|
||||||
|
int size = 0;
|
||||||
|
std::cout << size << "\n";
|
||||||
|
for(int i = 1; i < ROW * COL; i++) {
|
||||||
|
if(segments[i] == nullptr) continue;
|
||||||
|
size++;
|
||||||
|
}
|
||||||
|
if(_score + 1 > size) {
|
||||||
|
for(int i = 0; i < ROW * COL; i++) {
|
||||||
|
if(segments[i] != nullptr) continue;
|
||||||
|
if(segments[i] == nullptr) {
|
||||||
|
if(segments[i - 1]->m_direction == -1) {
|
||||||
|
segments[i] = new Point { segments[i - 1]->m_row, segments[i - 1]->m_col + 1, '@', segments[i - 1]->m_direction };
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Point::to_string() {
|
||||||
|
std::cout << "(" << m_row << ", " << m_col << ")\n";
|
||||||
|
}
|
||||||
|
|
||||||
void Point::set_new_point(int row, int col) {
|
void Point::set_new_point(int row, int col) {
|
||||||
m_row = row;
|
m_row = row;
|
||||||
m_col = col;
|
m_col = col;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Point::set_new_point(Point &point) {
|
|
||||||
set_new_point(point.m_row, point.m_col);
|
|
||||||
}
|
|
||||||
|
|
||||||
Fruit::Fruit() {
|
Fruit::Fruit() {
|
||||||
m_point.set_new_point((rand() % ROW), (rand() % COL));
|
m_point.set_new_point((rand() % ROW), (rand() % COL));
|
||||||
}
|
}
|
||||||
@@ -29,30 +97,6 @@ void Fruit::get_new_pos(char (&board)[ROW][COL], Head &head) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void get_new_pos(Point* (*board)[COL], Point** segments) {
|
|
||||||
Point new_point;
|
|
||||||
new_point.m_row = segments[0]->m_row;
|
|
||||||
new_point.m_col = segments[0]->m_col;
|
|
||||||
|
|
||||||
if (segments[0]->m_direction == -1) {
|
|
||||||
if (new_point.m_col <= 0) new_point.m_col = COL - 1;
|
|
||||||
else new_point.m_col--;
|
|
||||||
} else if (segments[0]->m_direction == 1) {
|
|
||||||
if (new_point.m_col >= COL - 1) new_point.m_col = 0;
|
|
||||||
else new_point.m_col++;
|
|
||||||
} else if (segments[0]->m_direction == -2) {
|
|
||||||
if (new_point.m_row <= 0) new_point.m_row = ROW - 1;
|
|
||||||
else new_point.m_row--;
|
|
||||||
} else if (segments[0]->m_direction == 2) {
|
|
||||||
if (new_point.m_row >= ROW - 1) new_point.m_row = 0;
|
|
||||||
else new_point.m_row++;
|
|
||||||
}
|
|
||||||
board[segments[0]->m_row][segments[0]->m_col] = nullptr;
|
|
||||||
segments[0]->m_row = new_point.m_row;
|
|
||||||
segments[0]->m_col = new_point.m_col;
|
|
||||||
board[segments[0]->m_row][segments[0]->m_col] = segments[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Body::check_collision(Head &head) {
|
bool Body::check_collision(Head &head) {
|
||||||
for(int i = 0; i < m_body.size(); i++) {
|
for(int i = 0; i < m_body.size(); i++) {
|
||||||
if(m_body[i].m_tail_pos.m_row != head.m_head.m_row) continue;
|
if(m_body[i].m_tail_pos.m_row != head.m_head.m_row) continue;
|
||||||
@@ -62,42 +106,13 @@ bool Body::check_collision(Head &head) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void check_new_tail(Point** segments) {
|
// void Body::get_new_pos(Head &head) {
|
||||||
int size = 0;
|
// if(m_body.empty()) return;
|
||||||
std::cout << size << "\n";
|
// m_body[0].m_previous_tail_pos.set_new_point(head.m_previous_head);
|
||||||
for(int i = 1; i < ROW * COL; i++) {
|
// for (int i = 1; i < m_body.size(); i++) {
|
||||||
if(segments[i] == nullptr) continue;
|
// m_body[i].m_previous_tail_pos.set_new_point(m_body[i - 1].m_tail_pos);
|
||||||
size++;
|
// }
|
||||||
}
|
// for (int i = 0; i < m_body.size(); i++) {
|
||||||
if(_score + 1 > size) {
|
// m_body[i].m_tail_pos.set_new_point(m_body[i].m_previous_tail_pos);
|
||||||
for(int i = 0; i < ROW * COL; i++) {
|
// }
|
||||||
if(segments[i] != nullptr) continue;
|
// }
|
||||||
if(segments[i] == nullptr) {
|
|
||||||
if(segments[i - 1]->m_direction == -1) {
|
|
||||||
segments[i] = new Point { segments[i - 1]->m_row, segments[i - 1]->m_col + 1, '@', segments[i - 1]->m_direction };
|
|
||||||
}
|
|
||||||
else if(segments[i - 1]->m_direction == 1) {
|
|
||||||
segments[i] = new Point { segments[i - 1]->m_row, segments[i - 1]->m_col - 1, '@', segments[i - 1]->m_direction };
|
|
||||||
}
|
|
||||||
else if(segments[i - 1]->m_direction == -2) {
|
|
||||||
segments[i] = new Point { segments[i - 1]->m_row + 1, segments[i - 1]->m_col, '@', segments[i - 1]->m_direction };
|
|
||||||
}
|
|
||||||
else if(segments[i - 1]->m_direction == 2) {
|
|
||||||
segments[i] = new Point { segments[i - 1]->m_row - 1, segments[i - 1]->m_col, '@', segments[i - 1]->m_direction };
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Body::get_new_pos(Head &head) {
|
|
||||||
if(m_body.empty()) return;
|
|
||||||
m_body[0].m_previous_tail_pos.set_new_point(head.m_previous_head);
|
|
||||||
for (int i = 1; i < m_body.size(); i++) {
|
|
||||||
m_body[i].m_previous_tail_pos.set_new_point(m_body[i - 1].m_tail_pos);
|
|
||||||
}
|
|
||||||
for (int i = 0; i < m_body.size(); i++) {
|
|
||||||
m_body[i].m_tail_pos.set_new_point(m_body[i].m_previous_tail_pos);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
+117
-18
@@ -6,6 +6,7 @@
|
|||||||
#include "input.hpp"
|
#include "input.hpp"
|
||||||
|
|
||||||
int main () {
|
int main () {
|
||||||
|
// int g = 0;
|
||||||
std::srand(std::time(0));
|
std::srand(std::time(0));
|
||||||
Window window;
|
Window window;
|
||||||
Input input;
|
Input input;
|
||||||
@@ -15,17 +16,115 @@ int main () {
|
|||||||
|
|
||||||
Point* segments[ROW * COL] = {};
|
Point* segments[ROW * COL] = {};
|
||||||
segments[0] = new Point { 5, 5, '*', 1 };
|
segments[0] = new Point { 5, 5, '*', 1 };
|
||||||
segments[1] = new Point { 6, 5, '@', 0 };
|
segments[2] = new Point { 3, 5, '@', 0 };
|
||||||
|
segments[3] = new Point { 4, 5, '@', 0 };
|
||||||
|
segments[4] = new Point { 5, 5, '@', 0 };
|
||||||
|
segments[5] = new Point { 6, 5, '@', 0 };
|
||||||
|
// segments[3] = new Point { 4, 5, '@', 0 };
|
||||||
|
// segments[4] = new Point { 5, 5, '@', 0 };
|
||||||
|
// segments[5] = new Point { 6, 5, '@', 0 };
|
||||||
|
|
||||||
std::thread input_thread(
|
for(int i = 0; i < 10; i++) {
|
||||||
&Input::get_input, &input,
|
if(segments[i] != nullptr) segments[i]->to_string();
|
||||||
std::ref(segments[0]->m_direction),
|
else if(segments[i] == nullptr) std::cout << "NULLPTR" << "\n";
|
||||||
std::ref(running),
|
}
|
||||||
std::ref(_score));
|
std::cout << "\n";
|
||||||
|
Point* index;
|
||||||
|
for(int i = 10; i >= 2; i--) {
|
||||||
|
if(segments[i] == nullptr) {
|
||||||
|
index = segments[i - 1];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
segments[i] = segments[i - 1];
|
||||||
|
}
|
||||||
|
|
||||||
while (running) {
|
segments[2] = index;
|
||||||
get_new_pos(window.m_board, segments);
|
for(int i = 0; i < 10; i++) {
|
||||||
check_new_tail(segments);
|
if(segments[i] != nullptr) segments[i]->to_string();
|
||||||
|
else if(segments[i] == nullptr) std::cout << "NULLPTR" << "\n";
|
||||||
|
}
|
||||||
|
std::cout << "\n";
|
||||||
|
segments[6] = new Point { 0, 0, '@', 0 };
|
||||||
|
for(int i = 0; i < 10; i++) {
|
||||||
|
if(segments[i] != nullptr) segments[i]->to_string();
|
||||||
|
else if(segments[i] == nullptr) std::cout << "NULLPTR" << "\n";
|
||||||
|
}
|
||||||
|
std::cout << "\n";
|
||||||
|
for(int i = 10; i >= 2; i--) {
|
||||||
|
if(segments[i] == nullptr) {
|
||||||
|
index = segments[i - 1];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
segments[i] = segments[i - 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
segments[2] = index;
|
||||||
|
for(int i = 0; i < 10; i++) {
|
||||||
|
if(segments[i] != nullptr) segments[i]->to_string();
|
||||||
|
else if(segments[i] == nullptr) std::cout << "NULLPTR" << "\n";
|
||||||
|
}
|
||||||
|
std::cout << "\n";
|
||||||
|
// segments[2]->set_new_point(new_row, new_col);
|
||||||
|
// move_tail_indicies(segments);
|
||||||
|
// for(int i = 0; i < 10; i++) {
|
||||||
|
// if(segments[i] != nullptr) segments[i]->to_string();
|
||||||
|
// else if(segments[i] == nullptr) std::cout << "NULLPTR" << "\n";
|
||||||
|
// }
|
||||||
|
// std::cout << "\n";
|
||||||
|
// for(int i = ROW * COL; i > 0; i--) {
|
||||||
|
// if(segments[i] == nullptr) continue;
|
||||||
|
// if(segments[i] != nullptr) {
|
||||||
|
// segments[i] = new Point{ 10, 10, '*', 0 };
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// for(int i = 0; i < 10; i++) {
|
||||||
|
// if(segments[i] != nullptr) segments[i]->to_string();
|
||||||
|
// else if(segments[i] == nullptr) std::cout << "NULLPTR" << "\n";
|
||||||
|
// }
|
||||||
|
// std::cout << "\n";
|
||||||
|
// move_tail_indicies(segments);
|
||||||
|
// for(int i = 0; i < 10; i++) {
|
||||||
|
// if(segments[i] != nullptr) segments[i]->to_string();
|
||||||
|
// else if(segments[i] == nullptr) std::cout << "NULLPTR" << "\n";
|
||||||
|
// }
|
||||||
|
// std::cout << "\n";
|
||||||
|
// move_tail_indicies(segments);
|
||||||
|
// for(int i = 0; i < 10; i++) {
|
||||||
|
// if(segments[i] != nullptr) segments[i]->to_string();
|
||||||
|
// else if(segments[i] == nullptr) std::cout << "NULLPTR" << "\n";
|
||||||
|
// }
|
||||||
|
// std::cout << "\n";
|
||||||
|
|
||||||
|
// std::thread input_thread(
|
||||||
|
// &Input::get_input, &input,
|
||||||
|
// std::ref(segments[0]->m_direction),
|
||||||
|
// std::ref(running),
|
||||||
|
// std::ref(_score));
|
||||||
|
|
||||||
|
// while (g < 5) {
|
||||||
|
// while (running) {
|
||||||
|
// for(int i = 0; i < 10; i++) {
|
||||||
|
// if(segments[i] != nullptr) segments[i]->to_string();
|
||||||
|
// else if(segments[i] == nullptr) std::cout << "NULLPTR" << "\n";
|
||||||
|
// }
|
||||||
|
// std::cout << "\n";
|
||||||
|
// determine_index_zero_pos(window.m_board, segments);
|
||||||
|
// move_tail_indicies(segments);
|
||||||
|
// g++;
|
||||||
|
// for(int i = 0; i < ROW; i++) {
|
||||||
|
// for(int j = 0; j < COL; j++) {
|
||||||
|
// if(window.m_board[i][j] == nullptr) std::cout << "0 ";
|
||||||
|
// if(window.m_board[i][j] != nullptr) std::cout << "p ";
|
||||||
|
// }
|
||||||
|
// std::cout << "\r\n";
|
||||||
|
// if(segments[i] != nullptr) segments[i]->to_string();
|
||||||
|
// else if(segments[i] == nullptr) std::cout << "NULLPTR" << "\n";
|
||||||
|
// }
|
||||||
|
// std::cout << "\n";
|
||||||
|
// segments[0]->to_string();
|
||||||
|
// segments[1]->to_string();
|
||||||
|
// check_new_tail(segments);
|
||||||
// body.check_new_tail();
|
// body.check_new_tail();
|
||||||
// if(body.m_body.size() >= (ROW * COL)) {
|
// if(body.m_body.size() >= (ROW * COL)) {
|
||||||
// std::cout << "You win! Score: " + std::to_string(body.m_body.size()) << std::endl;
|
// std::cout << "You win! Score: " + std::to_string(body.m_body.size()) << std::endl;
|
||||||
@@ -39,16 +138,16 @@ int main () {
|
|||||||
// body.get_new_pos(head);
|
// body.get_new_pos(head);
|
||||||
//
|
//
|
||||||
// head.m_previous_head.set_new_point(head.m_head);
|
// head.m_previous_head.set_new_point(head.m_head);
|
||||||
std::cout << _score << "\n";
|
// std::cout << _score << "\n";
|
||||||
window.draw_display();
|
// window.clear_display();
|
||||||
window.update_display(segments);
|
// window.update_display(segments);
|
||||||
}
|
// window.draw_display(200);
|
||||||
for(int i = 0; i < ROW; i++) {
|
// }
|
||||||
for(int j = 0; j < COL; j++) {
|
// input_thread.join();
|
||||||
delete window.m_board[i][j];
|
for(int i = 0; i < ROW * COL; i++) {
|
||||||
}
|
if(segments[i] == nullptr) continue;
|
||||||
|
delete segments[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
input_thread.join();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
+13
-3
@@ -3,7 +3,16 @@
|
|||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
|
||||||
void Window::draw_display() {
|
void Window::clear_display() {
|
||||||
|
for(int i = 0; i < ROW; i++) {
|
||||||
|
for(int j = 0; j < COL; j++) {
|
||||||
|
m_board[i][j] = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void Window::draw_display(int milliseconds) {
|
||||||
std::cout << "\033[H" << std::flush; // Clear screen
|
std::cout << "\033[H" << std::flush; // Clear screen
|
||||||
for(int i = 0; i < ROW; i++) {
|
for(int i = 0; i < ROW; i++) {
|
||||||
for(int j = 0; j < ROW; j++) {
|
for(int j = 0; j < ROW; j++) {
|
||||||
@@ -12,11 +21,12 @@ void Window::draw_display() {
|
|||||||
}
|
}
|
||||||
std::cout << "\r\n";
|
std::cout << "\r\n";
|
||||||
}
|
}
|
||||||
std::this_thread::sleep_for(std::chrono::milliseconds((int) (200))); // 1000 / fps; 200ms = 5fps
|
std::this_thread::sleep_for(std::chrono::milliseconds((int) (milliseconds))); // 1000 / fps; 200ms = 5fps
|
||||||
}
|
}
|
||||||
|
|
||||||
void Window::update_display(Point* segments[]) {
|
void Window::update_display(Point* segments[]) {
|
||||||
for(int i = 0; i < ROW * COL; i++) {
|
m_board[segments[0]->m_row][segments[0]->m_col] = segments[0];
|
||||||
|
for(int i = 2; i < ROW * COL; i++) {
|
||||||
if(segments[i] != nullptr) {
|
if(segments[i] != nullptr) {
|
||||||
m_board[segments[i]->m_row][segments[i]->m_col] = segments[i];
|
m_board[segments[i]->m_row][segments[i]->m_col] = segments[i];
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user