summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/games/minesweep/minefield.cpp400
1 files changed, 251 insertions, 149 deletions
diff --git a/noncore/games/minesweep/minefield.cpp b/noncore/games/minesweep/minefield.cpp
index be2f9a3..eca1a36 100644
--- a/noncore/games/minesweep/minefield.cpp
+++ b/noncore/games/minesweep/minefield.cpp
@@ -69,3 +69,9 @@ static const char *pix_mine[]={
69 69
70class Mine : public QTableItem 70
71static const int maxGrid = 28;
72static const int minGrid = 9;
73
74
75
76class Mine : public Qt
71{ 77{
@@ -84,6 +90,6 @@ public:
84 90
85 Mine( QTable* ); 91 Mine( MineField* );
86 void paint( QPainter * p, const QColorGroup & cg, const QRect & cr, bool selected ); 92 void paint( QPainter * p, const QColorGroup & cg, const QRect & cr );
87 EditType editType() const { return Never; } 93
88 QSize sizeHint() const { return QSize( 12, 12 ); } 94 QSize sizeHint() const { return QSize( maxGrid, maxGrid ); }
89 95
@@ -105,2 +111,3 @@ private:
105 MineState st; 111 MineState st;
112 MineField *field;
106 113
@@ -117,4 +124,3 @@ QPixmap* Mine::mine_pix = 0;
117 124
118Mine::Mine( QTable *t ) 125Mine::Mine( MineField *f )
119: QTableItem( t, Never, QString::null )
120{ 126{
@@ -123,2 +129,3 @@ Mine::Mine( QTable *t )
123 hint = 0; 129 hint = 0;
130 field = f;
124} 131}
@@ -175,4 +182,6 @@ void Mine::paletteChange()
175 182
176void Mine::paint( QPainter* p, const QColorGroup &cg, const QRect& cr, bool ) 183void Mine::paint( QPainter* p, const QColorGroup &cg, const QRect& cr )
177{ 184{
185 int x = cr.x();
186 int y = cr.y();
178 if ( !knownField ) { 187 if ( !knownField ) {
@@ -181,3 +190,3 @@ void Mine::paint( QPainter* p, const QColorGroup &cg, const QRect& cr, bool )
181 QBrush br( cg.button().dark(115) ); 190 QBrush br( cg.button().dark(115) );
182 qDrawWinButton( &pp, QRect(0,0,cr.width(), cr.height())/*cr*/, cg, TRUE, &br ); 191 qDrawWinButton( &pp, cr, cg, TRUE, &br );
183 } 192 }
@@ -190,3 +199,3 @@ void Mine::paint( QPainter* p, const QColorGroup &cg, const QRect& cr, bool )
190 QBrush br( cg.button() ); 199 QBrush br( cg.button() );
191 qDrawWinButton( &pp, QRect(0,0,cr.width(), cr.height())/*cr*/, cg, FALSE, &br ); 200 qDrawWinButton( &pp, cr, cg, FALSE, &br );
192 } 201 }
@@ -207,6 +216,6 @@ void Mine::paint( QPainter* p, const QColorGroup &cg, const QRect& cr, bool )
207 case Hidden: 216 case Hidden:
208 p->drawPixmap( 0, 0, *unknownField ); 217 p->drawPixmap( x, y, *unknownField );
209 break; 218 break;
210 case Empty: 219 case Empty:
211 p->drawPixmap( 0, 0, *knownField ); 220 p->drawPixmap( x, y, *knownField );
212 if ( hint > 0 ) { 221 if ( hint > 0 ) {
@@ -217,3 +226,4 @@ void Mine::paint( QPainter* p, const QColorGroup &cg, const QRect& cr, bool )
217 case 2: 226 case 2:
218 p->setPen( green ); 227 p->setPen( green.dark() );
228 break;
219 case 3: 229 case 3:
@@ -221,7 +231,16 @@ void Mine::paint( QPainter* p, const QColorGroup &cg, const QRect& cr, bool )
221 break; 231 break;
222 default: 232 case 4:
233 p->setPen( darkYellow.dark() );
234 break;
235 case 5:
223 p->setPen( darkMagenta ); 236 p->setPen( darkMagenta );
224 break; 237 break;
238 case 6:
239 p->setPen( darkRed );
240 break;
241 default:
242 p->setPen( black );
243 break;
225 } 244 }
226 p->drawText( QRect( 0, 0, cr.width(), cr.height() ), AlignHCenter | AlignVCenter, QString().setNum( hint ) ); 245 p->drawText( cr, AlignHCenter | AlignVCenter, QString::number( hint ) );
227 } 246 }
@@ -229,14 +248,14 @@ void Mine::paint( QPainter* p, const QColorGroup &cg, const QRect& cr, bool )
229 case Mined: 248 case Mined:
230 p->drawPixmap( 0, 0, *knownField ); 249 p->drawPixmap( x, y, *knownField );
231 p->drawPixmap( pmmarg, pmmarg, *mine_pix ); 250 p->drawPixmap( x+pmmarg, y+pmmarg, *mine_pix );
232 break; 251 break;
233 case Exploded: 252 case Exploded:
234 p->drawPixmap( 0, 0, *knownField ); 253 p->drawPixmap( x, y, *knownField );
235 p->drawPixmap( pmmarg, pmmarg, *mine_pix ); 254 p->drawPixmap( x+pmmarg, y+pmmarg, *mine_pix );
236 p->setPen( red ); 255 p->setPen( red );
237 p->drawText( QRect( 0, 0, cr.width(), cr.height() ), AlignHCenter | AlignVCenter, "X" ); 256 p->drawText( cr, AlignHCenter | AlignVCenter, "X" );
238 break; 257 break;
239 case Flagged: 258 case Flagged:
240 p->drawPixmap( 0, 0, *unknownField ); 259 p->drawPixmap( x, y, *unknownField );
241 p->drawPixmap( pmmarg, pmmarg, *flag_pix ); 260 p->drawPixmap( x+pmmarg, y+pmmarg, *flag_pix );
242 break; 261 break;
@@ -244,4 +263,4 @@ void Mine::paint( QPainter* p, const QColorGroup &cg, const QRect& cr, bool )
244 case Unsure: 263 case Unsure:
245 p->drawPixmap( 0, 0, *unknownField ); 264 p->drawPixmap( x, y, *unknownField );
246 p->drawText( QRect( 0, 0, cr.width(), cr.height() ), AlignHCenter | AlignVCenter, "?" ); 265 p->drawText( cr, AlignHCenter | AlignVCenter, "?" );
247 break; 266 break;
@@ -249,6 +268,6 @@ void Mine::paint( QPainter* p, const QColorGroup &cg, const QRect& cr, bool )
249 case Wrong: 268 case Wrong:
250 p->drawPixmap( 0, 0, *unknownField ); 269 p->drawPixmap( x, y, *unknownField );
251 p->drawPixmap( pmmarg, pmmarg, *flag_pix ); 270 p->drawPixmap( x+pmmarg, y+pmmarg, *flag_pix );
252 p->setPen( red ); 271 p->setPen( red );
253 p->drawText( QRect( 0, 0, cr.width(), cr.height() ), AlignHCenter | AlignVCenter, "X" ); 272 p->drawText( cr, AlignHCenter | AlignVCenter, "X" );
254 break; 273 break;
@@ -264,10 +283,5 @@ void Mine::paint( QPainter* p, const QColorGroup &cg, const QRect& cr, bool )
264MineField::MineField( QWidget* parent, const char* name ) 283MineField::MineField( QWidget* parent, const char* name )
265: QTable( parent, name ) 284: QScrollView( parent, name )
266{ 285{
267 setState( GameOver ); 286 setState( GameOver );
268 setShowGrid( FALSE );
269 horizontalHeader()->hide();
270 verticalHeader()->hide();
271 setTopMargin( 0 );
272 setLeftMargin( 0 );
273 287
@@ -275,10 +289,4 @@ MineField::MineField( QWidget* parent, const char* name )
275 289
276 setSelectionMode( QTable::NoSelection );
277 setFocusPolicy( QWidget::NoFocus ); 290 setFocusPolicy( QWidget::NoFocus );
278 291
279 setCurrentCell( -1, -1 );
280
281 connect( this, SIGNAL( pressed( int, int, int, const QPoint& ) ), this, SLOT( cellPressed( int, int ) ) );
282 connect( this, SIGNAL( clicked( int, int, int, const QPoint& ) ), this, SLOT( cellClicked( int, int ) ) );
283
284 holdTimer = new QTimer( this ); 292 holdTimer = new QTimer( this );
@@ -288,3 +296,3 @@ MineField::MineField( QWidget* parent, const char* name )
288 ignoreClick = FALSE; 296 ignoreClick = FALSE;
289 currRow = currCol = 0; 297 currRow = currCol = -1;
290 minecount=0; 298 minecount=0;
@@ -292,2 +300,4 @@ MineField::MineField( QWidget* parent, const char* name )
292 nonminecount=0; 300 nonminecount=0;
301 cellSize = -1;
302 mines = 0;
293} 303}
@@ -296,2 +306,11 @@ MineField::~MineField()
296{ 306{
307 int i;
308 if ( mines )
309 {
310 for ( i = 0; i < numCols*numRows; i++ )
311 {
312 delete mines[i];
313 }
314 delete[] mines;
315 }
297} 316}
@@ -303,3 +322,2 @@ void MineField::setState( State st )
303 322
304
305void MineField::setup( int level ) 323void MineField::setup( int level )
@@ -308,11 +326,13 @@ void MineField::setup( int level )
308 setState( Waiting ); 326 setState( Waiting );
309 viewport()->setUpdatesEnabled( FALSE ); 327 //viewport()->setUpdatesEnabled( FALSE );
310
311 int cellsize;
312 328
313 int x; 329 int i;
314 int y; 330 if ( mines )
315 for ( x = 0; x < numCols(); x++ ) 331 {
316 for ( y = 0; y < numRows(); y++ ) 332 for ( i = 0; i < numCols*numRows; i++ )
317 clearCell( y, x ); 333 {
334 delete mines[i];
335 }
336 delete[] mines;
337 }
318 338
@@ -320,21 +340,23 @@ void MineField::setup( int level )
320 case 1: 340 case 1:
321 setNumRows( 9 ); 341 numRows = 9 ;
322 setNumCols( 9 ); 342 numCols = 9 ;
323 minecount = 12; 343 minecount = 12;
324 cellsize = 21;
325 break; 344 break;
326 case 2: 345 case 2:
327 setNumRows( 16 ); 346 numRows = 16;
328 setNumCols( 16 ); 347 numCols = 16;
329 minecount = 45; 348 minecount = 45;
330 cellsize = 14;
331 break; 349 break;
332 case 3: 350 case 3:
333 setNumRows( 18 ); 351 numCols = 18;
334 setNumCols( 18 ); 352 numRows = 18;
335 minecount = 66 ; 353 minecount = 66 ;
336 cellsize = 12;
337 break; 354 break;
338 } 355 }
339 nonminecount = numRows()*numCols() - minecount; 356 mines = new (Mine*)[numRows*numCols];
357 for ( i = 0; i < numCols*numRows; i++ )
358 mines[i] = new Mine( this );
359
360
361 nonminecount = numRows*numCols - minecount;
340 mineguess = minecount; 362 mineguess = minecount;
@@ -343,11 +365,39 @@ void MineField::setup( int level )
343 365
344 for ( y = 0; y < numRows(); y++ ) 366 if ( availableRect.isValid() )
345 setRowHeight( y, cellsize ); 367 setCellSize(findCellSize());
346 for ( x = 0; x < numCols(); x++ ) 368 // viewport()->setUpdatesEnabled( TRUE );
347 setColumnWidth( x, cellsize ); 369 //viewport()->repaint( TRUE );
348 for ( x = 0; x < numCols(); x++ ) 370 updateContents( 0, 0, numCols*cellSize, numRows*cellSize );
349 for ( y = 0; y < numRows(); y++ )
350 setItem( y, x, new Mine( this ) );
351
352 updateGeometry(); 371 updateGeometry();
372}
373
374void MineField::drawContents( QPainter * p, int clipx, int clipy, int clipw, int cliph )
375{
376 int c1 = clipx / cellSize;
377 int c2 = ( clipx + clipw - 1 ) / cellSize;
378 int r1 = clipy / cellSize;
379 int r2 = ( clipy + cliph - 1 ) / cellSize;
380
381 for ( int c = c1; c <= c2 ; c++ ) {
382 for ( int r = r1; r <= r2 ; r++ ) {
383 int x = c * cellSize;
384 int y = r * cellSize;
385 Mine *m = mine( r, c );
386 if ( m )
387 m->paint( p, colorGroup(), QRect(x, y, cellSize, cellSize ) );
388 }
389 }
390}
391
392
393// Chicken and egg problem: We need to know how big the parent is
394// before we can decide how big to make the table.
395
396void MineField::setAvailableRect( const QRect &r )
397{
398 availableRect = r;
399 int newCellSize = findCellSize();
400 if ( newCellSize != cellSize ) {
401 viewport()->setUpdatesEnabled( FALSE );
402 setCellSize( newCellSize );
353 viewport()->setUpdatesEnabled( TRUE ); 403 viewport()->setUpdatesEnabled( TRUE );
@@ -355,2 +405,34 @@ void MineField::setup( int level )
355} 405}
406}
407
408int MineField::findCellSize()
409{
410 int w = availableRect.width() - 1;
411 int h = availableRect.height() - 1;
412 int cellsize;
413
414 cellsize = QMIN( w/numCols, h/numRows );
415 cellsize = QMIN( QMAX( cellsize, minGrid ), maxGrid );
416 return cellsize;
417}
418
419
420void MineField::setCellSize( int cellsize )
421{
422 cellSize = cellsize;
423
424 int w = availableRect.width();
425 int h = availableRect.height();
426
427 int w2 = cellsize*numCols;
428 int h2 = cellsize*numRows;
429
430 resizeContents( w2, h2 );
431
432 int b = 5;
433
434 setGeometry( availableRect.x() + (w-w2)/2, availableRect.y() + (h-h2)/2,
435 w2+b, h2+b );
436 // QMIN(w,w2+b), QMIN(h,h2+b) );
437}
356 438
@@ -361,9 +443,9 @@ void MineField::placeMines()
361 while ( mines ) { 443 while ( mines ) {
362 int col = int((double(rand()) / double(RAND_MAX)) * numCols()); 444 int col = int((double(rand()) / double(RAND_MAX)) * numCols);
363 int row = int((double(rand()) / double(RAND_MAX)) * numRows()); 445 int row = int((double(rand()) / double(RAND_MAX)) * numRows);
364 446
365 Mine* mine = (Mine*)item( row, col ); 447 Mine* m = mine( row, col );
366 448
367 if ( mine && !mine->isMined() && mine->state() == Mine::Hidden ) { 449 if ( m && !m->isMined() && m->state() == Mine::Hidden ) {
368 mine->setMined( TRUE ); 450 m->setMined( TRUE );
369 mines--; 451 mines--;
@@ -373,14 +455,27 @@ void MineField::placeMines()
373 455
374void MineField::paintFocus( QPainter*, const QRect& ) 456
457void MineField::updateCell( int r, int c )
375{ 458{
459 updateContents( c*cellSize, r*cellSize, cellSize, cellSize );
376} 460}
377 461
378void MineField::viewportMousePressEvent( QMouseEvent* e ) 462
463void MineField::contentsMousePressEvent( QMouseEvent* e )
379{ 464{
380 QTable::viewportMousePressEvent( e ); 465 int c = e->pos().x() / cellSize;
466 int r = e->pos().y() / cellSize;
467 if ( onBoard( r, c ) )
468 cellPressed( r, c );
469 else
470 currCol = currRow = -1;
381} 471}
382 472
383void MineField::viewportMouseReleaseEvent( QMouseEvent* e ) 473void MineField::contentsMouseReleaseEvent( QMouseEvent* e )
384{ 474{
385 QTable::viewportMouseReleaseEvent( e ); 475 int c = e->pos().x() / cellSize;
476 int r = e->pos().y() / cellSize;
477 if ( onBoard( r, c ) && c == currCol && r == currRow )
478 cellClicked( r, c );
479
480
386 if ( flagAction == FlagNext ) { 481 if ( flagAction == FlagNext ) {
@@ -390,2 +485,29 @@ void MineField::viewportMouseReleaseEvent( QMouseEvent* e )
390 485
486
487
488/*
489 state == Waiting means no "hold"
490
491
492*/
493void MineField::cellPressed( int row, int col )
494{
495 if ( state() == GameOver )
496 return;
497 currRow = row;
498 currCol = col;
499 if ( state() == Playing )
500 holdTimer->start( 150, TRUE );
501}
502
503void MineField::held()
504{
505 flagAction = FlagNext;
506 updateMine( currRow, currCol );
507 ignoreClick = TRUE;
508}
509
510
511
512
391void MineField::keyPressEvent( QKeyEvent* e ) 513void MineField::keyPressEvent( QKeyEvent* e )
@@ -409,4 +531,4 @@ int MineField::getHint( int row, int col )
409 for ( int r = row-1; r <= row+1; r++ ) { 531 for ( int r = row-1; r <= row+1; r++ ) {
410 Mine* mine = (Mine*)item( r, c ); 532 Mine* m = mine( r, c );
411 if ( mine && mine->isMined() ) 533 if ( m && m->isMined() )
412 hint++; 534 hint++;
@@ -417,9 +539,8 @@ int MineField::getHint( int row, int col )
417 539
418void MineField::setHint( Mine* mine ) 540void MineField::setHint( int row, int col )
419{ 541{
420 if ( !mine ) 542 Mine *m = mine( row, col );
543 if ( !m )
421 return; 544 return;
422 545
423 int row = mine->row();
424 int col = mine->col();
425 int hint = getHint( row, col ); 546 int hint = getHint( row, col );
@@ -429,7 +550,7 @@ void MineField::setHint( Mine* mine )
429 for ( int r = row-1; r <= row+1; r++ ) { 550 for ( int r = row-1; r <= row+1; r++ ) {
430 Mine* mine = (Mine*)item( r, c ); 551 Mine* m = mine( r, c );
431 if ( mine && mine->state() == Mine::Hidden ) { 552 if ( m && m->state() == Mine::Hidden ) {
432 mine->activate( TRUE ); 553 m->activate( TRUE );
433 nonminecount--; 554 nonminecount--;
434 setHint( mine ); 555 setHint( r, c );
435 updateCell( r, c ); 556 updateCell( r, c );
@@ -439,3 +560,3 @@ void MineField::setHint( Mine* mine )
439 560
440 mine->setHint( hint ); 561 m->setHint( hint );
441 updateCell( row, col ); 562 updateCell( row, col );
@@ -444,24 +565,2 @@ void MineField::setHint( Mine* mine )
444/* 565/*
445 state == Waiting means no "hold"
446
447
448*/
449void MineField::cellPressed( int row, int col )
450{
451 if ( state() == GameOver )
452 return;
453 currRow = row;
454 currCol = col;
455 if ( state() == Playing )
456 holdTimer->start( 150, TRUE );
457}
458
459void MineField::held()
460{
461 flagAction = FlagNext;
462 updateMine( currRow, currCol );
463 ignoreClick = TRUE;
464}
465
466/*
467 Only place mines after first click, since it is pointless to 566 Only place mines after first click, since it is pointless to
@@ -475,6 +574,6 @@ void MineField::cellClicked( int row, int col )
475 if ( state() == Waiting ) { 574 if ( state() == Waiting ) {
476 Mine* mine = (Mine*)item( row, col ); 575 Mine* m = mine( row, col );
477 if ( !mine ) 576 if ( !m )
478 return; 577 return;
479 mine->setState( Mine::Empty ); 578 m->setState( Mine::Empty );
480 nonminecount--; 579 nonminecount--;
@@ -495,12 +594,12 @@ void MineField::updateMine( int row, int col )
495{ 594{
496 Mine* mine = (Mine*)item( row, col ); 595 Mine* m = mine( row, col );
497 if ( !mine ) 596 if ( !m )
498 return; 597 return;
499 598
500 bool wasFlagged = mine->state() == Mine::Flagged; 599 bool wasFlagged = m->state() == Mine::Flagged;
501 bool wasEmpty = mine->state() == Mine::Empty; 600 bool wasEmpty = m->state() == Mine::Empty;
502 601
503 mine->activate( flagAction == NoAction ); 602 m->activate( flagAction == NoAction );
504 603
505 if ( mine->state() == Mine::Exploded ) { 604 if ( m->state() == Mine::Exploded ) {
506 emit gameOver( FALSE ); 605 emit gameOver( FALSE );
@@ -508,4 +607,4 @@ void MineField::updateMine( int row, int col )
508 return; 607 return;
509 } else if ( mine->state() == Mine::Empty ) { 608 } else if ( m->state() == Mine::Empty ) {
510 setHint( mine ); 609 setHint( row, col );
511 if ( !wasEmpty ) 610 if ( !wasEmpty )
@@ -515,6 +614,6 @@ void MineField::updateMine( int row, int col )
515 if ( flagAction != NoAction ) { 614 if ( flagAction != NoAction ) {
516 if ( mine->state() == Mine::Flagged ) { 615 if ( m->state() == Mine::Flagged ) {
517 --mineguess; 616 --mineguess;
518 emit mineCount( mineguess ); 617 emit mineCount( mineguess );
519 if ( mine->isMined() ) 618 if ( m->isMined() )
520 --minecount; 619 --minecount;
@@ -523,3 +622,3 @@ void MineField::updateMine( int row, int col )
523 emit mineCount( mineguess ); 622 emit mineCount( mineguess );
524 if ( mine->isMined() ) 623 if ( m->isMined() )
525 ++minecount; 624 ++minecount;
@@ -538,11 +637,11 @@ void MineField::showMines()
538{ 637{
539 for ( int c = 0; c < numCols(); c++ ) 638 for ( int c = 0; c < numCols; c++ )
540 for ( int r = 0; r < numRows(); r++ ) { 639 for ( int r = 0; r < numRows; r++ ) {
541 Mine* mine = (Mine*)item( r, c ); 640 Mine* m = mine( r, c );
542 if ( !mine ) 641 if ( !m )
543 continue; 642 continue;
544 if ( mine->isMined() && mine->state() == Mine::Hidden ) 643 if ( m->isMined() && m->state() == Mine::Hidden )
545 mine->setState( Mine::Mined ); 644 m->setState( Mine::Mined );
546 if ( !mine->isMined() && mine->state() == Mine::Flagged ) 645 if ( !m->isMined() && m->state() == Mine::Flagged )
547 mine->setState( Mine::Wrong ); 646 m->setState( Mine::Wrong );
548 647
@@ -555,3 +654,3 @@ void MineField::paletteChange( const QPalette &o )
555 Mine::paletteChange(); 654 Mine::paletteChange();
556 QTable::paletteChange( o ); 655 QScrollView::paletteChange( o );
557} 656}
@@ -564,7 +663,7 @@ void MineField::writeConfig(Config& cfg) const
564 if ( stat == Playing ) { 663 if ( stat == Playing ) {
565 for ( int x = 0; x < numCols(); x++ ) 664 for ( int x = 0; x < numCols; x++ )
566 for ( int y = 0; y < numRows(); y++ ) { 665 for ( int y = 0; y < numRows; y++ ) {
567 char code='A'+(x*17+y*101)%21; // Reduce the urge to cheat 666 char code='A'+(x*17+y*101)%21; // Reduce the urge to cheat
568 Mine* mine = (Mine*)item( y, x ); 667 const Mine* m = mine( y, x );
569 int st = (int)mine->state(); if ( mine->isMined() ) st+=5; 668 int st = (int)m->state(); if ( m->isMined() ) st+=5;
570 grid += code + st; 669 grid += code + st;
@@ -588,10 +687,10 @@ void MineField::readConfig(Config& cfg)
588 mineguess=0; 687 mineguess=0;
589 for ( int x = 0; x < numCols(); x++ ) { 688 for ( int x = 0; x < numCols; x++ ) {
590 for ( int y = 0; y < numRows(); y++ ) { 689 for ( int y = 0; y < numRows; y++ ) {
591 char code='A'+(x*17+y*101)%21; // Reduce the urge to cheat 690 char code='A'+(x*17+y*101)%21; // Reduce the urge to cheat
592 int st = (char)(QChar)grid[i++]-code; 691 int st = (char)(QChar)grid[i++]-code;
593 Mine* mine = (Mine*)item( y, x ); 692 Mine* m = mine( y, x );
594 if ( st >= 5 ) { 693 if ( st >= 5 ) {
595 st-=5; 694 st-=5;
596 mine->setMined(TRUE); 695 m->setMined(TRUE);
597 minecount++; 696 minecount++;
@@ -599,6 +698,6 @@ void MineField::readConfig(Config& cfg)
599 } 698 }
600 mine->setState((Mine::MineState)st); 699 m->setState((Mine::MineState)st);
601 switch ( mine->state() ) { 700 switch ( m->state() ) {
602 case Mine::Flagged: 701 case Mine::Flagged:
603 if (mine->isMined()) 702 if (m->isMined())
604 minecount--; 703 minecount--;
@@ -608,2 +707,5 @@ void MineField::readConfig(Config& cfg)
608 --nonminecount; 707 --nonminecount;
708 break;
709 default:
710 break;
609 } 711 }
@@ -611,7 +713,7 @@ void MineField::readConfig(Config& cfg)
611 } 713 }
612 for ( int x = 0; x < numCols(); x++ ) { 714 for ( int x = 0; x < numCols; x++ ) {
613 for ( int y = 0; y < numRows(); y++ ) { 715 for ( int y = 0; y < numRows; y++ ) {
614 Mine* mine = (Mine*)item( y, x ); 716 Mine* m = mine( y, x );
615 if ( mine->state() == Mine::Empty ) 717 if ( m->state() == Mine::Empty )
616 mine->setHint(getHint(y,x)); 718 m->setHint(getHint(y,x));
617 } 719 }