Files
puzzles/puzzles.h
Simon Tatham d396382abd Add a new game concept called a `flash'. This is a graphical effect
taking non-zero time, which is triggered by the making of a move and
is _not_ hurried to its conclusion by the start of the next move (so
the game redraw function is expected to be able to draw it in
parallel with continuing moves). The only thing that prematurely
terminates a flash is the start of a fresh flash. In particular,
this concept is used to display the completion flash in Net, because
at least _my_ playing instincts make me lock every piece I've
unambiguously placed, and hence the last turn move is instantly
followed by a lock move which was previously suppressing the
completion flash.

[originally from svn r4168]
2004-04-28 18:43:50 +00:00

116 lines
3.5 KiB
C

/*
* puzzles.h: header file for my puzzle collection
*/
#ifndef PUZZLES_PUZZLES_H
#define PUZZLES_PUZZLES_H
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
#define lenof(array) ( sizeof(array) / sizeof(*(array)) )
enum {
LEFT_BUTTON = 0x1000,
MIDDLE_BUTTON,
RIGHT_BUTTON,
CURSOR_UP,
CURSOR_DOWN,
CURSOR_LEFT,
CURSOR_RIGHT,
CURSOR_UP_LEFT,
CURSOR_DOWN_LEFT,
CURSOR_UP_RIGHT,
CURSOR_DOWN_RIGHT
};
#define IGNOREARG(x) ( (x) = (x) )
typedef struct frontend frontend;
typedef struct midend_data midend_data;
typedef struct random_state random_state;
typedef struct game_params game_params;
typedef struct game_state game_state;
typedef struct game_drawstate game_drawstate;
/*
* Platform routines
*/
void fatal(char *fmt, ...);
void frontend_default_colour(frontend *fe, float *output);
void draw_rect(frontend *fe, int x, int y, int w, int h, int colour);
void draw_line(frontend *fe, int x1, int y1, int x2, int y2, int colour);
void draw_polygon(frontend *fe, int *coords, int npoints,
int fill, int colour);
void start_draw(frontend *fe);
void draw_update(frontend *fe, int x, int y, int w, int h);
void end_draw(frontend *fe);
void deactivate_timer(frontend *fe);
void activate_timer(frontend *fe);
/*
* midend.c
*/
midend_data *midend_new(frontend *fe);
void midend_free(midend_data *me);
void midend_set_params(midend_data *me, game_params *params);
void midend_size(midend_data *me, int *x, int *y);
void midend_new_game(midend_data *me, char *seed);
void midend_restart_game(midend_data *me);
int midend_process_key(midend_data *me, int x, int y, int button);
void midend_redraw(midend_data *me);
float *midend_colours(midend_data *me, int *ncolours);
void midend_timer(midend_data *me, float tplus);
int midend_num_presets(midend_data *me);
void midend_fetch_preset(midend_data *me, int n,
char **name, game_params **params);
/*
* malloc.c
*/
void *smalloc(int size);
void *srealloc(void *p, int size);
void sfree(void *p);
char *dupstr(char *s);
#define snew(type) \
( (type *) smalloc (sizeof (type)) )
#define snewn(number, type) \
( (type *) smalloc ((number) * sizeof (type)) )
#define sresize(array, number, type) \
( (type *) srealloc ((array), (number) * sizeof (type)) )
/*
* random.c
*/
random_state *random_init(char *seed, int len);
unsigned long random_upto(random_state *state, unsigned long limit);
void random_free(random_state *state);
/*
* Game-specific routines
*/
extern const char *const game_name;
game_params *default_params(void);
int game_fetch_preset(int i, char **name, game_params **params);
void free_params(game_params *params);
game_params *dup_params(game_params *params);
char *new_game_seed(game_params *params);
game_state *new_game(game_params *params, char *seed);
game_state *dup_game(game_state *state);
void free_game(game_state *state);
game_state *make_move(game_state *from, int x, int y, int button);
void game_size(game_params *params, int *x, int *y);
float *game_colours(frontend *fe, game_state *state, int *ncolours);
game_drawstate *game_new_drawstate(game_state *state);
void game_free_drawstate(game_drawstate *ds);
void game_redraw(frontend *fe, game_drawstate *ds, game_state *oldstate,
game_state *newstate, float anim_time, float flash_time);
float game_anim_length(game_state *oldstate, game_state *newstate);
float game_flash_length(game_state *oldstate, game_state *newstate);
#endif /* PUZZLES_PUZZLES_H */