-rw-r--r-- | noncore/games/mindbreaker/mindbreaker.cpp | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/noncore/games/mindbreaker/mindbreaker.cpp b/noncore/games/mindbreaker/mindbreaker.cpp index b0e4d88..1a1d05d 100644 --- a/noncore/games/mindbreaker/mindbreaker.cpp +++ b/noncore/games/mindbreaker/mindbreaker.cpp | |||
@@ -88,216 +88,216 @@ void Peg::buildImages() | |||
88 | QImage pegs = Resource::loadImage("mindbreaker/pegs"); | 88 | QImage pegs = Resource::loadImage("mindbreaker/pegs"); |
89 | int x = 0; | 89 | int x = 0; |
90 | int y = 0; | 90 | int y = 0; |
91 | int i; | 91 | int i; |
92 | eggLevel = 0; | 92 | eggLevel = 0; |
93 | normalPegs.resize(10); | 93 | normalPegs.resize(10); |
94 | for (i = 0; i < 6; i++) { | 94 | for (i = 0; i < 6; i++) { |
95 | normalPegs.insert(i, new QImage(pegs.copy(x, y, peg_size, peg_size))); | 95 | normalPegs.insert(i, new QImage(pegs.copy(x, y, peg_size, peg_size))); |
96 | x += peg_size; | 96 | x += peg_size; |
97 | } | 97 | } |
98 | specialPegs.resize(5); | 98 | specialPegs.resize(5); |
99 | for (i = 0; i < 5; i++) { | 99 | for (i = 0; i < 5; i++) { |
100 | specialPegs.insert(i, new QImage(pegs.copy(x,y,peg_size, peg_size))); | 100 | specialPegs.insert(i, new QImage(pegs.copy(x,y,peg_size, peg_size))); |
101 | x += peg_size; | 101 | x += peg_size; |
102 | } | 102 | } |
103 | 103 | ||
104 | QImage image = Resource::loadImage("mindbreaker/mindbreaker"); | 104 | QImage image = Resource::loadImage("mindbreaker/mindbreaker"); |
105 | /* copy from master image to functional images */ | 105 | /* copy from master image to functional images */ |
106 | x = 0; | 106 | x = 0; |
107 | y = panel_height; | 107 | y = panel_height; |
108 | normalPegs.insert(8, | 108 | normalPegs.insert(8, |
109 | new QImage(image.copy(x, y, panel_width, panel_height))); | 109 | new QImage(image.copy(x, y, panel_width, panel_height))); |
110 | y += panel_height; | 110 | y += panel_height; |
111 | y += title_height; | 111 | y += title_height; |
112 | normalPegs.insert(9, | 112 | normalPegs.insert(9, |
113 | new QImage(image.copy(x, y, title_width, title_height))); | 113 | new QImage(image.copy(x, y, title_width, title_height))); |
114 | y += title_height; | 114 | y += title_height; |
115 | 115 | ||
116 | x = 6 * peg_size; | 116 | x = 6 * peg_size; |
117 | normalPegs.insert(6, | 117 | normalPegs.insert(6, |
118 | new QImage(image.copy(x, y, answerpeg_size, answerpeg_size))); | 118 | new QImage(image.copy(x, y, answerpeg_size, answerpeg_size))); |
119 | x += answerpeg_size; | 119 | x += answerpeg_size; |
120 | normalPegs.insert(7, | 120 | normalPegs.insert(7, |
121 | new QImage(image.copy(x, y, answerpeg_size, answerpeg_size))); | 121 | new QImage(image.copy(x, y, answerpeg_size, answerpeg_size))); |
122 | } | 122 | } |
123 | 123 | ||
124 | QImage Peg::imageForType(int t) | 124 | QImage Peg::imageForType(int t) |
125 | { | 125 | { |
126 | if (eggLevel > t ) { | 126 | if (eggLevel > t ) { |
127 | if( t < 5) { | 127 | if( t < 5) { |
128 | return *specialPegs[t]; | 128 | return *specialPegs[t]; |
129 | } else { | 129 | } else { |
130 | return *normalPegs[rand() % 6]; | 130 | return *normalPegs[rand() % 6]; |
131 | } | 131 | } |
132 | } | 132 | } |
133 | return *normalPegs[t]; | 133 | return *normalPegs[t]; |
134 | } | 134 | } |
135 | 135 | ||
136 | Peg::Peg(QCanvas *canvas , int t, int g = -1, int p = -1) | 136 | Peg::Peg(QCanvas *canvas , int t, int g, int p) |
137 | : QCanvasRectangle(canvas) | 137 | : QCanvasRectangle(canvas) |
138 | { | 138 | { |
139 | setSize(normalPegs[t]->width(), normalPegs[t]->height() ); | 139 | setSize(normalPegs[t]->width(), normalPegs[t]->height() ); |
140 | pegtype = t; | 140 | pegtype = t; |
141 | isplaced = FALSE; | 141 | isplaced = FALSE; |
142 | peg_pos = p; | 142 | peg_pos = p; |
143 | peg_go = g; | 143 | peg_go = g; |
144 | aniStep = rand() % 6; | 144 | aniStep = rand() % 6; |
145 | setAnimated(TRUE); | 145 | setAnimated(TRUE); |
146 | } | 146 | } |
147 | 147 | ||
148 | void Peg::advance(int phase) { | 148 | void Peg::advance(int phase) { |
149 | if (phase == 0) | 149 | if (phase == 0) |
150 | aniStep = (++aniStep) % 6; | 150 | aniStep = (++aniStep) % 6; |
151 | else { | 151 | else { |
152 | hide(); | 152 | hide(); |
153 | show(); | 153 | show(); |
154 | } | 154 | } |
155 | } | 155 | } |
156 | 156 | ||
157 | void Peg::drawShape(QPainter &p ) | 157 | void Peg::drawShape(QPainter &p ) |
158 | { | 158 | { |
159 | if ((pegtype == 5) && eggLevel > 5) { | 159 | if ((pegtype == 5) && eggLevel > 5) { |
160 | p.drawImage(x(), y(), *normalPegs[aniStep]); | 160 | p.drawImage(x(), y(), *normalPegs[aniStep]); |
161 | } else | 161 | } else |
162 | p.drawImage(x(), y(), imageForType(pegtype)); | 162 | p.drawImage(x(), y(), imageForType(pegtype)); |
163 | } | 163 | } |
164 | 164 | ||
165 | bool Peg::hit( const QPoint &p ) const | 165 | bool Peg::hit( const QPoint &p ) const |
166 | { | 166 | { |
167 | int ix = p.x() - int(x()); | 167 | int ix = p.x() - int(x()); |
168 | int iy = p.y() - int(y()); | 168 | int iy = p.y() - int(y()); |
169 | if (!normalPegs[pegtype]->valid(ix, iy)) | 169 | if (!normalPegs[pegtype]->valid(ix, iy)) |
170 | return FALSE; | 170 | return FALSE; |
171 | QRgb pixel = normalPegs[pegtype]->pixel(ix, iy); | 171 | QRgb pixel = normalPegs[pegtype]->pixel(ix, iy); |
172 | return (qAlpha(pixel ) != 0); | 172 | return (qAlpha(pixel ) != 0); |
173 | } | 173 | } |
174 | 174 | ||
175 | inline bool Peg::placed() const | 175 | inline bool Peg::placed() const |
176 | { | 176 | { |
177 | return isplaced; | 177 | return isplaced; |
178 | } | 178 | } |
179 | 179 | ||
180 | inline int Peg::pegGo() const | 180 | inline int Peg::pegGo() const |
181 | { | 181 | { |
182 | return peg_go; | 182 | return peg_go; |
183 | } | 183 | } |
184 | 184 | ||
185 | inline int Peg::pegPos() const | 185 | inline int Peg::pegPos() const |
186 | { | 186 | { |
187 | return peg_pos; | 187 | return peg_pos; |
188 | } | 188 | } |
189 | 189 | ||
190 | inline void Peg::setPegPos(int p) | 190 | inline void Peg::setPegPos(int p) |
191 | { | 191 | { |
192 | peg_pos = p; | 192 | peg_pos = p; |
193 | } | 193 | } |
194 | 194 | ||
195 | inline void Peg::setPlaced(bool p) | 195 | inline void Peg::setPlaced(bool p) |
196 | { | 196 | { |
197 | isplaced = p; | 197 | isplaced = p; |
198 | } | 198 | } |
199 | 199 | ||
200 | inline int Peg::type() const | 200 | inline int Peg::type() const |
201 | { | 201 | { |
202 | return pegtype; | 202 | return pegtype; |
203 | } | 203 | } |
204 | 204 | ||
205 | /* Load the main image, copy from it the pegs, the board, and the answer image | 205 | /* Load the main image, copy from it the pegs, the board, and the answer image |
206 | * and use these to create the tray, answer and board | 206 | * and use these to create the tray, answer and board |
207 | */ | 207 | */ |
208 | MindBreaker::MindBreaker( QWidget *parent=0, const char *name=0, int wFlags=0 ) | 208 | MindBreaker::MindBreaker( QWidget *parent, const char *name, int wFlags ) |
209 | : QMainWindow(parent, name, wFlags), | 209 | : QMainWindow(parent, name, wFlags), |
210 | canvas(board_height, board_width) | 210 | canvas(board_height, board_width) |
211 | { | 211 | { |
212 | MindBreakerBoard *m = new MindBreakerBoard(canvas, this); | 212 | MindBreakerBoard *m = new MindBreakerBoard(canvas, this); |
213 | setCentralWidget(m); | 213 | setCentralWidget(m); |
214 | 214 | ||
215 | setToolBarsMovable( FALSE ); | 215 | setToolBarsMovable( FALSE ); |
216 | 216 | ||
217 | QPEToolBar *tb = new QPEToolBar(this); | 217 | QPEToolBar *tb = new QPEToolBar(this); |
218 | tb->setHorizontalStretchable( TRUE ); | 218 | tb->setHorizontalStretchable( TRUE ); |
219 | 219 | ||
220 | QPixmap newicon = Resource::loadPixmap("new"); | 220 | QPixmap newicon = Resource::loadPixmap("new"); |
221 | new QToolButton(newicon, tr("New Game"), 0, | 221 | new QToolButton(newicon, tr("New Game"), 0, |
222 | m, SLOT(clear()), tb, "NewGame"); | 222 | m, SLOT(clear()), tb, "NewGame"); |
223 | 223 | ||
224 | score = new QToolButton(tb); | 224 | score = new QToolButton(tb); |
225 | score->setText(""); | 225 | score->setText(""); |
226 | score->setMaximumHeight(20); | 226 | score->setMaximumHeight(20); |
227 | score->setUsesTextLabel(TRUE); | 227 | score->setUsesTextLabel(TRUE); |
228 | tb->setStretchableWidget(score); | 228 | tb->setStretchableWidget(score); |
229 | 229 | ||
230 | connect(m, SIGNAL(scoreChanged(int, int)), this, SLOT(setScore(int, int))); | 230 | connect(m, SIGNAL(scoreChanged(int, int)), this, SLOT(setScore(int, int))); |
231 | connect(score, SIGNAL(clicked()), m, SLOT(resetScore())); | 231 | connect(score, SIGNAL(clicked()), m, SLOT(resetScore())); |
232 | 232 | ||
233 | int a, b; | 233 | int a, b; |
234 | m->getScore(&a, &b); | 234 | m->getScore(&a, &b); |
235 | setScore(a,b); | 235 | setScore(a,b); |
236 | } | 236 | } |
237 | 237 | ||
238 | void MindBreaker::setScore(int turns, int games) | 238 | void MindBreaker::setScore(int turns, int games) |
239 | { | 239 | { |
240 | double average; | 240 | double average; |
241 | double total_turns = turns; | 241 | double total_turns = turns; |
242 | double total_games = games; | 242 | double total_games = games; |
243 | 243 | ||
244 | if(total_games > 0) | 244 | if(total_games > 0) |
245 | average = total_turns / total_games; | 245 | average = total_turns / total_games; |
246 | else | 246 | else |
247 | average = 0.0; | 247 | average = 0.0; |
248 | 248 | ||
249 | score->setText(tr("win avg: %1 turns (%2 games)").arg(average).arg(games)); | 249 | score->setText(tr("win avg: %1 turns (%2 games)").arg(average).arg(games)); |
250 | } | 250 | } |
251 | 251 | ||
252 | 252 | ||
253 | MindBreakerBoard::MindBreakerBoard( QCanvas &c, QWidget *parent=0, | 253 | MindBreakerBoard::MindBreakerBoard( QCanvas &canv, QWidget *parent, |
254 | const char *name=0, int wFlags=0 ) | 254 | const char *name, int wFlags ) |
255 | : QCanvasView(&c, parent, name, wFlags) | 255 | : QCanvasView(&canv, parent, name, wFlags) |
256 | { | 256 | { |
257 | int i, x, y; | 257 | int i, x, y; |
258 | struct timeval tv; | 258 | struct timeval tv; |
259 | 259 | ||
260 | current_go = 0; | 260 | current_go = 0; |
261 | gettimeofday(&tv, 0); | 261 | gettimeofday(&tv, 0); |
262 | 262 | ||
263 | srand(tv.tv_usec); | 263 | srand(tv.tv_usec); |
264 | 264 | ||
265 | canvas()->setAdvancePeriod(500); | 265 | canvas()->setAdvancePeriod(500); |
266 | 266 | ||
267 | QImage image = Resource::loadImage("mindbreaker/mindbreaker"); | 267 | QImage image = Resource::loadImage("mindbreaker/mindbreaker"); |
268 | 268 | ||
269 | /* copy from master image to functional images */ | 269 | /* copy from master image to functional images */ |
270 | x = 0; | 270 | x = 0; |
271 | y = 0; | 271 | y = 0; |
272 | panelImage = image.copy(x,y, panel_width, panel_height); | 272 | panelImage = image.copy(x,y, panel_width, panel_height); |
273 | y += panel_height; | 273 | y += panel_height; |
274 | y += panel_height; | 274 | y += panel_height; |
275 | 275 | ||
276 | titleImage = image.copy(x, y, title_width, title_height); | 276 | titleImage = image.copy(x, y, title_width, title_height); |
277 | 277 | ||
278 | Peg::buildImages(); // must be done BEFORE any pegs are made | 278 | Peg::buildImages(); // must be done BEFORE any pegs are made |
279 | 279 | ||
280 | current_highlight = new Peg(canvas(), 8); | 280 | current_highlight = new Peg(canvas(), 8); |
281 | current_highlight->setPlaced(TRUE); | 281 | current_highlight->setPlaced(TRUE); |
282 | current_highlight->setX(0); | 282 | current_highlight->setX(0); |
283 | current_highlight->setY(board_height - ((current_go + 1) * panel_height)); | 283 | current_highlight->setY(board_height - ((current_go + 1) * panel_height)); |
284 | current_highlight->setZ(0); | 284 | current_highlight->setZ(0); |
285 | current_highlight->show(); | 285 | current_highlight->show(); |
286 | 286 | ||
287 | 287 | ||
288 | /* set up the game */ | 288 | /* set up the game */ |
289 | Config c("MindBreaker", Config::User); | 289 | Config c("MindBreaker", Config::User); |
290 | c.setGroup("Board"); | 290 | c.setGroup("Board"); |
291 | game_over = FALSE; | 291 | game_over = FALSE; |
292 | if (c.readNumEntry("Answer0") < 0) { | 292 | if (c.readNumEntry("Answer0") < 0) { |
293 | for (i = 0; i < 4; i++) { | 293 | for (i = 0; i < 4; i++) { |
294 | answer[i] = rand() % 6; | 294 | answer[i] = rand() % 6; |
295 | current_guess[i] = 6; | 295 | current_guess[i] = 6; |
296 | } | 296 | } |
297 | total_turns = 0; | 297 | total_turns = 0; |
298 | total_games = 0; | 298 | total_games = 0; |
299 | } else { | 299 | } else { |
300 | int j; | 300 | int j; |
301 | c.setGroup("Score"); | 301 | c.setGroup("Score"); |
302 | total_turns = c.readNumEntry("Turns"); | 302 | total_turns = c.readNumEntry("Turns"); |
303 | total_games = c.readNumEntry("Games"); | 303 | total_games = c.readNumEntry("Games"); |