699b896a |
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 | |
14 | #include <stdio.h> |
15 | #include <stdlib.h> |
16 | #include <string.h> |
17 | #include <assert.h> |
b0e26073 |
18 | #include <ctype.h> |
699b896a |
19 | #include <math.h> |
20 | |
21 | #include "puzzles.h" |
22 | |
699b896a |
23 | enum { |
24 | COL_BACKGROUND, |
25 | NCOLOURS |
26 | }; |
27 | |
28 | struct game_params { |
29 | int FIXME; |
30 | }; |
31 | |
32 | struct game_state { |
33 | int FIXME; |
34 | }; |
35 | |
be8d5aa1 |
36 | static game_params *default_params(void) |
699b896a |
37 | { |
38 | game_params *ret = snew(game_params); |
39 | |
40 | ret->FIXME = 0; |
41 | |
42 | return ret; |
43 | } |
44 | |
be8d5aa1 |
45 | static int game_fetch_preset(int i, char **name, game_params **params) |
699b896a |
46 | { |
47 | return FALSE; |
48 | } |
49 | |
be8d5aa1 |
50 | static void free_params(game_params *params) |
699b896a |
51 | { |
52 | sfree(params); |
53 | } |
54 | |
be8d5aa1 |
55 | static game_params *dup_params(game_params *params) |
699b896a |
56 | { |
57 | game_params *ret = snew(game_params); |
58 | *ret = *params; /* structure copy */ |
59 | return ret; |
60 | } |
61 | |
be8d5aa1 |
62 | static game_params *decode_params(char const *string) |
b0e26073 |
63 | { |
64 | game_params *ret = snew(game_params); |
65 | |
66 | ret->FIXME = 0; |
67 | |
68 | return ret; |
69 | } |
70 | |
be8d5aa1 |
71 | static char *encode_params(game_params *params) |
b0e26073 |
72 | { |
73 | return dupstr("FIXME"); |
74 | } |
75 | |
be8d5aa1 |
76 | static config_item *game_configure(game_params *params) |
c8230524 |
77 | { |
78 | return NULL; |
79 | } |
80 | |
be8d5aa1 |
81 | static game_params *custom_params(config_item *cfg) |
c8230524 |
82 | { |
83 | return NULL; |
84 | } |
85 | |
be8d5aa1 |
86 | static char *validate_params(game_params *params) |
c8230524 |
87 | { |
88 | return NULL; |
89 | } |
90 | |
be8d5aa1 |
91 | static char *new_game_seed(game_params *params, random_state *rs) |
699b896a |
92 | { |
93 | return dupstr("FIXME"); |
94 | } |
95 | |
be8d5aa1 |
96 | static char *validate_seed(game_params *params, char *seed) |
5928817c |
97 | { |
98 | return NULL; |
99 | } |
100 | |
be8d5aa1 |
101 | static game_state *new_game(game_params *params, char *seed) |
699b896a |
102 | { |
103 | game_state *state = snew(game_state); |
104 | |
105 | state->FIXME = 0; |
106 | |
107 | return state; |
108 | } |
109 | |
be8d5aa1 |
110 | static game_state *dup_game(game_state *state) |
699b896a |
111 | { |
112 | game_state *ret = snew(game_state); |
113 | |
114 | ret->FIXME = state->FIXME; |
115 | |
116 | return ret; |
117 | } |
118 | |
be8d5aa1 |
119 | static void free_game(game_state *state) |
699b896a |
120 | { |
121 | sfree(state); |
122 | } |
123 | |
be8d5aa1 |
124 | static game_ui *new_ui(game_state *state) |
74a4e547 |
125 | { |
126 | return NULL; |
127 | } |
128 | |
be8d5aa1 |
129 | static void free_ui(game_ui *ui) |
74a4e547 |
130 | { |
131 | } |
132 | |
be8d5aa1 |
133 | static game_state *make_move(game_state *from, game_ui *ui, int x, int y, |
134 | int button) |
699b896a |
135 | { |
136 | return NULL; |
137 | } |
138 | |
139 | /* ---------------------------------------------------------------------- |
140 | * Drawing routines. |
141 | */ |
142 | |
143 | struct game_drawstate { |
144 | int FIXME; |
145 | }; |
146 | |
be8d5aa1 |
147 | static void game_size(game_params *params, int *x, int *y) |
699b896a |
148 | { |
149 | *x = *y = 200; /* FIXME */ |
150 | } |
151 | |
be8d5aa1 |
152 | static float *game_colours(frontend *fe, game_state *state, int *ncolours) |
699b896a |
153 | { |
154 | float *ret = snewn(3 * NCOLOURS, float); |
155 | |
156 | frontend_default_colour(fe, &ret[COL_BACKGROUND * 3]); |
157 | |
158 | *ncolours = NCOLOURS; |
159 | return ret; |
160 | } |
161 | |
be8d5aa1 |
162 | static game_drawstate *game_new_drawstate(game_state *state) |
699b896a |
163 | { |
164 | struct game_drawstate *ds = snew(struct game_drawstate); |
165 | |
166 | ds->FIXME = 0; |
167 | |
168 | return ds; |
169 | } |
170 | |
be8d5aa1 |
171 | static void game_free_drawstate(game_drawstate *ds) |
699b896a |
172 | { |
173 | sfree(ds); |
174 | } |
175 | |
be8d5aa1 |
176 | static void game_redraw(frontend *fe, game_drawstate *ds, game_state *oldstate, |
177 | game_state *state, int dir, game_ui *ui, |
178 | float animtime, float flashtime) |
699b896a |
179 | { |
1d30357e |
180 | /* |
181 | * The initial contents of the window are not guaranteed and |
182 | * can vary with front ends. To be on the safe side, all games |
183 | * should start by drawing a big background-colour rectangle |
184 | * covering the whole window. |
185 | */ |
186 | draw_rect(fe, 0, 0, 200, 200, COL_BACKGROUND); |
699b896a |
187 | } |
188 | |
be8d5aa1 |
189 | static float game_anim_length(game_state *oldstate, game_state *newstate, |
190 | int dir) |
699b896a |
191 | { |
192 | return 0.0F; |
193 | } |
194 | |
be8d5aa1 |
195 | static float game_flash_length(game_state *oldstate, game_state *newstate, |
196 | int dir) |
699b896a |
197 | { |
198 | return 0.0F; |
199 | } |
fd1a1a2b |
200 | |
be8d5aa1 |
201 | static int game_wants_statusbar(void) |
fd1a1a2b |
202 | { |
203 | return FALSE; |
204 | } |
be8d5aa1 |
205 | |
206 | #ifdef COMBINED |
207 | #define thegame nullgame |
208 | #endif |
209 | |
210 | const struct game thegame = { |
211 | "Null Game", NULL, FALSE, |
212 | default_params, |
213 | game_fetch_preset, |
214 | decode_params, |
215 | encode_params, |
216 | free_params, |
217 | dup_params, |
218 | game_configure, |
219 | custom_params, |
220 | validate_params, |
221 | new_game_seed, |
222 | validate_seed, |
223 | new_game, |
224 | dup_game, |
225 | free_game, |
226 | new_ui, |
227 | free_ui, |
228 | make_move, |
229 | game_size, |
230 | game_colours, |
231 | game_new_drawstate, |
232 | game_free_drawstate, |
233 | game_redraw, |
234 | game_anim_length, |
235 | game_flash_length, |
236 | game_wants_statusbar, |
237 | }; |