Przemek Wirkus
/
MBEDtetris
Simple tetris game to show usage of C12832 LCD.
main.cpp@2:da22b028cf2e, 2014-03-18 (annotated)
- Committer:
- PrzemekWirkus
- Date:
- Tue Mar 18 10:03:03 2014 +0000
- Revision:
- 2:da22b028cf2e
- Parent:
- 1:cdd5880742fc
- Child:
- 3:dbd1976e4add
Changing game loop
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 | 0:644f70b470b5 | 18 | #define BOUNCER_SIZE 2 |
PrzemekWirkus | 0:644f70b470b5 | 19 | |
PrzemekWirkus | 2:da22b028cf2e | 20 | bool KEYS[4] = {false, false, false, false}; |
PrzemekWirkus | 2:da22b028cf2e | 21 | |
PrzemekWirkus | 0:644f70b470b5 | 22 | int main() |
PrzemekWirkus | 0:644f70b470b5 | 23 | { |
PrzemekWirkus | 0:644f70b470b5 | 24 | // Welcome message |
PrzemekWirkus | 0:644f70b470b5 | 25 | lcd.cls(); |
PrzemekWirkus | 2:da22b028cf2e | 26 | |
PrzemekWirkus | 2:da22b028cf2e | 27 | while(1) { |
PrzemekWirkus | 2:da22b028cf2e | 28 | clock_t t1, t2; |
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 | 2:da22b028cf2e | 35 | case JOY_KEY_UP: { game.try_rotate(); break; } |
PrzemekWirkus | 2:da22b028cf2e | 36 | case JOY_KEY_DOWN: { game.move_brick_down(); break; } |
PrzemekWirkus | 0:644f70b470b5 | 37 | } |
PrzemekWirkus | 2:da22b028cf2e | 38 | |
PrzemekWirkus | 2:da22b028cf2e | 39 | // PRINT MATRIX |
PrzemekWirkus | 2:da22b028cf2e | 40 | for (int x = 0; x < LCD_W; x++) |
PrzemekWirkus | 2:da22b028cf2e | 41 | { |
PrzemekWirkus | 2:da22b028cf2e | 42 | for (int y = 0; y < LCD_H; y++) |
PrzemekWirkus | 2:da22b028cf2e | 43 | { |
PrzemekWirkus | 2:da22b028cf2e | 44 | // This should be replaces with just 'putpixel on LCD' |
PrzemekWirkus | 2:da22b028cf2e | 45 | int draw_pix_x = x*BOUNCER_SIZE; |
PrzemekWirkus | 2:da22b028cf2e | 46 | int draw_pix_y = y*BOUNCER_SIZE; |
PrzemekWirkus | 2:da22b028cf2e | 47 | |
PrzemekWirkus | 2:da22b028cf2e | 48 | if (game.get_matrix_cell(x, y)) |
PrzemekWirkus | 2:da22b028cf2e | 49 | { |
PrzemekWirkus | 2:da22b028cf2e | 50 | //lcd.rect(draw_pix_x, draw_pix_y, draw_pix_x+BOUNCER_SIZE-1, draw_pix_y+BOUNCER_SIZE-1, 1); |
PrzemekWirkus | 2:da22b028cf2e | 51 | lcd.rect(draw_pix_y, draw_pix_x, draw_pix_y+BOUNCER_SIZE-1, draw_pix_x+BOUNCER_SIZE-1, 1); |
PrzemekWirkus | 2:da22b028cf2e | 52 | } |
PrzemekWirkus | 2:da22b028cf2e | 53 | else |
PrzemekWirkus | 2:da22b028cf2e | 54 | { |
PrzemekWirkus | 2:da22b028cf2e | 55 | //lcd.rect(draw_pix_x, draw_pix_y, draw_pix_x+BOUNCER_SIZE-1, draw_pix_y+BOUNCER_SIZE-1, 0); |
PrzemekWirkus | 2:da22b028cf2e | 56 | lcd.rect(draw_pix_y, draw_pix_x, draw_pix_y+BOUNCER_SIZE-1, draw_pix_x+BOUNCER_SIZE-1, 0); |
PrzemekWirkus | 0:644f70b470b5 | 57 | } |
PrzemekWirkus | 0:644f70b470b5 | 58 | } |
PrzemekWirkus | 2:da22b028cf2e | 59 | } |
PrzemekWirkus | 2:da22b028cf2e | 60 | |
PrzemekWirkus | 2:da22b028cf2e | 61 | // PRINT BRICK |
PrzemekWirkus | 2:da22b028cf2e | 62 | for (int x = 0; x < BRICK_SIZE_X; x++) |
PrzemekWirkus | 2:da22b028cf2e | 63 | { |
PrzemekWirkus | 2:da22b028cf2e | 64 | for (int y = 0; y < BRICK_SIZE_Y; y++) |
PrzemekWirkus | 0:644f70b470b5 | 65 | { |
PrzemekWirkus | 2:da22b028cf2e | 66 | if (game.get_brick_cell(x, y)) |
PrzemekWirkus | 0:644f70b470b5 | 67 | { |
PrzemekWirkus | 2:da22b028cf2e | 68 | std::pair<int, int> brick_pos = game.get_brick_pos(); |
PrzemekWirkus | 2:da22b028cf2e | 69 | |
PrzemekWirkus | 2:da22b028cf2e | 70 | int draw_pix_x = (brick_pos.first + x) * BOUNCER_SIZE; |
PrzemekWirkus | 2:da22b028cf2e | 71 | int draw_pix_y = (brick_pos.second + y) * BOUNCER_SIZE; |
PrzemekWirkus | 2:da22b028cf2e | 72 | //lcd.rect(draw_pix_x, draw_pix_y, draw_pix_x+BOUNCER_SIZE-1, draw_pix_y+BOUNCER_SIZE-1, 1); |
PrzemekWirkus | 2:da22b028cf2e | 73 | lcd.rect(draw_pix_y, draw_pix_x, draw_pix_y+BOUNCER_SIZE-1, draw_pix_x+BOUNCER_SIZE-1, 1); |
PrzemekWirkus | 0:644f70b470b5 | 74 | } |
PrzemekWirkus | 0:644f70b470b5 | 75 | } |
PrzemekWirkus | 0:644f70b470b5 | 76 | } |
PrzemekWirkus | 2:da22b028cf2e | 77 | |
PrzemekWirkus | 2:da22b028cf2e | 78 | lcd.copy_to_lcd(); |
PrzemekWirkus | 2:da22b028cf2e | 79 | game.move_brick_down(); |
PrzemekWirkus | 2:da22b028cf2e | 80 | t2 = clock(); |
PrzemekWirkus | 2:da22b028cf2e | 81 | float diff = (((float)t2 - (float)t1) / CLOCKS_PER_SEC ); |
PrzemekWirkus | 2:da22b028cf2e | 82 | wait(diff); |
PrzemekWirkus | 0:644f70b470b5 | 83 | } |
PrzemekWirkus | 0:644f70b470b5 | 84 | } |