summaryrefslogtreecommitdiff
path: root/noncore/games/minesweep/minesweep.cpp
Unidiff
Diffstat (limited to 'noncore/games/minesweep/minesweep.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/games/minesweep/minesweep.cpp26
1 files changed, 14 insertions, 12 deletions
diff --git a/noncore/games/minesweep/minesweep.cpp b/noncore/games/minesweep/minesweep.cpp
index 48644b3..7214a73 100644
--- a/noncore/games/minesweep/minesweep.cpp
+++ b/noncore/games/minesweep/minesweep.cpp
@@ -1,87 +1,88 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qtopia Environment. 4** This file is part of Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20 20
21#include "minesweep.h" 21#include "minesweep.h"
22#include "minefield.h" 22#include "minefield.h"
23 23
24#include <qpe/qpeapplication.h>
24#include <qpe/resource.h> 25#include <qpe/resource.h>
25#include <qpe/config.h> 26#include <qpe/config.h>
26 27
27#include <qpe/qpetoolbar.h> 28#include <qpe/qpetoolbar.h>
28#include <qmenubar.h> 29#include <qmenubar.h>
29#include <qpopupmenu.h> 30#include <qpopupmenu.h>
30#include <qpushbutton.h> 31#include <qpushbutton.h>
31#include <qlcdnumber.h> 32#include <qlcdnumber.h>
32#include <qmessagebox.h> 33#include <qmessagebox.h>
33#include <qtimer.h> 34#include <qtimer.h>
34#include <qpalette.h> 35#include <qpalette.h>
35#include <qapplication.h> 36#include <qapplication.h>
36#include <qlayout.h> 37#include <qlayout.h>
37#include <qlabel.h> 38#include <qlabel.h>
38 39
39#include <stdlib.h> 40#include <stdlib.h>
40#include <time.h> 41#include <time.h>
41 42
42 43
43 44
44 45
45static const char *pix_new[]={ 46static const char *pix_new[]={
46"20 20 3 1", 47"20 20 3 1",
47" c None", 48" c None",
48"# c #00FF00", 49"# c #00FF00",
49". c #000000", 50". c #000000",
50" ", 51" ",
51" ...... ", 52" ...... ",
52" ..######.. ", 53" ..######.. ",
53" .##########. ", 54" .##########. ",
54" .############. ", 55" .############. ",
55" .##############. ", 56" .##############. ",
56" .##############. ", 57" .##############. ",
57" .################. ", 58" .################. ",
58" .################. ", 59" .################. ",
59" .################. ", 60" .################. ",
60" .################. ", 61" .################. ",
61" .################. ", 62" .################. ",
62" .################. ", 63" .################. ",
63" .##############. ", 64" .##############. ",
64" .##############. ", 65" .##############. ",
65" .############. ", 66" .############. ",
66" .##########. ", 67" .##########. ",
67" ..######.. ", 68" ..######.. ",
68" ...... ", 69" ...... ",
69" "}; 70" "};
70 71
71 72
72/* XPM */ 73/* XPM */
73static const char * happy_xpm[] = { 74static const char * happy_xpm[] = {
74"20 20 3 1", 75"20 20 3 1",
75 " c None", 76 " c None",
76 ".c #ffff3f ", 77 ".c #ffff3f ",
77 "#c #000000", 78 "#c #000000",
78" ", 79" ",
79" ###### ", 80" ###### ",
80" ##......## ", 81" ##......## ",
81" #..........# ", 82" #..........# ",
82" #............# ", 83" #............# ",
83" #..............# ", 84" #..............# ",
84" #..............# ", 85" #..............# ",
85" #....##....##....# ", 86" #....##....##....# ",
86" #....##....##....# ", 87" #....##....##....# ",
87" #................# ", 88" #................# ",
@@ -94,270 +95,271 @@ static const char * happy_xpm[] = {
94" #..........# ", 95" #..........# ",
95" ##......## ", 96" ##......## ",
96" ###### ", 97" ###### ",
97" "}; 98" "};
98 99
99 100
100/* XPM */ 101/* XPM */
101static const char * worried_xpm[] = { 102static const char * worried_xpm[] = {
102"20 20 3 1", 103"20 20 3 1",
103 " c None", 104 " c None",
104 ".c #ffff3f", 105 ".c #ffff3f",
105 "#c #000000", 106 "#c #000000",
106" ", 107" ",
107" ###### ", 108" ###### ",
108" ##......## ", 109" ##......## ",
109" #..........# ", 110" #..........# ",
110" #............# ", 111" #............# ",
111" #..............# ", 112" #..............# ",
112" #..............# ", 113" #..............# ",
113" #....##....##....# ", 114" #....##....##....# ",
114" #....##....##....# ", 115" #....##....##....# ",
115" #................# ", 116" #................# ",
116" #................# ", 117" #................# ",
117" #................# ", 118" #................# ",
118" #................# ", 119" #................# ",
119" #....######....# ", 120" #....######....# ",
120" #..............# ", 121" #..............# ",
121" #............# ", 122" #............# ",
122" #..........# ", 123" #..........# ",
123" ##......## ", 124" ##......## ",
124" ###### ", 125" ###### ",
125" "}; 126" "};
126 127
127 128
128/* XPM */ 129/* XPM */
129static const char * dead_xpm[] = { 130static const char * dead_xpm[] = {
130"20 20 3 1", 131"20 20 3 1",
131 " c None", 132 " c None",
132 ".c #ffff3f", 133 ".c #ffff3f",
133 "#c #000000", 134 "#c #000000",
134" ", 135" ",
135" ###### ", 136" ###### ",
136" ##......## ", 137" ##......## ",
137" #..........# ", 138" #..........# ",
138" #............# ", 139" #............# ",
139" #..............# ", 140" #..............# ",
140" #..#.#...#.#...# ", 141" #..#.#...#.#...# ",
141" #....#.....#.....# ", 142" #....#.....#.....# ",
142" #...#.#...#.#....# ", 143" #...#.#...#.#....# ",
143" #................# ", 144" #................# ",
144" #................# ", 145" #................# ",
145" #................# ", 146" #................# ",
146" #......####......# ", 147" #......####......# ",
147" #....# #....# ", 148" #....# #....# ",
148" #...#......#...# ", 149" #...#......#...# ",
149" #............# ", 150" #............# ",
150" #..........# ", 151" #..........# ",
151" ##......## ", 152" ##......## ",
152" ###### ", 153" ###### ",
153" "}; 154" "};
154 155
155 156
156class ResultIndicator : private QLabel 157class ResultIndicator : private QLabel
157{ 158{
158public: 159public:
159 static void showResult( QWidget *ref, bool won ); 160 static void showResult( QWidget *ref, bool won );
160private: 161private:
161 ResultIndicator( QWidget *parent, const char *name, WFlags f) 162 ResultIndicator( QWidget *parent, const char *name, WFlags f)
162 :QLabel( parent, name, f ) {} 163 :QLabel( parent, name, f ) {}
163 164
164 void timerEvent( QTimerEvent *); 165 void timerEvent( QTimerEvent *);
165 void center(); 166 void center();
166 bool twoStage; 167 bool twoStage;
167 int timerId; 168 int timerId;
168}; 169};
169 170
170void ResultIndicator::showResult( QWidget *ref, bool won ) 171void ResultIndicator::showResult( QWidget *ref, bool won )
171{ 172{
172 ResultIndicator *r = new ResultIndicator( ref, 0, WStyle_Customize | WStyle_Tool | WType_TopLevel ); 173 ResultIndicator *r = new ResultIndicator( ref, 0, WStyle_Customize | WStyle_Tool | WType_TopLevel );
173 174
174 r->setAlignment( AlignCenter ); 175 r->setAlignment( AlignCenter );
175 r->setFrameStyle( Sunken|StyledPanel ); 176 r->setFrameStyle( Sunken|StyledPanel );
176 if ( won ) { 177 if ( won ) {
177 r->setText( MineSweep::tr("You won!") ); 178 r->setText( MineSweep::tr("You won!") );
178 r->center(); 179 r->center();
179 r->show(); 180 r->show();
180 r->twoStage = FALSE; 181 r->twoStage = FALSE;
181 r->timerId = r->startTimer(1500); 182 r->timerId = r->startTimer(1500);
182 } else { 183 } else {
183 QPalette p( red ); 184 QPalette p( red );
184 r->setPalette( p ); 185 r->setPalette( p );
185 r->setText( MineSweep::tr("You exploded!") ); 186 r->setText( MineSweep::tr("You exploded!") );
186 r->resize( ref->size() ); 187 r->resize( ref->size() );
187 r->move( ref->mapToGlobal(QPoint(0,0)) ); 188 r->move( ref->mapToGlobal(QPoint(0,0)) );
188 r->show(); 189 r->show();
189 r->twoStage = TRUE; 190 r->twoStage = TRUE;
190 r->timerId =r->startTimer(200); 191 r->timerId =r->startTimer(200);
191 } 192 }
192} 193}
193 194
194void ResultIndicator::center() 195void ResultIndicator::center()
195{ 196{
196 QWidget *w = parentWidget(); 197 QWidget *w = parentWidget();
197 198
198 QPoint pp = w->mapToGlobal( QPoint(0,0) ); 199 QPoint pp = w->mapToGlobal( QPoint(0,0) );
199 QSize s = sizeHint()*3; 200 QSize s = sizeHint()*3;
200 pp = QPoint( pp.x() + w->width()/2 - s.width()/2, 201 pp = QPoint( pp.x() + w->width()/2 - s.width()/2,
201 pp.y() + w->height()/ 2 - s.height()/2 ); 202 pp.y() + w->height()/ 2 - s.height()/2 );
202 203
203 setGeometry( QRect(pp, s) ); 204 setGeometry( QRect(pp, s) );
204 205
205} 206}
206 207
207void ResultIndicator::timerEvent( QTimerEvent *te ) 208void ResultIndicator::timerEvent( QTimerEvent *te )
208{ 209{
209 if ( te->timerId() != timerId ) 210 if ( te->timerId() != timerId )
210 return; 211 return;
211 killTimer( timerId ); 212 killTimer( timerId );
212 if ( twoStage ) { 213 if ( twoStage ) {
213 center(); 214 center();
214 twoStage = FALSE; 215 twoStage = FALSE;
215 timerId = startTimer( 1000 ); 216 timerId = startTimer( 1000 );
216 } else { 217 } else {
217 delete this; 218 delete this;
218 } 219 }
219} 220}
220 221
221 222
222class MineFrame : public QFrame 223class MineFrame : public QFrame
223{ 224{
224public: 225public:
225 MineFrame( QWidget *parent, const char *name = 0 ) 226 MineFrame( QWidget *parent, const char *name = 0 )
226 :QFrame( parent, name ) {} 227 :QFrame( parent, name ) {}
227 void setField( MineField *f ) { field = f; } 228 void setField( MineField *f ) { field = f; }
228protected: 229protected:
229 void resizeEvent( QResizeEvent *e ) { 230 void resizeEvent( QResizeEvent *e ) {
230 field->setAvailableRect( contentsRect()); 231 field->setAvailableRect( contentsRect());
231 QFrame::resizeEvent(e); 232 QFrame::resizeEvent(e);
232 } 233 }
233private: 234private:
234 MineField *field; 235 MineField *field;
235}; 236};
236 237
237 238
238 239
239MineSweep::MineSweep( QWidget* parent, const char* name, WFlags f ) 240MineSweep::MineSweep( QWidget* parent, const char* name, WFlags f )
240: QMainWindow( parent, name, f ) 241: QMainWindow( parent, name, f )
241{ 242{
243 QPEApplication::setInputMethodHint(this, QPEApplication::AlwaysOff );
242 srand(::time(0)); 244 srand(::time(0));
243 setCaption( tr("Mine Hunt") ); 245 setCaption( tr("Mine Hunt") );
244 setIcon( Resource::loadPixmap( "minesweep_icon" ) ); 246 setIcon( Resource::loadPixmap( "minesweep_icon" ) );
245 247
246 QToolBar *toolBar = new QToolBar( this ); 248 QToolBar *toolBar = new QToolBar( this );
247 toolBar->setHorizontalStretchable( TRUE ); 249 toolBar->setHorizontalStretchable( TRUE );
248 250
249 QMenuBar *menuBar = new QMenuBar( toolBar ); 251 QMenuBar *menuBar = new QMenuBar( toolBar );
250 252
251 QPopupMenu *gameMenu = new QPopupMenu( this ); 253 QPopupMenu *gameMenu = new QPopupMenu( this );
252 gameMenu->insertItem( tr("Beginner"), this, SLOT( beginner() ) ); 254 gameMenu->insertItem( tr("Beginner"), this, SLOT( beginner() ) );
253 gameMenu->insertItem( tr("Advanced"), this, SLOT( advanced() ) ); 255 gameMenu->insertItem( tr("Advanced"), this, SLOT( advanced() ) );
254 gameMenu->insertItem( tr("Expert"), this, SLOT( expert() ) ); 256 gameMenu->insertItem( tr("Expert"), this, SLOT( expert() ) );
255 257
256 menuBar->insertItem( tr("Game"), gameMenu ); 258 menuBar->insertItem( tr("Game"), gameMenu );
257 259
258 guessLCD = new QLCDNumber( toolBar ); 260 guessLCD = new QLCDNumber( toolBar );
259 toolBar->setStretchableWidget( guessLCD ); 261 toolBar->setStretchableWidget( guessLCD );
260 262
261 QPalette lcdPal( red ); 263 QPalette lcdPal( red );
262 lcdPal.setColor( QColorGroup::Background, QApplication::palette().active().background() ); 264 lcdPal.setColor( QColorGroup::Background, QApplication::palette().active().background() );
263 lcdPal.setColor( QColorGroup::Button, QApplication::palette().active().button() ); 265 lcdPal.setColor( QColorGroup::Button, QApplication::palette().active().button() );
264 266
265// guessLCD->setPalette( lcdPal ); 267// guessLCD->setPalette( lcdPal );
266 guessLCD->setSegmentStyle( QLCDNumber::Flat ); 268 guessLCD->setSegmentStyle( QLCDNumber::Flat );
267 guessLCD->setFrameStyle( QFrame::NoFrame ); 269 guessLCD->setFrameStyle( QFrame::NoFrame );
268 guessLCD->setNumDigits( 2 ); 270 guessLCD->setNumDigits( 2 );
269 guessLCD->setBackgroundMode( PaletteButton ); 271 guessLCD->setBackgroundMode( PaletteButton );
270 newGameButton = new QPushButton( toolBar ); 272 newGameButton = new QPushButton( toolBar );
271 newGameButton->setPixmap( QPixmap( pix_new ) ); 273 newGameButton->setPixmap( QPixmap( pix_new ) );
272 newGameButton->setFocusPolicy(QWidget::NoFocus); 274 newGameButton->setFocusPolicy(QWidget::NoFocus);
273 connect( newGameButton, SIGNAL(clicked()), this, SLOT(newGame()) ); 275 connect( newGameButton, SIGNAL(clicked()), this, SLOT(newGame()) );
274 276
275 timeLCD = new QLCDNumber( toolBar ); 277 timeLCD = new QLCDNumber( toolBar );
276// timeLCD->setPalette( lcdPal ); 278// timeLCD->setPalette( lcdPal );
277 timeLCD->setSegmentStyle( QLCDNumber::Flat ); 279 timeLCD->setSegmentStyle( QLCDNumber::Flat );
278 timeLCD->setFrameStyle( QFrame::NoFrame ); 280 timeLCD->setFrameStyle( QFrame::NoFrame );
279 timeLCD->setNumDigits( 5 ); // "mm:ss" 281 timeLCD->setNumDigits( 5 ); // "mm:ss"
280 timeLCD->setBackgroundMode( PaletteButton ); 282 timeLCD->setBackgroundMode( PaletteButton );
281 283
282 setToolBarsMovable ( FALSE ); 284 setToolBarsMovable ( FALSE );
283 285
284 addToolBar( toolBar ); 286 addToolBar( toolBar );
285 287
286 MineFrame *mainframe = new MineFrame( this ); 288 MineFrame *mainframe = new MineFrame( this );
287 mainframe->setFrameShape( QFrame::Box ); 289 mainframe->setFrameShape( QFrame::Box );
288 mainframe->setFrameShadow( QFrame::Raised ); 290 mainframe->setFrameShadow( QFrame::Raised );
289 291
290 mainframe->setLineWidth(2); 292 mainframe->setLineWidth(2);
291 293
292 field = new MineField( mainframe ); 294 field = new MineField( mainframe );
293 mainframe->setField( field ); 295 mainframe->setField( field );
294 QFont fnt = field->font(); 296 QFont fnt = field->font();
295 fnt.setBold( TRUE ); 297 fnt.setBold( TRUE );
296 field->setFont( QFont( fnt ) ); 298 field->setFont( QFont( fnt ) );
297 field->setFocus(); 299 field->setFocus();
298 setCentralWidget( mainframe ); 300 setCentralWidget( mainframe );
299 301
300 connect( field, SIGNAL( gameOver( bool ) ), this, SLOT( gameOver( bool ) ) ); 302 connect( field, SIGNAL( gameOver( bool ) ), this, SLOT( gameOver( bool ) ) );
301 connect( field, SIGNAL( mineCount( int ) ), this, SLOT( setCounter( int ) ) ); 303 connect( field, SIGNAL( mineCount( int ) ), this, SLOT( setCounter( int ) ) );
302 connect( field, SIGNAL( gameStarted()), this, SLOT( startPlaying() ) ); 304 connect( field, SIGNAL( gameStarted()), this, SLOT( startPlaying() ) );
303 305
304 timer = new QTimer( this ); 306 timer = new QTimer( this );
305 307
306 connect( timer, SIGNAL( timeout() ), this, SLOT( updateTime() ) ); 308 connect( timer, SIGNAL( timeout() ), this, SLOT( updateTime() ) );
307 309
308 readConfig(); 310 readConfig();
309} 311}
310 312
311MineSweep::~MineSweep() 313MineSweep::~MineSweep()
312{ 314{
313 writeConfig(); 315 writeConfig();
314} 316}
315 317
316void MineSweep::gameOver( bool won ) 318void MineSweep::gameOver( bool won )
317{ 319{
318 field->showMines(); 320 field->showMines();
319 if ( won ) { 321 if ( won ) {
320 newGameButton->setPixmap( QPixmap( happy_xpm ) ); 322 newGameButton->setPixmap( QPixmap( happy_xpm ) );
321 } else { 323 } else {
322 newGameButton->setPixmap( QPixmap( dead_xpm ) ); 324 newGameButton->setPixmap( QPixmap( dead_xpm ) );
323 } 325 }
324 ResultIndicator::showResult( this, won ); 326 ResultIndicator::showResult( this, won );
325 timer->stop(); 327 timer->stop();
326} 328}
327 329
328void MineSweep::newGame() 330void MineSweep::newGame()
329{ 331{
330 newGame(field->level()); 332 newGame(field->level());
331} 333}
332 334
333void MineSweep::newGame(int level) 335void MineSweep::newGame(int level)
334{ 336{
335 timeLCD->display( "0:00" ); 337 timeLCD->display( "0:00" );
336 field->setup( level ); 338 field->setup( level );
337 newGameButton->setPixmap( QPixmap( pix_new ) ); 339 newGameButton->setPixmap( QPixmap( pix_new ) );
338 timer->stop(); 340 timer->stop();
339} 341}
340 342
341void MineSweep::startPlaying() 343void MineSweep::startPlaying()
342{ 344{
343 newGameButton->setPixmap( QPixmap( worried_xpm ) ); 345 newGameButton->setPixmap( QPixmap( worried_xpm ) );
344 starttime = QDateTime::currentDateTime(); 346 starttime = QDateTime::currentDateTime();
345 timer->start( 1000 ); 347 timer->start( 1000 );
346} 348}
347 349
348void MineSweep::beginner() 350void MineSweep::beginner()
349{ 351{
350 newGame(1); 352 newGame(1);
351} 353}
352 354
353void MineSweep::advanced() 355void MineSweep::advanced()
354{ 356{
355 newGame(2); 357 newGame(2);
356} 358}
357 359
358void MineSweep::expert() 360void MineSweep::expert()
359{ 361{
360 newGame(3); 362 newGame(3);
361} 363}
362 364
363void MineSweep::setCounter( int c ) 365void MineSweep::setCounter( int c )