nullgame.c 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. /*
  2. * nullgame.c [FIXME]: Template defining the null game (in which no
  3. * moves are permitted and nothing is ever drawn). This file exists
  4. * solely as a basis for constructing new game definitions - it
  5. * helps to have something which will compile from the word go and
  6. * merely doesn't _do_ very much yet.
  7. *
  8. * Parts labelled FIXME actually want _removing_ (e.g. the dummy
  9. * field in each of the required data structures, and this entire
  10. * comment itself) when converting this source file into one
  11. * describing a real game.
  12. */
  13. #include <stdio.h>
  14. #include <stdlib.h>
  15. #include <string.h>
  16. #include <assert.h>
  17. #include <ctype.h>
  18. #ifdef NO_TGMATH_H
  19. # include <math.h>
  20. #else
  21. # include <tgmath.h>
  22. #endif
  23. #include "puzzles.h"
  24. enum {
  25. COL_BACKGROUND,
  26. NCOLOURS
  27. };
  28. struct game_params {
  29. int FIXME;
  30. };
  31. struct game_state {
  32. int FIXME;
  33. };
  34. static game_params *default_params(void)
  35. {
  36. game_params *ret = snew(game_params);
  37. ret->FIXME = 0;
  38. return ret;
  39. }
  40. static bool game_fetch_preset(int i, char **name, game_params **params)
  41. {
  42. return false;
  43. }
  44. static void free_params(game_params *params)
  45. {
  46. sfree(params);
  47. }
  48. static game_params *dup_params(const game_params *params)
  49. {
  50. game_params *ret = snew(game_params);
  51. *ret = *params; /* structure copy */
  52. return ret;
  53. }
  54. static void decode_params(game_params *params, char const *string)
  55. {
  56. }
  57. static char *encode_params(const game_params *params, bool full)
  58. {
  59. return dupstr("FIXME");
  60. }
  61. static const char *validate_params(const game_params *params, bool full)
  62. {
  63. return NULL;
  64. }
  65. static char *new_game_desc(const game_params *params, random_state *rs,
  66. char **aux, bool interactive)
  67. {
  68. return dupstr("FIXME");
  69. }
  70. static const char *validate_desc(const game_params *params, const char *desc)
  71. {
  72. return NULL;
  73. }
  74. static game_state *new_game(midend *me, const game_params *params,
  75. const char *desc)
  76. {
  77. game_state *state = snew(game_state);
  78. state->FIXME = 0;
  79. return state;
  80. }
  81. static game_state *dup_game(const game_state *state)
  82. {
  83. game_state *ret = snew(game_state);
  84. ret->FIXME = state->FIXME;
  85. return ret;
  86. }
  87. static void free_game(game_state *state)
  88. {
  89. sfree(state);
  90. }
  91. static game_ui *new_ui(const game_state *state)
  92. {
  93. return NULL;
  94. }
  95. static void free_ui(game_ui *ui)
  96. {
  97. }
  98. static void game_changed_state(game_ui *ui, const game_state *oldstate,
  99. const game_state *newstate)
  100. {
  101. }
  102. struct game_drawstate {
  103. int tilesize;
  104. int FIXME;
  105. };
  106. static char *interpret_move(const game_state *state, game_ui *ui,
  107. const game_drawstate *ds,
  108. int x, int y, int button)
  109. {
  110. return NULL;
  111. }
  112. static game_state *execute_move(const game_state *state, const char *move)
  113. {
  114. return NULL;
  115. }
  116. /* ----------------------------------------------------------------------
  117. * Drawing routines.
  118. */
  119. static void game_compute_size(const game_params *params, int tilesize,
  120. const game_ui *ui, int *x, int *y)
  121. {
  122. *x = *y = 10 * tilesize; /* FIXME */
  123. }
  124. static void game_set_size(drawing *dr, game_drawstate *ds,
  125. const game_params *params, int tilesize)
  126. {
  127. ds->tilesize = tilesize;
  128. }
  129. static float *game_colours(frontend *fe, int *ncolours)
  130. {
  131. float *ret = snewn(3 * NCOLOURS, float);
  132. frontend_default_colour(fe, &ret[COL_BACKGROUND * 3]);
  133. *ncolours = NCOLOURS;
  134. return ret;
  135. }
  136. static game_drawstate *game_new_drawstate(drawing *dr, const game_state *state)
  137. {
  138. struct game_drawstate *ds = snew(struct game_drawstate);
  139. ds->tilesize = 0;
  140. ds->FIXME = 0;
  141. return ds;
  142. }
  143. static void game_free_drawstate(drawing *dr, game_drawstate *ds)
  144. {
  145. sfree(ds);
  146. }
  147. static void game_redraw(drawing *dr, game_drawstate *ds,
  148. const game_state *oldstate, const game_state *state,
  149. int dir, const game_ui *ui,
  150. float animtime, float flashtime)
  151. {
  152. }
  153. static float game_anim_length(const game_state *oldstate,
  154. const game_state *newstate, int dir, game_ui *ui)
  155. {
  156. return 0.0F;
  157. }
  158. static float game_flash_length(const game_state *oldstate,
  159. const game_state *newstate, int dir, game_ui *ui)
  160. {
  161. return 0.0F;
  162. }
  163. static void game_get_cursor_location(const game_ui *ui,
  164. const game_drawstate *ds,
  165. const game_state *state,
  166. const game_params *params,
  167. int *x, int *y, int *w, int *h)
  168. {
  169. }
  170. static int game_status(const game_state *state)
  171. {
  172. return 0;
  173. }
  174. #ifdef COMBINED
  175. #define thegame nullgame
  176. #endif
  177. const struct game thegame = {
  178. "Null Game", NULL, NULL,
  179. default_params,
  180. game_fetch_preset, NULL,
  181. decode_params,
  182. encode_params,
  183. free_params,
  184. dup_params,
  185. false, NULL, NULL, /* configure, custom_params */
  186. validate_params,
  187. new_game_desc,
  188. validate_desc,
  189. new_game,
  190. dup_game,
  191. free_game,
  192. false, NULL, /* solve */
  193. false, NULL, NULL, /* can_format_as_text_now, text_format */
  194. NULL, NULL, /* get_prefs, set_prefs */
  195. new_ui,
  196. free_ui,
  197. NULL, /* encode_ui */
  198. NULL, /* decode_ui */
  199. NULL, /* game_request_keys */
  200. game_changed_state,
  201. NULL, /* current_key_label */
  202. interpret_move,
  203. execute_move,
  204. 20 /* FIXME */, game_compute_size, game_set_size,
  205. game_colours,
  206. game_new_drawstate,
  207. game_free_drawstate,
  208. game_redraw,
  209. game_anim_length,
  210. game_flash_length,
  211. game_get_cursor_location,
  212. game_status,
  213. false, false, NULL, NULL, /* print_size, print */
  214. false, /* wants_statusbar */
  215. false, NULL, /* timing_state */
  216. 0, /* flags */
  217. };