diff options
Diffstat (limited to 'apps/recorder')
-rw-r--r-- | apps/recorder/tetris.c | 70 |
1 files changed, 40 insertions, 30 deletions
diff --git a/apps/recorder/tetris.c b/apps/recorder/tetris.c index ac0d373526..a0a2f4b95a 100644 --- a/apps/recorder/tetris.c +++ b/apps/recorder/tetris.c | |||
@@ -38,10 +38,10 @@ | |||
38 | #define TETRIS_TITLE_XLOC 43 | 38 | #define TETRIS_TITLE_XLOC 43 |
39 | #define TETRIS_TITLE_YLOC 15 | 39 | #define TETRIS_TITLE_YLOC 15 |
40 | 40 | ||
41 | static const int start_x = 1; | 41 | static const int start_x = 5; |
42 | static const int start_y = 2; | 42 | static const int start_y = 5; |
43 | static const int max_x = 104; | 43 | static const int max_x = 4 * 17; |
44 | static const int max_y = 48; | 44 | static const int max_y = 3 * 10; |
45 | static const short level_speeds[10] = {1000,900,800,700,600,500,400,300,250,200}; | 45 | static const short level_speeds[10] = {1000,900,800,700,600,500,400,300,250,200}; |
46 | static const int blocks = 7; | 46 | static const int blocks = 7; |
47 | static const int block_frames[7] = {1,2,2,2,4,4,4}; | 47 | static const int block_frames[7] = {1,2,2,2,4,4,4}; |
@@ -115,6 +115,9 @@ void draw_frame(int fstart_x,int fstop_x,int fstart_y,int fstop_y) | |||
115 | 115 | ||
116 | lcd_drawline(fstart_x, fstart_y, fstart_x, fstop_y); | 116 | lcd_drawline(fstart_x, fstart_y, fstart_x, fstop_y); |
117 | lcd_drawline(fstop_x, fstart_y, fstop_x, fstop_y); | 117 | lcd_drawline(fstop_x, fstart_y, fstop_x, fstop_y); |
118 | |||
119 | lcd_drawline(fstart_x - 1, fstart_y + 1, fstart_x - 1, fstop_y + 1); | ||
120 | lcd_drawline(fstart_x - 1, fstop_y + 1, fstop_x - 1, fstop_y + 1); | ||
118 | } | 121 | } |
119 | 122 | ||
120 | void draw_block(int x, int y, int block, int frame, bool clear) | 123 | void draw_block(int x, int y, int block, int frame, bool clear) |
@@ -123,17 +126,17 @@ void draw_block(int x, int y, int block, int frame, bool clear) | |||
123 | for(i=0;i < 4;i++) { | 126 | for(i=0;i < 4;i++) { |
124 | if (clear) | 127 | if (clear) |
125 | { | 128 | { |
126 | for (a = 0; a < 4; a++) | 129 | for (a = 0; a < 3; a++) |
127 | for (b = 0; b < 4; b++) | 130 | for (b = 0; b < 4; b++) |
128 | lcd_clearpixel(start_x + x + block_data[block][frame][1][i] * 4 + b, | 131 | lcd_clearpixel(start_x + x + block_data[block][frame][1][i] * 4 - b, |
129 | start_y + y + block_data[block][frame][0][i] * 4 + a); | 132 | start_y + y + block_data[block][frame][0][i] * 3 + a); |
130 | } | 133 | } |
131 | else | 134 | else |
132 | { | 135 | { |
133 | for (a = 0; a < 4; a++) | 136 | for (a = 0; a < 3; a++) |
134 | for (b = 0; b < 4; b++) | 137 | for (b = 0; b < 4; b++) |
135 | lcd_drawpixel(start_x+x+block_data[block][frame][1][i] * 4 + b, | 138 | lcd_drawpixel(start_x+x+block_data[block][frame][1][i] * 4 - b, |
136 | start_y+y+block_data[block][frame][0][i] * 4 + a); | 139 | start_y+y+block_data[block][frame][0][i] * 3 + a); |
137 | } | 140 | } |
138 | } | 141 | } |
139 | } | 142 | } |
@@ -141,22 +144,21 @@ void draw_block(int x, int y, int block, int frame, bool clear) | |||
141 | void to_virtual(void) | 144 | void to_virtual(void) |
142 | { | 145 | { |
143 | int i,a,b; | 146 | int i,a,b; |
147 | |||
144 | for(i = 0; i < 4; i++) | 148 | for(i = 0; i < 4; i++) |
145 | { | 149 | for (a = 0; a < 3; a++) |
146 | for (a = 0; a < 4; a++) | ||
147 | for (b = 0; b < 4; b++) | 150 | for (b = 0; b < 4; b++) |
148 | *(virtual + | 151 | *(virtual + |
149 | (current_y + block_data[current_b][current_f][0][i] * 4 + a) * max_x + | 152 | (current_y + block_data[current_b][current_f][0][i] * 3 + a) * max_x + |
150 | current_x + block_data[current_b][current_f][1][i] * 4 + b) = current_b + 1; | 153 | current_x + block_data[current_b][current_f][1][i] * 4 - b) = current_b + 1; |
151 | } | ||
152 | } | 154 | } |
153 | 155 | ||
154 | bool block_touch (int x, int y) | 156 | bool block_touch (int x, int y) |
155 | { | 157 | { |
156 | int a,b; | 158 | int a,b; |
157 | for (a = 0; a < 4; a++) | 159 | for (a = 0; a < 4; a++) |
158 | for (b = 0; b < 4; b++) | 160 | for (b = 0; b < 3; b++) |
159 | if (*(virtual + (y + b) * max_x + (x + a)) != 0) | 161 | if (*(virtual + (y + b) * max_x + (x - a)) != 0) |
160 | return true; | 162 | return true; |
161 | return false; | 163 | return false; |
162 | } | 164 | } |
@@ -173,7 +175,7 @@ bool gameover(void) | |||
173 | 175 | ||
174 | for(i = 0; i < 4; i++){ | 176 | for(i = 0; i < 4; i++){ |
175 | /* Do we have blocks touching? */ | 177 | /* Do we have blocks touching? */ |
176 | if(block_touch(x + block_data[block][frame][1][i] * 4, y + block_data[block][frame][0][i] * 4)) | 178 | if(block_touch(x + block_data[block][frame][1][i] * 4, y + block_data[block][frame][0][i] * 3)) |
177 | { | 179 | { |
178 | /* Are we at the top of the frame? */ | 180 | /* Are we at the top of the frame? */ |
179 | if(y + block_data[block][frame][1][i] * 4 < start_y) | 181 | if(y + block_data[block][frame][1][i] * 4 < start_y) |
@@ -190,11 +192,11 @@ bool valid_position(int x, int y, int block, int frame) | |||
190 | { | 192 | { |
191 | int i; | 193 | int i; |
192 | for(i=0;i < 4;i++) | 194 | for(i=0;i < 4;i++) |
193 | if ((y + block_data[block][frame][0][i] * 4 > max_y - 4) || | 195 | if ((y + block_data[block][frame][0][i] * 3 > max_y - 3) || |
194 | (x + block_data[block][frame][1][i] * 4 > max_x) || | 196 | (x + block_data[block][frame][1][i] * 4 > max_x - 4) || |
195 | (y + block_data[block][frame][0][i] * 4 < 0) || | 197 | (y + block_data[block][frame][0][i] * 3 < 0) || |
196 | (x + block_data[block][frame][1][i] * 4 < 0) || | 198 | (x + block_data[block][frame][1][i] * 4 < 4) || |
197 | block_touch (x + block_data[block][frame][1][i] * 4, y + block_data[block][frame][0][i] * 4)) | 199 | block_touch (x + block_data[block][frame][1][i] * 4, y + block_data[block][frame][0][i] * 3)) |
198 | return false; | 200 | return false; |
199 | return true; | 201 | return true; |
200 | } | 202 | } |
@@ -238,12 +240,20 @@ void new_block(void) | |||
238 | { | 240 | { |
239 | current_b = next_b; | 241 | current_b = next_b; |
240 | current_f = next_f; | 242 | current_f = next_f; |
241 | current_x = max_x - 15; | 243 | current_x = max_x - 16; |
242 | current_y = (int)((max_y)/2); | 244 | current_y = (int)12; |
243 | next_b = t_rand(blocks); | 245 | next_b = t_rand(blocks); |
244 | next_f = t_rand(block_frames[next_b]); | 246 | next_f = t_rand(block_frames[next_b]); |
245 | // draw_block(max_x + 2, start_y - 1, current_b, current_f, true); | 247 | |
246 | // draw_block(max_x + 2, start_y - 1, next_b, next_f, false); | 248 | lcd_drawline (max_x + 7, start_y - 1, max_x + 29, start_y - 1); |
249 | lcd_drawline (max_x + 29, start_y, max_x + 29, start_y + 14); | ||
250 | lcd_drawline (max_x + 29, start_y + 14, max_x + 7, start_y + 14); | ||
251 | lcd_drawline (max_x + 7, start_y + 14, max_x + 7, start_y - 1); | ||
252 | lcd_drawline (max_x + 6, start_y + 15, max_x + 6, start_y); | ||
253 | lcd_drawline (max_x + 6, start_y + 15, max_x + 28, start_y + 15); | ||
254 | |||
255 | draw_block(max_x + 9, start_y - 4, current_b, current_f, true); | ||
256 | draw_block(max_x + 9, start_y - 4, next_b, next_f, false); | ||
247 | if(!valid_position(current_x, current_y, current_b, current_f)) | 257 | if(!valid_position(current_x, current_y, current_b, current_f)) |
248 | { | 258 | { |
249 | draw_block(current_x, current_y, current_b, current_f, false); | 259 | draw_block(current_x, current_y, current_b, current_f, false); |
@@ -327,13 +337,13 @@ void game_loop(void) | |||
327 | return; /* get out of here */ | 337 | return; /* get out of here */ |
328 | 338 | ||
329 | if ( b & BUTTON_UP ) | 339 | if ( b & BUTTON_UP ) |
330 | move_block(0,-4,0); | 340 | move_block(0,-3,0); |
331 | 341 | ||
332 | if ( b & BUTTON_DOWN ) | 342 | if ( b & BUTTON_DOWN ) |
333 | move_block(0,4,0); | 343 | move_block(0,3,0); |
334 | 344 | ||
335 | if ( b & BUTTON_RIGHT ) | 345 | if ( b & BUTTON_RIGHT ) |
336 | move_block(0,0,-1); | 346 | move_block(0,0,1); |
337 | 347 | ||
338 | if ( b & BUTTON_LEFT ) | 348 | if ( b & BUTTON_LEFT ) |
339 | move_down(); | 349 | move_down(); |