author | zecke <zecke> | 2004-10-15 01:48:45 (UTC) |
---|---|---|
committer | zecke <zecke> | 2004-10-15 01:48:45 (UTC) |
commit | fefeafe35f8dac30f4baab9e3bff8e2ffbd1afd0 (patch) (unidiff) | |
tree | a59a3bd9b5434657ee014dd6bbf7fbb50f5994d0 | |
parent | 85ab1a8cc3935538cc1f33fef7c94ba31accb53e (diff) | |
download | opie-fefeafe35f8dac30f4baab9e3bff8e2ffbd1afd0.zip opie-fefeafe35f8dac30f4baab9e3bff8e2ffbd1afd0.tar.gz opie-fefeafe35f8dac30f4baab9e3bff8e2ffbd1afd0.tar.bz2 |
Fix #1450 to clear the 'bonus' for removing every stone in the game
-rw-r--r-- | noncore/games/zsame/StoneField.cpp | 4 | ||||
-rw-r--r-- | noncore/games/zsame/StoneField.h | 1 | ||||
-rw-r--r-- | noncore/games/zsame/StoneWidget.cpp | 4 | ||||
-rw-r--r-- | noncore/games/zsame/StoneWidget.h | 1 | ||||
-rw-r--r-- | noncore/games/zsame/ZSameWidget.cpp | 1 |
5 files changed, 11 insertions, 0 deletions
diff --git a/noncore/games/zsame/StoneField.cpp b/noncore/games/zsame/StoneField.cpp index 49d8eca..56e9dc5 100644 --- a/noncore/games/zsame/StoneField.cpp +++ b/noncore/games/zsame/StoneField.cpp | |||
@@ -331,48 +331,52 @@ StoneField::isGameover() const { | |||
331 | // ignore empty fields | 331 | // ignore empty fields |
332 | while ( i>=0 && field[i].color==0 ) i--; | 332 | while ( i>=0 && field[i].color==0 ) i--; |
333 | // Wenn Stein gefunden, | 333 | // Wenn Stein gefunden, |
334 | // dann die Nachbarn auf gleiche Farbe pruefen. | 334 | // dann die Nachbarn auf gleiche Farbe pruefen. |
335 | while ( i>=0 && (color=field[i].color) ) { | 335 | while ( i>=0 && (color=field[i].color) ) { |
336 | // check left | 336 | // check left |
337 | if ( (i%sizex)!=0 && field[i-1].color==color) | 337 | if ( (i%sizex)!=0 && field[i-1].color==color) |
338 | goto check_gameover; | 338 | goto check_gameover; |
339 | // check upward | 339 | // check upward |
340 | if ( i>=sizex && field[i-sizex].color==color) | 340 | if ( i>=sizex && field[i-sizex].color==color) |
341 | goto check_gameover; | 341 | goto check_gameover; |
342 | i--; | 342 | i--; |
343 | } | 343 | } |
344 | } | 344 | } |
345 | check_gameover: | 345 | check_gameover: |
346 | gameover=(i<0); | 346 | gameover=(i<0); |
347 | // kdDebug() << "<--gameover" << endl; | 347 | // kdDebug() << "<--gameover" << endl; |
348 | return (bool)gameover; | 348 | return (bool)gameover; |
349 | } | 349 | } |
350 | 350 | ||
351 | bool StoneField::gotBonus() const { | 351 | bool StoneField::gotBonus() const { |
352 | return m_gotBonus; | 352 | return m_gotBonus; |
353 | } | 353 | } |
354 | 354 | ||
355 | void StoneField::clearBonus() { | ||
356 | m_gotBonus = false; | ||
357 | } | ||
358 | |||
355 | int | 359 | int |
356 | StoneField::getBoard() const { | 360 | StoneField::getBoard() const { |
357 | return board; | 361 | return board; |
358 | } | 362 | } |
359 | 363 | ||
360 | int | 364 | int |
361 | StoneField::getScore() const { | 365 | StoneField::getScore() const { |
362 | return score; | 366 | return score; |
363 | } | 367 | } |
364 | 368 | ||
365 | int | 369 | int |
366 | StoneField::getColors() const { | 370 | StoneField::getColors() const { |
367 | return colors; | 371 | return colors; |
368 | } | 372 | } |
369 | 373 | ||
370 | int | 374 | int |
371 | StoneField::getMarked() const { | 375 | StoneField::getMarked() const { |
372 | return marked; | 376 | return marked; |
373 | } | 377 | } |
374 | 378 | ||
375 | int | 379 | int |
376 | StoneField::getFieldSize() const { | 380 | StoneField::getFieldSize() const { |
377 | return maxstone; | 381 | return maxstone; |
378 | } | 382 | } |
diff --git a/noncore/games/zsame/StoneField.h b/noncore/games/zsame/StoneField.h index 80be73a..d32d78d 100644 --- a/noncore/games/zsame/StoneField.h +++ b/noncore/games/zsame/StoneField.h | |||
@@ -72,42 +72,43 @@ private: | |||
72 | QList<StoneFieldState> *undolist; | 72 | QList<StoneFieldState> *undolist; |
73 | public: | 73 | public: |
74 | StoneField(int width=15,int height=10, | 74 | StoneField(int width=15,int height=10, |
75 | int colors=3,unsigned int board=0, | 75 | int colors=3,unsigned int board=0, |
76 | bool undoenabled=true); | 76 | bool undoenabled=true); |
77 | ~StoneField(); | 77 | ~StoneField(); |
78 | 78 | ||
79 | int width() const; | 79 | int width() const; |
80 | int height() const; | 80 | int height() const; |
81 | 81 | ||
82 | void newGame(unsigned int board,int colors); | 82 | void newGame(unsigned int board,int colors); |
83 | 83 | ||
84 | void reset(); | 84 | void reset(); |
85 | 85 | ||
86 | 86 | ||
87 | int mark(int x,int y,bool force=false); | 87 | int mark(int x,int y,bool force=false); |
88 | void unmark(); | 88 | void unmark(); |
89 | 89 | ||
90 | int remove(int x,int y,bool force=false); | 90 | int remove(int x,int y,bool force=false); |
91 | 91 | ||
92 | int undo(int count=1); | 92 | int undo(int count=1); |
93 | 93 | ||
94 | bool isGameover() const; | 94 | bool isGameover() const; |
95 | bool gotBonus() const; | 95 | bool gotBonus() const; |
96 | void clearBonus(); | ||
96 | bool undoPossible() const; | 97 | bool undoPossible() const; |
97 | int getBoard() const; | 98 | int getBoard() const; |
98 | int getScore() const; | 99 | int getScore() const; |
99 | int getColors() const; | 100 | int getColors() const; |
100 | int getMarked() const; | 101 | int getMarked() const; |
101 | 102 | ||
102 | protected: | 103 | protected: |
103 | int getFieldSize() const; | 104 | int getFieldSize() const; |
104 | struct Stone *getField() const; | 105 | struct Stone *getField() const; |
105 | 106 | ||
106 | int map(int x,int y); | 107 | int map(int x,int y); |
107 | void mark(int index,unsigned char color); | 108 | void mark(int index,unsigned char color); |
108 | }; | 109 | }; |
109 | 110 | ||
110 | #endif | 111 | #endif |
111 | 112 | ||
112 | 113 | ||
113 | 114 | ||
diff --git a/noncore/games/zsame/StoneWidget.cpp b/noncore/games/zsame/StoneWidget.cpp index 646fc9c..5dd0252 100644 --- a/noncore/games/zsame/StoneWidget.cpp +++ b/noncore/games/zsame/StoneWidget.cpp | |||
@@ -164,48 +164,52 @@ StoneWidget::undo(int count) { | |||
164 | QPoint p=mapFromGlobal(cursor().pos()); | 164 | QPoint p=mapFromGlobal(cursor().pos()); |
165 | int x=p.x(); | 165 | int x=p.x(); |
166 | int y=p.y(); | 166 | int y=p.y(); |
167 | if (x<0||y<0||x>=field_width||y>=field_height) { | 167 | if (x<0||y<0||x>=field_width||y>=field_height) { |
168 | emit s_score(stonefield.getMarked()); | 168 | emit s_score(stonefield.getMarked()); |
169 | return ret_val; | 169 | return ret_val; |
170 | } | 170 | } |
171 | 171 | ||
172 | int marked=stonefield.mark(x/stone_width,y/stone_height); | 172 | int marked=stonefield.mark(x/stone_width,y/stone_height); |
173 | emit s_marked(marked); | 173 | emit s_marked(marked); |
174 | slice=0; | 174 | slice=0; |
175 | emit s_score(stonefield.getScore()); | 175 | emit s_score(stonefield.getScore()); |
176 | modified= (stonefield.getScore()>0); | 176 | modified= (stonefield.getScore()>0); |
177 | return ret_val; | 177 | return ret_val; |
178 | } | 178 | } |
179 | 179 | ||
180 | bool StoneWidget::isGameover() { | 180 | bool StoneWidget::isGameover() { |
181 | return stonefield.isGameover(); | 181 | return stonefield.isGameover(); |
182 | } | 182 | } |
183 | 183 | ||
184 | bool StoneWidget::hasBonus() { | 184 | bool StoneWidget::hasBonus() { |
185 | return stonefield.gotBonus(); // don't ask me why the names differ... ;-| [hlm] | 185 | return stonefield.gotBonus(); // don't ask me why the names differ... ;-| [hlm] |
186 | } | 186 | } |
187 | 187 | ||
188 | void StoneWidget::clearBonus() { | ||
189 | stonefield.clearBonus(); | ||
190 | } | ||
191 | |||
188 | bool StoneWidget::isOriginalBoard() { | 192 | bool StoneWidget::isOriginalBoard() { |
189 | return !modified; | 193 | return !modified; |
190 | } | 194 | } |
191 | 195 | ||
192 | void StoneWidget::readProperties(Config *) { | 196 | void StoneWidget::readProperties(Config *) { |
193 | /* Q_ASSERT(conf); | 197 | /* Q_ASSERT(conf); |
194 | 198 | ||
195 | history.clear(); | 199 | history.clear(); |
196 | 200 | ||
197 | if (!conf->hasKey("Board")|| | 201 | if (!conf->hasKey("Board")|| |
198 | !conf->hasKey("Colors")|| | 202 | !conf->hasKey("Colors")|| |
199 | !conf->hasKey("Stones")) { | 203 | !conf->hasKey("Stones")) { |
200 | return; | 204 | return; |
201 | } | 205 | } |
202 | newGame(conf->readNumEntry("Board"),conf->readNumEntry("Colors")); | 206 | newGame(conf->readNumEntry("Board"),conf->readNumEntry("Colors")); |
203 | 207 | ||
204 | QStrList list; | 208 | QStrList list; |
205 | conf->readListEntry("Stones",list); | 209 | conf->readListEntry("Stones",list); |
206 | 210 | ||
207 | for (const char *item=list.first();item;item=list.next()) { | 211 | for (const char *item=list.first();item;item=list.next()) { |
208 | int x=-1,y=-1; | 212 | int x=-1,y=-1; |
209 | if (sscanf(item,"%02X%02X",&x,&y)!=2) break; | 213 | if (sscanf(item,"%02X%02X",&x,&y)!=2) break; |
210 | history.append(new QPoint(x,y)); | 214 | history.append(new QPoint(x,y)); |
211 | stonefield.remove(x,y); | 215 | stonefield.remove(x,y); |
diff --git a/noncore/games/zsame/StoneWidget.h b/noncore/games/zsame/StoneWidget.h index 9cd7e10..89a8afc 100644 --- a/noncore/games/zsame/StoneWidget.h +++ b/noncore/games/zsame/StoneWidget.h | |||
@@ -50,48 +50,49 @@ class StoneWidget : public QWidget { | |||
50 | StoneSlice **map; | 50 | StoneSlice **map; |
51 | 51 | ||
52 | public: | 52 | public: |
53 | StoneWidget( QWidget *parent=0, int x=10,int y=10); | 53 | StoneWidget( QWidget *parent=0, int x=10,int y=10); |
54 | ~StoneWidget(); | 54 | ~StoneWidget(); |
55 | 55 | ||
56 | unsigned int board(); | 56 | unsigned int board(); |
57 | int score(); | 57 | int score(); |
58 | int marked(); | 58 | int marked(); |
59 | QSize size(); | 59 | QSize size(); |
60 | int colors(); | 60 | int colors(); |
61 | virtual QSize sizeHint() const; | 61 | virtual QSize sizeHint() const; |
62 | 62 | ||
63 | bool undoPossible() const; | 63 | bool undoPossible() const; |
64 | 64 | ||
65 | void newGame(unsigned int board, int colors); | 65 | void newGame(unsigned int board, int colors); |
66 | void reset(); | 66 | void reset(); |
67 | void unmark(); | 67 | void unmark(); |
68 | int undo(int count=1); | 68 | int undo(int count=1); |
69 | 69 | ||
70 | // test for game end | 70 | // test for game end |
71 | bool isGameover(); | 71 | bool isGameover(); |
72 | // if isGameover(): finished with bonus? | 72 | // if isGameover(): finished with bonus? |
73 | bool hasBonus(); | 73 | bool hasBonus(); |
74 | void clearBonus(); | ||
74 | // test for unchanged start position | 75 | // test for unchanged start position |
75 | bool isOriginalBoard(); | 76 | bool isOriginalBoard(); |
76 | 77 | ||
77 | virtual void readProperties(Config *conf); | 78 | virtual void readProperties(Config *conf); |
78 | virtual void saveProperties(Config *conf); | 79 | virtual void saveProperties(Config *conf); |
79 | 80 | ||
80 | protected: | 81 | protected: |
81 | 82 | ||
82 | void timerEvent( QTimerEvent *e ); | 83 | void timerEvent( QTimerEvent *e ); |
83 | void paintEvent( QPaintEvent *e ); | 84 | void paintEvent( QPaintEvent *e ); |
84 | void mousePressEvent ( QMouseEvent *e); | 85 | void mousePressEvent ( QMouseEvent *e); |
85 | void myMoveEvent ( QMouseEvent *e); | 86 | void myMoveEvent ( QMouseEvent *e); |
86 | 87 | ||
87 | // properties of the stone picture | 88 | // properties of the stone picture |
88 | int stone_width,stone_height; // size of one stone | 89 | int stone_width,stone_height; // size of one stone |
89 | int maxcolors; // number of different stones (Y direction) | 90 | int maxcolors; // number of different stones (Y direction) |
90 | int maxslices; // number of pictures per movie (X direction) | 91 | int maxslices; // number of pictures per movie (X direction) |
91 | 92 | ||
92 | signals: | 93 | signals: |
93 | // A new game begins | 94 | // A new game begins |
94 | void s_newgame(); | 95 | void s_newgame(); |
95 | 96 | ||
96 | void s_colors(int colors); | 97 | void s_colors(int colors); |
97 | void s_board(int board); | 98 | void s_board(int board); |
diff --git a/noncore/games/zsame/ZSameWidget.cpp b/noncore/games/zsame/ZSameWidget.cpp index 04ad825..dee4a1c 100644 --- a/noncore/games/zsame/ZSameWidget.cpp +++ b/noncore/games/zsame/ZSameWidget.cpp | |||
@@ -197,48 +197,49 @@ void ZSameWidget::setBoard(int ) { | |||
197 | //status->changeItem(i18n("Board: %1").arg(board, 6), 2); | 197 | //status->changeItem(i18n("Board: %1").arg(board, 6), 2); |
198 | } | 198 | } |
199 | 199 | ||
200 | void ZSameWidget::setMarked(int ) { | 200 | void ZSameWidget::setMarked(int ) { |
201 | // status->changeItem(i18n("Marked: %1").arg(m, 6),3); | 201 | // status->changeItem(i18n("Marked: %1").arg(m, 6),3); |
202 | } | 202 | } |
203 | 203 | ||
204 | void ZSameWidget::stonesRemoved(int,int) { | 204 | void ZSameWidget::stonesRemoved(int,int) { |
205 | //KNotifyClient::event("stones removed", | 205 | //KNotifyClient::event("stones removed", |
206 | // i18n("%1 stones removed.").arg(stone->marked())); | 206 | // i18n("%1 stones removed.").arg(stone->marked())); |
207 | } | 207 | } |
208 | 208 | ||
209 | void ZSameWidget::setScore(int ) { | 209 | void ZSameWidget::setScore(int ) { |
210 | // status->changeItem(i18n("Score: %1").arg(score, 6),4); | 210 | // status->changeItem(i18n("Score: %1").arg(score, 6),4); |
211 | // undo->setEnabled(stone->undoPossible()); | 211 | // undo->setEnabled(stone->undoPossible()); |
212 | // restart->setEnabled(!stone->isOriginalBoard()); | 212 | // restart->setEnabled(!stone->isOriginalBoard()); |
213 | } | 213 | } |
214 | 214 | ||
215 | void ZSameWidget::gameover() { | 215 | void ZSameWidget::gameover() { |
216 | // kdDebug() << "GameOver" << endl; | 216 | // kdDebug() << "GameOver" << endl; |
217 | if (stone->hasBonus()) { | 217 | if (stone->hasBonus()) { |
218 | QMessageBox::information(this,i18n("Game won"), | 218 | QMessageBox::information(this,i18n("Game won"), |
219 | i18n("<qt>You even removed the last stone, great job! " | 219 | i18n("<qt>You even removed the last stone, great job! " |
220 | "This gave you a score of %1 in total.</qt>").arg(stone->score())); | 220 | "This gave you a score of %1 in total.</qt>").arg(stone->score())); |
221 | stone->clearBonus(); | ||
221 | } else { | 222 | } else { |
222 | QMessageBox::information(this,i18n("Game over"), | 223 | QMessageBox::information(this,i18n("Game over"), |
223 | i18n("<qt>There are no more removeable stones. " | 224 | i18n("<qt>There are no more removeable stones. " |
224 | "You got a score of %1 in total.</qt>").arg(stone->score())); | 225 | "You got a score of %1 in total.</qt>").arg(stone->score())); |
225 | } | 226 | } |
226 | stone->unmark(); | 227 | stone->unmark(); |
227 | } | 228 | } |
228 | 229 | ||
229 | void ZSameWidget::desktop_widget(int *f)const{ | 230 | void ZSameWidget::desktop_widget(int *f)const{ |
230 | 231 | ||
231 | QWidget* wid = QApplication::desktop(); | 232 | QWidget* wid = QApplication::desktop(); |
232 | /* width > height landscape mode */ | 233 | /* width > height landscape mode */ |
233 | if ( wid->width() > wid->height() ) { | 234 | if ( wid->width() > wid->height() ) { |
234 | f[0]=15; | 235 | f[0]=15; |
235 | f[1]=9; | 236 | f[1]=9; |
236 | } | 237 | } |
237 | /* normal */ | 238 | /* normal */ |
238 | else{ | 239 | else{ |
239 | f[0]=12; | 240 | f[0]=12; |
240 | f[1]=13; | 241 | f[1]=13; |
241 | } | 242 | } |
242 | } | 243 | } |
243 | 244 | ||
244 | 245 | ||