00001 #ifndef BOARD_H
00002 #define BOARD_H
00003
00004 #include <qarray.h>
00005 #include <qstring.h>
00006 #include <qlist.h>
00007 #include <qrect.h>
00008
00009 #define OUT -1
00010
00011 enum Square {out = OUT, empty, brick, prison, gate, tunnel, prisonentry, prisonexit,
00012 Point, energizer, fruit, pacman, monster,
00013 fruithome, pacmanhome, monsterhome};
00014
00015 enum Image { None, Intro, Demo, Level, File };
00016
00017 #define X -1
00018 #define N 0
00019 #define S 1
00020 #define E 2
00021 #define W 3
00022 #define NE 4
00023 #define SE 5
00024 #define NW 6
00025 #define SW 7
00026
00027 #define BoardWidth 59
00028 #define BoardHeight 65
00029
00030 #define fixBits 0x0007
00031 #define varBits 0xFFF8
00032 #define monsterBits 0xFF00
00033
00034 #define pointBit 0x0008
00035 #define energizerBit 0x0010
00036 #define fruitBit 0x0020
00037 #define pacmanBit 0x0040
00038 #define monsterBit 0x0100
00039
00040 class Board : public QArray<int>
00041 {
00042 public:
00043 Board (int size);
00044 ~Board() {};
00045 void init(Image image, QString levelName=0);
00046 void setup(const uchar *buf);
00047
00048 void set(int pos, Square sq, int m = 0);
00049 void reset(int pos, Square sq, int m = 0);
00050 int position(Square sq, int m = 0);
00051
00052 bool isOut(int pos);
00053 bool isEmpty(int pos);
00054 bool isBrick(int pos);
00055 bool isPrison(int pos);
00056 bool isGate(int pos);
00057 bool isTunnel(int pos);
00058 bool isPoint(int pos);
00059 bool isEnergizer(int pos);
00060 bool isFruit(int pos);
00061 bool isPacman(int pos);
00062 bool isMonster(int pos);
00063 bool isWay(int pos, int dir, Square sq);
00064 bool isJump(int pos, int dir);
00065
00066 int move(int pos, int dir, int steps = 1);
00067 int closeup(int pos, int dir, int target);
00068 int x(int pos);
00069 int y(int pos);
00070 int turn(int dir);
00071
00072 int points();
00073 int energizers();
00074 int monsters();
00075 int tunnels();
00076
00077 private:
00078 bool inBounds(int pos);
00079 int sz;
00080
00081 QString map;
00082 QString mapName;
00083
00084 int prisonEntry;
00085 int prisonExit;
00086 int pacmanHome;
00087 int monsterHome[8];
00088 int fruitHome;
00089
00090 int pacmanPosition;
00091 int monsterPosition[8];
00092 int fruitPosition;
00093 int energizerPosition[8];
00094 int tunnelPosition[8];
00095
00096 int numMonsters;
00097 int numPoints;
00098 int numEnergizers;
00099 int numTunnels;
00100 };
00101
00102 #endif // BOARD_H