Przemek Wirkus
/
MBEDtetris
Simple tetris game to show usage of C12832 LCD.
main.cpp@3:dbd1976e4add, 2014-03-18 (annotated)
- Committer:
- PrzemekWirkus
- Date:
- Tue Mar 18 16:55:43 2014 +0000
- Revision:
- 3:dbd1976e4add
- Parent:
- 2:da22b028cf2e
Working version. No game features implemented yet. Next: full line cut.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
PrzemekWirkus | 0:644f70b470b5 | 1 | #include "mbed.h" |
PrzemekWirkus | 2:da22b028cf2e | 2 | #include <time.h> |
PrzemekWirkus | 0:644f70b470b5 | 3 | #include "C12832_lcd.h" |
PrzemekWirkus | 0:644f70b470b5 | 4 | #include "mtrix.h" |
PrzemekWirkus | 0:644f70b470b5 | 5 | |
PrzemekWirkus | 0:644f70b470b5 | 6 | MBEDtrisTheGame<char> game; |
PrzemekWirkus | 0:644f70b470b5 | 7 | |
PrzemekWirkus | 0:644f70b470b5 | 8 | C12832_LCD lcd; |
PrzemekWirkus | 0:644f70b470b5 | 9 | BusIn joy(p15,p12,p13,p16); |
PrzemekWirkus | 0:644f70b470b5 | 10 | DigitalIn fire(p14); |
PrzemekWirkus | 0:644f70b470b5 | 11 | BusOut leds(LED1,LED2,LED3,LED4); |
PrzemekWirkus | 0:644f70b470b5 | 12 | |
PrzemekWirkus | 1:cdd5880742fc | 13 | #define JOY_KEY_LEFT 1 |
PrzemekWirkus | 1:cdd5880742fc | 14 | #define JOY_KEY_RIGHT 2 |
PrzemekWirkus | 1:cdd5880742fc | 15 | #define JOY_KEY_UP 4 |
PrzemekWirkus | 1:cdd5880742fc | 16 | #define JOY_KEY_DOWN 8 |
PrzemekWirkus | 0:644f70b470b5 | 17 | |
PrzemekWirkus | 3:dbd1976e4add | 18 | #define BOUNCER_SIZE 4 |
PrzemekWirkus | 2:da22b028cf2e | 19 | |
PrzemekWirkus | 0:644f70b470b5 | 20 | int main() |
PrzemekWirkus | 0:644f70b470b5 | 21 | { |
PrzemekWirkus | 0:644f70b470b5 | 22 | // Welcome message |
PrzemekWirkus | 0:644f70b470b5 | 23 | lcd.cls(); |
PrzemekWirkus | 3:dbd1976e4add | 24 | |
PrzemekWirkus | 3:dbd1976e4add | 25 | std::pair<int, int> brick_prev_pos = game.get_brick_pos(); |
PrzemekWirkus | 3:dbd1976e4add | 26 | clock_t t1, t2; |
PrzemekWirkus | 3:dbd1976e4add | 27 | |
PrzemekWirkus | 2:da22b028cf2e | 28 | while(1) { |
PrzemekWirkus | 2:da22b028cf2e | 29 | t1 = clock(); |
PrzemekWirkus | 1:cdd5880742fc | 30 | |
PrzemekWirkus | 0:644f70b470b5 | 31 | int joy_key = joy.read(); |
PrzemekWirkus | 0:644f70b470b5 | 32 | switch (joy_key) { |
PrzemekWirkus | 2:da22b028cf2e | 33 | case JOY_KEY_LEFT: { game.try_move_left(); break; } |
PrzemekWirkus | 2:da22b028cf2e | 34 | case JOY_KEY_RIGHT: { game.try_move_right(); break; } |
PrzemekWirkus | 3:dbd1976e4add | 35 | case JOY_KEY_UP: { game.try_rotate(); break; } |
PrzemekWirkus | 3:dbd1976e4add | 36 | case JOY_KEY_DOWN: { game.move_brick_down(); break; } |
PrzemekWirkus | 0:644f70b470b5 | 37 | } |
PrzemekWirkus | 3:dbd1976e4add | 38 | |
PrzemekWirkus | 3:dbd1976e4add | 39 | // Erase prev brick from screen |
PrzemekWirkus | 3:dbd1976e4add | 40 | for (int x = 0; x < BRICK_SIZE_X; x++) |
PrzemekWirkus | 3:dbd1976e4add | 41 | { |
PrzemekWirkus | 3:dbd1976e4add | 42 | for (int y = 0; y < BRICK_SIZE_Y; y++) |
PrzemekWirkus | 3:dbd1976e4add | 43 | { |
PrzemekWirkus | 3:dbd1976e4add | 44 | int color = game.get_brick_cell(x, y); |
PrzemekWirkus | 3:dbd1976e4add | 45 | { |
PrzemekWirkus | 3:dbd1976e4add | 46 | int draw_pix_x = (brick_prev_pos.first + x) * BOUNCER_SIZE; |
PrzemekWirkus | 3:dbd1976e4add | 47 | int draw_pix_y = (brick_prev_pos.second + y) * BOUNCER_SIZE; |
PrzemekWirkus | 3:dbd1976e4add | 48 | lcd.rect(draw_pix_y, draw_pix_x, draw_pix_y+BOUNCER_SIZE-1, draw_pix_x+BOUNCER_SIZE-1, 0); |
PrzemekWirkus | 3:dbd1976e4add | 49 | } |
PrzemekWirkus | 3:dbd1976e4add | 50 | } |
PrzemekWirkus | 3:dbd1976e4add | 51 | } |
PrzemekWirkus | 3:dbd1976e4add | 52 | |
PrzemekWirkus | 2:da22b028cf2e | 53 | // PRINT MATRIX |
PrzemekWirkus | 2:da22b028cf2e | 54 | for (int x = 0; x < LCD_W; x++) |
PrzemekWirkus | 2:da22b028cf2e | 55 | { |
PrzemekWirkus | 2:da22b028cf2e | 56 | for (int y = 0; y < LCD_H; y++) |
PrzemekWirkus | 3:dbd1976e4add | 57 | { |
PrzemekWirkus | 3:dbd1976e4add | 58 | |
PrzemekWirkus | 2:da22b028cf2e | 59 | // This should be replaces with just 'putpixel on LCD' |
PrzemekWirkus | 2:da22b028cf2e | 60 | int draw_pix_x = x*BOUNCER_SIZE; |
PrzemekWirkus | 2:da22b028cf2e | 61 | int draw_pix_y = y*BOUNCER_SIZE; |
PrzemekWirkus | 2:da22b028cf2e | 62 | |
PrzemekWirkus | 2:da22b028cf2e | 63 | if (game.get_matrix_cell(x, y)) |
PrzemekWirkus | 2:da22b028cf2e | 64 | { |
PrzemekWirkus | 2:da22b028cf2e | 65 | //lcd.rect(draw_pix_x, draw_pix_y, draw_pix_x+BOUNCER_SIZE-1, draw_pix_y+BOUNCER_SIZE-1, 1); |
PrzemekWirkus | 2:da22b028cf2e | 66 | lcd.rect(draw_pix_y, draw_pix_x, draw_pix_y+BOUNCER_SIZE-1, draw_pix_x+BOUNCER_SIZE-1, 1); |
PrzemekWirkus | 2:da22b028cf2e | 67 | } |
PrzemekWirkus | 2:da22b028cf2e | 68 | else |
PrzemekWirkus | 2:da22b028cf2e | 69 | { |
PrzemekWirkus | 2:da22b028cf2e | 70 | //lcd.rect(draw_pix_x, draw_pix_y, draw_pix_x+BOUNCER_SIZE-1, draw_pix_y+BOUNCER_SIZE-1, 0); |
PrzemekWirkus | 3:dbd1976e4add | 71 | // lcd.rect(draw_pix_y, draw_pix_x, draw_pix_y+BOUNCER_SIZE-1, draw_pix_x+BOUNCER_SIZE-1, 0); |
PrzemekWirkus | 0:644f70b470b5 | 72 | } |
PrzemekWirkus | 0:644f70b470b5 | 73 | } |
PrzemekWirkus | 2:da22b028cf2e | 74 | } |
PrzemekWirkus | 3:dbd1976e4add | 75 | |
PrzemekWirkus | 2:da22b028cf2e | 76 | // PRINT BRICK |
PrzemekWirkus | 2:da22b028cf2e | 77 | for (int x = 0; x < BRICK_SIZE_X; x++) |
PrzemekWirkus | 2:da22b028cf2e | 78 | { |
PrzemekWirkus | 2:da22b028cf2e | 79 | for (int y = 0; y < BRICK_SIZE_Y; y++) |
PrzemekWirkus | 0:644f70b470b5 | 80 | { |
PrzemekWirkus | 3:dbd1976e4add | 81 | int color = game.get_brick_cell(x, y); |
PrzemekWirkus | 3:dbd1976e4add | 82 | if (color) |
PrzemekWirkus | 0:644f70b470b5 | 83 | { |
PrzemekWirkus | 2:da22b028cf2e | 84 | std::pair<int, int> brick_pos = game.get_brick_pos(); |
PrzemekWirkus | 2:da22b028cf2e | 85 | |
PrzemekWirkus | 2:da22b028cf2e | 86 | int draw_pix_x = (brick_pos.first + x) * BOUNCER_SIZE; |
PrzemekWirkus | 2:da22b028cf2e | 87 | int draw_pix_y = (brick_pos.second + y) * BOUNCER_SIZE; |
PrzemekWirkus | 2:da22b028cf2e | 88 | //lcd.rect(draw_pix_x, draw_pix_y, draw_pix_x+BOUNCER_SIZE-1, draw_pix_y+BOUNCER_SIZE-1, 1); |
PrzemekWirkus | 3:dbd1976e4add | 89 | lcd.rect(draw_pix_y, draw_pix_x, draw_pix_y+BOUNCER_SIZE-1, draw_pix_x+BOUNCER_SIZE-1, color); |
PrzemekWirkus | 0:644f70b470b5 | 90 | } |
PrzemekWirkus | 0:644f70b470b5 | 91 | } |
PrzemekWirkus | 0:644f70b470b5 | 92 | } |
PrzemekWirkus | 2:da22b028cf2e | 93 | |
PrzemekWirkus | 2:da22b028cf2e | 94 | lcd.copy_to_lcd(); |
PrzemekWirkus | 3:dbd1976e4add | 95 | |
PrzemekWirkus | 3:dbd1976e4add | 96 | brick_prev_pos = game.get_brick_pos(); |
PrzemekWirkus | 3:dbd1976e4add | 97 | |
PrzemekWirkus | 2:da22b028cf2e | 98 | game.move_brick_down(); |
PrzemekWirkus | 2:da22b028cf2e | 99 | t2 = clock(); |
PrzemekWirkus | 2:da22b028cf2e | 100 | float diff = (((float)t2 - (float)t1) / CLOCKS_PER_SEC ); |
PrzemekWirkus | 3:dbd1976e4add | 101 | wait(0.2); |
PrzemekWirkus | 0:644f70b470b5 | 102 | } |
PrzemekWirkus | 0:644f70b470b5 | 103 | } |