we're starting to get somewhere here
This commit is contained in:
parent
42484f4217
commit
f540246817
@ -28,7 +28,7 @@ obj/%.o:
|
||||
$(CXX) $(CXXFLAGS) -o $@ -c $<
|
||||
|
||||
main: $(OBJFILES)
|
||||
$(CXX) $(LDFLAGS) $(OBJFILES) $(LOADLIBES) $(LDLIBS) -o main
|
||||
$(CXX) $(LDFLAGS) $(OBJFILES) $(LOADLIBES) $(LDLIBS) -o main -lsfml-graphics -lsfml-window -lsfml-system
|
||||
|
||||
clean:
|
||||
rm -rf obj/* $(DEPFILES) test_bin/
|
||||
|
14
cpp/src/controller/controller.hpp
Normal file
14
cpp/src/controller/controller.hpp
Normal file
@ -0,0 +1,14 @@
|
||||
#pragma once
|
||||
|
||||
#include "../model/board/board.hpp"
|
||||
|
||||
class View;
|
||||
|
||||
class Controller {
|
||||
protected:
|
||||
Board board;
|
||||
|
||||
public:
|
||||
// Controller(Board, View);
|
||||
virtual void on_tile_selected(int, int) = 0;
|
||||
};
|
17
cpp/src/controller/manual.cpp
Normal file
17
cpp/src/controller/manual.cpp
Normal file
@ -0,0 +1,17 @@
|
||||
#include "manual.hpp"
|
||||
|
||||
ManualController::ManualController(Board b, View& view): view(view) {
|
||||
board = b;
|
||||
selected_piece = Piece::None;
|
||||
legal_moves = {};
|
||||
|
||||
view.update_board(b, selected_piece, legal_moves);
|
||||
}
|
||||
|
||||
void ManualController::on_tile_selected(int x, int y) {}
|
||||
|
||||
void ManualController::reset_selection() {}
|
||||
|
||||
void ManualController::show_legal_moves(Coords) {}
|
||||
|
||||
void ManualController::make_move(Move) {}
|
21
cpp/src/controller/manual.hpp
Normal file
21
cpp/src/controller/manual.hpp
Normal file
@ -0,0 +1,21 @@
|
||||
#pragma once
|
||||
|
||||
#include "../model/utils/coords.hpp"
|
||||
#include "../model/utils/move.hpp"
|
||||
#include "../view/view.hpp"
|
||||
#include "controller.hpp"
|
||||
|
||||
class ManualController : public Controller {
|
||||
private:
|
||||
View& view;
|
||||
Piece selected_piece;
|
||||
std::vector<Move> legal_moves;
|
||||
|
||||
void reset_selection();
|
||||
void show_legal_moves(Coords);
|
||||
void make_move(Move);
|
||||
|
||||
public:
|
||||
ManualController(Board, View&);
|
||||
void on_tile_selected(int, int) override;
|
||||
};
|
@ -1,14 +1,24 @@
|
||||
#include "model/ais/ai.hpp"
|
||||
#include "model/board/board.hpp"
|
||||
#include "model/perft/perft.hpp"
|
||||
|
||||
#include <iostream>
|
||||
#include "controller/controller.hpp"
|
||||
#include "controller/manual.hpp"
|
||||
#include "view/gui.hpp"
|
||||
#include "view/view.hpp"
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
std::string pos =
|
||||
"rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1";
|
||||
|
||||
perft();
|
||||
Board b = Board::setup_fen_position(pos);
|
||||
|
||||
GUI gui;
|
||||
ManualController manual(b, gui);
|
||||
|
||||
|
||||
View& view = gui;
|
||||
Controller& controller = manual;
|
||||
|
||||
view.show();
|
||||
|
||||
// perft();
|
||||
// ai::v1_simple ai;
|
||||
//
|
||||
// Board b = Board::setup_fen_position(pos);
|
||||
|
91
cpp/src/view/gui.cpp
Normal file
91
cpp/src/view/gui.cpp
Normal file
@ -0,0 +1,91 @@
|
||||
#include "gui.hpp"
|
||||
|
||||
#include <SFML/Graphics/Color.hpp>
|
||||
|
||||
GUI::GUI() {
|
||||
window.create(sf::VideoMode(WINDOW_SIZE, WINDOW_SIZE), "Chess Board");
|
||||
// load_textures();
|
||||
}
|
||||
|
||||
void GUI::update_board(
|
||||
const Board& b, int8_t selected_square, std::vector<Move> legal_moves
|
||||
) {
|
||||
window.clear();
|
||||
draw_board(selected_square, legal_moves);
|
||||
// draw_pieces(b);
|
||||
window.display();
|
||||
}
|
||||
|
||||
void GUI::notify_stalemate() {}
|
||||
|
||||
void GUI::notify_checkmate() {}
|
||||
|
||||
void GUI::handle_events() {
|
||||
sf::Event event;
|
||||
while (window.pollEvent(event))
|
||||
if (event.type == sf::Event::Closed)
|
||||
window.close();
|
||||
else if (event.type == sf::Event::MouseButtonPressed)
|
||||
handle_click(event.mouseButton.x, event.mouseButton.y);
|
||||
}
|
||||
|
||||
void GUI::load_textures() {
|
||||
const std::string names[6] =
|
||||
{"pawn", "rook", "knight", "bishop", "queen", "king"};
|
||||
for (int i = 0; i < 6; ++i) {
|
||||
textures[i][0].loadFromFile("res/white-" + names[i] + ".png");
|
||||
textures[i][1].loadFromFile("res/black-" + names[i] + ".png");
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::handle_click(int x, int y) {
|
||||
// int file = x / TILE_SIZE;
|
||||
// int rank = 7 - (y / TILE_SIZE);
|
||||
// controller.on_tile_selected(file, rank);
|
||||
}
|
||||
|
||||
void GUI::draw_board(int selected_square, std::vector<Move> legal_moves) {
|
||||
sf::Color colours[2] = {
|
||||
sf::Color(0xEDD6B0),
|
||||
sf::Color(0xB88762)
|
||||
}; // Light and dark squares
|
||||
// sf::Color alt_colours[2] = {
|
||||
// sf::Color(0xF6EB72),
|
||||
// sf::Color(0xDCC34B)
|
||||
// }; // when selected
|
||||
// sf::Color circle_colours[2] = {
|
||||
// sf::Color(0xCCB897),
|
||||
// sf::Color(0x9E7454)
|
||||
// }; // legal moves
|
||||
|
||||
sf::RectangleShape square(sf::Vector2f(TILE_SIZE, TILE_SIZE));
|
||||
for (int rank = 0; rank < 8; ++rank) {
|
||||
for (int file = 0; file < 8; ++file) {
|
||||
square.setPosition(file * TILE_SIZE, (7 - rank) * TILE_SIZE);
|
||||
square.setFillColor(
|
||||
(file + rank) % 2 == 0 ? colours[0] : colours[1]
|
||||
);
|
||||
window.draw(square);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::draw_pieces(const Board& board) {
|
||||
for (int i = 0; i < 64; ++i) {
|
||||
int piece = board.piece_at(i);
|
||||
if (piece != Piece::None) {
|
||||
int color = board.colour_at(i) == Colour::White ? 0 : 1;
|
||||
pieces[i].setTexture(textures[piece - 1][color]);
|
||||
pieces[i].setPosition(
|
||||
(i % 8) * TILE_SIZE,
|
||||
(7 - (int) (i / 8)) * TILE_SIZE
|
||||
);
|
||||
window.draw(pieces[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::show() {
|
||||
while (window.isOpen())
|
||||
handle_events();
|
||||
}
|
32
cpp/src/view/gui.hpp
Normal file
32
cpp/src/view/gui.hpp
Normal file
@ -0,0 +1,32 @@
|
||||
#pragma once
|
||||
|
||||
#include "../model/board/board.hpp"
|
||||
#include "view.hpp"
|
||||
|
||||
#include <SFML/Graphics.hpp>
|
||||
|
||||
|
||||
const int TILE_SIZE = 80;
|
||||
const int BOARD_SIZE = 8;
|
||||
const int WINDOW_SIZE = TILE_SIZE * BOARD_SIZE;
|
||||
|
||||
class GUI : public View {
|
||||
public:
|
||||
GUI();
|
||||
|
||||
void show() override;
|
||||
void update_board(const Board&, int8_t, std::vector<Move>) override;
|
||||
void notify_checkmate() override;
|
||||
void notify_stalemate() override;
|
||||
|
||||
private:
|
||||
sf::RenderWindow window;
|
||||
sf::Texture textures[6][2];
|
||||
sf::Sprite pieces[64];
|
||||
|
||||
void load_textures();
|
||||
void handle_events();
|
||||
void handle_click(int, int);
|
||||
void draw_board(int, std::vector<Move>);
|
||||
void draw_pieces(const Board&);
|
||||
};
|
21
cpp/src/view/view.hpp
Normal file
21
cpp/src/view/view.hpp
Normal file
@ -0,0 +1,21 @@
|
||||
#pragma once
|
||||
|
||||
#include "../controller/controller.hpp"
|
||||
#include "../model/board/board.hpp"
|
||||
#include "../model/pieces/piece.hpp"
|
||||
#include "../model/utils/move.hpp"
|
||||
|
||||
class View {
|
||||
protected:
|
||||
Controller* controller;
|
||||
|
||||
public:
|
||||
void set_controller(Controller* c) {
|
||||
controller = c;
|
||||
}
|
||||
|
||||
virtual void show() = 0;
|
||||
virtual void update_board(const Board&, int8_t, std::vector<Move>) = 0;
|
||||
virtual void notify_checkmate() = 0;
|
||||
virtual void notify_stalemate() = 0;
|
||||
};
|
Loading…
x
Reference in New Issue
Block a user