Rev 5232 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5229 | raandoom | 1 | #include "game.h" |
2 | |||
3 | struct { |
||
5238 | raandoom | 4 | rect reset_button; // new game button place |
5232 | raandoom | 5 | rect highscore_rect; // highscore place |
5229 | raandoom | 6 | rect score_rect; // score place |
5238 | raandoom | 7 | rect over_rect; // game over window |
5229 | raandoom | 8 | __u8 over; // flag for game over |
9 | } game; |
||
10 | |||
5238 | raandoom | 11 | void game_draw_ui() |
5229 | raandoom | 12 | { |
5238 | raandoom | 13 | __menuet__make_button(game.reset_button.x, |
14 | game.reset_button.y, |
||
15 | game.reset_button.width, |
||
16 | game.reset_button.height, |
||
17 | NEW_GAME_BUTTON, |
||
18 | BOARD_BG_COLOR); |
||
19 | rect_draw_text(&game.reset_button,"Restart",7,GAME_BG_COLOR,0); |
||
20 | |||
21 | rect_draw(&game.highscore_rect,BOARD_BG_COLOR); |
||
22 | rect_draw_value(&game.highscore_rect,board_highscore(),GAME_BG_COLOR,0); |
||
23 | |||
24 | rect_draw(&game.score_rect,BOARD_BG_COLOR); |
||
25 | rect_draw_value(&game.score_rect,board_score(),GAME_BG_COLOR,0); |
||
26 | |||
5229 | raandoom | 27 | if (game.over) |
28 | { |
||
5238 | raandoom | 29 | __u16 line_step = FONT_HEIGHT * 2; |
30 | rect_draw(&game.over_rect,BOARD_BG_COLOR); |
||
5229 | raandoom | 31 | |
5238 | raandoom | 32 | rect line_rect = { |
33 | .x = game.over_rect.x, |
||
34 | .y = game.over_rect.y + line_step, |
||
35 | .width = game.over_rect.width, |
||
36 | .height = line_step |
||
37 | }; |
||
5232 | raandoom | 38 | |
5238 | raandoom | 39 | rect_draw_text(&line_rect,"It looks like there is",22,0xFFFFFF,0); |
40 | |||
41 | line_rect.y += line_step; |
||
42 | rect_draw_text(&line_rect,"no more moves",13,0xFFFFFF,0); |
||
43 | |||
44 | line_rect.y += line_step; |
||
45 | rect_draw_text(&line_rect,"available",9,0xFFFFFF,0); |
||
46 | } |
||
5229 | raandoom | 47 | } |
48 | |||
49 | void game_init() |
||
50 | { |
||
51 | game.over = false; |
||
52 | // place window at the center of screen |
||
53 | __u16 screen_w = 0; |
||
54 | __u16 screen_h = 0; |
||
55 | __menuet__get_screen_max(&screen_w,&screen_h); |
||
56 | |||
57 | __menuet__window_redraw(1); |
||
58 | |||
59 | __menuet__define_window((screen_w - WND_WIDTH) / 2, |
||
60 | (screen_h - WND_HEIGHT) / 2, |
||
61 | WND_WIDTH, |
||
62 | WND_HEIGHT, |
||
5238 | raandoom | 63 | 0x34 << 24 | GAME_BG_COLOR, |
5229 | raandoom | 64 | 0, |
65 | (__u32)header); |
||
66 | |||
67 | // find info about window client area |
||
68 | __menuet__get_process_table(&proc_info,PID_WHOAMI); |
||
69 | |||
70 | // calc board |
||
71 | rect av_area = {0}; |
||
72 | av_area.x = GAME_BORDER; |
||
73 | av_area.y = (SCORE_HEIGHT > GAME_BORDER) ? SCORE_HEIGHT : GAME_BORDER; |
||
74 | av_area.width = proc_info.client_width - av_area.x * 2; |
||
75 | av_area.height = proc_info.client_height - av_area.y - GAME_BORDER; |
||
76 | // minimal square |
||
77 | if (av_area.width < av_area.height) |
||
78 | { |
||
79 | av_area.y += (av_area.height - av_area.width) / 2; |
||
80 | av_area.height = av_area.width; |
||
81 | } |
||
82 | else // if (av_area.height < av_area.width) |
||
83 | { |
||
84 | av_area.x += (av_area.width - av_area.height) / 2; |
||
85 | av_area.width = av_area.height; |
||
86 | } |
||
87 | |||
88 | board_init(&av_area); |
||
89 | |||
5238 | raandoom | 90 | rect top_base = { |
91 | .x = av_area.x, |
||
92 | .y = (av_area.y - SCORE_HEIGHT) / 2, |
||
93 | .width = (av_area.width - BOARD_SPACING * 2) / 3, |
||
94 | .height = SCORE_HEIGHT |
||
95 | }; |
||
5229 | raandoom | 96 | |
5238 | raandoom | 97 | game.reset_button = top_base; |
5232 | raandoom | 98 | |
5238 | raandoom | 99 | top_base.x += top_base.width + BOARD_SPACING; |
100 | game.highscore_rect = top_base; |
||
5229 | raandoom | 101 | |
5238 | raandoom | 102 | top_base.x += top_base.width + BOARD_SPACING; |
103 | game.score_rect = top_base; |
||
5229 | raandoom | 104 | |
5238 | raandoom | 105 | av_area.x += av_area.width / 4; |
106 | av_area.y += av_area.height / 4; |
||
107 | av_area.width /= 2; |
||
108 | av_area.height /= 2; |
||
109 | |||
110 | game.over_rect = av_area; |
||
111 | |||
112 | game_draw_ui(); |
||
113 | |||
5229 | raandoom | 114 | __menuet__window_redraw(2); |
115 | } |
||
116 | |||
5231 | raandoom | 117 | void game_exit() |
118 | { |
||
119 | board_delete(); |
||
120 | } |
||
121 | |||
5229 | raandoom | 122 | void game_redraw() |
123 | { |
||
124 | __menuet__get_process_table(&proc_info,PID_WHOAMI); |
||
125 | |||
126 | // start redraw |
||
127 | __menuet__window_redraw(1); |
||
128 | |||
5238 | raandoom | 129 | __menuet__define_window(0, // __u16 x1 : ignored |
130 | 0, // __u16 y1 : ignored |
||
131 | 0, // __u16 xsize : ignored |
||
132 | 0, // __u16 ysize : ignored |
||
133 | 0x34 << 24 | GAME_BG_COLOR, // __u32 body_color |
||
134 | 0, // __u32 grab_color |
||
135 | (__u32)header); // __u32 frame_color or header |
||
5229 | raandoom | 136 | |
5238 | raandoom | 137 | game_draw_ui(); |
5229 | raandoom | 138 | board_redraw(); |
139 | |||
140 | // end redraw |
||
141 | __menuet__window_redraw(2); |
||
142 | } |
||
143 | |||
144 | void game_move_up() |
||
145 | { |
||
146 | if (board_up()) |
||
147 | { |
||
148 | board_redraw(); |
||
149 | __u8 added = board_add_random_tile(); |
||
150 | board_redraw(); |
||
151 | |||
152 | game.over = !added || !board_has_moves(); |
||
5238 | raandoom | 153 | game_draw_ui(); |
5229 | raandoom | 154 | } |
155 | } |
||
156 | |||
157 | void game_move_down() |
||
158 | { |
||
159 | if (board_down()) |
||
160 | { |
||
161 | board_redraw(); |
||
162 | __u8 added = board_add_random_tile(); |
||
163 | board_redraw(); |
||
164 | |||
165 | game.over = !added || !board_has_moves(); |
||
5238 | raandoom | 166 | game_draw_ui(); |
5229 | raandoom | 167 | } |
168 | } |
||
169 | |||
170 | void game_move_left() |
||
171 | { |
||
172 | if (board_left()) |
||
173 | { |
||
174 | board_redraw(); |
||
175 | __u8 added = board_add_random_tile(); |
||
176 | board_redraw(); |
||
177 | |||
178 | game.over = !added || !board_has_moves(); |
||
5238 | raandoom | 179 | game_draw_ui(); |
5229 | raandoom | 180 | } |
181 | } |
||
182 | |||
183 | void game_move_right() |
||
184 | { |
||
185 | if (board_right()) |
||
186 | { |
||
187 | board_redraw(); |
||
188 | __u8 added = board_add_random_tile(); |
||
189 | board_redraw(); |
||
190 | |||
191 | game.over = !added || !board_has_moves(); |
||
5238 | raandoom | 192 | game_draw_ui(); |
5229 | raandoom | 193 | } |
194 | }><>>>><> |