From 6e055d6ffda4863ff15d36c306a76cf314749b38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Pluta?= Date: Wed, 18 May 2016 16:53:16 +0200 Subject: [PATCH] Utworzenie klasy gry --- inc/board.hh | 3 +++ inc/def.hh | 3 +++ inc/game.hh | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/board.cpp | 21 ++++++++++++++++ src/game.cpp | 32 +++++++++++++++++++++++ src/main.cpp | 17 ++++++++++--- 6 files changed, 143 insertions(+), 3 deletions(-) create mode 100644 inc/game.hh create mode 100644 src/game.cpp diff --git a/inc/board.hh b/inc/board.hh index c44eabf..b50d948 100644 --- a/inc/board.hh +++ b/inc/board.hh @@ -37,6 +37,9 @@ public: // Rysuj planszę wraz z pionkami void draw(sf::RenderWindow& window); + // Zaznacz pionek o zadanej pozycji + Pawn* selectPawn(Vector position); + // Destruktor ~Board() {} diff --git a/inc/def.hh b/inc/def.hh index 371eae1..27bc682 100644 --- a/inc/def.hh +++ b/inc/def.hh @@ -5,6 +5,9 @@ /* Plik zawiera definicje stałych globalnych oraz przedefiniowanie istniejących typów. */ +// Tytuł gry (widoczny m.in. na pasku z tytułem okna) +//const char* GAME_TITLE = "Warcaby"; + // Ilość pól w każdym wymiarze const int TILES_COUNT = 10; diff --git a/inc/game.hh b/inc/game.hh new file mode 100644 index 0000000..145b2a3 --- /dev/null +++ b/inc/game.hh @@ -0,0 +1,70 @@ +#ifndef GAME_HH +#define GAME_HH + +/* Plik implementuje klasę gry, w której znajduje się m.in. główna pętla gry oraz która determinuje całą rozgrywkę. */ + +#include +#include + +#include "def.hh" +#include "misc.hh" +#include "object.hh" +#include "pawn.hh" +#include "board.hh" + +// Typ wyliczeniowy rozróżniający gracza od sztucznej inteligencji +enum Player + { + PL_HUMAN, + PL_AI + }; + +// Klasa gry +class Game +{ +private: + // Okno naszego programu + sf::RenderWindow window; + + // Plansza do gry w warcaby + Board board; + + // Zaznaczony pionek + Pawn* selected; // może lepiej Vector??? + + // Kolor gracza + Color player_color; + + // Tura(czy gracz, czy komputer) + + // punkty gracza i komputera + + // stan gry + +public: + + // Konstruktor inicjalizujący parametry gry i wyzwalający pętlę główną gry + Game(); + + // Zabij pionka (doliczając do tego punkty) + void killPawn(Vector position); + + // Do kogo należy pionek + Player getPlayer(Vector position); + + // Zwróć kolor gracza + Color getPlayerColor() const { return player_color; } + + // Zwróć kolor przeciwnika + Color getAIColor() const { return (player_color==CL_WHITE)?CL_BLACK:CL_WHITE; } + + // Przesuń pionek na określoną pozycję uwzględniając już + // przy tym zasady gry w warcaby + bool movePawn(Vector position, Vector target); + + // Główna pętla gry + void loop(); + +}; + +#endif diff --git a/src/board.cpp b/src/board.cpp index 2fb59d1..4808add 100644 --- a/src/board.cpp +++ b/src/board.cpp @@ -90,3 +90,24 @@ void Board::draw(sf::RenderWindow& window) } } } + +Pawn* Board::selectPawn(Vector position) +{ + // Jeżeli pionek na tym polu istnieje + if(board[position.x][position.y]) + { + // Odznaczamy wszystkie pionki + for(int x = 0; xdeselect(); + + // Zaznaczamy właściwy + board[position.x][position.y]->select(); + + // Zwracamy zaznaczony + return board[position.x][position.y]; + } + + // Zwracamy NULL, bo pionek nie istnieje + return NULL; +} diff --git a/src/game.cpp b/src/game.cpp new file mode 100644 index 0000000..e555b9e --- /dev/null +++ b/src/game.cpp @@ -0,0 +1,32 @@ +#include "../inc/game.hh" + +Game::Game() + : + window(sf::VideoMode(WINDOW_WIDTH, WINDOW_HEIGHT, 32), "Warcaby", sf::Style::Close), + selected(NULL), + player_color(CL_WHITE) +{ + // Kod inicjalizujący + // Pętla główna + loop(); +} + +void Game::killPawn(Vector position) +{ +} + +Player Game::getPlayer(Vector position) +{ + // + return PL_HUMAN; +} + +bool Game::movePawn(Vector position, Vector target) +{ + // + return true; +} + +void Game::loop() +{ +} diff --git a/src/main.cpp b/src/main.cpp index e87811e..f4decdc 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -6,23 +6,34 @@ #include "../inc/object.hh" #include "../inc/pawn.hh" #include "../inc/board.hh" +#include "../inc/game.hh" int main() { - sf::ContextSettings settings; + /* sf::ContextSettings settings; settings.antialiasingLevel = 8; sf::RenderWindow window(sf::VideoMode(WINDOW_WIDTH, WINDOW_HEIGHT, 32), "Warcaby", sf::Style::Close, settings); Board board; + Pawn* selected; while(window.isOpen()) { sf::Event event; while(window.pollEvent(event)) { - if(event.type == sf::Event::Closed) window.close(); + if(event.type == sf::Event::Closed) window.close(); + if(event.type == sf::Event::MouseButtonPressed) + { + if(event.mouseButton.button == sf::Mouse::Left) + { + Pawn* tmp = board.selectPawn(Vector(sf::Vector2f(event.mouseButton.x, event.mouseButton.y))); + if(tmp) selected = tmp; + else board.movePawn(selected->getPosition(), Vector(sf::Vector2f(event.mouseButton.x, event.mouseButton.y))); + } + } } window.clear(sf::Color(255, 255, 255)); board.draw(window); window.display(); - } + }*/ return 0; }