enum {
/* levels */
Empty = 0,
Background,
Wall,
/* Own */
CarX,
CarY,
CarZ,
/* 2-length */
CarA,
CarB,
CarC,
CarD,
CarE,
CarF,
CarG,
CarH,
CarI,
CarJ,
CarK,
CarL,
CarM,
CarN,
/* 3-length */
TruckO,
TruckP,
TruckQ,
TruckR,
TruckS,
TruckT,
TruckU,
TruckV,
NElems,
};
enum {
OHoriz = 0,
OVert = 1,
};
enum {
MazeX = 20,
MazeY = 18,
// BoardX = 48, //49,
// BoardY = 48, //49,
Maxlevels = 200,
Off = 3, /* offset in board, should be >= max car length */
/* to have left border and top border */
/* to allow car to disappear to left and to top */
};
int BoardX;
int BoardY;
int SizeX;
int SizeY;
int OutlineWidth;
typedef struct {
Point max; /* leftmost - bottom-most index; */
/* for board span subtract Pt(Off,Off) */
Point win; /* position where we draw win message*/
uint us; /* the element we need to free to win */
uint index; /* in list of levels in b2 menu */
uint done;
uint board[MazeX][MazeY]; /* offset Off wrt graphics */
int orient[NElems]; /* orientation of element */
int length[NElems]; /* length of element */
char *name;
} Level;
Level level; /* the current level */
Level levels[Maxlevels]; /* all levels from this file */
int numlevels; /* how many levels do we have */
int usefaces; /* use faces in visualization? */
int tinyflag;
int boutflag;
Image *img; /* buffer */
Image *text; /* for text messages */
Image *black; /* for faces border */
Image *win; /* winning message */
Image *wall;
Image *empty;
Image *bg;
Image *col[NElems];
Image *face[NElems];
Image *car[NElems][2];
Image *msk[NElems][2];
/* graphics.c */
void drawscreen(void);
void drawlevel(void);
void drawwin(Point);
void drawboard(Point, int *, Point);
void resize(Point);
Point boardsize(Point);
int intile(Point, Point);
int inhalftile(Point, Point);
Point subtile(Point, Point);
Point addtile(Point, Point);
Point getdir(Point, Point);
/* level.c */
int loadlevels(char *);
/* move.c */
int item(Point);
void setitem(Point, int);
int isvehicle(int);
Point next(Point);
Point prev(Point);
Point gettopleft(Point);
int canmove(Point, Point);
int onestep(Point, Point, Point*);
Point destof(Point, Point);
/* rushhour.c */
char *genlevels(int);
Image *eallocimage(Rectangle, int, uint);
Image * openimage(char *dir, char *file);
Image * openface(char *path);
char* estrdup(char*);
void* erealloc(void*, ulong);
|