Page MenuHomePhabricator (Chris)

No OneTemporary

Authored By
Unknown
Size
7 KB
Referenced Files
None
Subscribers
None
diff --git a/cardsdeck.cpp b/cardsdeck.cpp
index b06cd5b..c8be54b 100644
--- a/cardsdeck.cpp
+++ b/cardsdeck.cpp
@@ -1,100 +1,101 @@
#include "cardsdeck.h"
CardsDeck::CardsDeck(TextureHolder *textures, sf::Font *gameFont)
{
std::array<std::array<int,2>,4> cardsPos = {
{
{1087,95}, {1225, 95}, {1225, 277}, {1087, 277}
}
};
this->textures = textures;
for (int i=0;i<=3;i++)
{
spriteCardBases[i].setTexture(this->textures->textureCardBases[i]);
spriteCardBases[i].setPosition(cardsPos[i][0],cardsPos[i][1]);
textPileTitle[i].setFont(*gameFont);
textPileTitle[i].setCharacterSize(10);
textPileTitle[i].setPosition(cardsPos[i][0]+10,cardsPos[i][1]+100);
for (int j=0;j<efc::PILE_SIZE;j++)
{
cardsList[i].cardsPile[j].cardType = efc::cardsTypes[j];
}
setTitles();
+ cardsList[i].shufflePile();
}
}
void CardsDeck::draw(sf::RenderTarget& target, sf::RenderStates states) const
{
states.transform *= getTransform();
for (int i=0;i<=3;i++)
{
if (cardsList[i].invisibleLeft==0.0f)
{
target.draw(spriteCardBases[i], states);
target.draw(textPileTitle[i], states);
}
}
}
void CardsDeck::setTitles()
{
for (int i=0;i<=3;i++)
{
textPileTitle[i].setString(getTitle(i));
}
}
void CardsDeck::setFonts(sf::Font *gameFont)
{
for (int i=0;i<=3;i++)
{
textPileTitle[i].setFont(*gameFont);
}
}
void CardsDeck::nextCard(int pileNumber)
{
cardsList[pileNumber].invisibleLeft = 0.75f;
int currentCard = getCurrentCard(pileNumber);
currentCard += 1;
if (currentCard>efc::PILE_SIZE-1)
currentCard = 0;
cardsList[pileNumber].currentCard = currentCard;
setTitles();
}
int CardsDeck::getCurrentCard(int pileNumber)
{
int currentCard = cardsList[pileNumber].currentCard;
return currentCard;
}
std::string CardsDeck::getTitle(int pileNumber)
{
std::string currentText = cardsList[pileNumber].cardsPile[getCurrentCard(pileNumber)].cardType;
return currentText;
}
void CardsDeck::update(sf::Time deltaTime)
{
for (int i=0;i<=3;i++)
{
if (cardsList[i].invisibleLeft>0.0f)
{
cardsList[i].invisibleLeft -= deltaTime.asSeconds();
}
if (cardsList[i].invisibleLeft<0.0f)
{
cardsList[i].invisibleLeft = 0.0f;
}
}
}
diff --git a/cardslist.cpp b/cardslist.cpp
index be9aa3d..2364b0a 100644
--- a/cardslist.cpp
+++ b/cardslist.cpp
@@ -1,23 +1,32 @@
#include "cardslist.h"
CardsList::CardsList():
currentCard(0),
invisibleLeft(0)
{
}
CardsList::CardsList(int element)
{
amount = 32;
this->element = element;
currentCard = 0;
invisibleLeft = 0.0f;
+
+}
+
+void CardsList::shufflePile()
+{
+ std::srand(std::time(0));
+ unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
+
+ shuffle (cardsPile.begin(), cardsPile.end(), std::default_random_engine(seed));
}
//void CardsList::addCard(Card card)
//{
//}
diff --git a/cardslist.h b/cardslist.h
index 7b00ce9..36586cb 100644
--- a/cardslist.h
+++ b/cardslist.h
@@ -1,34 +1,38 @@
#ifndef CARDSLIST_H
#define CARDSLIST_H
#include <vector>
#include <array>
+#include <iostream> // std::cout
+#include <algorithm> // std::shuffle
+#include <random> // std::default_random_engine
+#include <chrono> // std::chrono::system_clock
#include "card.h"
namespace efc {
const static int PILE_SIZE = 3;
}
class CardsList
{
public:
CardsList(); // To create an array of CardsList
CardsList(int element);
int amount;
// std::vector<Card*> sd;
/*!
* \brief element Number of the element
*/
std::array<Card, efc::PILE_SIZE> cardsPile;
int currentCard;
int element; /*!< Number of the element */
float invisibleLeft;
-
+ void shufflePile();
};
#endif // CARDSLIST_H
diff --git a/command.cpp b/command.cpp
index c8610c0..127b015 100644
--- a/command.cpp
+++ b/command.cpp
@@ -1,126 +1,127 @@
#include <algorithm>
#include <iterator>
#include "game.h"
#include "command.h"
#include "data.h"
Command::Command(efc::Game &currentGame) :
game(currentGame)
{
}
void Command::removeCard(int playerNumber)
{
/*! This should works as following:
* - iterate over BoardDiamondSeq
* - find diamonds belonging to the playerNumber
* - create an array from the aboves
* - get a random element
* - remove from the board - set not active
*/
std::vector<int> diamonds;
for (auto&& i: game.boardDiamonds.diamonds)
{
int fieldNumber = i.playerNumber;
if ((fieldNumber==playerNumber) && (i.boardPosition>-1)
&& (i.idNumber<4))
{
diamonds.push_back(i.boardPosition);
}
}
int numberDiamonds = diamonds.size();
if (numberDiamonds>=0)
{
int elemToRemove = rand() % numberDiamonds;
game.boardDiamonds.collectField(diamonds[elemToRemove]);
}
}
void Command::removeDiamond(int playerNumber)
{
/*! This should works as following:
* - iterate over BoardDiamondSeq
* - find diamonds belonging to the playerNumber
* - create an array from the aboves
* - get a random element
* - remove from the board - set not active
*/
std::vector<int> diamonds;
for (auto&& i: game.boardDiamonds.diamonds)
{
int fieldNumber = i.playerNumber;
if ((fieldNumber==playerNumber) && (i.boardPosition>-1)
&& (i.idNumber==4))
{
diamonds.push_back(i.boardPosition);
}
}
int numberDiamonds = diamonds.size();
if (numberDiamonds>=0)
{
int elemToRemove = rand() % numberDiamonds;
game.boardDiamonds.collectField(diamonds[elemToRemove]);
}
}
void Command::freezePlayer(int playerNumber)
{
game.players[playerNumber].frozenLeft += 1;
}
void Command::processField(int pos)
{
// if ()
bool startField = std::find(std::begin(efc::startPlayers),
std::end(efc::startPlayers), pos)
!= std::end(efc::startPlayers);
if ((startField) && (efc::startPlayers[game.turn]==pos))
game.boardDiamonds.reorder(game.turn);
if (game.boardDiamonds.ifFieldIsEmpty(pos)==false)
{
game.sfx.playCollect();
if (game.boardDiamonds.getNumberForField(pos)==4)
{
game.players[game.turn].cash += 1;
} else if (game.boardDiamonds.getNumberForField(pos)<4)
{
processCard(pos);
}
game.boardDiamonds.collectField(pos);
}
}
void Command::processCard(int pos)
{
int tokenNumber = game.boardDiamonds.getNumberForField(pos);
std::string cardType = game.cardsDeck.getTitle(tokenNumber);
if (tokenNumber!=game.turn)
{
if (cardType == "diamond")
{
removeDiamond(game.boardDiamonds.getNumberForField(pos));
+ game.players[game.turn].cash += 1;
} else if (cardType == "stop")
{
freezePlayer(tokenNumber);
} else if (cardType == "card")
{
removeCard(game.boardDiamonds.getNumberForField(pos));
}
}
game.cardsDeck.nextCard(tokenNumber);
game.sfx.playCard();
}
int Command::processGui(sf::Vector2f posGui)
{
return posGui.x + posGui.y; /*! TODO: add processing some actions */
}

File Metadata

Mime Type
text/x-diff
Expires
Tue, Jun 16, 1:49 AM (2 w, 13 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
71431
Default Alt Text
(7 KB)

Event Timeline