summaryrefslogtreecommitdiff
path: root/noncore/games/chess/chess.h
blob: 067b2f8880e7172a2f05ab857cd0f73c1f8eea5b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/**********************************************************************
** Copyright (C) 2000 Trolltech AS.  All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
** $Id$
**
**********************************************************************/
#ifndef CHESS_H
#define CHESS_H

#include <qwidget.h>
#include <qcanvas.h>
#include <qmainwindow.h>
#include <qpixmap.h>
#include <qimage.h>
#include <qstack.h>
#include <qvector.h>
#include <qpe/process.h>

#define wPawn 'P'
#define	wKnight 'N'
#define wBishop 'B'
#define wRook 'R'
#define wQueen 'Q'
#define wKing 'K'
#define bPawn 'p'
#define bKnight 'n'
#define bBishop 'b'
#define bRook 'r'
#define bQueen 'q'
#define bKing 'k'
#define NONE N

#define sideWhite 0
#define sideBlack 1


class Piece:public QCanvasRectangle {
  public:
    Piece(QCanvas *, int);
    ~Piece() {
    };

    char type;

  protected:
    void drawShape(QPainter &);
};


class CraftyProcess : public Process {
    public:
	CraftyProcess(QObject *parent) : Process( parent ) { qDebug("CraftyProcess functions not implemented"); }
	~CraftyProcess() { }
	bool start() { qDebug("CraftyProcess functions not implemented"); return FALSE; }
	const char *readStdout() { qDebug("CraftyProcess functions not implemented"); return "Blah"; }
	void writeToStdin(const char *) { qDebug("CraftyProcess functions not implemented"); }
};


class BoardView:public QCanvasView {
  Q_OBJECT public:
     BoardView(QCanvas *, QWidget *, const char *);
    ~BoardView() {
    };

  protected:
    void contentsMousePressEvent(QMouseEvent *);

  signals:
    void showMessage(const QString &);

    public slots:void readStdout();
    void craftyDied() {
	qFatal("Crafty died unexpectedly\n");
    };
    void newGame();
    void setTheme(QString);
    void swapSides();
    void undo();
    void annotateGame();

  private:
    CraftyProcess * crafty;
    QList < Piece > list;
    Piece *activePiece;

    void revertLastMove();
    void emitErrorMessage();
    void drawBackgroundImage(QPoint activeSquare);

    void buildImages(QImage);

    char convertToFile(int);
    int convertToRank(int);
    int convertFromFile(char);
    int convertFromRank(int);

    void decodePosition(const QString & t);

    Piece *findPiece(char f, int r);
    Piece *newPiece(int, char, int);
    void deletePiece(Piece *);

    int pieceSize;
    QPixmap bg;
    QImage whiteSquare, blackSquare, activeWhiteSquare, activeBlackSquare;

    bool humanSide;
    bool activeSide;
    bool playingGame;
};

#endif