123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- enum {
- /* levels */
- Empty = 0,
- Background,
- Wall,
- Cargo,
- Goal,
- GoalCargo,
- Glenda,
- /* movements */
- Up,
- Down,
- Left,
- Right,
- };
- enum {
- /* glenda faces the horizontal direction she's moving in */
- GLeft = 0,
- GRight = 1,
- };
- enum {
- MazeX = 20,
- MazeY = 18,
- BoardX = 49,
- BoardY = 49,
- SizeX = MazeX*BoardX+10,
- SizeY = MazeY*BoardY+10,
- Maxlevels = 200,
- };
- typedef struct {
- uint dir; /* direction */
- uint count; /* number of single-step moves */
- } Step;
- typedef struct {
- uint nstep; /* number of valid steps */
- Step *step;
- uint beyond; /* number of allocated Step */
- } Route;
- typedef struct {
- uint board[MazeX][MazeY];
- } Visited;
- typedef struct {
- Point glenda;
- Point max; /* that's how much the board spans */
- uint index;
- uint done;
- uint board[MazeX][MazeY];
- } Level;
- Level level; /* the current level */
- Level levels[Maxlevels]; /* all levels from this file */
- int numlevels; /* how many levels do we have */
- int animate; /* boolean: animate during multi-step move? */
- Image *img; /* buffer */
- Image *text; /* for text messages */
- Image *win;
- Image *goal;
- Image *cargo;
- Image *goalcargo;
- Image *wall;
- Image *empty;
- Image *gleft;
- Image *gright;
- Image *glenda;
- Image *bg;
- /* graphics.c */
- void drawscreen(void);
- void drawlevel(void);
- void drawwin(void);
- void drawglenda(void);
- void drawboard(Point);
- void resize(Point);
- Point boardsize(Point);
- /* level.c */
- int loadlevels(char *);
- /* move.c */
- void move(int);
- /* route.c */
- Route* newroute(void);
- void freeroute(Route*);
- void reverseroute(Route*);
- void pushstep(Route*, int, int);
- void popstep(Route*);
- int validwalk(Point, Step, Point*);
- int validpush(Point, Step, Point*);
- int isvalid(Point, Route*, int (*)(Point, Step, Point*));
- int findwalk(Point, Point, Route*);
- void applyroute(Route*);
- /* sokoban.c */
- char *genlevels(int);
- Image *eallocimage(Rectangle, int, uint);
|