Page Menu
Home
Phabricator (Chris)
Search
Configure Global Search
Log In
Files
F133430
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
7 KB
Referenced Files
None
Subscribers
None
View Options
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 ¤tGame) :
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
Details
Attached
Mime Type
text/x-diff
Expires
Tue, Jun 16, 1:49 AM (2 w, 16 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
71431
Default Alt Text
(7 KB)
Attached To
Mode
R82 deerportal
Attached
Detach File
Event Timeline