Wyświetlanie pionków + prawie w pełni oprogramowana klasa planszy
This commit is contained in:
@@ -1 +1,92 @@
|
||||
#include "../inc/board.hh"
|
||||
|
||||
Board::Board()
|
||||
{
|
||||
// Czyścimy całą tablicę
|
||||
for(int i=0; i<TILES_COUNT; ++i) for(int j=0; j<TILES_COUNT; ++j) board[i][j] = NULL;
|
||||
|
||||
// Tworzymy czarne pionki
|
||||
for(int i=1; i<TILES_COUNT; i=i+2) createPawn(Vector(i, 0), CL_BLACK);
|
||||
for(int i=0; i<TILES_COUNT; i=i+2) createPawn(Vector(i, 1), CL_BLACK);
|
||||
for(int i=1; i<TILES_COUNT; i=i+2) createPawn(Vector(i, 2), CL_BLACK);
|
||||
|
||||
// Tworzymy białe pionki
|
||||
for(int i=0; i<TILES_COUNT; i=i+2) createPawn(Vector(i, TILES_COUNT-1), CL_WHITE);
|
||||
for(int i=1; i<TILES_COUNT; i=i+2) createPawn(Vector(i, TILES_COUNT-2), CL_WHITE);
|
||||
for(int i=0; i<TILES_COUNT; i=i+2) createPawn(Vector(i, TILES_COUNT-3), CL_WHITE);
|
||||
}
|
||||
|
||||
Pawn* Board::createPawn(Vector position, Color color)
|
||||
{
|
||||
// Jeżeli nie istnieje w tym miejscu pionek, to go tworzymy
|
||||
if(!board[position.x][position.y])
|
||||
board[position.x][position.y] = new Pawn(position, color);
|
||||
|
||||
// Zwracamy istniejący w tym miejscu pionek (dopiero co utworzony, lub isntiejący wcześniej)
|
||||
return board[position.x][position.y];
|
||||
}
|
||||
|
||||
Pawn* Board::getPawn(Vector position)
|
||||
{
|
||||
return board[position.x][position.y];
|
||||
}
|
||||
|
||||
bool Board::movePawn(Vector position, Vector target)
|
||||
{
|
||||
// Jeżeli na pozycji startowej nie ma pionka
|
||||
if(!getPawn(position)) return false;
|
||||
|
||||
// Jeżeli na pozycji docelowej jest pionek(miejsce zajęte)
|
||||
if(getPawn(target)) return false;
|
||||
|
||||
// Przesuwamy pionek na planszy
|
||||
board[target.x][target.y] = board[position.x][position.y];
|
||||
board[position.x][position.y] = NULL;
|
||||
|
||||
// Aktualizujemy informację o pozycji w pionku
|
||||
board[target.x][target.y]->setPosition(target);
|
||||
|
||||
// Zwracamy prawdę, że się udało
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Board::isMovementPossible(Vector position, Vector target)
|
||||
{
|
||||
// TODO
|
||||
return true;
|
||||
}
|
||||
|
||||
Pawn Board::deletePawn(Vector position)
|
||||
{
|
||||
Pawn deleted_pawn = *board[position.x][position.y];
|
||||
delete board[position.x][position.y];
|
||||
board[position.x][position.y] = NULL;
|
||||
return deleted_pawn;
|
||||
}
|
||||
|
||||
void Board::draw(sf::RenderWindow& window)
|
||||
{
|
||||
// Wymiar X
|
||||
for(int x=0; x<TILES_COUNT; ++x)
|
||||
{
|
||||
// Wymiar Y
|
||||
for(int y=0; y<TILES_COUNT; ++y)
|
||||
{
|
||||
// Tworzymy pojedynczy kafelek o wymiarach TILE_SIZE x TILE_SIZE
|
||||
sf::RectangleShape tile(sf::Vector2f(TILE_SIZE, TILE_SIZE));
|
||||
|
||||
// Ustawiamy pozycję na i*TILE_SIZE, j*TILE_SIZE -- czyli np. dla TILE_SIZE = 64: (0,0), (0,64), (0,128), ...
|
||||
tile.setPosition(x*TILE_SIZE, y*TILE_SIZE);
|
||||
|
||||
// Ustawiamy kolor wypełnienia co drugiego kafelka na jasny
|
||||
tile.setFillColor(((x+y)%2)?sf::Color(150, 74, 0):sf::Color(248, 246, 184));
|
||||
|
||||
// Rysujemy kafelki
|
||||
window.draw(tile);
|
||||
|
||||
// Jeżeli istnieją na danym polu pionki, to je rysujemy
|
||||
if(board[x][y]) board[x][y]->draw(window);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,13 +5,14 @@
|
||||
#include "../inc/misc.hh"
|
||||
#include "../inc/object.hh"
|
||||
#include "../inc/pawn.hh"
|
||||
#include "../inc/board.hh"
|
||||
|
||||
int main()
|
||||
{
|
||||
sf::ContextSettings settings;
|
||||
settings.antialiasingLevel = 8;
|
||||
sf::RenderWindow window(sf::VideoMode(800, 600, 32), "Warcaby", sf::Style::Default, settings);
|
||||
Pawn pawn(Vector(0, 0), CL_BLACK);
|
||||
sf::RenderWindow window(sf::VideoMode(WINDOW_WIDTH, WINDOW_HEIGHT, 32), "Warcaby", sf::Style::Close, settings);
|
||||
Board board;
|
||||
while(window.isOpen())
|
||||
{
|
||||
sf::Event event;
|
||||
@@ -20,7 +21,7 @@ int main()
|
||||
if(event.type == sf::Event::Closed) window.close();
|
||||
}
|
||||
window.clear(sf::Color(255, 255, 255));
|
||||
pawn.draw(window);
|
||||
board.draw(window);
|
||||
window.display();
|
||||
}
|
||||
return 0;
|
||||
|
||||
24
src/pawn.cpp
24
src/pawn.cpp
@@ -3,14 +3,32 @@
|
||||
void Pawn::draw(sf::RenderWindow& window)
|
||||
{
|
||||
// Tworzymy nowy kształt koła o promieniu równym połowie długości boku kafelka i odjęciu dwóch marginesów
|
||||
sf::CircleShape pawn(TILE_SIZE/2 - PAWN_MARGIN*2);
|
||||
sf::CircleShape pawn(TILE_SIZE/2 - PAWN_MARGIN);
|
||||
|
||||
// Ustawiamy jego pozycję na pozycję zwróconą przez getPosition() uwzględniając marginesy
|
||||
pawn.setPosition(getPosition().getRealVector() + sf::Vector2f(PAWN_MARGIN, PAWN_MARGIN));
|
||||
|
||||
// Wypełniamy odpowiednim kolorem
|
||||
pawn.setFillColor((color==CL_WHITE)?sf::Color::White:sf::Color::Black);
|
||||
// Jeżeli nie jest zaznaczony,
|
||||
// wypełniamy odpowiednim kolorem w zależności od pionka(czy biały, czy czarny)
|
||||
if(!selected)
|
||||
pawn.setFillColor((color==CL_WHITE)?sf::Color(225, 223, 212):sf::Color(41, 0, 0));
|
||||
|
||||
// w przeciwnym razie wypełniamy nieco jaśniejszymi kolorami
|
||||
else
|
||||
pawn.setFillColor((color==CL_WHITE)?sf::Color(255, 255, 250):sf::Color(71, 30, 30));
|
||||
|
||||
// Ustawiamy odpowiedni kontur
|
||||
if(!queen) // W zależności od pionka(czy biały, czy czarny)
|
||||
{
|
||||
pawn.setOutlineThickness(PAWN_OUTLINE_THICKNESS);
|
||||
pawn.setOutlineColor((color==CL_WHITE)?sf::Color(133, 116, 38):sf::Color(10, 0, 0));
|
||||
}
|
||||
else // Dla królowej zawsze złoty
|
||||
{
|
||||
pawn.setOutlineThickness(QUEEN_PAWN_OUTLINE_THICKNESS);
|
||||
pawn.setOutlineColor(sf::Color(255, 200, 0));
|
||||
}
|
||||
|
||||
// Rysujemy na obiekcie window
|
||||
window.draw(pawn);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user