RetroShare/plugins/patience_plugin/Patience/Zielstapel.cpp
defnax 0b78ed6ff8 added patience plugin
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@2245 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2010-02-08 22:33:14 +00:00

81 lines
1.9 KiB
C++

#include "Zielstapel.h"
#include "Karte.h"
#include "Siegkontrolle.h"
#include <QDebug>
using namespace std;
Zielstapel::Zielstapel(const QPixmap& pixmap, Scene* oparent, QGraphicsItem* gparent) : Basisstapel(pixmap, oparent, gparent), siegkontrolle(0)
{
}
Zielstapel::~Zielstapel()
{
}
bool Zielstapel::ablage_moeglich(Karte* karte) const
{
bool erg = false;
if (Basisstapel::ablage_moeglich(karte) == true && ((oberste_karte() == 0 && karte->wert() == 1) || (oberste_karte() != 0 &&oberste_karte()->farbe() == karte->farbe() && karte->wert() == (oberste_karte()->wert() + 1))) && karte->hat_kinderkarten() == false) erg = true;
return erg;
}
void Zielstapel::registriere_siegkontrolle(Siegkontrolle* siegkontrolle_)
{
siegkontrolle = siegkontrolle_;
}
void Zielstapel::ablage_erfolgt()
{
siegkontrolle->teste_auf_sieg();
}
void Zielstapel::registriere_nachbar_zielstapel(Basisstapel* erster, Basisstapel* zweiter, Basisstapel* dritter)
{
nachbarn.append(erster);
nachbarn.append(zweiter);
nachbarn.append(dritter);
}
bool Zielstapel::lege_karte_ab(Karte* karte)
{
bool erg = false;
Basisstapel *ziel = 0;
QString quelle(karte->eigentuemer_stapel()->objectName());
// wenn dieser stapel der richtige ist ...
if (objectName().contains(karte->farbe()) == true) erg = Basisstapel::lege_karte_ab(karte);
// ansonsten den richtigen stapel suchen ...
else
{
for (register int idx = 0; idx < nachbarn.size() && ziel == 0; idx++) if (nachbarn.at(idx)->objectName().contains(karte->farbe()) == true) ziel = nachbarn.at(idx);
// ... und die karte auf diesem ablegen
if (ziel != 0) erg = ziel->lege_karte_ab(karte);
else
{
qDebug() << tr("Destination not found in Zielstapel::lege_karte_ab(Karte* karte)");
}
}
return erg;
}
void Zielstapel::hilfsanfrage_start(Karte* karte)
{
// dafuer sorgen, das der hilfspfeil nur uber dem richtigen zielstapel erscheint
if (objectName().contains(karte->farbe()) == true) Basisstapel::hilfsanfrage_start(karte);
}