removed the window files and updated process_input
This commit is contained in:
+1
-2
@@ -7,8 +7,7 @@ project(tic_tac_toe)
|
|||||||
|
|
||||||
set(SOURCES
|
set(SOURCES
|
||||||
src/main.cpp
|
src/main.cpp
|
||||||
src/window.cpp
|
src/engine.cpp
|
||||||
src/elements.cpp
|
|
||||||
)
|
)
|
||||||
|
|
||||||
add_executable(tic_tac_toe ${SOURCES})
|
add_executable(tic_tac_toe ${SOURCES})
|
||||||
|
|||||||
@@ -2,6 +2,21 @@
|
|||||||
#define ELEMENTS_HPP
|
#define ELEMENTS_HPP
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <array>
|
||||||
|
#include <globals.hpp>
|
||||||
|
|
||||||
|
struct Window {
|
||||||
|
Window();
|
||||||
|
std::array<std::array<char, COL>, ROW> view;
|
||||||
|
void clear_display();
|
||||||
|
void draw_display();
|
||||||
|
};
|
||||||
|
|
||||||
|
struct vec2 {
|
||||||
|
vec2(int x, int y) : x(x), y(y) {}
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
};
|
||||||
|
|
||||||
class Engine {
|
class Engine {
|
||||||
public:
|
public:
|
||||||
@@ -10,18 +25,14 @@ public:
|
|||||||
void run();
|
void run();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<class Window> win;
|
std::unique_ptr<Window> win;
|
||||||
|
|
||||||
struct Player {
|
struct Player {
|
||||||
Player(char id) : id(id) {};
|
Player(char id) : id(id) {};
|
||||||
char id;
|
char id;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct vec2 {
|
const std::array<vec2, 9> map;
|
||||||
vec2(int x, int y) : x(x), y(y) {}
|
|
||||||
int x;
|
|
||||||
int y;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct GameState {
|
struct GameState {
|
||||||
Player player1;
|
Player player1;
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
#ifndef WINDOW_HPP
|
|
||||||
#define WINDOW_HPP
|
|
||||||
|
|
||||||
#include <globals.hpp>
|
|
||||||
#include <array>
|
|
||||||
|
|
||||||
struct Window {
|
|
||||||
Window();
|
|
||||||
std::array<std::array<char, COL>, ROW> view;
|
|
||||||
void clear_display();
|
|
||||||
void draw_display();
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,19 +1,48 @@
|
|||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <elements.hpp>
|
#include <engine.hpp>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <window.hpp>
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <ncurses.h>
|
#include <ncurses.h>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
#include <ranges>
|
#include <ranges>
|
||||||
|
|
||||||
Engine::Engine() {
|
Window::Window() {
|
||||||
|
for(auto &val : view) { val.fill('.'); }
|
||||||
|
for(int i : std::ranges::views::iota(0, ROW)) {
|
||||||
|
for(int j : std::ranges::views::iota(0, COL)) {
|
||||||
|
if(i % 2 == 0 && j % 2 == 0) { view[i][j] = ' '; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Window::draw_display() {
|
||||||
|
std::cout << "\033[H" << std::flush; // Clear screen
|
||||||
|
for(int i : std::ranges::views::iota(0, ROW)) {
|
||||||
|
for(int j : std::ranges::views::iota(0, COL)) {
|
||||||
|
if(view[i][j] != '.') { std::cout << view[i][j] << " "; }
|
||||||
|
if(view[i][j] == '.') {
|
||||||
|
if(i % 2 == 0) { std::cout << "| "; }
|
||||||
|
if(i % 2 != 0 && j % 2 == 0) { std::cout << "- "; }
|
||||||
|
if(i % 2 != 0 && j % 2 != 0) { std::cout << "+ "; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
std::cout << "\r\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Engine::Engine() :
|
||||||
|
map {
|
||||||
|
vec2 { 0, 0 }, vec2 { 2, 0 }, vec2 { 4, 0 },
|
||||||
|
vec2 { 0, 2 }, vec2 { 2, 2 }, vec2 { 4, 2 },
|
||||||
|
vec2 { 0, 4 }, vec2 { 2, 4 }, vec2 { 4, 4 }
|
||||||
|
} {
|
||||||
initscr();
|
initscr();
|
||||||
cbreak();
|
cbreak();
|
||||||
noecho();
|
noecho();
|
||||||
curs_set(0);
|
curs_set(0);
|
||||||
nodelay(stdscr, true);
|
nodelay(stdscr, true);
|
||||||
win = std::make_unique<Window>();
|
win = std::make_unique<Window>();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Engine::~Engine() {}
|
Engine::~Engine() {}
|
||||||
@@ -52,38 +81,17 @@ bool Engine::exit_code() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool Engine::process_input() {
|
bool Engine::process_input() {
|
||||||
int ch;
|
int ch, index;
|
||||||
while((ch = getch()) != ERR) {
|
while((ch = getch()) != ERR) {
|
||||||
if(ch == 113) { return false; }
|
if(ch == 'q') { return false; }
|
||||||
if(ch == 49) {
|
if(ch >= '1' && ch <= '9') {
|
||||||
win->view[0][0] = state.temp->id;
|
index = ch - '1';
|
||||||
set_player();
|
if(win->view[map[index].y][map[index].x] == ' ') {
|
||||||
} if(ch == 50) {
|
win->view[map[index].y][map[index].x] = state.temp->id;
|
||||||
win->view[0][2] = state.temp->id;
|
|
||||||
set_player();
|
|
||||||
} if(ch == 51) {
|
|
||||||
win->view[0][4] = state.temp->id;
|
|
||||||
set_player();
|
|
||||||
} if(ch == 52) {
|
|
||||||
win->view[2][0] = state.temp->id;
|
|
||||||
set_player();
|
|
||||||
} if(ch == 53) {
|
|
||||||
win->view[2][2] = state.temp->id;
|
|
||||||
set_player();
|
|
||||||
} if(ch == 54) {
|
|
||||||
win->view[2][4] = state.temp->id;
|
|
||||||
set_player();
|
|
||||||
} if(ch == 55) {
|
|
||||||
win->view[4][0] = state.temp->id;
|
|
||||||
set_player();
|
|
||||||
} if(ch == 56) {
|
|
||||||
win->view[4][2] = state.temp->id;
|
|
||||||
set_player();
|
|
||||||
} if(ch == 57) {
|
|
||||||
win->view[4][4] = state.temp->id;
|
|
||||||
set_player();
|
set_player();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,11 +102,13 @@ void Engine::set_player() {
|
|||||||
|
|
||||||
bool Engine::check_line(char id) {
|
bool Engine::check_line(char id) {
|
||||||
for(int i : std::ranges::views::iota(0, COL)) {
|
for(int i : std::ranges::views::iota(0, COL)) {
|
||||||
|
if(ROW % 2 != 0) continue;
|
||||||
if(win->view[0][i] == id && win->view[2][i] == id && win->view[4][i] == id) {
|
if(win->view[0][i] == id && win->view[2][i] == id && win->view[4][i] == id) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for(int i : std::ranges::views::iota(0, ROW)) {
|
for(int i : std::ranges::views::iota(0, ROW)) {
|
||||||
|
if(ROW % 2 != 0) continue;
|
||||||
if(win->view[i][0] == id && win->view[i][2] == id && win->view[i][4] == id) {
|
if(win->view[i][0] == id && win->view[i][2] == id && win->view[i][4] == id) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
#include "elements.hpp"
|
#include "engine.hpp"
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
Engine engine;
|
Engine engine;
|
||||||
|
|||||||
@@ -1,27 +0,0 @@
|
|||||||
#include <window.hpp>
|
|
||||||
#include <ranges>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
Window::Window() {
|
|
||||||
for(auto &val : view) { val.fill('.'); }
|
|
||||||
for(int i : std::ranges::views::iota(0, ROW)) {
|
|
||||||
for(int j : std::ranges::views::iota(0, COL)) {
|
|
||||||
if(i % 2 == 0 && j % 2 == 0) { view[i][j] = ' '; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Window::draw_display() {
|
|
||||||
std::cout << "\033[H" << std::flush; // Clear screen
|
|
||||||
for(int i : std::ranges::views::iota(0, ROW)) {
|
|
||||||
for(int j : std::ranges::views::iota(0, COL)) {
|
|
||||||
if(view[i][j] != '.') { std::cout << view[i][j] << " "; }
|
|
||||||
if(view[i][j] == '.') {
|
|
||||||
if(i % 2 == 0) { std::cout << "| "; }
|
|
||||||
if(i % 2 != 0 && j % 2 == 0) { std::cout << "- "; }
|
|
||||||
if(i % 2 != 0 && j % 2 != 0) { std::cout << "+ "; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
std::cout << "\r\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user