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