Rev 5231 | Go to most recent revision | Details | 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 |
||
5 | rect score_rect; // score place |
||
6 | __u8 over; // flag for game over |
||
7 | } game; |
||
8 | |||
9 | void game_draw_top() |
||
10 | { |
||
11 | if (game.over) |
||
12 | { |
||
13 | __menuet__make_button(game.new_game_button.x, |
||
14 | game.new_game_button.y, |
||
15 | game.new_game_button.width, |
||
16 | game.new_game_button.height, |
||
17 | NEW_GAME_BUTTON, |
||
18 | BOARD_BG_COLOR); |
||
19 | rect_draw_text(&game.new_game_button,"NEW GAME",8,GAME_BG_COLOR); |
||
20 | } |
||
21 | |||
22 | rect_draw(&game.score_rect,BOARD_BG_COLOR); |
||
23 | rect_draw_value(&game.score_rect,board_score(),GAME_BG_COLOR); |
||
24 | } |
||
25 | |||
26 | void game_init() |
||
27 | { |
||
28 | game.over = false; |
||
29 | // place window at the center of screen |
||
30 | __u16 screen_w = 0; |
||
31 | __u16 screen_h = 0; |
||
32 | __menuet__get_screen_max(&screen_w,&screen_h); |
||
33 | |||
34 | __menuet__window_redraw(1); |
||
35 | |||
36 | __menuet__define_window((screen_w - WND_WIDTH) / 2, |
||
37 | (screen_h - WND_HEIGHT) / 2, |
||
38 | WND_WIDTH, |
||
39 | WND_HEIGHT, |
||
40 | GAME_BG_COLOR, |
||
41 | 0, |
||
42 | (__u32)header); |
||
43 | |||
44 | // find info about window client area |
||
45 | __menuet__get_process_table(&proc_info,PID_WHOAMI); |
||
46 | |||
47 | // calc board |
||
48 | rect av_area = {0}; |
||
49 | av_area.x = GAME_BORDER; |
||
50 | av_area.y = (SCORE_HEIGHT > GAME_BORDER) ? SCORE_HEIGHT : GAME_BORDER; |
||
51 | av_area.width = proc_info.client_width - av_area.x * 2; |
||
52 | av_area.height = proc_info.client_height - av_area.y - GAME_BORDER; |
||
53 | // minimal square |
||
54 | if (av_area.width < av_area.height) |
||
55 | { |
||
56 | av_area.y += (av_area.height - av_area.width) / 2; |
||
57 | av_area.height = av_area.width; |
||
58 | } |
||
59 | else // if (av_area.height < av_area.width) |
||
60 | { |
||
61 | av_area.x += (av_area.width - av_area.height) / 2; |
||
62 | av_area.width = av_area.height; |
||
63 | } |
||
64 | |||
65 | board_init(&av_area); |
||
66 | |||
67 | game.new_game_button.x = av_area.x; |
||
68 | game.new_game_button.y = (av_area.y - SCORE_HEIGHT) / 2; |
||
69 | game.new_game_button.width = (av_area.width - BOARD_SPACING) / 2; |
||
70 | game.new_game_button.height = SCORE_HEIGHT; |
||
71 | |||
72 | game.score_rect.x = av_area.x + (av_area.width + BOARD_SPACING) / 2; |
||
73 | game.score_rect.y = (av_area.y - SCORE_HEIGHT) / 2; |
||
74 | game.score_rect.width = (av_area.width - BOARD_SPACING) / 2; |
||
75 | game.score_rect.height = SCORE_HEIGHT; |
||
76 | |||
77 | game_draw_top(); |
||
78 | |||
79 | __menuet__window_redraw(2); |
||
80 | } |
||
81 | |||
82 | void game_redraw() |
||
83 | { |
||
84 | __menuet__get_process_table(&proc_info,PID_WHOAMI); |
||
85 | |||
86 | // start redraw |
||
87 | __menuet__window_redraw(1); |
||
88 | |||
89 | vsync(); |
||
90 | __menuet__define_window(0, // __u16 x1 : ignored |
||
91 | 0, // __u16 y1 : ignored |
||
92 | 0, // __u16 xsize : ignored |
||
93 | 0, // __u16 ysize : ignored |
||
94 | GAME_BG_COLOR, // __u32 body_color |
||
95 | 0, // __u32 grab_color |
||
96 | (__u32)header); // __u32 frame_color or header |
||
97 | |||
98 | game_draw_top(); |
||
99 | board_redraw(); |
||
100 | |||
101 | // end redraw |
||
102 | __menuet__window_redraw(2); |
||
103 | } |
||
104 | |||
105 | void game_move_up() |
||
106 | { |
||
107 | if (board_up()) |
||
108 | { |
||
109 | board_redraw(); |
||
110 | __u8 added = board_add_random_tile(); |
||
111 | board_redraw(); |
||
112 | |||
113 | game.over = !added || !board_has_moves(); |
||
114 | game_draw_top(); |
||
115 | } |
||
116 | } |
||
117 | |||
118 | void game_move_down() |
||
119 | { |
||
120 | if (board_down()) |
||
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_left() |
||
132 | { |
||
133 | if (board_left()) |
||
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_right() |
||
145 | { |
||
146 | if (board_right()) |
||
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 | }>> |