summaryrefslogtreecommitdiff
path: root/noncore/games/zbounce/game.h
Unidiff
Diffstat (limited to 'noncore/games/zbounce/game.h') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/games/zbounce/game.h183
1 files changed, 183 insertions, 0 deletions
diff --git a/noncore/games/zbounce/game.h b/noncore/games/zbounce/game.h
new file mode 100644
index 0000000..ae0d4fa
--- a/dev/null
+++ b/noncore/games/zbounce/game.h
@@ -0,0 +1,183 @@
1/*
2 * Copyright (C) 2000 Stefan Schimanski <1Stein@gmx.de>
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
13 *
14 * You should have received a copy of the GNU Library General Public
15 * License along with this program; if not, write to the Free
16 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17 */
18
19#ifndef GAME_H_INCLUDED
20#define GAME_H_INCLUDED
21
22#include <qwidget.h>
23#include <qcanvas.h>
24#include <qmemarray.h>
25
26class QTimer;
27class JezzField;
28
29#define FIELD_WIDTH 26
30#define FIELD_HEIGHT 26
31
32class Arrow : public QCanvasSprite
33{
34 public:
35 Arrow(QCanvasPixmapArray* array, QCanvas* canvas);
36
37 void update();
38 void changeDirection();
39
40 protected:
41 bool m_vertical;
42};
43
44class Ball : public QCanvasSprite
45{
46 public:
47 Ball(QCanvasPixmapArray* array, QCanvas* canvas);
48
49 void update();
50 void advance(int stage);
51 bool collide( double dx=0, double dy=0 );
52
53 protected:
54 int m_animDelay;
55 int m_soundDelay;
56};
57
58
59class Wall : public QObject
60{
61 Q_OBJECT
62public:
63 enum Direction { Up, Down, Left, Right };
64
65 Wall( JezzField *field, int x, int y, Direction dir, int tile,
66 QObject *parent=0, const char *name=0 );
67
68 void finish();
69 void fill( bool black );
70
71signals:
72 void finished( Wall *wall, int tile );
73
74public slots:
75 void advance();
76 void update();
77
78private:
79 bool isFree( int x, int y );
80
81 Direction m_dir;
82 JezzField *m_field;
83 int m_dx, m_dy;
84 int m_x, m_y;
85 int m_startX, m_startY;
86 int m_tile;
87 int m_delay;
88 bool m_active;
89};
90
91
92class JezzField : public QCanvas
93{
94 Q_OBJECT
95public:
96 JezzField( QPixmap tiles, QObject* parent = 0, const char* name = 0 );
97
98 void setGameTile( int x, int y, bool black );
99
100signals:
101 void ballCollision( Ball *ball, int x, int y, int tile );
102
103private:
104 friend class Ball;
105 QPixmap m_tiles;
106 QMemArray<QPixmap> m_backTiles;
107
108 void setPixmaps( QPixmap tiles );
109 void emitBallCollisiton( Ball *ball, int x, int y, int tile )
110 { emit ballCollision( ball, x, y, tile ); };
111
112};
113
114
115class JezzView : public QCanvasView
116{
117 Q_OBJECT
118public:
119 JezzView(QCanvas* viewing=0, QWidget* parent=0, const char* name=0, WFlags f=0);
120 void changeCursor();
121
122signals:
123 void buildWall( int x, int y, bool vertical );
124
125protected:
126 void viewportMouseReleaseEvent( QMouseEvent * );
127
128private:
129 bool m_vertical;
130};
131
132
133class JezzGame : public QWidget
134{
135 Q_OBJECT
136
137public:
138 JezzGame( int ballNum, QWidget *parent=0, const char *name=0 );
139 ~JezzGame();
140
141 int percent();
142 void display( QString text, int size=20 );
143 void changeCursor();
144
145signals:
146 void died();
147 void newPercent( int percent );
148
149public slots:
150 void start();
151 void stop();
152
153protected slots:
154 void tick();
155 void buildWall( int x, int y, bool vertical );
156 void wallFinished( Wall *wall, int tile );
157 void ballCollision( Ball *ball, int x, int y, int tile );
158
159protected:
160 void makeBlack();
161 void fill( int x, int y );
162 void fillLeft( int x, int y );
163 int m_buf[FIELD_WIDTH][FIELD_HEIGHT];
164
165 JezzField *m_field;
166 JezzView *m_view;
167
168 Wall *m_wall1, *m_wall2;
169
170 QList<Ball> m_balls;
171 QCanvasPixmapArray *m_ballPixmaps;
172 QCanvasPixmapArray *m_arrowPixmaps;
173 QCanvasText *m_text;
174 Arrow *arrow;
175
176 QTimer *m_clock;
177 bool m_running;
178 int m_percent;
179 bool m_pictured;
180
181};
182
183#endif