wip
This commit is contained in:
+4
-24
@@ -1,7 +1,6 @@
|
|||||||
#ifndef ELEMENT_HPP
|
#ifndef ELEMENT_HPP
|
||||||
#define ELEMENT_HPP
|
#define ELEMENT_HPP
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
#include "globals.hpp"
|
#include "globals.hpp"
|
||||||
|
|
||||||
static int _score = 0;
|
static int _score = 0;
|
||||||
@@ -11,7 +10,7 @@ struct Point {
|
|||||||
int m_col;
|
int m_col;
|
||||||
char m_symbol;
|
char m_symbol;
|
||||||
int m_direction;
|
int m_direction;
|
||||||
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 to_string();
|
||||||
@@ -19,33 +18,14 @@ struct Point {
|
|||||||
};
|
};
|
||||||
|
|
||||||
void determine_index_zero_pos(Point* (*board)[COL], Point** segments);
|
void determine_index_zero_pos(Point* (*board)[COL], Point** segments);
|
||||||
bool check_new_tail(Point** segments);
|
|
||||||
void move_tail_indicies(Point** segments);
|
void move_tail_indicies(Point** segments);
|
||||||
|
void input_new_tail(Point *(*board)[10], Point** segments);
|
||||||
struct Head {
|
void on_fruit_eaten(Point* (*board)[COL], Point** segments);
|
||||||
Head() : m_direction(2) {};
|
|
||||||
Point m_head {5, 5, '*'};
|
|
||||||
Point m_previous_head;
|
|
||||||
int m_direction;
|
|
||||||
void get_new_pos();
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Tail {
|
|
||||||
Point m_tail_pos {0, 0, '@'};
|
|
||||||
Point m_previous_tail_pos;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Body {
|
|
||||||
std::vector<Tail> m_body;
|
|
||||||
void check_new_tail();
|
|
||||||
bool check_collision(Head &head);
|
|
||||||
void get_new_pos(Head &head);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Fruit {
|
struct Fruit {
|
||||||
Fruit();
|
Fruit();
|
||||||
Point m_point {0, 0, 'o'};
|
Point m_point {0, 0, 'o'};
|
||||||
void get_new_pos(char (&board)[ROW][COL], Head &head);
|
void on_fruit_eaten(Point* (*board)[COL], Point** segments);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // ELEMENT_HPP
|
#endif // ELEMENT_HPP
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
struct Input {
|
struct Input {
|
||||||
int m_current_key = 0;
|
int m_current_key = 0;
|
||||||
int m_getch = 0;
|
int m_getch = 0;
|
||||||
void get_input(int &d, bool &r, int &s);
|
void get_input(int &d, bool &r);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // INPUT_HPP
|
#endif // INPUT_HPP
|
||||||
|
|||||||
+17
-56
@@ -1,4 +1,3 @@
|
|||||||
// Used ptr to take a copy of the head, move head move tail at end of array to previous head position from copy and make the old tail a nullptr
|
|
||||||
#include "element.hpp"
|
#include "element.hpp"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
@@ -34,42 +33,28 @@ void determine_index_zero_pos(Point* (*board)[COL], Point** segments) {
|
|||||||
board[segments[0]->m_row][segments[0]->m_col] = segments[0];
|
board[segments[0]->m_row][segments[0]->m_col] = segments[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void input_new_tail(Point *(*board)[10], Point** segments) {
|
||||||
|
for(int i = (ROW * COL) - 1; i >= 3; i--) {
|
||||||
|
segments[i] = segments[i - 1];
|
||||||
|
}
|
||||||
|
determine_index_zero_pos(board, segments);
|
||||||
|
segments[3] = new Point {};
|
||||||
|
}
|
||||||
|
|
||||||
void move_tail_indicies(Point** segments) {
|
void move_tail_indicies(Point** segments) {
|
||||||
Point* previous_head = segments[1];
|
Point* previous_head = segments[1];
|
||||||
int new_row = segments[1]->m_row;
|
int new_row = segments[1]->m_row;
|
||||||
int new_col = segments[1]->m_col;
|
int new_col = segments[1]->m_col;
|
||||||
Point* index;
|
Point* index = nullptr;
|
||||||
for(int i = 10; i >= 2; i--) {
|
for(int i = (ROW * COL) - 1; i >= 3; i--) {
|
||||||
if(segments[i] == nullptr) {
|
if(segments[i] == nullptr) {
|
||||||
index = segments[i - 1];
|
index = segments[i - 1];
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
segments[i] = segments[i - 1];
|
segments[i] = segments[i - 1];
|
||||||
}
|
}
|
||||||
|
segments[3] = index;
|
||||||
segments[2] = index;
|
segments[3]->set_new_point(new_row, new_col);
|
||||||
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() {
|
void Point::to_string() {
|
||||||
@@ -81,38 +66,14 @@ void Point::set_new_point(int row, int col) {
|
|||||||
m_col = col;
|
m_col = col;
|
||||||
}
|
}
|
||||||
|
|
||||||
Fruit::Fruit() {
|
void on_fruit_eaten(Point* (*board)[COL], Point** segments) {
|
||||||
m_point.set_new_point((rand() % ROW), (rand() % COL));
|
|
||||||
}
|
|
||||||
|
|
||||||
void Fruit::get_new_pos(char (&board)[ROW][COL], Head &head) {
|
|
||||||
int row, col;
|
int row, col;
|
||||||
if(m_point.m_row == head.m_head.m_row && m_point.m_col == head.m_head.m_col) {
|
if(segments[2]->m_row == segments[0]->m_row && segments[2]->m_col == segments[0]->m_col) {
|
||||||
do {
|
do {
|
||||||
row = (rand() % ROW);
|
row = (rand() % ROW);
|
||||||
col = (rand() % COL);
|
col = (rand() % COL);
|
||||||
} while (board[row][col] != '.');
|
} while (board[row][col] != nullptr);
|
||||||
m_point.set_new_point(row, col);
|
segments[2]->set_new_point(row, col);
|
||||||
_score++;
|
input_new_tail(board, segments);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Body::check_collision(Head &head) {
|
|
||||||
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_col != head.m_head.m_col) continue;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|||||||
+1
-6
@@ -1,8 +1,7 @@
|
|||||||
#include "input.hpp"
|
#include "input.hpp"
|
||||||
#include <ncurses.h>
|
#include <ncurses.h>
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
void Input::get_input(int &direction, bool &running, int &score) {
|
void Input::get_input(int &direction, bool &running) {
|
||||||
while(running) {
|
while(running) {
|
||||||
initscr();
|
initscr();
|
||||||
cbreak();
|
cbreak();
|
||||||
@@ -11,10 +10,6 @@ void Input::get_input(int &direction, bool &running, int &score) {
|
|||||||
m_getch = getch();
|
m_getch = getch();
|
||||||
endwin();
|
endwin();
|
||||||
switch (m_getch) {
|
switch (m_getch) {
|
||||||
case 43: // +
|
|
||||||
score++;
|
|
||||||
m_getch = 0;
|
|
||||||
break;
|
|
||||||
case 65: // Up arrow
|
case 65: // Up arrow
|
||||||
if(m_current_key != 2) direction = m_current_key = -2;
|
if(m_current_key != 2) direction = m_current_key = -2;
|
||||||
break;
|
break;
|
||||||
|
|||||||
+16
-98
@@ -6,111 +6,28 @@
|
|||||||
#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;
|
||||||
Fruit fruit;
|
|
||||||
Body body;
|
|
||||||
bool running = true;
|
bool running = true;
|
||||||
|
|
||||||
Point* segments[ROW * COL] = {};
|
Point* segments[ROW * COL] = {};
|
||||||
segments[0] = new Point { 5, 5, '*', 1 };
|
segments[0] = new Point { 5, 5, '*', 1 }; // Head
|
||||||
segments[2] = new Point { 3, 5, '@', 0 };
|
segments[2] = new Point { (rand() % ROW), (rand() % COL), 'o', 0 }; // Fruit
|
||||||
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 };
|
|
||||||
|
|
||||||
for(int i = 0; i < 10; i++) {
|
std::thread input_thread(
|
||||||
if(segments[i] != nullptr) segments[i]->to_string();
|
&Input::get_input, &input,
|
||||||
else if(segments[i] == nullptr) std::cout << "NULLPTR" << "\n";
|
std::ref(segments[0]->m_direction),
|
||||||
}
|
std::ref(running));
|
||||||
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];
|
|
||||||
}
|
|
||||||
|
|
||||||
segments[2] = index;
|
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";
|
|
||||||
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++) {
|
// for(int i = 0; i < 10; i++) {
|
||||||
// if(segments[i] != nullptr) segments[i]->to_string();
|
// if(segments[i] != nullptr) segments[i]->to_string();
|
||||||
// else if(segments[i] == nullptr) std::cout << "NULLPTR" << "\n";
|
// else if(segments[i] == nullptr) std::cout << "NULLPTR" << "\n";
|
||||||
// }
|
// }
|
||||||
// std::cout << "\n";
|
// std::cout << "\n";
|
||||||
// determine_index_zero_pos(window.m_board, segments);
|
determine_index_zero_pos(window.m_board, segments);
|
||||||
// move_tail_indicies(segments);
|
move_tail_indicies(segments);
|
||||||
// g++;
|
// g++;
|
||||||
// for(int i = 0; i < ROW; i++) {
|
// for(int i = 0; i < ROW; i++) {
|
||||||
// for(int j = 0; j < COL; j++) {
|
// for(int j = 0; j < COL; j++) {
|
||||||
@@ -139,12 +56,13 @@ int main () {
|
|||||||
//
|
//
|
||||||
// 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.clear_display();
|
on_fruit_eaten(window.m_board, segments);
|
||||||
// window.update_display(segments);
|
window.clear_display();
|
||||||
// window.draw_display(200);
|
window.update_display(segments);
|
||||||
// }
|
window.draw_display(200);
|
||||||
// input_thread.join();
|
}
|
||||||
for(int i = 0; i < ROW * COL; i++) {
|
input_thread.join();
|
||||||
|
for(int i = (ROW * COL) - 1; i > 0; i--) {
|
||||||
if(segments[i] == nullptr) continue;
|
if(segments[i] == nullptr) continue;
|
||||||
delete segments[i];
|
delete segments[i];
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -26,7 +26,8 @@ void Window::draw_display(int milliseconds) {
|
|||||||
|
|
||||||
void Window::update_display(Point* segments[]) {
|
void Window::update_display(Point* segments[]) {
|
||||||
m_board[segments[0]->m_row][segments[0]->m_col] = segments[0];
|
m_board[segments[0]->m_row][segments[0]->m_col] = segments[0];
|
||||||
for(int i = 2; i < ROW * COL; i++) {
|
m_board[segments[2]->m_row][segments[2]->m_col] = segments[2];
|
||||||
|
for(int i = 3; 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