removed the window files and updated process_input

This commit is contained in:
DarthMooMancer
2025-11-07 00:42:16 -05:00
parent 9dc24d8cad
commit 1ef6f37a49
6 changed files with 61 additions and 82 deletions
+1 -2
View File
@@ -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})
+17 -6
View File
@@ -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;
-14
View File
@@ -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
+42 -32
View File
@@ -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,36 +81,15 @@ 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();
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();
} }
} }
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
View File
@@ -1,4 +1,4 @@
#include "elements.hpp" #include "engine.hpp"
int main() { int main() {
Engine engine; Engine engine;
-27
View File
@@ -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";
}
}