#pragma once
#include "Windows.h"
#include "Grid.h"
#include "Team.h"
#include "GamePieces.h"
class Field
{
public:
Field(const std::string&, int);
void reset();
void update();
Windows* getWindow();
void render();
void drawTeamStart();
~Field();
private:
GamePieces m_knight;
Windows m_windows;
float m_squareDim;
Grid m_chessGrid;
void constructChessBoard();
Team m_wTeam;
Team m_bTeam;
};
#include "Field.h"
Field::Field(const std::string& l_title, int size) : m_windows(l_title, sf::Vector2u(size, size)),
m_squareDim(size / 8), m_chessGrid(m_squareDim), m_wTeam(TeamColor::WHITE, m_chessGrid),
m_bTeam(TeamColor::BLACK, m_chessGrid)
{
reset();
}
void Field::reset()
{
drawTeamStart();
}
void Field::update()
{
m_windows.Update();
}
Windows* Field::getWindow()
{
return &m_windows;
}
void Field::render()
{
m_windows.BeginDraw();
constructChessBoard();
drawTeamStart();
m_windows.EndDraw();
}
void Field::drawTeamStart() //draws both the black and white team in their starting positions
{
for (int i = 0; i < 16; i++) {
m_windows.Draw(m_wTeam.m_chessPieces[i].getPieceSprite());
m_windows.Draw(m_bTeam.m_chessPieces[i].getPieceSprite());
}
}
Field::~Field()
{
}
void Field::constructChessBoard()
{
//construct chess grid
sf::RectangleShape square(sf::Vector2f(m_squareDim,m_squareDim));
sf::Vector2f position(0, 0);
int counter = 0; //counter for whether the column is even or odd
int counter1 = 0; //counter for whether we are on an even or odd row
for (int row = 0; row < 8; row++) {
for (int column = 0; column < 8; column++) {
if (counter1 % 2 == 0 && counter % 2 == 0 || counter1 % 2 != 0 && counter % 2 != 0) {
square.setFillColor(sf::Color::Red);
}
else {
square.setFillColor(sf::Color::White);
}
square.setPosition(position);
m_windows.Draw(square);
position.x += m_squareDim;
counter++;
}
position.y += m_squareDim;
position.x = 0;
counter = 0;
counter1++;
}
}
struct Grid {
sf::Vector2f m_gridMap[8][8];
Grid(){}
Grid(float squareDim) {
sf::Vector2f coord;
coord.x += squareDim/2;
coord.y += squareDim/2;
for (int i = 0; i < 8; i++) {
coord.y += squareDim;
for (int j = 0; j < 8; j++) {
coord.x += squareDim;
m_gridMap[i][j] = coord;
}
}
}
};
#pragma once
#include "SFML\Graphics.hpp"
#include "Grid.h"
enum PieceType { //place gamePieces into Grid not field, cus grid is already in field
W_BISHOP,
W_PAWN,
W_KING,
W_QUEEN,
W_ROOK,
W_KNIGHT,
B_BISHOP,
B_PAWN,
B_KING,
B_QUEEN,
B_ROOK,
B_KNIGHT
};
class GamePieces
{
public:
GamePieces(){}
GamePieces(const PieceType& type, const sf::Vector2f& position) : m_type(type),m_position(position)
{
switch (type) {
case W_BISHOP:
m_gamePiece.loadFromFile("w_bishop.png");
if (!m_gamePiece.loadFromFile("w_bishop.png")) {
std::cout << "proof" << std::endl;
}
break;
case W_PAWN:
m_gamePiece.loadFromFile("w_pawn.png");
break;
case W_KING:
m_gamePiece.loadFromFile("w_king.png");
break;
case W_QUEEN:
m_gamePiece.loadFromFile("w_queen.png");
break;
case W_ROOK:
m_gamePiece.loadFromFile("w_rook.png");
break;
case W_KNIGHT:
m_gamePiece.loadFromFile("w_knight.png");
break;
case B_BISHOP:
m_gamePiece.loadFromFile("b_bishop.png");
break;
case B_PAWN:
m_gamePiece.loadFromFile("b_pawn.png");
break;
case B_KING:
m_gamePiece.loadFromFile("b_king.png");
break;
case B_QUEEN:
m_gamePiece.loadFromFile("b_queen.png");
break;
case B_ROOK:
m_gamePiece.loadFromFile("b_rook.png");
break;
default:
m_gamePiece.loadFromFile("b_knight.png");
}
m_size = m_gamePiece.getSize();
m_gamePieceSprite.setTexture(m_gamePiece);
m_gamePieceSprite.setOrigin(sf::Vector2f(m_size.x/2, m_size.y/2));
m_gamePieceSprite.setPosition(position);
}
~GamePieces(){}
sf::Sprite getPieceSprite() const {
return m_gamePieceSprite;
}
private:
sf::Texture m_gamePiece;
sf::Sprite m_gamePieceSprite;
sf::Vector2f m_position;
PieceType m_type;
sf::Vector2u m_size;
};
#pragma once
#include "SFML\Graphics.hpp"
#include "GamePieces.h"
enum TeamColor {
BLACK,
WHITE
};
struct Team {
//16 pieces in regular chess
//map that assigns specific game pieces coordinates
GamePieces m_chessPieces[16];
TeamColor color;
Team() {}
Team(const TeamColor& color, const Grid& grid) { //reference to constant grid variable
sf::Vector2f coord;
switch (color) {
case WHITE:
{
m_chessPieces[0] = GamePieces(PieceType::W_ROOK, grid.m_gridMap[0][0]);
m_chessPieces[1] = GamePieces(PieceType::W_KNIGHT, grid.m_gridMap[0][1]);
m_chessPieces[2] = GamePieces(PieceType::W_BISHOP, grid.m_gridMap[0][2]);
m_chessPieces[3] = GamePieces(PieceType::W_KING, grid.m_gridMap[0][3]);
m_chessPieces[4] = GamePieces(PieceType::W_QUEEN, grid.m_gridMap[0][4]);
m_chessPieces[5] = GamePieces(PieceType::W_BISHOP, grid.m_gridMap[0][5]);
m_chessPieces[6] = GamePieces(PieceType::W_KNIGHT, grid.m_gridMap[0][6]);
m_chessPieces[7] = GamePieces(PieceType::W_ROOK, grid.m_gridMap[0][7]);
int counter = 8;
for (int j = 0; j < 8; j++) {
//arranging pawns left to right on
m_chessPieces[counter] = GamePieces(PieceType::W_PAWN, grid.m_gridMap[1][j]);
counter++;
}
}
break;
default:
{
for (int j = 0; j < 8; j++) {
//arranging pawns left to right on
m_chessPieces[j] = GamePieces(PieceType::B_PAWN, grid.m_gridMap[7][j]);
}
m_chessPieces[8] = GamePieces(PieceType::B_ROOK, grid.m_gridMap[8][0]);
m_chessPieces[9] = GamePieces(PieceType::B_KNIGHT, grid.m_gridMap[8][1]);
m_chessPieces[10] = GamePieces(PieceType::B_BISHOP, grid.m_gridMap[8][2]);
m_chessPieces[11] = GamePieces(PieceType::B_KING, grid.m_gridMap[8][3]);
m_chessPieces[12] = GamePieces(PieceType::B_QUEEN, grid.m_gridMap[8][4]);
m_chessPieces[13] = GamePieces(PieceType::B_BISHOP, grid.m_gridMap[8][5]);
m_chessPieces[14] = GamePieces(PieceType::B_KNIGHT, grid.m_gridMap[8][6]);
m_chessPieces[15] = GamePieces(PieceType::B_ROOK, grid.m_gridMap[8][7]);
}
}
}
};
So the game sprite loads correctly when i just place it into the header but when i try to draw it to the screen it doesnt work. I ommitted the window class i made cus its not as relevant, but let me know if you want me t post it.