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 { 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 */ 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); /* sokoban.c */ char *genlevels(int); Image *eallocimage(Rectangle, int, uint);