summaryrefslogtreecommitdiff
authorzecke <zecke>2004-10-15 01:48:45 (UTC)
committer zecke <zecke>2004-10-15 01:48:45 (UTC)
commitfefeafe35f8dac30f4baab9e3bff8e2ffbd1afd0 (patch) (unidiff)
treea59a3bd9b5434657ee014dd6bbf7fbb50f5994d0
parent85ab1a8cc3935538cc1f33fef7c94ba31accb53e (diff)
downloadopie-fefeafe35f8dac30f4baab9e3bff8e2ffbd1afd0.zip
opie-fefeafe35f8dac30f4baab9e3bff8e2ffbd1afd0.tar.gz
opie-fefeafe35f8dac30f4baab9e3bff8e2ffbd1afd0.tar.bz2
Fix #1450 to clear the 'bonus' for removing every stone in the game
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/games/zsame/StoneField.cpp4
-rw-r--r--noncore/games/zsame/StoneField.h3
-rw-r--r--noncore/games/zsame/StoneWidget.cpp4
-rw-r--r--noncore/games/zsame/StoneWidget.h1
-rw-r--r--noncore/games/zsame/ZSameWidget.cpp1
5 files changed, 12 insertions, 1 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
351bool StoneField::gotBonus() const { 351bool StoneField::gotBonus() const {
352 return m_gotBonus; 352 return m_gotBonus;
353} 353}
354 354
355void StoneField::clearBonus() {
356 m_gotBonus = false;
357}
358
355int 359int
356StoneField::getBoard() const { 360StoneField::getBoard() const {
357 return board; 361 return board;
358} 362}
359 363
360int 364int
361StoneField::getScore() const { 365StoneField::getScore() const {
362 return score; 366 return score;
363} 367}
364 368
365int 369int
366StoneField::getColors() const { 370StoneField::getColors() const {
367 return colors; 371 return colors;
368} 372}
369 373
370int 374int
371StoneField::getMarked() const { 375StoneField::getMarked() const {
372 return marked; 376 return marked;
373} 377}
374 378
375int 379int
376StoneField::getFieldSize() const { 380StoneField::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
@@ -70,44 +70,45 @@ private:
70 70
71 KRandomSequence random; 71 KRandomSequence random;
72 QList<StoneFieldState> *undolist; 72 QList<StoneFieldState> *undolist;
73public: 73public:
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
102protected: 103protected:
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
180bool StoneWidget::isGameover() { 180bool StoneWidget::isGameover() {
181 return stonefield.isGameover(); 181 return stonefield.isGameover();
182} 182}
183 183
184bool StoneWidget::hasBonus() { 184bool 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
188void StoneWidget::clearBonus() {
189 stonefield.clearBonus();
190}
191
188bool StoneWidget::isOriginalBoard() { 192bool StoneWidget::isOriginalBoard() {
189 return !modified; 193 return !modified;
190} 194}
191 195
192void StoneWidget::readProperties(Config *) { 196void 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
52public: 52public:
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
80protected: 81protected:
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
92signals: 93signals:
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
200void ZSameWidget::setMarked(int ) { 200void 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
204void ZSameWidget::stonesRemoved(int,int) { 204void 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
209void ZSameWidget::setScore(int ) { 209void 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
215void ZSameWidget::gameover() { 215void 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
229void ZSameWidget::desktop_widget(int *f)const{ 230void 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