summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/games/chess/chess.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/noncore/games/chess/chess.cpp b/noncore/games/chess/chess.cpp
index 96a838a..29c96bb 100644
--- a/noncore/games/chess/chess.cpp
+++ b/noncore/games/chess/chess.cpp
@@ -1,71 +1,73 @@
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 21
22// human is not offered a promotion yet 22// human is not offered a promotion yet
23 23
24#include <stdlib.h>
25
24#include <qcanvas.h> 26#include <qcanvas.h>
25#include <qmainwindow.h> 27#include <qmainwindow.h>
26#include <qlist.h> 28#include <qlist.h>
27#include <qimage.h> 29#include <qimage.h>
28#include <qpainter.h> 30#include <qpainter.h>
29#include <qmessagebox.h> 31#include <qmessagebox.h>
30#include <qregexp.h> 32#include <qregexp.h>
31 33
32#include <qpe/config.h> 34#include <qpe/config.h>
33#include <qpe/resource.h> 35#include <qpe/resource.h>
34 36
35#include "chess.h" 37#include "chess.h"
36 38
37#define CHESS_DEBUG 39#define CHESS_DEBUG
38 40
39int pieceSize = 40; 41int pieceSize = 40;
40static QVector < QImage > imgList; 42static QVector < QImage > imgList;
41int timeMoves, timeTime; 43int timeMoves, timeTime;
42 44
43int BoardView::convertToRank(int r) 45int BoardView::convertToRank(int r)
44{ 46{
45 r = r / pieceSize; 47 r = r / pieceSize;
46 if (humanSide == sideWhite) 48 if (humanSide == sideWhite)
47 r = 8 - r; 49 r = 8 - r;
48 else 50 else
49 r++; 51 r++;
50 return r; 52 return r;
51} 53}
52 54
53char BoardView::convertToFile(int f) 55char BoardView::convertToFile(int f)
54{ 56{
55 f = f / pieceSize; 57 f = f / pieceSize;
56 if (humanSide == sideWhite) 58 if (humanSide == sideWhite)
57 return f + 'a'; 59 return f + 'a';
58 else 60 else
59 return 'h' - f; 61 return 'h' - f;
60} 62}
61 63
62int BoardView::convertFromFile(char f) 64int BoardView::convertFromFile(char f)
63{ 65{
64 if (humanSide == sideWhite) 66 if (humanSide == sideWhite)
65 f = f - 'a'; 67 f = f - 'a';
66 else 68 else
67 f = 'h' - f; 69 f = 'h' - f;
68 return f * pieceSize; 70 return f * pieceSize;
69} 71}
70 72
71int BoardView::convertFromRank(int r) 73int BoardView::convertFromRank(int r)
@@ -293,66 +295,66 @@ void BoardView::contentsMousePressEvent(QMouseEvent * e)
293 int fromRank = convertToRank(activePiece->y()); 295 int fromRank = convertToRank(activePiece->y());
294 char toFile = convertToFile(e->pos().x()); 296 char toFile = convertToFile(e->pos().x());
295 int toRank = convertToRank(e->pos().y()); 297 int toRank = convertToRank(e->pos().y());
296 QString moveS; 298 QString moveS;
297 moveS.append(fromFile); 299 moveS.append(fromFile);
298 moveS.append(moveS.number(fromRank)); 300 moveS.append(moveS.number(fromRank));
299 moveS.append(toFile); 301 moveS.append(toFile);
300 moveS.append(moveS.number(toRank)); 302 moveS.append(moveS.number(toRank));
301 if ((activePiece->type == wPawn 303 if ((activePiece->type == wPawn
302 && fromRank == 7 && toRank == 8) 304 && fromRank == 7 && toRank == 8)
303 || (activePiece->type == bPawn 305 || (activePiece->type == bPawn
304 && fromRank == 2 && toRank == 1)) { 306 && fromRank == 2 && toRank == 1)) {
305 // offer a promotion 307 // offer a promotion
306 emit(showMessage 308 emit(showMessage
307 ("you are meant to be offered a promotion here")); 309 ("you are meant to be offered a promotion here"));
308 char promoteTo = wQueen;// doesnt matter for now 310 char promoteTo = wQueen;// doesnt matter for now
309 moveS.append(promoteTo); 311 moveS.append(promoteTo);
310 moveS.append("\n"); 312 moveS.append("\n");
311 crafty->writeToStdin(moveS.latin1()); 313 crafty->writeToStdin(moveS.latin1());
312 } 314 }
313 } 315 }
314 activePiece = 0; 316 activePiece = 0;
315 drawBackgroundImage(QPoint(-1, -1)); 317 drawBackgroundImage(QPoint(-1, -1));
316 } 318 }
317 } 319 }
318 320
319 else { 321 else {
320 emitErrorMessage(); 322 emitErrorMessage();
321 } 323 }
322} 324}
323 325
324void BoardView::swapSides() 326void BoardView::swapSides()
325{ 327{
326 if (activeSide == humanSide && playingGame) { 328 if (activeSide == humanSide && playingGame) {
327 humanSide = !humanSide; 329 humanSide = !humanSide;
328 crafty->writeToStdin("savepos\ngo\n"); 330 crafty->writeToStdin("savepos\ngo\n");
329 } else 331 } else
330 emitErrorMessage(); 332 emitErrorMessage();
331} 333}
332 334
333BoardView::BoardView(QCanvas *c, QWidget *w, const char *name) 335BoardView::BoardView(QCanvas *c, QWidget *w, const char *name)
334 : QCanvasView(c, w, name) { 336 : QCanvasView(c, w, name) {
335 humanSide = sideWhite; 337 humanSide = sideWhite;
336 activeSide = sideWhite; 338 activeSide = sideWhite;
337 playingGame = TRUE; 339 playingGame = TRUE;
338 activePiece = 0; 340 activePiece = 0;
339 list.setAutoDelete(TRUE); 341 list.setAutoDelete(TRUE);
340 setCanvas(new QCanvas()); 342 setCanvas(new QCanvas());
341 Config c("Chess", Config::User); 343 Config conf("Chess", Config::User);
342 c.setGroup("Theme"); 344 conf.setGroup("Theme");
343 QString theme = c.readEntry("imagefile", "simple-28"); 345 QString theme = conf.readEntry("imagefile", "simple-28");
344 setTheme(theme); 346 setTheme(theme);
345 crafty = new CraftyProcess(this); 347 crafty = new CraftyProcess(this);
346 crafty->addArgument("crafty"); 348 crafty->addArgument("crafty");
347 if (!crafty->start()) { 349 if (!crafty->start()) {
348 QMessageBox::critical(0, 350 QMessageBox::critical(0,
349 tr("Could not find crafty chess engine"), 351 tr("Could not find crafty chess engine"),
350 tr("Quit")); 352 tr("Quit"));
351 exit(-1); 353 exit(-1);
352 } 354 }
353 355
354 connect(crafty, SIGNAL(readyReadStdout()), this, SLOT(readStdout())); 356 connect(crafty, SIGNAL(readyReadStdout()), this, SLOT(readStdout()));
355 connect(crafty, SIGNAL(processExited()), this, SLOT(craftyDied())); 357 connect(crafty, SIGNAL(processExited()), this, SLOT(craftyDied()));
356// crafty->writeToStdin("xboard\nics\nkibitz=2\n"); 358// crafty->writeToStdin("xboard\nics\nkibitz=2\n");
357 newGame(); 359 newGame();
358} 360}