• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdegames API Reference
  • KDE Home
  • Contact Us
 

kgoldrunner

  • sources
  • kde-4.14
  • kdegames
  • kgoldrunner
  • src
kgrrulebook.cpp
Go to the documentation of this file.
1 #include "kgrdebug.h"
2 
3 /****************************************************************************
4  * Copyright 2009 Ian Wadham <iandw.au@gmail.com> *
5  * *
6  * This program is free software; you can redistribute it and/or *
7  * modify it under the terms of the GNU General Public License as *
8  * published by the Free Software Foundation; either version 2 of *
9  * the License, or (at your option) any later version. *
10  * *
11  * This program is distributed in the hope that it will be useful, *
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14  * GNU General Public License for more details. *
15  * *
16  * You should have received a copy of the GNU General Public License *
17  * along with this program. If not, see <http://www.gnu.org/licenses/>. *
18  ****************************************************************************/
19 
20 #include "kgrlevelgrid.h"
21 #include "kgrrulebook.h"
22 
23 KGrRuleBook::KGrRuleBook (QObject * parent)
24  :
25  QObject (parent),
26  mVariableTiming (true),
27  mAlwaysCollectNugget (true),
28  mRunThruHole (true),
29  mReappearAtTop (true),
30  mReappearRow (2),
31  mPointsPerCell (4),
32  mTurnAnywhere (false)
33 {
34 }
35 
36 KGrRuleBook::~KGrRuleBook()
37 {
38 }
39 
40 void KGrRuleBook::setTiming (const int enemyCount)
41 {
42  int choice;
43  Timing varTiming[6] = {
44  {40, 58, 78, 88, 340, 23}, // No enemies.
45  {50, 68, 78, 88, 340, 32}, // 1 enemy.
46  {57, 67, 114, 128, 540, 37}, // 2 enemies.
47  {60, 70, 134, 136, 660, 40}, // 3 enemies.
48  {63, 76, 165, 150, 800, 46}, // 4 enemies.
49  {70, 80, 189, 165, 920, 51} // >4 enemies.
50  };
51  if (mVariableTiming) {
52  choice = (enemyCount < 0) ? 0 : enemyCount;
53  choice = (enemyCount > 5) ? 5 : enemyCount;
54  times = varTiming [choice];
55  }
56 }
57 
58 
59 // Initialise the flags for the rules.
60 
61 KGrTraditionalRules::KGrTraditionalRules (QObject * parent)
62  :
63  KGrRuleBook (parent)
64 {
65  mRules = TraditionalRules;
66 
67  mVariableTiming = true;
68  mAlwaysCollectNugget = true;
69  mRunThruHole = true;
70  mReappearAtTop = true;
71  mReappearRow = 2;
72  mPointsPerCell = 4;
73  mTurnAnywhere = false;
74  mEnemiesShowGold = true;
75 
76  Timing t = {40, 58, 78, 88, 340, 23};
77  times = t;
78 }
79 
80 KGrTraditionalRules::~KGrTraditionalRules()
81 {
82 }
83 
84 Direction KGrTraditionalRules::findBestWay (const int eI, const int eJ,
85  const int hI, const int hJ,
86  KGrLevelGrid * pGrid,
87  bool /* leftRightSearch unused */)
88 {
89  grid = pGrid;
90  if (grid->cellType (eI, eJ) == USEDHOLE) { // Could not get out of hole
91  return UP; // (e.g. brick above is closed):
92  } // but keep trying.
93 
94  bool canStand = (grid->enemyMoves (eI, eJ) & dFlag [STAND]) ||
95  (grid->enemyOccupied (eI, eJ + 1) > 0);
96  if (! canStand) {
97  dbk2 << "can stand" << (grid->enemyMoves (eI, eJ) & dFlag [STAND])
98  << "occ-below" << grid->enemyOccupied (eI, eJ + 1);
99  return DOWN;
100  }
101  dbk2 << "not DOWN yet";
102 
103  // Traditional search strategy.
104  Direction dirn = STAND;
105  if (eJ == hJ) {
106  dirn = getHero (eI, eJ, hI); // Hero on same row.
107  if (dirn != STAND) {
108  return dirn; // Can go towards him.
109  }
110  }
111 
112  if (eJ >= hJ) { // Hero above or on same row.
113  dirn = searchUp (eI, eJ, hJ); // Find a way that leads up.
114  }
115  else { // Hero below enemy.
116  dirn = searchDown (eI, eJ, hJ); // Find way that leads down.
117  dbk2 << "searchDown1" << eI << eJ << hJ << "ret" << dirn;
118  if (dirn == STAND) {
119  dirn = searchUp (eI, eJ, hJ); // No go: try going up first.
120  }
121  }
122 
123  if (dirn == STAND) { // When all else fails, look for
124  dirn = searchDown (eI, eJ, eJ - 1); // a way below the hero.
125  dbk2 << "searchDown2" << eI << eJ << (eJ - 1) << "ret" << dirn;
126  }
127 
128  return dirn;
129 }
130 
131 Direction KGrTraditionalRules::searchUp (int ew, int eh, int hh)
132 {
133  int i, ilen, ipos, j, jlen, jpos, deltah, rungs;
134 
135  deltah = eh - hh; // Get distance up to hero's level.
136 
137  // Search for the best ladder right here or on the left.
138  i = ew; ilen = 0; ipos = -1;
139  while (i >= 1) {
140  rungs = distanceUp (i, eh, deltah);
141  if (rungs > ilen) {
142  ilen = rungs; // This the best yet.
143  ipos = i;
144  }
145  if (searchOK (-1, i, eh))
146  i--; // Look further to the left.
147  else
148  i = -1; // Cannot go any further to the left.
149  }
150 
151  // Search for the best ladder on the right.
152  j = ew; jlen = 0; jpos = -1;
153  while (j < FIELDWIDTH) {
154  if (searchOK (+1, j, eh)) {
155  j++; // Look further to the right.
156  rungs = distanceUp (j, eh, deltah);
157  if (rungs > jlen) {
158  jlen = rungs; // This the best yet.
159  jpos = j;
160  }
161  }
162  else
163  j = FIELDWIDTH+1; // Cannot go any further to the right.
164  }
165 
166  if ((ilen == 0) && (jlen == 0)) // No ladder found.
167  return STAND;
168 
169  // Choose a ladder to go to.
170  if (ilen != jlen) { // If the ladders are not the same
171  // length, choose the longer one.
172  if (ilen > jlen) {
173  if (ipos == ew) // If already on the best ladder, go up.
174  return UP;
175  else
176  return LEFT;
177  }
178  else
179  return RIGHT;
180  }
181  else { // Both ladders are the same length.
182 
183  if (ipos == ew) // If already on the best ladder, go up.
184  return UP;
185  else if (ilen == deltah) { // If both reach the hero's level,
186  if ((ew - ipos) <= (jpos - ew)) // choose the closest.
187  return LEFT;
188  else
189  return RIGHT;
190  }
191  else return LEFT; // Else choose the left ladder.
192  }
193 }
194 
195 Direction KGrTraditionalRules::searchDown (int ew, int eh, int hh)
196 {
197  int i, ilen, ipos, j, jlen, jpos, deltah, rungs, path;
198 
199  deltah = hh - eh; // Get distance down to hero's level.
200 
201  // Search for the best way down, right here or on the left.
202  ilen = 0; ipos = -1;
203  i = (willNotFall (ew, eh)) ? ew : -1;
204  rungs = distanceDown (ew, eh, deltah);
205  if (rungs > 0) {
206  ilen = rungs; ipos = ew;
207  }
208 
209  while (i >= 1) {
210  rungs = distanceDown (i - 1, eh, deltah);
211  if (((rungs > 0) && (ilen == 0)) ||
212  ((deltah > 0) && (rungs > ilen)) ||
213  ((deltah <= 0) && (rungs < ilen) && (rungs != 0))) {
214  ilen = rungs; // This the best way yet.
215  ipos = i - 1;
216  }
217  if (searchOK (-1, i, eh))
218  i--; // Look further to the left.
219  else
220  i = -1; // Cannot go any further to the left.
221  }
222 
223  // Search for the best way down, on the right.
224  j = ew; jlen = 0; jpos = -1;
225  while (j < FIELDWIDTH) {
226  rungs = distanceDown (j + 1, eh, deltah);
227  if (((rungs > 0) && (jlen == 0)) ||
228  ((deltah > 0) && (rungs > jlen)) ||
229  ((deltah <= 0) && (rungs < jlen) && (rungs != 0))) {
230  jlen = rungs; // This the best way yet.
231  jpos = j + 1;
232  }
233  if (searchOK (+1, j, eh)) {
234  j++; // Look further to the right.
235  }
236  else
237  j = FIELDWIDTH+1; // Cannot go any further to the right.
238  }
239 
240  if ((ilen == 0) && (jlen == 0)) // Found no way down.
241  return STAND;
242 
243  // Choose a way down to follow.
244  if (ilen == 0)
245  path = jpos;
246  else if (jlen == 0)
247  path = ipos;
248  else if (ilen != jlen) { // If the ways down are not same length,
249  // choose closest to hero's level.
250  if (deltah > 0) {
251  if (jlen > ilen)
252  path = jpos;
253  else
254  path = ipos;
255  }
256  else {
257  if (jlen > ilen)
258  path = ipos;
259  else
260  path = jpos;
261  }
262  }
263  else { // Both ways down are the same length.
264  if ((deltah > 0) && // If both reach the hero's level,
265  (ilen == deltah)) { // choose the closest.
266  if ((ew - ipos) <= (jpos - ew))
267  path = ipos;
268  else
269  path = jpos;
270  }
271  else
272  path = ipos; // Else, go left or down.
273  }
274 
275  if (path == ew)
276  return DOWN;
277  else if (path < ew)
278  return LEFT;
279  else
280  return RIGHT;
281 }
282 
283 Direction KGrTraditionalRules::getHero (int eI, int eJ, int hI)
284 {
285  int i, inc, returnValue;
286 
287  inc = (eI > hI) ? -1 : +1;
288  i = eI;
289  while (i != hI) {
290  returnValue = canWalkLR (inc, i, eJ);
291  if (returnValue > 0)
292  i = i + inc; // Can run further towards the hero.
293  else if (returnValue < 0)
294  break; // Will run into a wall regardless.
295  else
296  return STAND; // Won't run over a hole.
297  }
298 
299  if (i < eI) return LEFT;
300  else if (i > eI) return RIGHT;
301  else return STAND;
302 }
303 
304 int KGrTraditionalRules::distanceUp (int x, int y, int deltah)
305 {
306  int rungs = 0;
307 
308  // If there is a ladder at (x,y), return its length, else return zero.
309  while (grid->cellType (x, y - rungs) == LADDER) {
310  rungs++;
311  if (rungs >= deltah) { // To hero's level is enough.
312  break;
313  }
314  }
315  return rungs;
316 }
317 
318 int KGrTraditionalRules::distanceDown (int x, int y, int deltah)
319 {
320  // When deltah > 0, we want an exit sideways at the hero's level or above.
321  // When deltah <= 0, we can go down any distance (as a last resort).
322 
323  int rungs = -1;
324  int exitRung = 0;
325  bool canGoThru = true;
326  char objType;
327 
328  // If there is a way down at (x,y), return its length, else return zero.
329  // Because rungs == -1, we first check that level y is not blocked here.
330  while (canGoThru) {
331  objType = grid->cellType (x, y + rungs + 1);
332  switch (objType) {
333  case BRICK:
334  case CONCRETE:
335  case HOLE: // Enemy cannot go DOWN through a hole.
336  case USEDHOLE:
337  if ((deltah > 0) && (rungs <= deltah))
338  exitRung = rungs;
339  if ((objType == HOLE) && (rungs < 0))
340  rungs = 0; // Enemy can go SIDEWAYS through a hole.
341  else
342  canGoThru = false; // Cannot go through here.
343  break;
344  case LADDER:
345  case BAR: // Can go through or stop.
346  rungs++; // Add to path length.
347  if ((deltah > 0) && (rungs >= 0)) {
348  // If at or above hero's level, check for an exit from ladder.
349  if ((rungs - 1) <= deltah) {
350  // Maybe can stand on top of ladder and exit L or R.
351  if ((objType == LADDER) && (searchOK (-1, x, y+rungs-1) ||
352  searchOK (+1, x, y+rungs-1)))
353  exitRung = rungs - 1;
354  // Maybe can exit L or R from ladder body or pole.
355  if ((rungs <= deltah) && (searchOK (-1, x, y+rungs) ||
356  searchOK (+1, x, y+rungs)))
357  exitRung = rungs;
358  }
359  else
360  canGoThru = false; // Should stop at hero's level.
361  }
362  break;
363  default:
364  rungs++; // Can go through. Add to path length.
365  break;
366  }
367  }
368  if (rungs == 1) {
369  if (grid->enemyOccupied (x, y + 1) > 0) {
370  dbk2 << "Pit block =" << grid->enemyOccupied (x, y + 1)
371  << "at" << x << (y + 1);
372  rungs = 0; // Pit is blocked. Find another way.
373  }
374  }
375  if (rungs <= 0)
376  return 0; // There is no way down.
377  else if (deltah > 0)
378  return exitRung; // We want to take an exit, if any.
379  else
380  return rungs; // We can go down all the way.
381 }
382 
383 bool KGrTraditionalRules::searchOK (int direction, int x, int y)
384 {
385  // Check whether it is OK to search left or right.
386  if (canWalkLR (direction, x, y) > 0) {
387  // Can go into that cell, but check for a fall.
388  if (willNotFall (x+direction, y))
389  return true;
390  }
391  return false; // Cannot go into and through that cell.
392 }
393 
394 int KGrTraditionalRules::canWalkLR (int direction, int x, int y)
395 {
396  if (willNotFall (x, y)) {
397  switch (grid->cellType (x+direction, y)) {
398  case CONCRETE:
399  case BRICK:
400  case USEDHOLE:
401  return -1; // Will be halted in current cell.
402  break;
403  default:
404  // NB. FREE, LADDER, HLADDER, NUGGET and BAR are OK of course,
405  // but enemies can also walk left/right through a HOLE and
406  // THINK they can walk left/right through a FBRICK.
407 
408  return +1; // Can walk into next cell.
409  break;
410  }
411  }
412  else
413  return 0; // Will fall before getting there.
414 }
415 
416 bool KGrTraditionalRules::willNotFall (int x, int y)
417 {
418  // Check the ceiling.
419  switch (grid->cellType (x, y)) {
420  case LADDER:
421  case BAR:
422  return true; break; // OK, can hang on ladder or pole.
423  default:
424  break;
425  }
426 
427  // Check the floor.
428  switch (grid->cellType (x, y + 1)) {
429 
430  // Cases where the enemy knows he will fall.
431  // N.B. The enemy THINKS he can run over a NUGGET, a buried BAR or a HOLE.
432  // The last of these cases allows the hero to trap the enemy, of course.
433 
434  // Note that there are several Traditional levels that require an enemy to
435  // be trapped permanently in a pit containing a nugget, as he runs towards
436  // you. It is also possible to use a buried BAR in the same way.
437  case FREE:
438  case HLADDER:
439  case FBRICK:
440  if (grid->enemyOccupied (x, y + 1) > 0) {
441  dbk2 << "Occupied =" << grid->enemyOccupied (x, y + 1)
442  << "at" << x << (y + 1);
443  return true;
444  }
445  return false; // Will fall: there is no floor.
446  break;
447 
448  default:
449  return true; // OK, will not fall.
450  break;
451  }
452 }
453 
454 
455 KGrKGoldrunnerRules::KGrKGoldrunnerRules (QObject * parent)
456  :
457  KGrRuleBook (parent)
458 {
459  mRules = KGoldrunnerRules;
460 
461  mVariableTiming = false;
462  mAlwaysCollectNugget = false;
463  mRunThruHole = false;
464  mReappearAtTop = false;
465  mReappearRow = -1;
466  mPointsPerCell = 4;
467  mTurnAnywhere = false;
468  mEnemiesShowGold = true;
469 
470  Timing t = {45, 50, 55, 100, 1000, 40};
471  times = t;
472 }
473 
474 KGrKGoldrunnerRules::~KGrKGoldrunnerRules()
475 {
476 }
477 
478 Direction KGrKGoldrunnerRules::findBestWay (const int eI, const int eJ,
479  const int hI, const int hJ,
480  KGrLevelGrid * pGrid,
481  bool leftRightSearch)
482 {
483  dbk2 << eI << eJ << hI << hJ;
484  grid = pGrid;
485 
486  if (grid->cellType (eI, eJ) == USEDHOLE) { // Could not get out of hole
487  return UP; // (e.g. brick above is closed):
488  } // but keep trying.
489 
490  bool canStand = (grid->enemyMoves (eI, eJ) & dFlag [STAND]) ||
491  (grid->enemyOccupied (eI, eJ + 1) > 0);
492  if (! canStand) {
493  dbk2 << "can stand" << (grid->enemyMoves (eI, eJ) & dFlag [STAND])
494  << "occ-below" << grid->enemyOccupied (eI, eJ + 1);
495  return DOWN;
496  }
497 
498  // KGoldrunner search strategy.
499  if (leftRightSearch) {
500  if (eI > hI) {
501  return findWayLeft (eI, eJ);
502  }
503  if (eI < hI) {
504  return findWayRight (eI, eJ);
505  }
506  }
507  else {
508  if (eJ > hJ) {
509  return findWayUp (eI, eJ);
510  }
511  if (eJ < hJ) {
512  return findWayDown (eI, eJ);
513  }
514  }
515 
516  return STAND;
517 }
518 
519 Direction KGrKGoldrunnerRules::findWayUp (const int eI, const int eJ)
520 {
521  int i, k;
522  i = k = eI;
523 
524  // Must be able to stand AND move through cells when looking left or right.
525  Flags leftOK = (dFlag [LEFT] | dFlag [STAND]);
526  Flags rightOK = (dFlag [RIGHT] | dFlag [STAND]);
527 
528  if (grid->enemyMoves (eI, eJ) & dFlag [UP]) {
529  return UP; // Go up from current position.
530  }
531  else {
532  while ((i >= 0) || (k <= FIELDWIDTH)) {
533  if (i >= 0) {
534  if (grid->enemyMoves (i, eJ) & dFlag [UP]) {
535  return LEFT; // Go left, then up later.
536  }
537  else if ((grid->enemyMoves (i--, eJ) & leftOK) != leftOK) {
538  i = -1;
539  }
540  }
541  if (k <= FIELDWIDTH) {
542  if (grid->enemyMoves (k, eJ) & dFlag [UP]) {
543  return RIGHT; // Go right, then up later.
544  }
545  else if ((grid->enemyMoves (k++, eJ) & rightOK) != rightOK) {
546  k = FIELDWIDTH + 1;
547  }
548  }
549  }
550  }
551  return STAND;
552 }
553 
554 Direction KGrKGoldrunnerRules::findWayDown (const int eI, const int eJ)
555 {
556  int i, k;
557  i = k = eI;
558 
559  // In this search, no need to test for STAND. Fall and ladder are both OK.
560  if (grid->enemyMoves (eI, eJ) & dFlag [DOWN]) {
561  return DOWN; // Go down from current position.
562  }
563  else {
564  while ((i >= 0) || (k <= FIELDWIDTH)) {
565  if (i >= 0) {
566  if (grid->enemyMoves (i, eJ) & dFlag [DOWN]) {
567  return LEFT; // Go left, then down later.
568  }
569  else if (! (grid->enemyMoves (i--, eJ) & dFlag [LEFT])) {
570  i = -1;
571  }
572  }
573  if (k <= FIELDWIDTH) {
574  if (grid->enemyMoves (k, eJ) & dFlag [DOWN]) {
575  return RIGHT; // Go right, then down later.
576  }
577  else if (! (grid->enemyMoves (k++, eJ) & dFlag [RIGHT])) {
578  k = FIELDWIDTH + 1;
579  }
580  }
581  }
582  }
583  return STAND; // Cannot go down.
584 }
585 
586 Direction KGrKGoldrunnerRules::findWayLeft (const int eI, const int eJ)
587 {
588  int i, k;
589  i = k = eJ;
590 
591  // Must be able to stand and move through cells when checking move-left.
592  Flags leftOK = (dFlag [LEFT] | dFlag [STAND]);
593 
594  if ((grid->enemyMoves (eI, eJ) & leftOK) == leftOK) {
595  return LEFT; // Go left from current position.
596  }
597  else {
598  while ((i >= 0) || (k <= FIELDHEIGHT)) {
599  if (i >= 0) {
600  if ((grid->enemyMoves (eI, i) & leftOK) == leftOK) {
601  return UP; // Go up, then left later.
602  }
603  else if (! (grid->enemyMoves (eI, i--) & dFlag [UP])) {
604  i = -1;
605  }
606  }
607  if (k <= FIELDHEIGHT) {
608  if ((grid->enemyMoves (eI, k) & leftOK) == leftOK) {
609  return DOWN; // Go down, then left later.
610  }
611  else if (! (grid->enemyMoves (eI, k++) & dFlag [DOWN])) {
612  k = FIELDHEIGHT + 1;
613  }
614  }
615  }
616  }
617  return STAND; // Cannot go left.
618 }
619 
620 Direction KGrKGoldrunnerRules::findWayRight (const int eI, const int eJ)
621 {
622  int i, k;
623  i = k = eJ;
624 
625  // Must be able to stand and move through cells when checking move-right.
626  Flags rightOK = (dFlag [RIGHT] | dFlag [STAND]);
627 
628  if ((grid->enemyMoves (eI, eJ) & rightOK) == rightOK) {
629  return RIGHT; // Go right from current position.
630  }
631  else {
632  while ((i >= 0) || (k <= FIELDHEIGHT)) {
633  if (i >= 0) {
634  if ((grid->enemyMoves (eI, i) & rightOK) == rightOK) {
635  return UP; // Go up, then right later.
636  }
637  else if (!(grid->enemyMoves (eI, i--) & dFlag [UP])) {
638  i = -1;
639  }
640  }
641  if (k <= FIELDHEIGHT) {
642  if ((grid->enemyMoves (eI, k) & rightOK) == rightOK) {
643  return DOWN; // Go down, then right later.
644  }
645  else if (! (grid->enemyMoves (eI, k++) & dFlag [DOWN])) {
646  k = FIELDHEIGHT + 1;
647  }
648  }
649  }
650  }
651  return STAND; // Cannot go right.
652 }
653 
654 
655 KGrScavengerRules::KGrScavengerRules (QObject * parent)
656  :
657  KGrRuleBook (parent)
658 {
659  mRules = ScavengerRules;
660 
661  mVariableTiming = false;
662  mAlwaysCollectNugget = true;
663  mRunThruHole = true;
664  mReappearAtTop = true;
665  mReappearRow = 1;
666  mPointsPerCell = 12;
667  mTurnAnywhere = true;
668  mEnemiesShowGold = false;
669 
670  Timing t = {45, 50, 55, 100, 1000, 40};
671  times = t;
672 }
673 
674 KGrScavengerRules::~KGrScavengerRules()
675 {
676 }
677 
678 Direction KGrScavengerRules::findBestWay (const int eI, const int eJ,
679  const int hI, const int hJ,
680  KGrLevelGrid * pGrid,
681  bool /* leftRightSearch unused */)
682 {
683  dbk2 << eI << eJ << hI << hJ;
684  grid = pGrid;
685  return RIGHT;
686 }
687 
688 #include "kgrrulebook.moc"
KGrScavengerRules::KGrScavengerRules
KGrScavengerRules(QObject *parent)
Definition: kgrrulebook.cpp:655
kgrdebug.h
KGrLevelGrid::enemyOccupied
int enemyOccupied(int i, int j)
Definition: kgrlevelgrid.h:50
BAR
const char BAR
Definition: kgrglobals.h:39
KGrLevelGrid::cellType
char cellType(int i, int j)
Definition: kgrlevelgrid.h:34
KGrKGoldrunnerRules::findBestWay
Direction findBestWay(const int eI, const int eJ, const int hI, const int hJ, KGrLevelGrid *pGrid, bool leftRightSearch=true)
Definition: kgrrulebook.cpp:478
KGrLevelGrid
Definition: kgrlevelgrid.h:27
KGrRuleBook::KGrRuleBook
KGrRuleBook(QObject *parent)
Definition: kgrrulebook.cpp:23
kgrlevelgrid.h
KGrKGoldrunnerRules::KGrKGoldrunnerRules
KGrKGoldrunnerRules(QObject *parent)
Definition: kgrrulebook.cpp:455
kgrrulebook.h
FIELDHEIGHT
const int FIELDHEIGHT
Definition: kgrglobals.h:49
KGrRuleBook::mRunThruHole
bool mRunThruHole
Enemy can run L/R through dug hole.
Definition: kgrrulebook.h:80
KGrRuleBook::~KGrRuleBook
virtual ~KGrRuleBook()
Definition: kgrrulebook.cpp:36
KGrLevelGrid::enemyMoves
Flags enemyMoves(int i, int j)
Definition: kgrlevelgrid.h:42
TraditionalRules
const char TraditionalRules
Codes for the rules of the selected game and level.
Definition: kgrglobals.h:65
USEDHOLE
const char USEDHOLE
Definition: kgrglobals.h:41
KGrRuleBook::mPointsPerCell
int mPointsPerCell
Number of points in each grid-cell.
Definition: kgrrulebook.h:83
KGrRuleBook::mAlwaysCollectNugget
bool mAlwaysCollectNugget
Enemies always collect nuggets.
Definition: kgrrulebook.h:79
Direction
Direction
Definition: kgrglobals.h:174
LEFT
Definition: kgrglobals.h:174
KGrTraditionalRules::findBestWay
Direction findBestWay(const int eI, const int eJ, const int hI, const int hJ, KGrLevelGrid *pGrid, bool leftRightSearch=true)
Definition: kgrrulebook.cpp:84
ScavengerRules
const char ScavengerRules
Definition: kgrglobals.h:67
KGrRuleBook
Definition: kgrrulebook.h:30
QObject
KGrRuleBook::mReappearRow
int mReappearRow
Row where enemies reappear.
Definition: kgrrulebook.h:82
FIELDWIDTH
const int FIELDWIDTH
Definition: kgrglobals.h:48
KGrRuleBook::mRules
char mRules
The type of rules and enemy search method.
Definition: kgrrulebook.h:76
KGrRuleBook::times
Timing times
Definition: kgrrulebook.h:87
KGrRuleBook::mReappearAtTop
bool mReappearAtTop
Enemies reborn at top of screen.
Definition: kgrrulebook.h:81
LADDER
const char LADDER
Definition: kgrglobals.h:36
KGrScavengerRules::~KGrScavengerRules
~KGrScavengerRules()
Definition: kgrrulebook.cpp:674
HLADDER
const char HLADDER
Definition: kgrglobals.h:35
KGrTraditionalRules::~KGrTraditionalRules
~KGrTraditionalRules()
Definition: kgrrulebook.cpp:80
KGoldrunnerRules
const char KGoldrunnerRules
Definition: kgrglobals.h:66
BRICK
const char BRICK
Definition: kgrglobals.h:33
dbk2
#define dbk2
Definition: kgrdebug.h:25
KGrKGoldrunnerRules::~KGrKGoldrunnerRules
~KGrKGoldrunnerRules()
Definition: kgrrulebook.cpp:474
UP
Definition: kgrglobals.h:174
KGrRuleBook::mEnemiesShowGold
bool mEnemiesShowGold
Enemies show when they are carrying gold.
Definition: kgrrulebook.h:85
FBRICK
const char FBRICK
Definition: kgrglobals.h:34
KGrRuleBook::Timing
Definition: kgrrulebook.h:67
HOLE
const char HOLE
Definition: kgrglobals.h:40
KGrRuleBook::setTiming
void setTiming(const int enemyCount=0)
Definition: kgrrulebook.cpp:40
RIGHT
Definition: kgrglobals.h:174
KGrTraditionalRules::KGrTraditionalRules
KGrTraditionalRules(QObject *parent)
Definition: kgrrulebook.cpp:61
KGrRuleBook::grid
KGrLevelGrid * grid
Definition: kgrrulebook.h:88
KGrScavengerRules::findBestWay
Direction findBestWay(const int eI, const int eJ, const int hI, const int hJ, KGrLevelGrid *pGrid, bool leftRightSearch=true)
Definition: kgrrulebook.cpp:678
KGrRuleBook::mVariableTiming
bool mVariableTiming
More enemies imply less speed.
Definition: kgrrulebook.h:78
Flags
char Flags
Definition: kgrglobals.h:172
CONCRETE
const char CONCRETE
Definition: kgrglobals.h:32
STAND
Definition: kgrglobals.h:174
DOWN
Definition: kgrglobals.h:174
FREE
const char FREE
Definition: kgrglobals.h:28
dFlag
const DirectionFlag dFlag[nDirections]
Definition: kgrglobals.h:178
KGrRuleBook::mTurnAnywhere
bool mTurnAnywhere
Can change direction anywhere in grid-cell.
Definition: kgrrulebook.h:84
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:18:24 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kgoldrunner

Skip menu "kgoldrunner"
  • Main Page
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members

kdegames API Reference

Skip menu "kdegames API Reference"
  • granatier
  • kapman
  • kblackbox
  • kgoldrunner
  • kigo
  • kmahjongg
  • KShisen
  • ksquares
  • libkdegames
  •   highscore
  •   libkdegamesprivate
  •     kgame
  • libkmahjongg
  • palapeli
  •   libpala

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal