⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 patiencecardgame.h

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.7平台上编译为嵌入式图形界面操作系统。
💻 H
字号:
/************************************************************************ Copyright (C) 2000-2002 Trolltech AS.  All rights reserved.**** This file is part of the Qtopia Environment.**** This file may be distributed and/or modified under the terms of the** GNU General Public License version 2 as published by the Free Software** Foundation and appearing in the file LICENSE.GPL included in the** packaging of this file.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.**** See http://www.trolltech.com/gpl/ for GPL licensing information.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.************************************************************************/#ifndef PATIENCE_CARD_GAME_H#define PATIENCE_CARD_GAME_H #include <qpopupmenu.h>#include <qmainwindow.h>#include <qintdict.h>#include <qcanvas.h>#include "canvascardgame.h"#include "cardmetrics.h"class PatienceFaceDownDeck : public CardPile, public CanvasRoundRect{public:    PatienceFaceDownDeck(int x, int y, QCanvas *canvas)        : CardPile(x, y), CanvasRoundRect(x, y, canvas) { }    virtual bool isAllowedOnTop(Card *card) {	Q_UNUSED(card);	// Need to check it is from the faceUpDealingPile	return TRUE;    }    virtual bool isAllowedToBeMoved(Card *card) {	Q_UNUSED(card);	//if ( ( !card->isFacing() ) && ( card == cardOnTop() ) )	if ( card == cardOnTop() )	    return TRUE;        return FALSE;	    }};class PatienceFaceUpDeck : public CardPile, public CanvasRoundRect{public:    PatienceFaceUpDeck(int x, int y, QCanvas *canvas)        : CardPile(x, y), CanvasRoundRect(x, y, canvas) { }    virtual bool isAllowedOnTop(Card *card) {	Q_UNUSED(card);	// Need to check it is from the faceDownDealingPile	return TRUE;    }    virtual bool isAllowedToBeMoved(Card *card) {	Q_UNUSED(card);	//if ( ( card->isFacing() ) && ( card == cardOnTop() ) )	if ( card == cardOnTop() )	    return TRUE;        return FALSE;	    }};class PatienceDiscardPile : public CardPile, public CanvasRoundRect{public:    PatienceDiscardPile(int x, int y, QCanvas *canvas)        : CardPile(x, y), CanvasRoundRect(x, y, canvas) { }    virtual bool isAllowedOnTop(Card *card) {	if ( card->isFacing() && ( card->getCardPile()->cardInfront(card) == NULL ) &&	   ( ( ( cardOnTop() == NULL ) && ( card->getValue() == ace ) ) ||	     ( ( cardOnTop() != NULL ) &&//#define CHEAT_TEST_MODE#ifndef CHEAT_TEST_MODE	       ( (int)card->getValue() == (int)cardOnTop()->getValue() + 1 ) &&#endif	       ( card->getSuit() == cardOnTop()->getSuit() ) ) ) )	    return TRUE;        return FALSE;	    }    virtual bool isAllowedToBeMoved(Card *card) {	if ( card->isFacing() && ( card == cardOnTop() ) )	    return TRUE;        return FALSE;	    }};class PatienceWorkingPile : public CardPile, public CanvasRoundRect{public:    PatienceWorkingPile(int x, int y, QCanvas *canvas)        : CardPile(x, y), CanvasRoundRect(x, y, canvas), top(x, y) { }    virtual bool isAllowedOnTop(Card *card) {	if ( card->isFacing() &&	     ( ( ( cardOnTop() == NULL ) && (card->getValue() == king) ) ||	       ( ( cardOnTop() != NULL ) &&#ifndef CHEAT_TEST_MODE 	         ( (int)card->getValue() + 1 == (int)cardOnTop()->getValue() ) &&#endif	         ( card->isRed() != cardOnTop()->isRed() ) ) ) )	    return TRUE;        return FALSE;	    }    virtual bool isAllowedToBeMoved(Card *card) {	if ( card->isFacing() )	    return TRUE;        return FALSE;	    }    virtual void cardAddedToTop(Card *card) {	Q_UNUSED(card);	top = getCardPos(NULL);	setNextX( top.x() );	setNextY( top.y() );    }    virtual void cardRemoved(Card *card) {	Q_UNUSED(card);	Card *newTopCard = cardOnTop();	if ( !newTopCard ) {	    top = QPoint( pileX, pileY );	    setNextX( pileX );    	    setNextY( pileY );	    return;	} else {	    top = getCardPos(NULL);	    if ( newTopCard->isFacing() == FALSE ) {		int offsetDown = CardMetrics::offsetDown();		// correct the position taking in to account the card is not    		// yet flipped, but will become flipped    		top = QPoint( top.x() - 1, top.y() - 3 );		((CanvasCard*)newTopCard)->flipTo( top.x(), top.y(), 400 );		top = QPoint( top.x(), top.y() + offsetDown );	    }    	    setNextX( top.x() );	    setNextY( top.y() );	}    }    virtual QPoint getCardPos(Card *c) {	int x = pileX, y = pileY;	Card *card = cardOnBottom();	while ((card != c) && (card != NULL)) {	    if (card->isFacing()) {		int offsetDown = CardMetrics::offsetDown();		y += offsetDown; 	    } else {		x += 1;    		y += 3;	    }	    card = cardInfront(card); 	}	return QPoint( x, y );    }    virtual QPoint getHypertheticalNextCardPos(void) {	return top;	// return QPoint( getNextX(), getNextY() );    }private:    QPoint top;};class PatienceCardGame : public CanvasCardGame{public:    PatienceCardGame(QCanvas *c, bool snap, QWidget *parent = 0);    virtual ~PatienceCardGame();    virtual void deal(void);    virtual bool haveWeWon() { 	return ( discardPiles[0]->kingOnTop() &&		 discardPiles[1]->kingOnTop() &&		 discardPiles[2]->kingOnTop() &&		 discardPiles[3]->kingOnTop() );;    }    virtual void mousePress(QPoint p);    virtual void mouseRelease(QPoint p) { Q_UNUSED(p); }//    virtual void mouseMove(QPoint p);    virtual bool mousePressCard(Card *card, QPoint p);    virtual void mouseReleaseCard(Card *card, QPoint p) { Q_UNUSED(card); Q_UNUSED(p); }//    virtual void mouseMoveCard(Card *card, QPoint p) { Q_UNUSED(card); Q_UNUSED(p); }    bool canTurnOverDeck(void) { return (numberOfTimesThroughDeck != 3); }    void throughDeck(void) {	numberOfTimesThroughDeck++;	if (numberOfTimesThroughDeck == 3)    	    circleCross->setCross();    }    bool snapOn;    virtual void writeConfig( Config& cfg );    virtual void readConfig( Config& cfg );private:    CanvasCircleOrCross *circleCross;    CanvasRoundRect *rectangle;    PatienceWorkingPile *workingPiles[7];    PatienceDiscardPile *discardPiles[4];    PatienceFaceDownDeck *faceDownDealingPile;    PatienceFaceUpDeck *faceUpDealingPile;    int numberOfTimesThroughDeck;};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -