summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/games/tictac/tictac.cpp2
1 files changed, 2 insertions, 0 deletions
diff --git a/noncore/games/tictac/tictac.cpp b/noncore/games/tictac/tictac.cpp
index 12ce35f..db8ee1e 100644
--- a/noncore/games/tictac/tictac.cpp
+++ b/noncore/games/tictac/tictac.cpp
@@ -1,378 +1,380 @@
1/**************************************************************************** 1/****************************************************************************
2 ** tictac.cpp,v 1.3.8.1 2003/08/29 06:50:40 harlekin Exp 2 ** tictac.cpp,v 1.3.8.1 2003/08/29 06:50:40 harlekin Exp
3 ** 3 **
4 ** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. 4 ** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
5 ** 5 **
6 ** This file is part of an example program for Qt. This example 6 ** This file is part of an example program for Qt. This example
7 ** program may be used, distributed and modified without limitation. 7 ** program may be used, distributed and modified without limitation.
8 ** 8 **
9 *****************************************************************************/ 9 *****************************************************************************/
10 10
11#include "tictac.h" 11#include "tictac.h"
12#include <qpe/qpeapplication.h> 12#include <qpe/qpeapplication.h>
13#include <qdrawutil.h> 13#include <qdrawutil.h>
14#include <qcombobox.h> 14#include <qcombobox.h>
15#include <qlabel.h> 15#include <qlabel.h>
16#include <qlayout.h> 16#include <qlayout.h>
17#include <stdlib.h> // rand() function 17#include <stdlib.h> // rand() function
18 18
19 19
20//*************************************************************************** 20//***************************************************************************
21//* TicTacButton member functions 21//* TicTacButton member functions
22//*************************************************************************** 22//***************************************************************************
23 23
24// -------------------------------------------------------------------------- 24// --------------------------------------------------------------------------
25// Creates a TicTacButton 25// Creates a TicTacButton
26// 26//
27 27
28TicTacButton::TicTacButton( QWidget *parent ) : QPushButton( parent ) 28TicTacButton::TicTacButton( QWidget *parent ) : QPushButton( parent )
29{ 29{
30 t = Blank; // initial type 30 t = Blank; // initial type
31} 31}
32 32
33// -------------------------------------------------------------------------- 33// --------------------------------------------------------------------------
34// Paints TicTacButton 34// Paints TicTacButton
35// 35//
36 36
37void TicTacButton::drawButtonLabel( QPainter *p ) 37void TicTacButton::drawButtonLabel( QPainter *p )
38{ 38{
39 QRect r = rect(); 39 QRect r = rect();
40 p->setPen( QPen( white,2 ) ); // set fat pen 40 p->setPen( QPen( white,2 ) ); // set fat pen
41 if ( t == Circle ) { 41 if ( t == Circle ) {
42 p->drawEllipse( r.left()+4, r.top()+4, r.width()-8, r.height()-8 ); 42 p->drawEllipse( r.left()+4, r.top()+4, r.width()-8, r.height()-8 );
43 } else if ( t == Cross ) { // draw cross 43 } else if ( t == Cross ) { // draw cross
44 p->drawLine( r.topLeft() +QPoint(4,4), r.bottomRight()-QPoint(4,4)); 44 p->drawLine( r.topLeft() +QPoint(4,4), r.bottomRight()-QPoint(4,4));
45 p->drawLine( r.bottomLeft()+QPoint(4,-4),r.topRight() -QPoint(4,-4)); 45 p->drawLine( r.bottomLeft()+QPoint(4,-4),r.topRight() -QPoint(4,-4));
46 } 46 }
47} 47}
48 48
49 49
50//*************************************************************************** 50//***************************************************************************
51//* TicTacGameBoard member functions 51//* TicTacGameBoard member functions
52//*************************************************************************** 52//***************************************************************************
53 53
54// -------------------------------------------------------------------------- 54// --------------------------------------------------------------------------
55// Creates a game board with N x N buttons and connects the "clicked()" 55// Creates a game board with N x N buttons and connects the "clicked()"
56// signal of all buttons to the "buttonClicked()" slot. 56// signal of all buttons to the "buttonClicked()" slot.
57// 57//
58 58
59TicTacGameBoard::TicTacGameBoard( int n, QWidget *parent, const char *name ) 59TicTacGameBoard::TicTacGameBoard( int n, QWidget *parent, const char *name )
60 : QWidget( parent, name ) 60 : QWidget( parent, name )
61{ 61{
62 QPEApplication::showWidget( this ); 62 QPEApplication::showWidget( this );
63 st = Init; // initial state 63 st = Init; // initial state
64 nBoard = n; 64 nBoard = n;
65 n *= n; // make square 65 n *= n; // make square
66 comp_starts = FALSE; // human starts 66 comp_starts = FALSE; // human starts
67 buttons = new TicTacButtons(n); // create real buttons 67 buttons = new TicTacButtons(n); // create real buttons
68 btArray = new TicTacArray(n); // create button model 68 btArray = new TicTacArray(n); // create button model
69 QGridLayout * grid = new QGridLayout( this, 3, 3, 4 ); 69 QGridLayout * grid = new QGridLayout( this, 3, 3, 4 );
70 QPalette p( blue ); 70 QPalette p( blue );
71 for ( int i=0; i<n; i++ ) { // create and connect buttons 71 for ( int i=0; i<n; i++ ) { // create and connect buttons
72 TicTacButton *ttb = new TicTacButton( this ); 72 TicTacButton *ttb = new TicTacButton( this );
73 ttb->setPalette( p ); 73 ttb->setPalette( p );
74 ttb->setEnabled( FALSE ); 74 ttb->setEnabled( FALSE );
75 connect( ttb, SIGNAL(clicked()), SLOT(buttonClicked()) ); 75 connect( ttb, SIGNAL(clicked()), SLOT(buttonClicked()) );
76 grid->addWidget( ttb, i%3, i/3 ); 76 grid->addWidget( ttb, i%3, i/3 );
77 buttons->insert( i, ttb ); 77 buttons->insert( i, ttb );
78 btArray->at(i) = TicTacButton::Blank; // initial button type 78 btArray->at(i) = TicTacButton::Blank; // initial button type
79 } 79 }
80 QTime t = QTime::currentTime(); // set random seed 80 QTime t = QTime::currentTime(); // set random seed
81 srand( t.hour()*12+t.minute()*60+t.second()*60 ); 81 srand( t.hour()*12+t.minute()*60+t.second()*60 );
82
82} 83}
83 84
84TicTacGameBoard::~TicTacGameBoard() 85TicTacGameBoard::~TicTacGameBoard()
85{ 86{
86 delete buttons; 87 delete buttons;
87 delete btArray; 88 delete btArray;
88} 89}
89 90
90 91
91// -------------------------------------------------------------------------- 92// --------------------------------------------------------------------------
92// TicTacGameBoard::computerStarts( bool v ) 93// TicTacGameBoard::computerStarts( bool v )
93// 94//
94// Computer starts if v=TRUE. The human starts by default. 95// Computer starts if v=TRUE. The human starts by default.
95// 96//
96 97
97void TicTacGameBoard::computerStarts( bool v ) 98void TicTacGameBoard::computerStarts( bool v )
98{ 99{
99 comp_starts = v; 100 comp_starts = v;
100} 101}
101 102
102 103
103// -------------------------------------------------------------------------- 104// --------------------------------------------------------------------------
104// TicTacGameBoard::newGame() 105// TicTacGameBoard::newGame()
105// 106//
106// Clears the game board and prepares for a new game 107// Clears the game board and prepares for a new game
107// 108//
108 109
109void TicTacGameBoard::newGame() 110void TicTacGameBoard::newGame()
110{ 111{
111 st = HumansTurn; 112 st = HumansTurn;
112 for ( int i=0; i<nBoard*nBoard; i++ ) 113 for ( int i=0; i<nBoard*nBoard; i++ )
113 btArray->at(i) = TicTacButton::Blank; 114 btArray->at(i) = TicTacButton::Blank;
114 if ( comp_starts ) 115 if ( comp_starts )
115 computerMove(); 116 computerMove();
116 else 117 else
117 updateButtons(); 118 updateButtons();
118} 119}
119 120
120 121
121// -------------------------------------------------------------------------- 122// --------------------------------------------------------------------------
122// TicTacGameBoard::buttonClicked() - SLOT 123// TicTacGameBoard::buttonClicked() - SLOT
123// 124//
124// This slot is activated when a TicTacButton emits the signal "clicked()", 125// This slot is activated when a TicTacButton emits the signal "clicked()",
125// i.e. the user has clicked on a TicTacButton. 126// i.e. the user has clicked on a TicTacButton.
126// 127//
127 128
128void TicTacGameBoard::buttonClicked() 129void TicTacGameBoard::buttonClicked()
129{ 130{
130 if ( st != HumansTurn ) // not ready 131 if ( st != HumansTurn ) // not ready
131 return; 132 return;
132 int i = buttons->findRef( (TicTacButton*)sender() ); 133 int i = buttons->findRef( (TicTacButton*)sender() );
133 TicTacButton *b = buttons->at(i); // get piece that was pressed 134 TicTacButton *b = buttons->at(i); // get piece that was pressed
134 if ( b->type() == TicTacButton::Blank ) { // empty piece? 135 if ( b->type() == TicTacButton::Blank ) { // empty piece?
135 btArray->at(i) = TicTacButton::Circle; 136 btArray->at(i) = TicTacButton::Circle;
136 updateButtons(); 137 updateButtons();
137 if ( checkBoard( btArray ) == 0 ) // not a winning move? 138 if ( checkBoard( btArray ) == 0 ) // not a winning move?
138 computerMove(); 139 computerMove();
139 int s = checkBoard( btArray ); 140 int s = checkBoard( btArray );
140 if ( s ) { // any winners yet? 141 if ( s ) { // any winners yet?
141 st = s == TicTacButton::Circle ? HumanWon : ComputerWon; 142 st = s == TicTacButton::Circle ? HumanWon : ComputerWon;
142 emit finished(); 143 emit finished();
143 } 144 }
144 } 145 }
145} 146}
146 147
147 148
148// -------------------------------------------------------------------------- 149// --------------------------------------------------------------------------
149// TicTacGameBoard::updateButtons() 150// TicTacGameBoard::updateButtons()
150// 151//
151// Updates all buttons that have changed state 152// Updates all buttons that have changed state
152// 153//
153 154
154void TicTacGameBoard::updateButtons() 155void TicTacGameBoard::updateButtons()
155{ 156{
156 for ( int i=0; i<nBoard*nBoard; i++ ) { 157 for ( int i=0; i<nBoard*nBoard; i++ ) {
157 if ( buttons->at(i)->type() != btArray->at(i) ) 158 if ( buttons->at(i)->type() != btArray->at(i) )
158 buttons->at(i)->setType( (TicTacButton::Type)btArray->at(i) ); 159 buttons->at(i)->setType( (TicTacButton::Type)btArray->at(i) );
159 buttons->at(i)->setEnabled( buttons->at(i)->type() == 160 buttons->at(i)->setEnabled( buttons->at(i)->type() ==
160 TicTacButton::Blank ); 161 TicTacButton::Blank );
161 } 162 }
162} 163}
163 164
164 165
165// -------------------------------------------------------------------------- 166// --------------------------------------------------------------------------
166// TicTacGameBoard::checkBoard() 167// TicTacGameBoard::checkBoard()
167// 168//
168// Checks if one of the players won the game, works for any board size. 169// Checks if one of the players won the game, works for any board size.
169// 170//
170// Returns: 171// Returns:
171// - TicTacButton::Cross if the player with X buttons won 172// - TicTacButton::Cross if the player with X buttons won
172// - TicTacButton::Circle if the player with O buttons won 173// - TicTacButton::Circle if the player with O buttons won
173// - Zero (0) if there is no winner yet 174// - Zero (0) if there is no winner yet
174// 175//
175 176
176int TicTacGameBoard::checkBoard( TicTacArray *a ) 177int TicTacGameBoard::checkBoard( TicTacArray *a )
177{ 178{
178 int t = 0; 179 int t = 0;
179 int row, col; 180 int row, col;
180 bool won = FALSE; 181 bool won = FALSE;
181 for ( row=0; row<nBoard && !won; row++ ) { // check horizontal 182 for ( row=0; row<nBoard && !won; row++ ) { // check horizontal
182 t = a->at(row*nBoard); 183 t = a->at(row*nBoard);
183 if ( t == TicTacButton::Blank ) 184 if ( t == TicTacButton::Blank )
184 continue; 185 continue;
185 col = 1; 186 col = 1;
186 while ( col<nBoard && a->at(row*nBoard+col) == t ) 187 while ( col<nBoard && a->at(row*nBoard+col) == t )
187 col++; 188 col++;
188 if ( col == nBoard ) 189 if ( col == nBoard )
189 won = TRUE; 190 won = TRUE;
190 } 191 }
191 for ( col=0; col<nBoard && !won; col++ ) { // check vertical 192 for ( col=0; col<nBoard && !won; col++ ) { // check vertical
192 t = a->at(col); 193 t = a->at(col);
193 if ( t == TicTacButton::Blank ) 194 if ( t == TicTacButton::Blank )
194 continue; 195 continue;
195 row = 1; 196 row = 1;
196 while ( row<nBoard && a->at(row*nBoard+col) == t ) 197 while ( row<nBoard && a->at(row*nBoard+col) == t )
197 row++; 198 row++;
198 if ( row == nBoard ) 199 if ( row == nBoard )
199 won = TRUE; 200 won = TRUE;
200 } 201 }
201 if ( !won ) { // check diagonal top left 202 if ( !won ) { // check diagonal top left
202 t = a->at(0); // to bottom right 203 t = a->at(0); // to bottom right
203 if ( t != TicTacButton::Blank ) { 204 if ( t != TicTacButton::Blank ) {
204 int i = 1; 205 int i = 1;
205 while ( i<nBoard && a->at(i*nBoard+i) == t ) 206 while ( i<nBoard && a->at(i*nBoard+i) == t )
206 i++; 207 i++;
207 if ( i == nBoard ) 208 if ( i == nBoard )
208 won = TRUE; 209 won = TRUE;
209 } 210 }
210 } 211 }
211 if ( !won ) { // check diagonal bottom left 212 if ( !won ) { // check diagonal bottom left
212 int j = nBoard-1; // to top right 213 int j = nBoard-1; // to top right
213 int i = 0; 214 int i = 0;
214 t = a->at(i+j*nBoard); 215 t = a->at(i+j*nBoard);
215 if ( t != TicTacButton::Blank ) { 216 if ( t != TicTacButton::Blank ) {
216 i++; j--; 217 i++; j--;
217 while ( i<nBoard && a->at(i+j*nBoard) == t ) { 218 while ( i<nBoard && a->at(i+j*nBoard) == t ) {
218 i++; j--; 219 i++; j--;
219 } 220 }
220 if ( i == nBoard ) 221 if ( i == nBoard )
221 won = TRUE; 222 won = TRUE;
222 } 223 }
223 } 224 }
224 if ( !won ) // no winner 225 if ( !won ) // no winner
225 t = 0; 226 t = 0;
226 return t; 227 return t;
227} 228}
228 229
229 230
230// -------------------------------------------------------------------------- 231// --------------------------------------------------------------------------
231// TicTacGameBoard::computerMove() 232// TicTacGameBoard::computerMove()
232// 233//
233// Puts a piece on the game board. Very, very simple. 234// Puts a piece on the game board. Very, very simple.
234// 235//
235 236
236void TicTacGameBoard::computerMove() 237void TicTacGameBoard::computerMove()
237{ 238{
238 int numButtons = nBoard*nBoard; 239 int numButtons = nBoard*nBoard;
239 int *altv = new int[numButtons]; // buttons alternatives 240 int *altv = new int[numButtons]; // buttons alternatives
240 int altc = 0; 241 int altc = 0;
241 int stopHuman = -1; 242 int stopHuman = -1;
242 TicTacArray a = btArray->copy(); 243 TicTacArray a = btArray->copy();
243 int i; 244 int i;
244 for ( i=0; i<numButtons; i++ ) { // try all positions 245 for ( i=0; i<numButtons; i++ ) { // try all positions
245 if ( a[i] != TicTacButton::Blank ) // already a piece there 246 if ( a[i] != TicTacButton::Blank ) // already a piece there
246 continue; 247 continue;
247 a[i] = TicTacButton::Cross; // test if computer wins 248 a[i] = TicTacButton::Cross; // test if computer wins
248 if ( checkBoard(&a) == a[i] ) { // computer will win 249 if ( checkBoard(&a) == a[i] ) { // computer will win
249 st = ComputerWon; 250 st = ComputerWon;
250 stopHuman = -1; 251 stopHuman = -1;
251 break; 252 break;
252 } 253 }
253 a[i] = TicTacButton::Circle; // test if human wins 254 a[i] = TicTacButton::Circle; // test if human wins
254 if ( checkBoard(&a) == a[i] ) { // oops... 255 if ( checkBoard(&a) == a[i] ) { // oops...
255 stopHuman = i; // remember position 256 stopHuman = i; // remember position
256 a[i] = TicTacButton::Blank; // restore button 257 a[i] = TicTacButton::Blank; // restore button
257 continue; // computer still might win 258 continue; // computer still might win
258 } 259 }
259 a[i] = TicTacButton::Blank; // restore button 260 a[i] = TicTacButton::Blank; // restore button
260 altv[altc++] = i; // remember alternative 261 altv[altc++] = i; // remember alternative
261 } 262 }
262 if ( stopHuman >= 0 ) // must stop human from winning 263 if ( stopHuman >= 0 ) // must stop human from winning
263 a[stopHuman] = TicTacButton::Cross; 264 a[stopHuman] = TicTacButton::Cross;
264 else if ( i == numButtons ) { // tried all alternatives 265 else if ( i == numButtons ) { // tried all alternatives
265 if ( altc > 0 ) // set random piece 266 if ( altc > 0 ) // set random piece
266 a[altv[rand()%(altc--)]] = TicTacButton::Cross; 267 a[altv[rand()%(altc--)]] = TicTacButton::Cross;
267 if ( altc == 0 ) { // no more blanks 268 if ( altc == 0 ) { // no more blanks
268 st = NobodyWon; 269 st = NobodyWon;
269 emit finished(); 270 emit finished();
270 } 271 }
271 } 272 }
272 *btArray = a; // update model 273 *btArray = a; // update model
273 updateButtons(); // update buttons 274 updateButtons(); // update buttons
274 delete[] altv; 275 delete[] altv;
275} 276}
276 277
277 278
278//*************************************************************************** 279//***************************************************************************
279//* TicTacToe member functions 280//* TicTacToe member functions
280//*************************************************************************** 281//***************************************************************************
281 282
282// -------------------------------------------------------------------------- 283// --------------------------------------------------------------------------
283// Creates a game widget with a game board and two push buttons, and connects 284// Creates a game widget with a game board and two push buttons, and connects
284// signals of child widgets to slots. 285// signals of child widgets to slots.
285// 286//
286 287
287TicTacToe::TicTacToe( QWidget *parent, const char *name, WFlags fl ) 288TicTacToe::TicTacToe( QWidget *parent, const char *name, WFlags fl )
288 : QWidget( parent, name, fl ) 289 : QWidget( parent, name, fl )
289{ 290{
290 QVBoxLayout * l = new QVBoxLayout( this, 6 ); 291 QVBoxLayout * l = new QVBoxLayout( this, 6 );
291 292
292 // Create a message label 293 // Create a message label
293 boardSize = 3; 294 boardSize = 3;
294 295
295 message = new QLabel( this ); 296 message = new QLabel( this );
296 message->setFrameStyle( QFrame::WinPanel | QFrame::Sunken ); 297 message->setFrameStyle( QFrame::WinPanel | QFrame::Sunken );
297 message->setAlignment( AlignCenter ); 298 message->setAlignment( AlignCenter );
298 l->addWidget( message ); 299 l->addWidget( message );
299 300
300 // Create the game board and connect the signal finished() to this 301 // Create the game board and connect the signal finished() to this
301 // gameOver() slot 302 // gameOver() slot
302 303
303 board = new TicTacGameBoard( boardSize, this ); 304 board = new TicTacGameBoard( boardSize, this );
304 connect( board, SIGNAL(finished()), SLOT(gameOver()) ); 305 connect( board, SIGNAL(finished()), SLOT(gameOver()) );
305 l->addWidget( board ); 306 l->addWidget( board );
306 307
307 // Create a horizontal frame line 308 // Create a horizontal frame line
308 309
309 QFrame *line = new QFrame( this ); 310 QFrame *line = new QFrame( this );
310 line->setFrameStyle( QFrame::HLine | QFrame::Sunken ); 311 line->setFrameStyle( QFrame::HLine | QFrame::Sunken );
311 l->addWidget( line ); 312 l->addWidget( line );
312 313
313 // Create the combo box for deciding who should start, and 314 // Create the combo box for deciding who should start, and
314 // connect its clicked() signals to the buttonClicked() slot 315 // connect its clicked() signals to the buttonClicked() slot
315 316
316 whoStarts = new QComboBox( this ); 317 whoStarts = new QComboBox( this );
317 whoStarts->insertItem( tr( "Computer starts" ) ); 318 whoStarts->insertItem( tr( "Computer starts" ) );
318 whoStarts->insertItem( tr( "Human starts" ) ); 319 whoStarts->insertItem( tr( "Human starts" ) );
319 l->addWidget( whoStarts ); 320 l->addWidget( whoStarts );
320 321
321 // Create the push buttons and connect their clicked() signals 322 // Create the push buttons and connect their clicked() signals
322 // to this right slots. 323 // to this right slots.
323 324
324 newGame = new QPushButton( tr( "Play!" ), this ); 325 newGame = new QPushButton( tr( "Play!" ), this );
325 connect( newGame, SIGNAL(clicked()), SLOT(newGameClicked()) ); 326 connect( newGame, SIGNAL(clicked()), SLOT(newGameClicked()) );
326 quit = new QPushButton( tr( "Quit" ), this ); 327 quit = new QPushButton( tr( "Quit" ), this );
327 connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) ); 328 connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) );
328 QHBoxLayout * b = new QHBoxLayout; 329 QHBoxLayout * b = new QHBoxLayout;
329 l->addLayout( b ); 330 l->addLayout( b );
330 b->addWidget( newGame ); 331 b->addWidget( newGame );
331 b->addWidget( quit ); 332 b->addWidget( quit );
333 move(0,0);
332 QPEApplication::showWidget( this ); 334 QPEApplication::showWidget( this );
333 newState(); 335 newState();
334} 336}
335 337
336 338
337// -------------------------------------------------------------------------- 339// --------------------------------------------------------------------------
338// TicTacToe::newGameClicked() - SLOT 340// TicTacToe::newGameClicked() - SLOT
339// 341//
340// This slot is activated when the new game button is clicked. 342// This slot is activated when the new game button is clicked.
341// 343//
342 344
343void TicTacToe::newGameClicked() 345void TicTacToe::newGameClicked()
344{ 346{
345 board->computerStarts( whoStarts->currentItem() == 0 ); 347 board->computerStarts( whoStarts->currentItem() == 0 );
346 board->newGame(); 348 board->newGame();
347 newState(); 349 newState();
348} 350}
349 351
350 352
351// -------------------------------------------------------------------------- 353// --------------------------------------------------------------------------
352// TicTacToe::gameOver() - SLOT 354// TicTacToe::gameOver() - SLOT
353// 355//
354// This slot is activated when the TicTacGameBoard emits the signal 356// This slot is activated when the TicTacGameBoard emits the signal
355// "finished()", i.e. when a player has won or when it is a draw. 357// "finished()", i.e. when a player has won or when it is a draw.
356// 358//
357 359
358void TicTacToe::gameOver() 360void TicTacToe::gameOver()
359{ 361{
360 newState(); // update text box 362 newState(); // update text box
361} 363}
362 364
363 365
364// -------------------------------------------------------------------------- 366// --------------------------------------------------------------------------
365// Updates the message to reflect a new state. 367// Updates the message to reflect a new state.
366// 368//
367 369
368void TicTacToe::newState() 370void TicTacToe::newState()
369{ 371{
370 QStringList msg; 372 QStringList msg;
371 msg << tr( "Click Play to start") 373 msg << tr( "Click Play to start")
372 << tr("Make your move") 374 << tr("Make your move")
373 << tr("You won!") 375 << tr("You won!")
374 << tr("Computer won!") 376 << tr("Computer won!")
375 << tr("It's a draw"); 377 << tr("It's a draw");
376 message->setText( msg[board->state()] ); 378 message->setText( msg[board->state()] );
377 return; 379 return;
378} 380}