mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-12-27 08:29:26 -05:00
0b78ed6ff8
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@2245 b45a01b8-16f6-495d-af2f-9b41ad6348cc
1214 lines
56 KiB
C++
1214 lines
56 KiB
C++
/*
|
|
|
|
Achtung! Die Objektnamen der hier erzeugten Objekte dürfen auf keinen Fall, auch nicht zur korrektur von eventuell vorhandenen Rechtschreibfehlern geaendert werden, da sie in verschiedenen Situationen zur Laufzeit des Programms zum auffinden und identifizieren von Objekten verwendet werden!!!
|
|
|
|
*/
|
|
|
|
#include "Scene.h"
|
|
#include "Karte.h"
|
|
#include "Random.h"
|
|
#include "Basisstapel.h"
|
|
#include "Austeilstapel.h"
|
|
#include "Austeilcostapel.h"
|
|
#include "Zielstapel.h"
|
|
#include "Ablagestapel.h"
|
|
#include "Siegkontrolle.h"
|
|
#include "Punktezaehler.h"
|
|
#include "Rahmen.h"
|
|
#include "Undo.h"
|
|
#include "Zug.h"
|
|
#include "Proportionen.h"
|
|
#include <QTimer>
|
|
#include <QDebug>
|
|
#include <cstdlib>
|
|
#include <QSettings>
|
|
#include <QCryptographicHash>
|
|
#include <QResizeEvent>
|
|
|
|
using namespace std;
|
|
|
|
Scene::Scene(const QString& deckblatt, QObject *parent) : QGraphicsScene(parent), Laufendes_spiel(false), nur_eine_ziehen(true)
|
|
{
|
|
// den zufallssimulator initialisieren
|
|
Random::initialisiere();
|
|
|
|
// die hintergrundfarbe einstellen
|
|
setBackgroundBrush(Qt::darkGreen);
|
|
|
|
// die klasse Zug fuer das signal - slot system registrieren
|
|
qRegisterMetaType<Zug>("Zug");
|
|
|
|
/*
|
|
|
|
Wichtiger Hinweis:
|
|
|
|
Die Reihenfolge, in der die Karten aufgebaut und in die Kartenliste eingefuegt werden, darf auf keinen Fall veraendert werden, da es ansonsten beim aendern des Deckblattes zu fehlern kommen wuerde! Ausserdem darf auch die Anzahl der Karten auf keinen Fall geaendert werden !!!
|
|
|
|
*/
|
|
|
|
// die karten erstellen
|
|
// die 4 asse erstellen
|
|
// kreutz
|
|
Karte *kreutz_ass = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/01c.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
kreutz_ass->setObjectName(QString(KARTEN_KREUTZ) + "_" + KARTEN_ASS);
|
|
kreutz_ass->setze_farbe(KARTEN_KREUTZ);
|
|
kreutz_ass->setze_wert(1);
|
|
kartenliste.append(kreutz_ass);
|
|
|
|
// karo
|
|
Karte *karo_ass = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/01d.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
karo_ass->setObjectName(QString(KARTEN_KARO) + "_" + KARTEN_ASS);
|
|
karo_ass->setze_farbe(KARTEN_KARO);
|
|
karo_ass->setze_wert(1);
|
|
kartenliste.append(karo_ass);
|
|
|
|
// herz
|
|
Karte *herz_ass = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/01h.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
herz_ass->setObjectName(QString(KARTEN_HERZ) + "_" + KARTEN_ASS);
|
|
herz_ass->setze_farbe(KARTEN_HERZ);
|
|
herz_ass->setze_wert(1);
|
|
kartenliste.append(herz_ass);
|
|
|
|
// pik
|
|
Karte *pik_ass = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/01s.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
pik_ass->setObjectName(QString(KARTEN_PIK) + "_" + KARTEN_ASS);
|
|
pik_ass->setze_farbe(KARTEN_PIK);
|
|
pik_ass->setze_wert(1);
|
|
kartenliste.append(pik_ass);
|
|
|
|
// die 2er erstellen
|
|
// kreutz
|
|
Karte *kreutz_2 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/02c.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
kreutz_2->setObjectName(QString(KARTEN_KREUTZ) + "_2");
|
|
kreutz_2->setze_farbe(KARTEN_KREUTZ);
|
|
kreutz_2->setze_wert(2);
|
|
kartenliste.append(kreutz_2);
|
|
|
|
// karo
|
|
Karte *karo_2 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/02d.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
karo_2->setObjectName(QString(KARTEN_KARO) + "_2");
|
|
karo_2->setze_farbe(KARTEN_KARO);
|
|
karo_2->setze_wert(2);
|
|
kartenliste.append(karo_2);
|
|
|
|
// herz
|
|
Karte *herz_2 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/02h.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
herz_2->setObjectName(QString(KARTEN_HERZ) + "_2");
|
|
herz_2->setze_farbe(KARTEN_HERZ);
|
|
herz_2->setze_wert(2);
|
|
kartenliste.append(herz_2);
|
|
|
|
// pik
|
|
Karte *pik_2 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/02s.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
pik_2->setObjectName(QString(KARTEN_PIK) + "_2");
|
|
pik_2->setze_farbe(KARTEN_PIK);
|
|
pik_2->setze_wert(2);
|
|
kartenliste.append(pik_2);
|
|
|
|
// die 3er erstellen
|
|
// kreutz
|
|
Karte *kreutz_3 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/03c.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
kreutz_3->setObjectName(QString(KARTEN_KREUTZ) + "_3");
|
|
kreutz_3->setze_farbe(KARTEN_KREUTZ);
|
|
kreutz_3->setze_wert(3);
|
|
kartenliste.append(kreutz_3);
|
|
|
|
// karo
|
|
Karte *karo_3 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/03d.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
karo_3->setObjectName(QString(KARTEN_KARO) + "_3");
|
|
karo_3->setze_farbe(KARTEN_KARO);
|
|
karo_3->setze_wert(3);
|
|
kartenliste.append(karo_3);
|
|
|
|
// herz
|
|
Karte *herz_3 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/03h.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
herz_3->setObjectName(QString(KARTEN_HERZ) + "_3");
|
|
herz_3->setze_farbe(KARTEN_HERZ);
|
|
herz_3->setze_wert(3);
|
|
kartenliste.append(herz_3);
|
|
|
|
// pik
|
|
Karte *pik_3 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/03s.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
pik_3->setObjectName(QString(KARTEN_PIK) + "_3");
|
|
pik_3->setze_farbe(KARTEN_PIK);
|
|
pik_3->setze_wert(3);
|
|
kartenliste.append(pik_3);
|
|
|
|
// die 4er erstellen
|
|
// kreutz
|
|
Karte *kreutz_4 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/04c.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
kreutz_4->setObjectName(QString(KARTEN_KREUTZ) + "_4");
|
|
kreutz_4->setze_farbe(KARTEN_KREUTZ);
|
|
kreutz_4->setze_wert(4);
|
|
kartenliste.append(kreutz_4);
|
|
|
|
// karo
|
|
Karte *karo_4 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/04d.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
karo_4->setObjectName(QString(KARTEN_KARO) + "_4");
|
|
karo_4->setze_farbe(KARTEN_KARO);
|
|
karo_4->setze_wert(4);
|
|
kartenliste.append(karo_4);
|
|
|
|
// herz
|
|
Karte *herz_4 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/04h.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
herz_4->setObjectName(QString(KARTEN_HERZ) + "_4");
|
|
herz_4->setze_farbe(KARTEN_HERZ);
|
|
herz_4->setze_wert(4);
|
|
kartenliste.append(herz_4);
|
|
|
|
// pik
|
|
Karte *pik_4 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/04s.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
pik_4->setObjectName(QString(KARTEN_PIK) + "_4");
|
|
pik_4->setze_farbe(KARTEN_PIK);
|
|
pik_4->setze_wert(4);
|
|
kartenliste.append(pik_4);
|
|
|
|
// die 5er erstellen
|
|
// kreutz
|
|
Karte *kreutz_5 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/05c.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
kreutz_5->setObjectName(QString(KARTEN_KREUTZ) + "_5");
|
|
kreutz_5->setze_farbe(KARTEN_KREUTZ);
|
|
kreutz_5->setze_wert(5);
|
|
kartenliste.append(kreutz_5);
|
|
|
|
// karo
|
|
Karte *karo_5 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/05d.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
karo_5->setObjectName(QString(KARTEN_KARO) + "_5");
|
|
karo_5->setze_farbe(KARTEN_KARO);
|
|
karo_5->setze_wert(5);
|
|
kartenliste.append(karo_5);
|
|
|
|
// herz
|
|
Karte *herz_5 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/05h.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
herz_5->setObjectName(QString(KARTEN_HERZ) + "_5");
|
|
herz_5->setze_farbe(KARTEN_HERZ);
|
|
herz_5->setze_wert(5);
|
|
kartenliste.append(herz_5);
|
|
|
|
// pik
|
|
Karte *pik_5 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/05s.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
pik_5->setObjectName(QString(KARTEN_PIK) + "_5");
|
|
pik_5->setze_farbe(KARTEN_PIK);
|
|
pik_5->setze_wert(5);
|
|
kartenliste.append(pik_5);
|
|
|
|
// die 6er erstellen
|
|
// kreutz
|
|
Karte *kreutz_6 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/06c.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
kreutz_6->setObjectName(QString(KARTEN_KREUTZ) + "_6");
|
|
kreutz_6->setze_farbe(KARTEN_KREUTZ);
|
|
kreutz_6->setze_wert(6);
|
|
kartenliste.append(kreutz_6);
|
|
|
|
// karo
|
|
Karte *karo_6 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/06d.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
karo_6->setObjectName(QString(KARTEN_KARO) + "_6");
|
|
karo_6->setze_farbe(KARTEN_KARO);
|
|
karo_6->setze_wert(6);
|
|
kartenliste.append(karo_6);
|
|
|
|
// herz
|
|
Karte *herz_6 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/06h.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
herz_6->setObjectName(QString(KARTEN_HERZ) + "_6");
|
|
herz_6->setze_farbe(KARTEN_HERZ);
|
|
herz_6->setze_wert(6);
|
|
kartenliste.append(herz_6);
|
|
|
|
// pik
|
|
Karte *pik_6 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/06s.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
pik_6->setObjectName(QString(KARTEN_PIK) + "_6");
|
|
pik_6->setze_farbe(KARTEN_PIK);
|
|
pik_6->setze_wert(6);
|
|
kartenliste.append(pik_6);
|
|
|
|
// die 7er erstellen
|
|
// kreutz
|
|
Karte *kreutz_7 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/07c.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
kreutz_7->setObjectName(QString(KARTEN_KREUTZ) + "_7");
|
|
kreutz_7->setze_farbe(KARTEN_KREUTZ);
|
|
kreutz_7->setze_wert(7);
|
|
kartenliste.append(kreutz_7);
|
|
|
|
// karo
|
|
Karte *karo_7 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/07d.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
karo_7->setObjectName(QString(KARTEN_KARO) + "_7");
|
|
karo_7->setze_farbe(KARTEN_KARO);
|
|
karo_7->setze_wert(7);
|
|
kartenliste.append(karo_7);
|
|
|
|
// herz
|
|
Karte *herz_7 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/07h.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
herz_7->setObjectName(QString(KARTEN_HERZ) + "_7");
|
|
herz_7->setze_farbe(KARTEN_HERZ);
|
|
herz_7->setze_wert(7);
|
|
kartenliste.append(herz_7);
|
|
|
|
// pik
|
|
Karte *pik_7 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/07s.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
pik_7->setObjectName(QString(KARTEN_PIK) + "_7");
|
|
pik_7->setze_farbe(KARTEN_PIK);
|
|
pik_7->setze_wert(7);
|
|
kartenliste.append(pik_7);
|
|
|
|
// die 8er erstellen
|
|
// kreutz
|
|
Karte *kreutz_8 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/08c.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
kreutz_8->setObjectName(QString(KARTEN_KREUTZ) + "_8");
|
|
kreutz_8->setze_farbe(KARTEN_KREUTZ);
|
|
kreutz_8->setze_wert(8);
|
|
kartenliste.append(kreutz_8);
|
|
|
|
// karo
|
|
Karte *karo_8 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/08d.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
karo_8->setObjectName(QString(KARTEN_KARO) + "_8");
|
|
karo_8->setze_farbe(KARTEN_KARO);
|
|
karo_8->setze_wert(8);
|
|
kartenliste.append(karo_8);
|
|
|
|
// herz
|
|
Karte *herz_8 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/08h.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
herz_8->setObjectName(QString(KARTEN_HERZ) + "_8");
|
|
herz_8->setze_farbe(KARTEN_HERZ);
|
|
herz_8->setze_wert(8);
|
|
kartenliste.append(herz_8);
|
|
|
|
// pik
|
|
Karte *pik_8 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/08s.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
pik_8->setObjectName(QString(KARTEN_PIK) + "_8");
|
|
pik_8->setze_farbe(KARTEN_PIK);
|
|
pik_8->setze_wert(8);
|
|
kartenliste.append(pik_8);
|
|
|
|
// die 9er erstellen
|
|
// kreutz
|
|
Karte *kreutz_9 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/09c.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
kreutz_9->setObjectName(QString(KARTEN_KREUTZ) + "_9");
|
|
kreutz_9->setze_farbe(KARTEN_KREUTZ);
|
|
kreutz_9->setze_wert(9);
|
|
kartenliste.append(kreutz_9);
|
|
|
|
// karo
|
|
Karte *karo_9 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/09d.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
karo_9->setObjectName(QString(KARTEN_KARO) + "_9");
|
|
karo_9->setze_farbe(KARTEN_KARO);
|
|
karo_9->setze_wert(9);
|
|
kartenliste.append(karo_9);
|
|
|
|
// herz
|
|
Karte *herz_9 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/09h.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
herz_9->setObjectName(QString(KARTEN_HERZ) + "_9");
|
|
herz_9->setze_farbe(KARTEN_HERZ);
|
|
herz_9->setze_wert(9);
|
|
kartenliste.append(herz_9);
|
|
|
|
// pik
|
|
Karte *pik_9 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/09s.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
pik_9->setObjectName(QString(KARTEN_PIK) + "_9");
|
|
pik_9->setze_farbe(KARTEN_PIK);
|
|
pik_9->setze_wert(9);
|
|
kartenliste.append(pik_9);
|
|
|
|
// die 10er erstellen
|
|
// kreutz
|
|
Karte *kreutz_10 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/10c.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
kreutz_10->setObjectName(QString(KARTEN_KREUTZ) + "_10");
|
|
kreutz_10->setze_farbe(KARTEN_KREUTZ);
|
|
kreutz_10->setze_wert(10);
|
|
kartenliste.append(kreutz_10);
|
|
|
|
// karo
|
|
Karte *karo_10 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/10d.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
karo_10->setObjectName(QString(KARTEN_KARO) + "_10");
|
|
karo_10->setze_farbe(KARTEN_KARO);
|
|
karo_10->setze_wert(10);
|
|
kartenliste.append(karo_10);
|
|
|
|
// herz
|
|
Karte *herz_10 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/10h.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
herz_10->setObjectName(QString(KARTEN_HERZ) + "_10");
|
|
herz_10->setze_farbe(KARTEN_HERZ);
|
|
herz_10->setze_wert(10);
|
|
kartenliste.append(herz_10);
|
|
|
|
// pik
|
|
Karte *pik_10 = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/10s.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
pik_10->setObjectName(QString(KARTEN_PIK) + "_10");
|
|
pik_10->setze_farbe(KARTEN_PIK);
|
|
pik_10->setze_wert(10);
|
|
kartenliste.append(pik_10);
|
|
|
|
// die buben erstellen
|
|
// kreutz
|
|
Karte *kreutz_bube = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/11c.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
kreutz_bube->setObjectName(QString(KARTEN_KREUTZ) + "_" + KARTEN_BUBE);
|
|
kreutz_bube->setze_farbe(KARTEN_KREUTZ);
|
|
kreutz_bube->setze_wert(11);
|
|
kartenliste.append(kreutz_bube);
|
|
|
|
// karo
|
|
Karte *karo_bube = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/11d.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
karo_bube->setObjectName(QString(KARTEN_KARO) + "_" + KARTEN_BUBE);
|
|
karo_bube->setze_farbe(KARTEN_KARO);
|
|
karo_bube->setze_wert(11);
|
|
kartenliste.append(karo_bube);
|
|
|
|
// herz
|
|
Karte *herz_bube = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/11h.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
herz_bube->setObjectName(QString(KARTEN_HERZ) + "_" + KARTEN_BUBE);
|
|
herz_bube->setze_farbe(KARTEN_HERZ);
|
|
herz_bube->setze_wert(11);
|
|
kartenliste.append(herz_bube);
|
|
|
|
// pik
|
|
Karte *pik_bube = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/11s.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
pik_bube->setObjectName(QString(KARTEN_PIK) + "_" + KARTEN_BUBE);
|
|
pik_bube->setze_farbe(KARTEN_PIK);
|
|
pik_bube->setze_wert(11);
|
|
kartenliste.append(pik_bube);
|
|
|
|
// die damen erstellen
|
|
// kreutz
|
|
Karte *kreutz_dame = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/12c.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
kreutz_dame->setObjectName(QString(KARTEN_KREUTZ) + "_" + KARTEN_DAME);
|
|
kreutz_dame->setze_farbe(KARTEN_KREUTZ);
|
|
kreutz_dame->setze_wert(12);
|
|
kartenliste.append(kreutz_dame);
|
|
|
|
// karo
|
|
Karte *karo_dame = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/12d.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
karo_dame->setObjectName(QString(KARTEN_KARO) + "_" + KARTEN_DAME);
|
|
karo_dame->setze_farbe(KARTEN_KARO);
|
|
karo_dame->setze_wert(12);
|
|
kartenliste.append(karo_dame);
|
|
|
|
// herz
|
|
Karte *herz_dame = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/12h.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
herz_dame->setObjectName(QString(KARTEN_HERZ) + "_" + KARTEN_DAME);
|
|
herz_dame->setze_farbe(KARTEN_HERZ);
|
|
herz_dame->setze_wert(12);
|
|
kartenliste.append(herz_dame);
|
|
|
|
// pik
|
|
Karte *pik_dame = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/12s.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
pik_dame->setObjectName(QString(KARTEN_PIK) + "_" + KARTEN_DAME);
|
|
pik_dame->setze_farbe(KARTEN_PIK);
|
|
pik_dame->setze_wert(12);
|
|
kartenliste.append(pik_dame);
|
|
|
|
// die koenige erstellen
|
|
// kreutz
|
|
Karte *kreutz_koenig = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/13c.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
kreutz_koenig->setObjectName(QString(KARTEN_KREUTZ) + "_" + KARTEN_KOENIG);
|
|
kreutz_koenig->setze_farbe(KARTEN_KREUTZ);
|
|
kreutz_koenig->setze_wert(13);
|
|
kartenliste.append(kreutz_koenig);
|
|
|
|
// karo
|
|
Karte *karo_koenig = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/13d.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
karo_koenig->setObjectName(QString(KARTEN_KARO) + "_" + KARTEN_KOENIG);
|
|
karo_koenig->setze_farbe(KARTEN_KARO);
|
|
karo_koenig->setze_wert(13);
|
|
kartenliste.append(karo_koenig);
|
|
|
|
// herz
|
|
Karte *herz_koenig = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/13h.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
herz_koenig->setObjectName(QString(KARTEN_HERZ) + "_" + KARTEN_KOENIG);
|
|
herz_koenig->setze_farbe(KARTEN_HERZ);
|
|
herz_koenig->setze_wert(13);
|
|
kartenliste.append(herz_koenig);
|
|
|
|
// pik
|
|
Karte *pik_koenig = new Karte(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/13s.gif"), QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/back01.gif"), this);
|
|
pik_koenig->setObjectName(QString(KARTEN_PIK) + "_" + KARTEN_KOENIG);
|
|
pik_koenig->setze_farbe(KARTEN_PIK);
|
|
pik_koenig->setze_wert(13);
|
|
kartenliste.append(pik_koenig);
|
|
|
|
// die stapel erzeugen ...
|
|
austeilstapel = new Austeilstapel(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/shade.gif"), this);
|
|
austeilstapel->setObjectName(BASISSTAPEL_AUSTEILSTAPEL);
|
|
austeilstapel->setZValue(0);
|
|
|
|
austeilcostapel = new Austeilcostapel(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/shade.gif"), this);
|
|
austeilcostapel->setObjectName(BASISSTAPEL_AUSTEILCOSTAPEL);
|
|
austeilcostapel->setZValue(0);
|
|
|
|
// austeilstapel und austeilcostapel gegenseitig registrieren
|
|
austeilstapel->registriere_costapel(austeilcostapel);
|
|
austeilcostapel->registriere_austeilstapel(austeilstapel);
|
|
|
|
kreutzzielstapel = new Zielstapel(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/shade.gif"), this);
|
|
kreutzzielstapel->setObjectName(QString(KARTEN_KREUTZ) + BASISSTAPEL_ZIELSTAPEL);
|
|
kreutzzielstapel->setZValue(0);
|
|
|
|
Rahmen *zielrahmen = new Rahmen(kreutzzielstapel);
|
|
kreutzzielstapel->registriere_rahmen(zielrahmen);
|
|
addItem(zielrahmen);
|
|
|
|
pikzielstapel = new Zielstapel(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/shade.gif"), this);
|
|
pikzielstapel->setObjectName(QString(KARTEN_PIK) + BASISSTAPEL_ZIELSTAPEL);
|
|
pikzielstapel->setZValue(0);
|
|
pikzielstapel->registriere_rahmen(zielrahmen);
|
|
|
|
karozielstapel = new Zielstapel(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/shade.gif"), this);
|
|
karozielstapel->setObjectName(QString(KARTEN_KARO) + BASISSTAPEL_ZIELSTAPEL);
|
|
karozielstapel->setZValue(0);
|
|
karozielstapel->registriere_rahmen(zielrahmen);
|
|
|
|
|
|
herzzielstapel = new Zielstapel(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/shade.gif"), this);
|
|
herzzielstapel->setObjectName(QString(KARTEN_HERZ) + BASISSTAPEL_ZIELSTAPEL);
|
|
herzzielstapel->setZValue(0);
|
|
herzzielstapel->registriere_rahmen(zielrahmen);
|
|
|
|
// die zielstapel verknuepfen
|
|
kreutzzielstapel->registriere_nachbar_zielstapel(pikzielstapel, karozielstapel, herzzielstapel);
|
|
pikzielstapel->registriere_nachbar_zielstapel(kreutzzielstapel, karozielstapel, herzzielstapel);
|
|
karozielstapel->registriere_nachbar_zielstapel(kreutzzielstapel, pikzielstapel, herzzielstapel);
|
|
herzzielstapel->registriere_nachbar_zielstapel(kreutzzielstapel, pikzielstapel, karozielstapel);
|
|
|
|
for (register int idx = 0; idx < SCENE_ABLAGE_STAPELZAHL; idx++)
|
|
{
|
|
Basisstapel *tmp_stapel = new Ablagestapel(QPixmap(":/" + deckblatt + "/karten/" + deckblatt + "/shade.gif"), this);
|
|
tmp_stapel->setObjectName(QString(BASISSTAPEL_ABLAGESTAPEL) + "_" + QString::number(idx + 1));
|
|
tmp_stapel->setZValue(0);
|
|
|
|
// den rahmen fuer den stapel erzeugen
|
|
tmp_stapel->registriere_rahmen(zielrahmen);
|
|
|
|
ablagestapel.append(tmp_stapel);
|
|
}
|
|
|
|
// ... ihre positionen setzen
|
|
austeilstapel->setPos(SCENE_AUSGANGSBREITE / SCENE_AUSTEILSTAPEL_X_VERHAELTNIS, SCENE_AUSGANGSHOEHE / SCENE_OBERE_STAPEL_Y_VERHAELTNIS);
|
|
austeilcostapel->setPos(SCENE_AUSGANGSBREITE / SCENE_AUSTEILCOSTAPEL_X_VERHAELTNIS, SCENE_AUSGANGSHOEHE / SCENE_OBERE_STAPEL_Y_VERHAELTNIS);
|
|
kreutzzielstapel->setPos(SCENE_AUSGANGSBREITE / SCENE_KREUTZZIELSTAPEL_X_VERHAELTNIS, SCENE_AUSGANGSHOEHE / SCENE_OBERE_STAPEL_Y_VERHAELTNIS);
|
|
pikzielstapel->setPos(SCENE_AUSGANGSBREITE / SCENE_PIKZIELSTAPEL_X_VERHAELTNIS, SCENE_AUSGANGSHOEHE / SCENE_OBERE_STAPEL_Y_VERHAELTNIS);
|
|
karozielstapel->setPos(SCENE_AUSGANGSBREITE / SCENE_KAROZIELSTAPEL_X_VERHAELTNIS, SCENE_AUSGANGSHOEHE / SCENE_OBERE_STAPEL_Y_VERHAELTNIS);
|
|
herzzielstapel->setPos(SCENE_AUSGANGSBREITE / SCENE_HERZZIELSTAPEL_X_VERHAELTNIS, SCENE_AUSGANGSHOEHE / SCENE_OBERE_STAPEL_Y_VERHAELTNIS);
|
|
ablagestapel.at(0)->setPos(SCENE_AUSGANGSBREITE / SCENE_ABLAGESTAPEL_01_X_VERHAELTNIS, SCENE_AUSGANGSHOEHE / SCENE_ABLAGESTAPEL_Y_VERHAELTNIS);
|
|
ablagestapel.at(1)->setPos(SCENE_AUSGANGSBREITE / SCENE_ABLAGESTAPEL_02_X_VERHAELTNIS, SCENE_AUSGANGSHOEHE / SCENE_ABLAGESTAPEL_Y_VERHAELTNIS);
|
|
ablagestapel.at(2)->setPos(SCENE_AUSGANGSBREITE / SCENE_ABLAGESTAPEL_03_X_VERHAELTNIS, SCENE_AUSGANGSHOEHE / SCENE_ABLAGESTAPEL_Y_VERHAELTNIS);
|
|
ablagestapel.at(3)->setPos(SCENE_AUSGANGSBREITE / SCENE_ABLAGESTAPEL_04_X_VERHAELTNIS, SCENE_AUSGANGSHOEHE / SCENE_ABLAGESTAPEL_Y_VERHAELTNIS);
|
|
ablagestapel.at(4)->setPos(SCENE_AUSGANGSBREITE / SCENE_ABLAGESTAPEL_05_X_VERHAELTNIS, SCENE_AUSGANGSHOEHE / SCENE_ABLAGESTAPEL_Y_VERHAELTNIS);
|
|
ablagestapel.at(5)->setPos(SCENE_AUSGANGSBREITE / SCENE_ABLAGESTAPEL_06_X_VERHAELTNIS, SCENE_AUSGANGSHOEHE / SCENE_ABLAGESTAPEL_Y_VERHAELTNIS);
|
|
ablagestapel.at(6)->setPos(SCENE_AUSGANGSBREITE / SCENE_ABLAGESTAPEL_07_X_VERHAELTNIS, SCENE_AUSGANGSHOEHE / SCENE_ABLAGESTAPEL_Y_VERHAELTNIS);
|
|
|
|
// ... und in die scene einfuegen
|
|
addItem(austeilstapel);
|
|
addItem(austeilcostapel);
|
|
addItem(kreutzzielstapel);
|
|
addItem(pikzielstapel);
|
|
addItem(karozielstapel);
|
|
addItem(herzzielstapel);
|
|
|
|
for (register int idx = 0; idx < SCENE_ABLAGE_STAPELZAHL; idx++) addItem(ablagestapel.at(idx));
|
|
|
|
// eine liste erstellen, die alle stapel enthaelt
|
|
allestapel = ablagestapel;
|
|
allestapel.append(austeilstapel);
|
|
allestapel.append(austeilcostapel);
|
|
allestapel.append(kreutzzielstapel);
|
|
allestapel.append(pikzielstapel);
|
|
allestapel.append(karozielstapel);
|
|
allestapel.append(herzzielstapel);
|
|
|
|
for (register int idx = 0; idx < kartenliste.size(); idx++)
|
|
{
|
|
// die stapelliste an alle karten uebergeben
|
|
kartenliste.at(idx)->registriere_stapel(allestapel);
|
|
|
|
// den karten die zielstapel mitteilen
|
|
kartenliste.at(idx)->registriere_zielstapel(kreutzzielstapel, pikzielstapel, herzzielstapel, karozielstapel);
|
|
|
|
// alle karten in die scene einfuegen
|
|
addItem(kartenliste.at(idx));
|
|
}
|
|
|
|
// siegkontrolle erstellen ...
|
|
siegkontrolle = new Siegkontrolle(this);
|
|
siegkontrolle->setObjectName("siegkontrolle");
|
|
|
|
// ... und in den zielstapeln registrieren
|
|
kreutzzielstapel->registriere_siegkontrolle(siegkontrolle);
|
|
pikzielstapel->registriere_siegkontrolle(siegkontrolle);
|
|
karozielstapel->registriere_siegkontrolle(siegkontrolle);
|
|
herzzielstapel->registriere_siegkontrolle(siegkontrolle);
|
|
|
|
// in siegkontrolle die zielstapel registrieren
|
|
siegkontrolle->registriere_zielstapel(kreutzzielstapel, pikzielstapel, herzzielstapel, karozielstapel);
|
|
|
|
// punktezaehler erzeugen
|
|
punktezaehler = new Punktezaehler(this);
|
|
punktezaehler->setObjectName("punktezaehler");
|
|
|
|
// spieltimer erstellen
|
|
spieltimer = new QTimer(this);
|
|
spieltimer->setInterval(1000);
|
|
|
|
// die auffindhilfen aufbauen
|
|
for (register int idx = 0; idx < allestapel.size(); idx++) stapelfinder.insert(allestapel.at(idx)->objectName(), allestapel.at(idx));
|
|
for (register int idx = 0; idx < kartenliste.size(); idx++) kartenfinder.insert(kartenliste.at(idx)->objectName(), kartenliste.at(idx));
|
|
|
|
// undo erstellen
|
|
undo = new Undo(this);
|
|
undo->setObjectName("undo");
|
|
|
|
// signal - slot verbindungen
|
|
// bei spielende (sieg) sollen alle karten blockert werden
|
|
connect(siegkontrolle, SIGNAL(gewonnen()), this, SLOT(blockiere_alle_karten()));
|
|
|
|
// alle stapel am punktezaehler anschliessen, damit die stapel zuege an punktzaehler melden koennen
|
|
for (register int idx = 0; idx < allestapel.size(); idx++)
|
|
{
|
|
connect(allestapel.at(idx), SIGNAL(zug(const Zug&)), punktezaehler, SLOT(neuer_zug(const Zug&)));
|
|
}
|
|
|
|
|
|
|
|
// verbindungen herstellen, die alle karten betreffen
|
|
for (register int idx = 0; idx < kartenliste.size(); idx++)
|
|
{
|
|
for (register int ablagestapelidx = 0; ablagestapelidx < ablagestapel.size(); ablagestapelidx++)
|
|
{
|
|
// allen karten das senden von hilfsanfragen ermoeglichen
|
|
// das starten von hilfsanfragen ermoeglichen
|
|
connect(kartenliste.at(idx), SIGNAL(hilfsanfrage_start(Karte*)), ablagestapel.at(ablagestapelidx), SLOT(hilfsanfrage_start(Karte*)));
|
|
|
|
// das stoppen von hilfsanfragen ermoeglichen
|
|
connect(kartenliste.at(idx), SIGNAL(hilfsanfrage_ende()), ablagestapel.at(ablagestapelidx), SLOT(hilfsanfrage_ende()));
|
|
}
|
|
|
|
// das starten von hilfsanfragen ermoeglichen
|
|
connect(kartenliste.at(idx), SIGNAL(hilfsanfrage_start(Karte*)), herzzielstapel, SLOT(hilfsanfrage_start(Karte*)));
|
|
connect(kartenliste.at(idx), SIGNAL(hilfsanfrage_start(Karte*)), karozielstapel, SLOT(hilfsanfrage_start(Karte*)));
|
|
connect(kartenliste.at(idx), SIGNAL(hilfsanfrage_start(Karte*)), pikzielstapel, SLOT(hilfsanfrage_start(Karte*)));
|
|
connect(kartenliste.at(idx), SIGNAL(hilfsanfrage_start(Karte*)), kreutzzielstapel, SLOT(hilfsanfrage_start(Karte*)));
|
|
|
|
// das stoppen von hilfsanfragen ermoeglichen
|
|
connect(kartenliste.at(idx), SIGNAL(hilfsanfrage_ende()), herzzielstapel, SLOT(hilfsanfrage_ende()));
|
|
connect(kartenliste.at(idx), SIGNAL(hilfsanfrage_ende()), karozielstapel, SLOT(hilfsanfrage_ende()));
|
|
connect(kartenliste.at(idx), SIGNAL(hilfsanfrage_ende()), pikzielstapel, SLOT(hilfsanfrage_ende()));
|
|
connect(kartenliste.at(idx), SIGNAL(hilfsanfrage_ende()), kreutzzielstapel, SLOT(hilfsanfrage_ende()));
|
|
|
|
// allen karten das verstecken des zielrahmens ermoeglichen und das steuern der sichtbarkeit des rahmens ermoeglichen
|
|
connect(kartenliste.at(idx), SIGNAL(rahmen_verstecken()), zielrahmen, SLOT(verstecke()));
|
|
connect(this, SIGNAL(rahmen_anzeigen(bool)), kartenliste.at(idx), SLOT(sichtbarkeit_rahmen(bool)));
|
|
|
|
// das skalieren der kartengroesse ermoeglichen
|
|
connect(this, SIGNAL(neue_groesse_karten(double)), kartenliste.at(idx), SLOT(passe_groesse_an(double)));
|
|
}
|
|
|
|
|
|
|
|
// den punktezaehler ueber den start neuer spiele unterrichten
|
|
connect(this, SIGNAL(neues_spiel_gestartet()), punktezaehler, SLOT(neues_spiel()));
|
|
|
|
// den punktezaehler ueber spielende unterrichten
|
|
connect(siegkontrolle, SIGNAL(gewonnen()), punktezaehler, SLOT(spiel_zuende()));
|
|
|
|
// punktezaehler das melden der punktzahl ermoeglichen
|
|
connect(punktezaehler, SIGNAL(neue_punktzahl(int)), this, SIGNAL(neue_punktzahl(int)));
|
|
|
|
// wenn bei austeilstapel der stapel durch ist dies an punktzaehler melden
|
|
connect(austeilstapel, SIGNAL(stapel_durch()), punktezaehler, SLOT(stapel_durch()));
|
|
|
|
// starten und stoppen von spieltimer ermoeglichen. erste der erste zug startet die zeit
|
|
connect(punktezaehler, SIGNAL(erster_zug()), this, SLOT(starte_spieltimer()));
|
|
connect(siegkontrolle, SIGNAL(gewonnen()), this, SLOT(stoppe_spieltimer()));
|
|
|
|
// reaktionen auf spieltimer ermoeglichen
|
|
connect(spieltimer, SIGNAL(timeout()), this, SLOT(reaktionen_auf_spieltimer()));
|
|
|
|
// das durchreichen von siegmeldungen ermoeglichen
|
|
connect(siegkontrolle, SIGNAL(gewonnen()), this, SLOT(gewonnen_relay()));
|
|
|
|
// wenn ein neues spiel gestartet wird, muss austeilcostapel die ablagenummer resetten
|
|
connect(this, SIGNAL(neues_spiel_gestartet()), austeilcostapel, SLOT(resette_ablagenummer()));
|
|
|
|
// austeilstapel und austeilcostapel sollen den spieltyp kennen
|
|
connect(this, SIGNAL(relay_eine_ziehen()), austeilstapel, SLOT(eine_ziehen()));
|
|
connect(this, SIGNAL(relay_eine_ziehen()), austeilcostapel, SLOT(eine_ziehen()));
|
|
connect(this, SIGNAL(relay_drei_ziehen()), austeilstapel, SLOT(drei_ziehen()));
|
|
connect(this, SIGNAL(relay_drei_ziehen()), austeilcostapel, SLOT(drei_ziehen()));
|
|
|
|
// auch der punktezaehler soll den spieltyp kennen
|
|
connect(this, SIGNAL(relay_eine_ziehen()), punktezaehler, SLOT(eine_ziehen()));
|
|
connect(this, SIGNAL(relay_drei_ziehen()), punktezaehler, SLOT(drei_ziehen()));
|
|
|
|
// allen ablagestapel stapel ausser austeilstapel an undo anschliessen
|
|
for (register int idx = 0; idx < ablagestapel.size(); idx++)
|
|
{
|
|
connect(ablagestapel.at(idx), SIGNAL(zug(const Zug&)), undo, SLOT(speichere_zug(const Zug&)));
|
|
}
|
|
|
|
connect(austeilcostapel, SIGNAL(zug(const Zug&)), undo, SLOT(speichere_zug(const Zug&)));
|
|
connect(herzzielstapel, SIGNAL(zug(const Zug&)), undo, SLOT(speichere_zug(const Zug&)));
|
|
connect(karozielstapel, SIGNAL(zug(const Zug&)), undo, SLOT(speichere_zug(const Zug&)));
|
|
connect(pikzielstapel, SIGNAL(zug(const Zug&)), undo, SLOT(speichere_zug(const Zug&)));
|
|
connect(kreutzzielstapel, SIGNAL(zug(const Zug&)), undo, SLOT(speichere_zug(const Zug&)));
|
|
|
|
// undo meldungen an punktezaehler ermoeglichen
|
|
connect(undo, SIGNAL(undo_meldung(const Zug&)), punktezaehler, SLOT(undo_meldung(const Zug&)));
|
|
|
|
// verfuegbarkeit von undo melden
|
|
connect(undo, SIGNAL(undo_verfuegbar(bool)), this, SIGNAL(undo_verfuegbar(bool)));
|
|
|
|
// verbindungen, die alle stapel betreffen
|
|
for (register int idx = 0; idx < allestapel.size(); idx++)
|
|
{
|
|
// groessenanpassung aller stapel ermoeglichen
|
|
connect(this, SIGNAL(neue_groesse_karten(double)), allestapel.at(idx), SLOT(passe_groesse_an(double)));
|
|
}
|
|
}
|
|
|
|
|
|
Scene::~Scene()
|
|
{
|
|
}
|
|
|
|
|
|
QList<Karte*> Scene::mischen() const
|
|
{
|
|
QList<Karte*> gemischt, mischquelle(kartenliste);
|
|
|
|
while (mischquelle.isEmpty() == false) gemischt.append(mischquelle.takeAt(Random::random(0, mischquelle.size() - 1)));
|
|
|
|
if (mischquelle.isEmpty() == false)
|
|
{
|
|
qDebug() << tr("Missing Cards in Scene !");
|
|
|
|
exit(1);
|
|
}
|
|
|
|
return gemischt;
|
|
}
|
|
|
|
|
|
void Scene::neues_spiel()
|
|
{
|
|
// zunaechst den spieltimer stoppen
|
|
stoppe_spieltimer();
|
|
|
|
// die verstrichenen sekunden ohne den spieltimer auf 0 setzen, weil die startzeit noch vom letzten spiel stammt und dies zu falschen werten fuehren wuerde. dies wird, wenn punktzaehler den ersten zug meldet angepasst
|
|
emit verstrichene_sekunden(0);
|
|
|
|
// das spielfeld aufraeumen
|
|
setze_spiel_zurueck();
|
|
|
|
// die karten mischen
|
|
QList<Karte*> aufbauliste(mischen());
|
|
|
|
// 1 karte auf den ersten ablagestapel legen
|
|
ablagestapel.at(0)->initialisiere_karte(aufbauliste.takeFirst());
|
|
|
|
// 2 karte auf den zweiten ablagestapel legen
|
|
for (register int idx = 0; idx < 2; idx++) ablagestapel.at(1)->initialisiere_karte(aufbauliste.takeFirst());
|
|
|
|
// 3 karte auf den dritten ablagestapel legen
|
|
for (register int idx = 0; idx < 3; idx++) ablagestapel.at(2)->initialisiere_karte(aufbauliste.takeFirst());
|
|
|
|
// 4 karte auf den vierten ablagestapel legen
|
|
for (register int idx = 0; idx < 4; idx++) ablagestapel.at(3)->initialisiere_karte(aufbauliste.takeFirst());
|
|
|
|
// 5 karte auf den fuenften ablagestapel legen
|
|
for (register int idx = 0; idx < 5; idx++) ablagestapel.at(4)->initialisiere_karte(aufbauliste.takeFirst());
|
|
|
|
// 6 karte auf den sechsten ablagestapel legen
|
|
for (register int idx = 0; idx < 6; idx++) ablagestapel.at(5)->initialisiere_karte(aufbauliste.takeFirst());
|
|
|
|
// 7 karte auf den siebten ablagestapel legen
|
|
for (register int idx = 0; idx < 7; idx++) ablagestapel.at(6)->initialisiere_karte(aufbauliste.takeFirst());
|
|
|
|
// die restlichen karten auf den austeilstapel legen
|
|
while (aufbauliste.isEmpty() == false) austeilstapel->initialisiere_karte(aufbauliste.takeFirst());
|
|
|
|
// die obersten karten auf den ablagestapeln aufdecken
|
|
for (register int idx = 0; idx < ablagestapel.size(); idx++)
|
|
{
|
|
if (ablagestapel.at(idx)->oberste_karte() != 0) ablagestapel.at(idx)->oberste_karte()->zeige_vorderseite();
|
|
}
|
|
|
|
// undo leeren. damit wird undo auch gleich blockiert.
|
|
undo->clear();
|
|
|
|
Laufendes_spiel = true;
|
|
|
|
emit neues_spiel_gestartet();
|
|
}
|
|
|
|
|
|
void Scene::alle_karten_verdecken()
|
|
{
|
|
for (register int idx = 0; idx < kartenliste.size(); idx++) kartenliste.at(idx)->zeige_rueckseite();
|
|
}
|
|
|
|
|
|
void Scene::setze_spiel_zurueck()
|
|
{
|
|
// undo leeren. damit wird undo auch gleich blockiert.
|
|
undo->clear();
|
|
|
|
// alle karten sollen wieder die rueckseite zeigen
|
|
alle_karten_verdecken();
|
|
|
|
for (register int idx = 0; idx < kartenliste.size(); idx++)
|
|
{
|
|
// meinstapel wieder zuruecksetzen
|
|
kartenliste.at(idx)->setze_meinstapel(0);
|
|
|
|
// die rueckkehrkoordinaten zuruecksetzen
|
|
kartenliste.at(idx)->setze_rueckehrkoordinaten(QPointF(0, 0));
|
|
}
|
|
|
|
// die kartenlisten der stapel zuruecksetzen
|
|
for (register int idx = 0; idx < allestapel.size(); idx++) allestapel.at(idx)->setze_kartenliste_zurueck();
|
|
}
|
|
|
|
|
|
void Scene::blockiere_alle_karten()
|
|
{
|
|
// undo leeren. damit wird undo auch gleich blockiert.
|
|
undo->clear();
|
|
|
|
Laufendes_spiel = false;
|
|
|
|
for (register int idx = 0; idx < kartenliste.size(); idx++) kartenliste.at(idx)->setFlag(QGraphicsItem::ItemIsMovable, false);
|
|
}
|
|
|
|
|
|
bool Scene::laufendes_spiel() const
|
|
{
|
|
return Laufendes_spiel;
|
|
}
|
|
|
|
|
|
void Scene::lade_franzoesisches_deckblatt()
|
|
{
|
|
// sicherstellen, das alle 52 karten vorhanden sind
|
|
if (kartenliste.size() == 52)
|
|
{
|
|
int idx = 0;
|
|
|
|
// die franzoesischen kartenbilder laden
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/01c.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/01d.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/01h.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/01s.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/02c.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/02d.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/02h.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/02s.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/03c.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/03d.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/03h.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/03s.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/04c.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/04d.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/04h.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/04s.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/05c.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/05d.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/05h.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/05s.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/06c.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/06d.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/06h.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/06s.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/07c.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/07d.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/07h.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/07s.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/08c.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/08d.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/08h.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/08s.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/09c.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/09d.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/09h.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/09s.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/10c.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/10d.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/10h.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/10s.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/11c.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/11d.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/11h.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/11s.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/12c.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/12d.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/12h.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/12s.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/13c.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/13d.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/13h.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/french/karten/french/13s.gif"), QPixmap(":/french/karten/french/back01.gif"));
|
|
}
|
|
}
|
|
|
|
|
|
void Scene::lade_deutsches_deckblatt()
|
|
{
|
|
// sicherstellen, das alle 52 karten vorhanden sind
|
|
if (kartenliste.size() == 52)
|
|
{
|
|
int idx = 0;
|
|
|
|
// die deutschen kartenbilder laden
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/01c.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/01d.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/01h.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/01s.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/02c.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/02d.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/02h.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/02s.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/03c.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/03d.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/03h.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/03s.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/04c.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/04d.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/04h.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/04s.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/05c.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/05d.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/05h.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/05s.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/06c.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/06d.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/06h.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/06s.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/07c.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/07d.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/07h.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/07s.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/08c.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/08d.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/08h.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/08s.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/09c.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/09d.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/09h.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/09s.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/10c.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/10d.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/10h.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/10s.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/11c.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/11d.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/11h.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/11s.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/12c.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/12d.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/12h.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/12s.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/13c.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/13d.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/13h.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
kartenliste.at(idx++)->setze_kartenbilder(QPixmap(":/german/karten/german/13s.gif"), QPixmap(":/german/karten/german/back01.gif"));
|
|
}
|
|
}
|
|
|
|
|
|
void Scene::starte_spieltimer()
|
|
{
|
|
// den startzeitpunkt erfassen
|
|
startzeitpunkt = QDateTime::currentDateTime();
|
|
|
|
// den timer zur aktualisierung der spielzeit starten
|
|
spieltimer->start();
|
|
|
|
// die berechnete zeit einmal sofort senden
|
|
reaktionen_auf_spieltimer();
|
|
}
|
|
|
|
|
|
void Scene::stoppe_spieltimer()
|
|
{
|
|
spieltimer->stop();
|
|
}
|
|
|
|
|
|
void Scene::reaktionen_auf_spieltimer()
|
|
{
|
|
emit verstrichene_sekunden(startzeitpunkt.secsTo(QDateTime::currentDateTime()));
|
|
}
|
|
|
|
|
|
void Scene::gewonnen_relay()
|
|
{
|
|
// die daten fuer eine vollstaendige siegmeldung senden
|
|
emit gewonnen(punktezaehler->punktstand(), startzeitpunkt.secsTo(QDateTime::currentDateTime()));
|
|
}
|
|
|
|
|
|
void Scene::eine_ziehen()
|
|
{
|
|
nur_eine_ziehen = true;
|
|
|
|
emit relay_eine_ziehen();
|
|
}
|
|
|
|
|
|
void Scene::drei_ziehen()
|
|
{
|
|
nur_eine_ziehen = false;
|
|
|
|
emit relay_drei_ziehen();
|
|
}
|
|
|
|
|
|
bool Scene::nur_eine_wird_gezogen() const
|
|
{
|
|
return nur_eine_ziehen;
|
|
}
|
|
|
|
|
|
void Scene::initialisiere_rahmen(bool wert)
|
|
{
|
|
emit rahmen_anzeigen(wert);
|
|
}
|
|
|
|
|
|
void Scene::rueckgaengig()
|
|
{
|
|
undo->undo();
|
|
}
|
|
|
|
|
|
Karte* Scene::suche_karte(const QString& name) const
|
|
{
|
|
Karte *erg = 0;
|
|
|
|
if (kartenfinder.contains(name) == true) erg = kartenfinder.value(name);
|
|
|
|
return erg;
|
|
}
|
|
|
|
|
|
const QStringList Scene::speichere() const
|
|
{
|
|
QStringList erg;
|
|
|
|
// die id speichern
|
|
erg.append(objectName());
|
|
|
|
// nur_eine_ziehen speichern
|
|
erg.append(QString::number(nur_eine_ziehen));
|
|
|
|
// die verstrichene zeit speichern
|
|
erg.append(QString::number(startzeitpunkt.secsTo(QDateTime::currentDateTime())));
|
|
|
|
return erg;
|
|
}
|
|
|
|
|
|
bool Scene::lade(const QStringList& daten)
|
|
{
|
|
bool erg = false;
|
|
|
|
if (daten.size() == SCENE_ANZAHL_SPEICHERELEMENTE && daten.first() == objectName())
|
|
{
|
|
erg = true;
|
|
|
|
// nur_eine_ziehen laden
|
|
nur_eine_ziehen = daten.at(SCENE_EINE_ZIEHEN_IDX).toInt();
|
|
|
|
// eine zur verstrichenen zeit passende startzeit berechnen
|
|
startzeitpunkt = QDateTime::currentDateTime().addSecs(-daten.at(SCENE_VERSTRICHENE_ZEIT_IDX).toInt());
|
|
}
|
|
|
|
return erg;
|
|
}
|
|
|
|
|
|
void Scene::registriere_einstellungen(QSettings* einstellungen_)
|
|
{
|
|
einstellungen = einstellungen_;
|
|
}
|
|
|
|
|
|
void Scene::lade_spielstand()
|
|
{
|
|
bool erg = true;
|
|
|
|
// den zustand der scene laden
|
|
erg = lade(einstellungen->value("Spielstand/" + objectName(), QStringList()).toStringList());
|
|
|
|
if (erg == false) qDebug() << tr("Unable to restore scene !");
|
|
|
|
// den zustand der stapel laden
|
|
if (erg == true)
|
|
{
|
|
for (register int idx = 0; idx < allestapel.size() && erg == true; idx++) erg = allestapel.at(idx)->lade(einstellungen->value("Spielstand/" + allestapel.at(idx)->objectName(), QStringList()).toStringList());
|
|
|
|
if (erg == false) qDebug() << tr("Unable to restore stacks !");
|
|
}
|
|
|
|
// den zustand der karten laden
|
|
if (erg == true)
|
|
{
|
|
for (register int idx = 0; idx < kartenliste.size() && erg == true; idx++) erg = kartenliste.at(idx)->lade(einstellungen->value("Spielstand/" + kartenliste.at(idx)->objectName(), QStringList()).toStringList());
|
|
|
|
if (erg == false) qDebug() << tr("Unable to restore cards !");
|
|
}
|
|
|
|
// den zustand von undo laden
|
|
if (erg == true)
|
|
{
|
|
erg = undo->lade(einstellungen->value("Spielstand/" + undo->objectName(), QStringList()).toStringList());
|
|
|
|
if (erg == false) qDebug() << tr("Unable to restore undo !");
|
|
}
|
|
|
|
// den zustand des punktezaehlers laden
|
|
if (erg == true)
|
|
{
|
|
erg = punktezaehler->lade(einstellungen->value("Spielstand/" + punktezaehler->objectName(), QStringList()).toStringList());
|
|
|
|
if (erg == false) qDebug() << tr("Unable to restore points !");
|
|
}
|
|
|
|
// testen, ob alle karten einen eigentuemer stapel haben
|
|
if (erg == true)
|
|
{
|
|
for (register int idx = 0; idx < kartenliste.size() && erg == true; idx++) if (kartenliste.at(idx)->eigentuemer_stapel() == 0) erg = false;
|
|
|
|
if (erg == false) qDebug() << tr("Card with 0 batch after restoring gamestate !");
|
|
}
|
|
|
|
// die pruefsumme des geladenen spiels testen
|
|
if (erg == true)
|
|
{
|
|
if (berechne_pruefsumme_spielstand() != einstellungen->value(QString("Spielstand/") + "pruefsumme", QByteArray()).toByteArray())
|
|
{
|
|
erg = false;
|
|
|
|
qDebug() << tr("Wrong checksumm while restoring saved game !");
|
|
}
|
|
}
|
|
|
|
if (erg == true)
|
|
{
|
|
Laufendes_spiel = true;
|
|
|
|
spieltimer->start();
|
|
|
|
emit verstrichene_sekunden(startzeitpunkt.secsTo(QDateTime::currentDateTime()));
|
|
}
|
|
|
|
// wenn beim laden etwas schief gegangen ist ein neues spiel starten
|
|
else
|
|
{
|
|
if (erg == false) qDebug() << tr("Unable to restore saved game. Trying to start a new game ...");
|
|
|
|
neues_spiel();
|
|
}
|
|
}
|
|
|
|
|
|
void Scene::speichere_spielstand()
|
|
{
|
|
// den zustand der scene speichern
|
|
einstellungen->setValue("Spielstand/" + objectName(), speichere());
|
|
|
|
// den zustand der stapel speichern
|
|
for (register int idx = 0; idx < allestapel.size(); idx++) einstellungen->setValue("Spielstand/" + allestapel.at(idx)->objectName(), allestapel.at(idx)->speichere());
|
|
|
|
// den zustand der karten speichern
|
|
for (register int idx = 0; idx < kartenliste.size(); idx++) einstellungen->setValue("Spielstand/" + kartenliste.at(idx)->objectName(), kartenliste.at(idx)->speichere());
|
|
|
|
// den zustand von undo speichern
|
|
einstellungen->setValue("Spielstand/" + undo->objectName(), undo->speichere());
|
|
|
|
// den zustand des punktezaehlers speichern
|
|
einstellungen->setValue("Spielstand/" + punktezaehler->objectName(), punktezaehler->speichere());
|
|
|
|
// die md5 des spielstands speichern
|
|
einstellungen->setValue(QString("Spielstand/") + "pruefsumme", berechne_pruefsumme_spielstand());
|
|
}
|
|
|
|
|
|
bool Scene::begonnenes_spiel() const
|
|
{
|
|
return punktezaehler->begonnenes_spiel();
|
|
}
|
|
|
|
|
|
Basisstapel* Scene::suche_stapel(const QString& name) const
|
|
{
|
|
Basisstapel *stapel = 0;
|
|
|
|
if (stapelfinder.contains(name) == true) stapel = stapelfinder.value(name);
|
|
|
|
return stapel;
|
|
}
|
|
|
|
|
|
bool Scene::enthaelt_karte(const QString& name) const
|
|
{
|
|
return kartenfinder.contains(name);
|
|
}
|
|
|
|
|
|
bool Scene::enthaelt_stapel(const QString& name) const
|
|
{
|
|
return stapelfinder.contains(name);
|
|
}
|
|
|
|
|
|
const QByteArray Scene::berechne_pruefsumme_spielstand()
|
|
{
|
|
QByteArray erg;
|
|
QCryptographicHash hash(QCryptographicHash::Sha1);
|
|
|
|
// den wert von scene abfragen
|
|
hash.addData(einstellungen->value("Spielstand/" + objectName(), QByteArray()).toByteArray());
|
|
|
|
// den wert der stapel abfragen
|
|
for (register int idx = 0; idx < allestapel.size(); idx++) hash.addData(einstellungen->value("Spielstand/" + allestapel.at(idx)->objectName(), QByteArray()).toByteArray());
|
|
|
|
// den wert von karten abfragen
|
|
for (register int idx = 0; idx < kartenliste.size(); idx++) hash.addData(einstellungen->value("Spielstand/" + kartenliste.at(idx)->objectName(), QByteArray()).toByteArray());
|
|
|
|
// den wert von undo abfragen
|
|
hash.addData(einstellungen->value("Spielstand/" + undo->objectName(), QByteArray()).toByteArray());
|
|
|
|
// den wert von punktezaehlers abfragen
|
|
hash.addData(einstellungen->value("Spielstand/" + punktezaehler->objectName(), QByteArray()).toByteArray());
|
|
|
|
erg = hash.result();
|
|
|
|
return erg;
|
|
}
|
|
|
|
|
|
void Scene::groessenanpassung(QResizeEvent* event)
|
|
{
|
|
if (event->size().width() > 0 && event->size().height() > 0)
|
|
{
|
|
double breite = event->size().width(), hoehe = event->size().height();
|
|
|
|
if (hoehe > (breite / SCENE_VERHAELTNIS_BREITE_ZU_HOEHE)) hoehe = breite / SCENE_VERHAELTNIS_BREITE_ZU_HOEHE;
|
|
|
|
setSceneRect(QRectF(0, 0, event->size().width() - 5, event->size().height() - 5));
|
|
|
|
austeilstapel->setPos(breite / SCENE_AUSTEILSTAPEL_X_VERHAELTNIS, hoehe / SCENE_OBERE_STAPEL_Y_VERHAELTNIS);
|
|
austeilcostapel->setPos(breite / SCENE_AUSTEILCOSTAPEL_X_VERHAELTNIS, hoehe / SCENE_OBERE_STAPEL_Y_VERHAELTNIS);
|
|
kreutzzielstapel->setPos(breite / SCENE_KREUTZZIELSTAPEL_X_VERHAELTNIS, hoehe / SCENE_OBERE_STAPEL_Y_VERHAELTNIS);
|
|
pikzielstapel->setPos(breite / SCENE_PIKZIELSTAPEL_X_VERHAELTNIS, hoehe / SCENE_OBERE_STAPEL_Y_VERHAELTNIS);
|
|
karozielstapel->setPos(breite / SCENE_KAROZIELSTAPEL_X_VERHAELTNIS, hoehe / SCENE_OBERE_STAPEL_Y_VERHAELTNIS);
|
|
herzzielstapel->setPos(breite / SCENE_HERZZIELSTAPEL_X_VERHAELTNIS, hoehe / SCENE_OBERE_STAPEL_Y_VERHAELTNIS);
|
|
ablagestapel.at(0)->setPos(breite / SCENE_ABLAGESTAPEL_01_X_VERHAELTNIS, hoehe / SCENE_ABLAGESTAPEL_Y_VERHAELTNIS);
|
|
ablagestapel.at(1)->setPos(breite / SCENE_ABLAGESTAPEL_02_X_VERHAELTNIS, hoehe / SCENE_ABLAGESTAPEL_Y_VERHAELTNIS);
|
|
ablagestapel.at(2)->setPos(breite / SCENE_ABLAGESTAPEL_03_X_VERHAELTNIS, hoehe / SCENE_ABLAGESTAPEL_Y_VERHAELTNIS);
|
|
ablagestapel.at(3)->setPos(breite / SCENE_ABLAGESTAPEL_04_X_VERHAELTNIS, hoehe / SCENE_ABLAGESTAPEL_Y_VERHAELTNIS);
|
|
ablagestapel.at(4)->setPos(breite / SCENE_ABLAGESTAPEL_05_X_VERHAELTNIS, hoehe / SCENE_ABLAGESTAPEL_Y_VERHAELTNIS);
|
|
ablagestapel.at(5)->setPos(breite / SCENE_ABLAGESTAPEL_06_X_VERHAELTNIS, hoehe / SCENE_ABLAGESTAPEL_Y_VERHAELTNIS);
|
|
ablagestapel.at(6)->setPos(breite / SCENE_ABLAGESTAPEL_07_X_VERHAELTNIS, hoehe / SCENE_ABLAGESTAPEL_Y_VERHAELTNIS);
|
|
|
|
emit neue_groesse_karten(hoehe / SCENE_HOEHE_ZU_KARTENHOEHE);
|
|
}
|
|
}
|