summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/games/solitaire/patiencecardgame.cpp66
1 files changed, 44 insertions, 22 deletions
diff --git a/noncore/games/solitaire/patiencecardgame.cpp b/noncore/games/solitaire/patiencecardgame.cpp
index 1b38072..96a599c 100644
--- a/noncore/games/solitaire/patiencecardgame.cpp
+++ b/noncore/games/solitaire/patiencecardgame.cpp
@@ -26,35 +26,42 @@ int highestZ = 0;
26 26
27PatienceCardGame::PatienceCardGame(QCanvas *c, bool snap, QWidget *parent) : CanvasCardGame(*c, snap, parent) 27PatienceCardGame::PatienceCardGame(QCanvas *c, bool snap, QWidget *parent) : CanvasCardGame(*c, snap, parent)
28{ 28{
29 numberOfTimesThroughDeck = 0; 29 numberOfTimesThroughDeck = 0;
30 highestZ = 0; 30 highestZ = 0;
31 31
32 if ( qt_screen->deviceWidth() < 200 ) { 32 if ( qt_screen->deviceWidth() < 200 )
33 {
33 circleCross = new CanvasCircleOrCross( 7, 16, canvas() ); 34 circleCross = new CanvasCircleOrCross( 7, 16, canvas() );
34 rectangle = new CanvasRoundRect( 30, 10, canvas() ); 35 rectangle = new CanvasRoundRect( 30, 10, canvas() );
35 36
36 for (int i = 0; i < 4; i++) { 37 for (int i = 0; i < 4; i++)
38 {
37 discardPiles[i] = new PatienceDiscardPile( 78 + i * 23, 10, canvas() ); 39 discardPiles[i] = new PatienceDiscardPile( 78 + i * 23, 10, canvas() );
38 addCardPile(discardPiles[i]); 40 addCardPile(discardPiles[i]);
39 } 41 }
40 for (int i = 0; i < 7; i++) { 42 for (int i = 0; i < 7; i++)
43 {
41 workingPiles[i] = new PatienceWorkingPile( 5 + i * 23, 50, canvas() ); 44 workingPiles[i] = new PatienceWorkingPile( 5 + i * 23, 50, canvas() );
42 addCardPile(workingPiles[i]); 45 addCardPile(workingPiles[i]);
43 } 46 }
44 faceDownDealingPile = new PatienceFaceDownDeck( 5, 10, canvas() ); 47 faceDownDealingPile = new PatienceFaceDownDeck( 5, 10, canvas() );
45 faceUpDealingPile = new PatienceFaceUpDeck( 30, 10, canvas() ); 48 faceUpDealingPile = new PatienceFaceUpDeck( 30, 10, canvas() );
46 } else { 49 }
50 else
51 {
47 circleCross = new CanvasCircleOrCross( 7, 18, canvas() ); 52 circleCross = new CanvasCircleOrCross( 7, 18, canvas() );
48 rectangle = new CanvasRoundRect( 35, 10, canvas() ); 53 rectangle = new CanvasRoundRect( 35, 10, canvas() );
49 54
50 for (int i = 0; i < 4; i++) { 55 for (int i = 0; i < 4; i++)
56 {
51 discardPiles[i] = new PatienceDiscardPile( 110 + i * 30, 10, canvas() ); 57 discardPiles[i] = new PatienceDiscardPile( 110 + i * 30, 10, canvas() );
52 addCardPile(discardPiles[i]); 58 addCardPile(discardPiles[i]);
53 } 59 }
54 for (int i = 0; i < 7; i++) { 60 for (int i = 0; i < 7; i++)
61 {
55 workingPiles[i] = new PatienceWorkingPile( 10 + i * 30, 50, canvas() ); 62 workingPiles[i] = new PatienceWorkingPile( 10 + i * 30, 50, canvas() );
56 addCardPile(workingPiles[i]); 63 addCardPile(workingPiles[i]);
57 } 64 }
58 faceDownDealingPile = new PatienceFaceDownDeck( 5, 10, canvas() ); 65 faceDownDealingPile = new PatienceFaceDownDeck( 5, 10, canvas() );
59 faceUpDealingPile = new PatienceFaceUpDeck( 35, 10, canvas() ); 66 faceUpDealingPile = new PatienceFaceUpDeck( 35, 10, canvas() );
60 } 67 }
@@ -74,26 +81,29 @@ void PatienceCardGame::deal(void)
74{ 81{
75 highestZ = 1; 82 highestZ = 1;
76 int t = 0; 83 int t = 0;
77 84
78 beginDealing(); 85 beginDealing();
79 86
80 for (int i = 0; i < 7; i++) { 87 for (int i = 0; i < 7; i++)
88 {
81 cards[t]->setFace(TRUE); 89 cards[t]->setFace(TRUE);
82 for (int k = i; k < 7; k++, t++) { 90 for (int k = i; k < 7; k++, t++)
91 {
83 Card *card = cards[t]; 92 Card *card = cards[t];
84 workingPiles[k]->addCardToTop(card); 93 workingPiles[k]->addCardToTop(card);
85 card->setCardPile( workingPiles[k] ); 94 card->setCardPile( workingPiles[k] );
86 QPoint p = workingPiles[k]->getCardPos( card ); 95 QPoint p = workingPiles[k]->getCardPos( card );
87 card->setPos( p.x(), p.y(), highestZ ); 96 card->setPos( p.x(), p.y(), highestZ );
88 card->showCard(); 97 card->showCard();
89 highestZ++; 98 highestZ++;
90 } 99 }
91 } 100 }
92 101
93 for ( ; t < 52; t++) { 102 for ( ; t < 52; t++)
103 {
94 Card *card = cards[t]; 104 Card *card = cards[t];
95 faceDownDealingPile->addCardToTop(card); 105 faceDownDealingPile->addCardToTop(card);
96 card->setCardPile( faceDownDealingPile ); 106 card->setCardPile( faceDownDealingPile );
97 QPoint p = faceDownDealingPile->getCardPos( card ); 107 QPoint p = faceDownDealingPile->getCardPos( card );
98 card->setPos( p.x(), p.y(), highestZ ); 108 card->setPos( p.x(), p.y(), highestZ );
99 card->showCard(); 109 card->showCard();
@@ -106,43 +116,46 @@ void PatienceCardGame::deal(void)
106 116
107void PatienceCardGame::readConfig( Config& cfg ) 117void PatienceCardGame::readConfig( Config& cfg )
108{ 118{
109 cfg.setGroup("GameState"); 119 cfg.setGroup("GameState");
110 120
111 // Do we have a config file to read in? 121 // Do we have a config file to read in?
112 if ( !cfg.hasKey("numberOfTimesThroughDeck") ) { 122 if ( !cfg.hasKey("numberOfTimesThroughDeck") )
123 {
113 // if not, create a new game 124 // if not, create a new game
114 newGame(); 125 newGame();
115 return; 126 return;
116 } 127 }
117 // We have a config file, lets read it in and use it 128 // We have a config file, lets read it in and use it
118 129
119 // Create Cards, but don't shuffle or deal them yet 130 // Create Cards, but don't shuffle or deal them yet
120 createDeck(); 131 createDeck();
121 132
122 // How many times through the deck have we been 133 // How many times through the deck have we been
123 numberOfTimesThroughDeck = cfg.readNumEntry("NumberOfTimesThroughDeck"); 134 numberOfTimesThroughDeck = cfg.readNumEntry("numberOfTimesThroughDeck");
124 135
125 // restore state to the circle/cross under the dealing pile 136 // restore state to the circle/cross under the dealing pile
126 if ( canTurnOverDeck() ) 137 if ( canTurnOverDeck() )
127 circleCross->setCircle(); 138 circleCross->setCircle();
128 else 139 else
129 circleCross->setCross(); 140 circleCross->setCross();
130 141
131 // Move the cards to their piles (deal them to their previous places) 142 // Move the cards to their piles (deal them to their previous places)
132 beginDealing(); 143 beginDealing();
133 144
134 highestZ = 1; 145 highestZ = 1;
135 146
136 for (int k = 0; k < 7; k++) { 147 for (int k = 0; k < 7; k++)
148 {
137 QString pile; 149 QString pile;
138 pile.sprintf( "WorkingPile%i", k ); 150 pile.sprintf( "WorkingPile%i", k );
139 readPile( cfg, workingPiles[k], pile, highestZ ); 151 readPile( cfg, workingPiles[k], pile, highestZ );
140 } 152 }
141 153
142 for (int k = 0; k < 4; k++) { 154 for (int k = 0; k < 4; k++)
155 {
143 QString pile; 156 QString pile;
144 pile.sprintf( "DiscardPile%i", k ); 157 pile.sprintf( "DiscardPile%i", k );
145 readPile( cfg, discardPiles[k], pile, highestZ ); 158 readPile( cfg, discardPiles[k], pile, highestZ );
146 } 159 }
147 160
148 readPile( cfg, faceDownDealingPile, "FaceDownDealingPile", highestZ ); 161 readPile( cfg, faceDownDealingPile, "FaceDownDealingPile", highestZ );
@@ -156,18 +169,20 @@ void PatienceCardGame::readConfig( Config& cfg )
156 169
157void PatienceCardGame::writeConfig( Config& cfg ) 170void PatienceCardGame::writeConfig( Config& cfg )
158{ 171{
159 cfg.setGroup("GameState"); 172 cfg.setGroup("GameState");
160 cfg.writeEntry("numberOfTimesThroughDeck", numberOfTimesThroughDeck); 173 cfg.writeEntry("numberOfTimesThroughDeck", numberOfTimesThroughDeck);
161 174
162 for ( int i = 0; i < 7; i++ ) { 175 for ( int i = 0; i < 7; i++ )
176 {
163 QString pile; 177 QString pile;
164 pile.sprintf( "WorkingPile%i", i ); 178 pile.sprintf( "WorkingPile%i", i );
165 workingPiles[i]->writeConfig( cfg, pile ); 179 workingPiles[i]->writeConfig( cfg, pile );
166 } 180 }
167 for ( int i = 0; i < 4; i++ ) { 181 for ( int i = 0; i < 4; i++ )
182 {
168 QString pile; 183 QString pile;
169 pile.sprintf( "DiscardPile%i", i ); 184 pile.sprintf( "DiscardPile%i", i );
170 discardPiles[i]->writeConfig( cfg, pile ); 185 discardPiles[i]->writeConfig( cfg, pile );
171 } 186 }
172 faceDownDealingPile->writeConfig( cfg, "FaceDownDealingPile" ); 187 faceDownDealingPile->writeConfig( cfg, "FaceDownDealingPile" );
173 faceUpDealingPile->writeConfig( cfg, "FaceUpDealingPile" ); 188 faceUpDealingPile->writeConfig( cfg, "FaceUpDealingPile" );
@@ -176,37 +191,42 @@ void PatienceCardGame::writeConfig( Config& cfg )
176 191
177bool PatienceCardGame::mousePressCard( Card *card, QPoint p ) 192bool PatienceCardGame::mousePressCard( Card *card, QPoint p )
178{ 193{
179 Q_UNUSED(p); 194 Q_UNUSED(p);
180 195
181 CanvasCard *item = (CanvasCard *)card; 196 CanvasCard *item = (CanvasCard *)card;
182 if (item->isFacing() != TRUE) { 197 if (item->isFacing() != TRUE)
198 {
183 // From facedown stack 199 // From facedown stack
184 if ((item->x() == 5) && ((int)item->y() == 10)) { 200 if ((item->x() == 5) && ((int)item->y() == 10))
201 {
185 item->setZ(highestZ); 202 item->setZ(highestZ);
186 highestZ++; 203 highestZ++;
187 204
188 // Added Code 205 // Added Code
189 faceDownDealingPile->removeCard(item); 206 faceDownDealingPile->removeCard(item);
190 faceUpDealingPile->addCardToTop(item); 207 faceUpDealingPile->addCardToTop(item);
191 item->setCardPile( faceUpDealingPile ); 208 item->setCardPile( faceUpDealingPile );
192 209
193 if ( qt_screen->deviceWidth() < 200 ) 210 if ( qt_screen->deviceWidth() < 200 )
194 item->flipTo( 30, (int)item->y() ); 211 item->flipTo( 30, (int)item->y() );
195 else 212 else
196 item->flipTo( 35, (int)item->y() ); 213 item->flipTo( 35, (int)item->y() );
197 } else return FALSE; // <- was missing, caused facedown card to react 214 }
215 else return FALSE; // <- was missing, caused facedown card to react
198 // to clicking, which is wrong 216 // to clicking, which is wrong
199 moving = NULL; 217 moving = NULL;
200 moved = FALSE; 218 moved = FALSE;
201 219
202 // move two other cards if we flip three at a time 220 // move two other cards if we flip three at a time
203 int flipped = 1; 221 int flipped = 1;
204 QCanvasItemList l = canvas()->collisions( p ); 222 QCanvasItemList l = canvas()->collisions( p );
205 for (QCanvasItemList::Iterator it = l.begin(); (it != l.end()) && (flipped != cardsDrawn()); ++it) { 223 for (QCanvasItemList::Iterator it = l.begin(); (it != l.end()) && (flipped != cardsDrawn()); ++it)
206 if ( (*it)->rtti() == canvasCardId ) { 224 {
225 if ( (*it)->rtti() == canvasCardId )
226 {
207 CanvasCard *item = (CanvasCard *)*it; 227 CanvasCard *item = (CanvasCard *)*it;
208 if (item->animated()) 228 if (item->animated())
209 continue; 229 continue;
210 item->setZ(highestZ); 230 item->setZ(highestZ);
211 highestZ++; 231 highestZ++;
212 flipped++; 232 flipped++;
@@ -231,17 +251,19 @@ bool PatienceCardGame::mousePressCard( Card *card, QPoint p )
231 251
232 252
233void PatienceCardGame::mousePress(QPoint p) 253void PatienceCardGame::mousePress(QPoint p)
234{ 254{
235 if ( canTurnOverDeck() && 255 if ( canTurnOverDeck() &&
236 (p.x() > 5) && (p.x() < 28) && 256 (p.x() > 5) && (p.x() < 28) &&
237 (p.y() > 10) && (p.y() < 46) ) { 257 (p.y() > 10) && (p.y() < 46) )
258 {
238 259
239 beginDealing(); 260 beginDealing();
240 Card *card = faceUpDealingPile->cardOnTop(); 261 Card *card = faceUpDealingPile->cardOnTop();
241 while ( card ) { 262 while ( card )
263 {
242 card->setPos( 5, 10, highestZ ); 264 card->setPos( 5, 10, highestZ );
243 card->setFace( FALSE ); 265 card->setFace( FALSE );
244 faceUpDealingPile->removeCard( card ); 266 faceUpDealingPile->removeCard( card );
245 faceDownDealingPile->addCardToTop( card ); 267 faceDownDealingPile->addCardToTop( card );
246 card->setCardPile( faceDownDealingPile ); 268 card->setCardPile( faceDownDealingPile );
247 card = faceUpDealingPile->cardOnTop(); 269 card = faceUpDealingPile->cardOnTop();