wip
This commit is contained in:
+49
-21
@@ -1,25 +1,53 @@
|
||||
#include "elements.hpp"
|
||||
#include "globals.hpp"
|
||||
|
||||
void cleanup(Point** buffer, int buffer_size) {
|
||||
for(int i = 0; i < buffer_size; i++) {
|
||||
delete buffer[i];
|
||||
}
|
||||
|
||||
void cleanup(Point** buffer) {
|
||||
|
||||
}
|
||||
|
||||
// void Player::check_line(Tile (&tile_list)[9]) {
|
||||
// for(int i = 0; i <= 6; i += 3) {
|
||||
// if(tile_list[i].m_symbol == tile_list[i+1].m_symbol && tile_list[i+1].m_symbol == tile_list[i+2].m_symbol) {
|
||||
// if(tile_list[i].m_symbol == m_symbol) {
|
||||
// m_win = true;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// if(tile_list[0].m_symbol == tile_list[4].m_symbol && tile_list[4].m_symbol == tile_list[8].m_symbol) {
|
||||
// if(tile_list[0].m_symbol == m_symbol) {
|
||||
// m_win = true;
|
||||
// }
|
||||
// }
|
||||
// if(tile_list[2].m_symbol == tile_list[4].m_symbol && tile_list[4].m_symbol == tile_list[6].m_symbol) {
|
||||
// if(tile_list[2].m_symbol == m_symbol) {
|
||||
// m_win = true;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
void allocate_points(Point** buffer, char symbol) {
|
||||
int index = 0;
|
||||
for(int i = 0; i < ROW; i += 2) {
|
||||
for(int a = 0; a < ROW; a += 2) {
|
||||
buffer[index++] = new Point { i, a, symbol };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Player* get_current_player(Player* current_player, Player* player_one, Player* player_two) {
|
||||
if(current_player == nullptr) { current_player = player_one; }
|
||||
else if(current_player->m_id == 1) { current_player = player_two; }
|
||||
else if(current_player->m_id == 2) { current_player = player_one; }
|
||||
return current_player;
|
||||
}
|
||||
|
||||
bool Player::on_line(Point** buffer) {
|
||||
for(int i = 0; i <= 6; i += 3) {
|
||||
if(buffer[i]->m_symbol == buffer[i+1]->m_symbol && buffer[i+1]->m_symbol == buffer[i+2]->m_symbol) {
|
||||
if(buffer[i]->m_symbol == m_symbol) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
for(int i = 0; i < 3; i++) {
|
||||
if(buffer[i]->m_symbol == buffer[i+3]->m_symbol && buffer[i+3]->m_symbol == buffer[i+6]->m_symbol) {
|
||||
if(buffer[i]->m_symbol == m_symbol) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(buffer[0]->m_symbol == buffer[4]->m_symbol && buffer[4]->m_symbol == buffer[8]->m_symbol) {
|
||||
if(buffer[0]->m_symbol == m_symbol) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if(buffer[2]->m_symbol == buffer[4]->m_symbol && buffer[4]->m_symbol == buffer[6]->m_symbol) {
|
||||
if(buffer[2]->m_symbol == m_symbol) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
+40
-14
@@ -1,26 +1,52 @@
|
||||
#include <ncurses.h>
|
||||
#include "input.hpp"
|
||||
#include "elements.hpp"
|
||||
|
||||
// void _switch_turn(int favor, Player &player_one, Player &player_two) {
|
||||
// if(favor == 1) {
|
||||
// player_one.m_turn = true;
|
||||
// player_two.m_turn = false;
|
||||
// } else if(favor == 2) {
|
||||
// player_one.m_turn = false;
|
||||
// player_two.m_turn = true;
|
||||
// }
|
||||
// }
|
||||
|
||||
// void Input::get_input(bool &running, Tile (&tile_list)[9], Player &player_one, Player &player_two) {
|
||||
void Input::get_input(bool &running) {
|
||||
void Input::get_input(bool &running, Point** buffer, Player *¤t_player, Player *player_one, Player *player_two) {
|
||||
while(running) {
|
||||
initscr();
|
||||
cbreak();
|
||||
noecho();
|
||||
|
||||
_getch = getch();
|
||||
|
||||
endwin();
|
||||
if(_getch >= 49 && _getch <= 57) {
|
||||
if(_getch == 49 && buffer[0]->m_symbol == ' ') {
|
||||
buffer[0]->m_symbol = current_player->m_symbol;
|
||||
current_player = get_current_player(current_player, player_one, player_two);
|
||||
}
|
||||
else if(_getch == 50 && buffer[1]->m_symbol == ' ') {
|
||||
buffer[1]->m_symbol = current_player->m_symbol;
|
||||
current_player = get_current_player(current_player, player_one, player_two);
|
||||
}
|
||||
else if(_getch == 51 && buffer[2]->m_symbol == ' ') {
|
||||
buffer[2]->m_symbol = current_player->m_symbol;
|
||||
current_player = get_current_player(current_player, player_one, player_two);
|
||||
}
|
||||
else if(_getch == 52 && buffer[3]->m_symbol == ' ') {
|
||||
buffer[3]->m_symbol = current_player->m_symbol;
|
||||
current_player = get_current_player(current_player, player_one, player_two);
|
||||
}
|
||||
else if(_getch == 53 && buffer[4]->m_symbol == ' ') {
|
||||
buffer[4]->m_symbol = current_player->m_symbol;
|
||||
current_player = get_current_player(current_player, player_one, player_two);
|
||||
}
|
||||
else if(_getch == 54 && buffer[5]->m_symbol == ' ') {
|
||||
buffer[5]->m_symbol = current_player->m_symbol;
|
||||
current_player = get_current_player(current_player, player_one, player_two);
|
||||
}
|
||||
else if(_getch == 55 && buffer[6]->m_symbol == ' ') {
|
||||
buffer[6]->m_symbol = current_player->m_symbol;
|
||||
current_player = get_current_player(current_player, player_one, player_two);
|
||||
}
|
||||
else if(_getch == 56 && buffer[7]->m_symbol == ' ') {
|
||||
buffer[7]->m_symbol = current_player->m_symbol;
|
||||
current_player = get_current_player(current_player, player_one, player_two);
|
||||
}
|
||||
else if(_getch == 57 && buffer[8]->m_symbol == ' ') {
|
||||
buffer[8]->m_symbol = current_player->m_symbol;
|
||||
current_player = get_current_player(current_player, player_one, player_two);
|
||||
}
|
||||
}
|
||||
if(_getch == 113) {
|
||||
running = false;
|
||||
}
|
||||
|
||||
+34
-35
@@ -4,53 +4,52 @@
|
||||
#include "input.hpp"
|
||||
#include "elements.hpp"
|
||||
|
||||
bool should_exit(Point** buffer, Player &one, Player &two, bool &running) {
|
||||
int i, index = 0;
|
||||
if(one.on_line(buffer)) {
|
||||
std::cout << "Game Over! Player 1 wins!" << std::endl;
|
||||
return true;
|
||||
} else if(two.on_line(buffer)) {
|
||||
std::cout << "Game Over! Player 2 wins!" << std::endl;
|
||||
return true;
|
||||
}
|
||||
for(i = 0; i < 9; i++) {
|
||||
if(buffer[i]->m_symbol != ' ' && !one.on_line(buffer) && !one.on_line(buffer)) {
|
||||
index++;
|
||||
}
|
||||
}
|
||||
if(index == 9) {
|
||||
std::cout << "Game Over! Its a tie!" << std::endl;
|
||||
return true;
|
||||
} else {
|
||||
index = 0;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
int main() {
|
||||
Input input;
|
||||
Window window;
|
||||
// Player player_one('x', true);
|
||||
// Player player_two('o', false);
|
||||
Player player_one('x', true, 1);
|
||||
Player player_two('o', false, 2);
|
||||
Player* default_player = get_current_player(nullptr, &player_one, &player_two);
|
||||
bool running = true;
|
||||
int count = 0;
|
||||
Point* buffer[ROW * COL] = {};
|
||||
Point* buffer[9] = {};
|
||||
allocate_points(buffer, ' ');
|
||||
|
||||
// Tile tile_list[9] = {
|
||||
// Tile(0, 0), Tile(0, 2), Tile(0, 4),
|
||||
// Tile(2, 0), Tile(2, 2), Tile(2, 4),
|
||||
// Tile(4, 0), Tile(4, 2), Tile(4, 4)
|
||||
// };
|
||||
//
|
||||
// Border border_list[16] = {
|
||||
// Border(0, 1, '|'), Border(0, 3, '|'),
|
||||
// Border(1, 0, '-'), Border(1, 1, '+'), Border(1, 2, '-'), Border(1, 3, '+'), Border(1, 4, '-'),
|
||||
// Border(2, 1, '|'), Border(2, 3, '|'),
|
||||
// Border(3, 0, '-'), Border(3, 1, '+'), Border(3, 2, '-'), Border(3, 3, '+'), Border(3, 4, '-'),
|
||||
// Border(4, 1, '|'), Border(4, 3, '|'),
|
||||
// };
|
||||
|
||||
std::thread input_thread([&] { input.get_input(running); } );
|
||||
std::thread input_thread([&] { input.get_input(running, buffer, default_player, &player_one, &player_two); } );
|
||||
|
||||
while (running) {
|
||||
if(should_exit(buffer, player_one, player_two, running)) {
|
||||
running = false;
|
||||
}
|
||||
window.clear_display();
|
||||
window.update_display(buffer);
|
||||
window.draw_display(150);
|
||||
// window.terminate(tile_list, running);
|
||||
// window.update_display(tile_list, border_list);
|
||||
// player_one.check_line(tile_list);
|
||||
// player_two.check_line(tile_list);
|
||||
// if(player_one.m_win) {
|
||||
// running = false;
|
||||
// std::cout << "Game Over! Player 1 wins!" << std::endl;
|
||||
// } else if(player_two.m_win) {
|
||||
// running = false;
|
||||
// std::cout << "Game Over! Player 2 wins!" << std::endl;
|
||||
// }
|
||||
// if(player_one.m_turn) {
|
||||
// std::cout << "Current Player: " << player_one.m_symbol << std::endl;
|
||||
// } if(player_two.m_turn) {
|
||||
// std::cout << "Current Player: " << player_two.m_symbol << std::endl;
|
||||
// }
|
||||
std::cout << "Current Player: " << default_player->m_symbol << std::endl;
|
||||
}
|
||||
|
||||
cleanup(buffer, 9);
|
||||
input_thread.join();
|
||||
return 0;
|
||||
}
|
||||
|
||||
+7
-3
@@ -30,8 +30,12 @@ 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 < ROW; j++) {
|
||||
if(m_board[i][j] == nullptr) { std::cout << ". "; }
|
||||
for(int j = 0; j < COL; j++) {
|
||||
if(m_board[i][j] == nullptr) {
|
||||
if(i % 2 == 0) { std::cout << "| "; }
|
||||
if(i % 2 != 0 && j % 2 == 0) { std::cout << "- "; }
|
||||
if(i % 2 != 0 && j % 2 != 0) { std::cout << "+ "; }
|
||||
}
|
||||
if(m_board[i][j] != nullptr) { std::cout << m_board[i][j]->m_symbol << " "; }
|
||||
}
|
||||
std::cout << "\r\n";
|
||||
@@ -40,7 +44,7 @@ void Window::draw_display(int milliseconds) {
|
||||
}
|
||||
|
||||
void Window::update_display(Point** buffer) {
|
||||
for(int i = 0; i < ROW * COL; i++) {
|
||||
for(int i = 0; i < 9; i++) {
|
||||
if(buffer[i] != nullptr) {
|
||||
m_board[buffer[i]->m_row][buffer[i]->m_col] = buffer[i];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user