Simple tetris game to show usage of C12832 LCD.

Dependencies:   C12832_lcd mbed

Committer:
PrzemekWirkus
Date:
Mon Mar 17 20:16:32 2014 +0000
Revision:
1:cdd5880742fc
Parent:
0:644f70b470b5
Child:
2:da22b028cf2e
Added game lopp (still not working well);

Who changed what in which revision?

UserRevisionLine numberNew contents of line
PrzemekWirkus 0:644f70b470b5 1 #include "mbed.h"
PrzemekWirkus 0:644f70b470b5 2 #include "C12832_lcd.h"
PrzemekWirkus 0:644f70b470b5 3 #include "mtrix.h"
PrzemekWirkus 0:644f70b470b5 4
PrzemekWirkus 0:644f70b470b5 5 MBEDtrisTheGame<char> game;
PrzemekWirkus 0:644f70b470b5 6
PrzemekWirkus 0:644f70b470b5 7 C12832_LCD lcd;
PrzemekWirkus 0:644f70b470b5 8 BusIn joy(p15,p12,p13,p16);
PrzemekWirkus 0:644f70b470b5 9 DigitalIn fire(p14);
PrzemekWirkus 0:644f70b470b5 10 BusOut leds(LED1,LED2,LED3,LED4);
PrzemekWirkus 0:644f70b470b5 11
PrzemekWirkus 1:cdd5880742fc 12 #define JOY_KEY_LEFT 1
PrzemekWirkus 1:cdd5880742fc 13 #define JOY_KEY_RIGHT 2
PrzemekWirkus 1:cdd5880742fc 14 #define JOY_KEY_UP 4
PrzemekWirkus 1:cdd5880742fc 15 #define JOY_KEY_DOWN 8
PrzemekWirkus 0:644f70b470b5 16
PrzemekWirkus 0:644f70b470b5 17 #define BOUNCER_SIZE 2
PrzemekWirkus 0:644f70b470b5 18
PrzemekWirkus 0:644f70b470b5 19 int main()
PrzemekWirkus 0:644f70b470b5 20 {
PrzemekWirkus 0:644f70b470b5 21 // Welcome message
PrzemekWirkus 0:644f70b470b5 22 lcd.cls();
PrzemekWirkus 1:cdd5880742fc 23
PrzemekWirkus 1:cdd5880742fc 24 bool KEY_LEFT = false;
PrzemekWirkus 1:cdd5880742fc 25 bool KEY_RIGHT = false;
PrzemekWirkus 1:cdd5880742fc 26 bool KEY_UP = false;
PrzemekWirkus 1:cdd5880742fc 27 bool KEY_DOWN = false;
PrzemekWirkus 0:644f70b470b5 28
PrzemekWirkus 1:cdd5880742fc 29 int loop = 0;
PrzemekWirkus 0:644f70b470b5 30 while(1) {
PrzemekWirkus 0:644f70b470b5 31 int joy_key = joy.read();
PrzemekWirkus 0:644f70b470b5 32 switch (joy_key) {
PrzemekWirkus 1:cdd5880742fc 33 case JOY_KEY_LEFT: { KEY_LEFT = true; break; }
PrzemekWirkus 1:cdd5880742fc 34 case JOY_KEY_RIGHT: { KEY_RIGHT = true; break; }
PrzemekWirkus 1:cdd5880742fc 35 case JOY_KEY_UP: { KEY_UP = true; break; }
PrzemekWirkus 1:cdd5880742fc 36 case JOY_KEY_DOWN: { KEY_DOWN = true; break; }
PrzemekWirkus 0:644f70b470b5 37 }
PrzemekWirkus 0:644f70b470b5 38
PrzemekWirkus 1:cdd5880742fc 39 if ((loop % 10) == 0)
PrzemekWirkus 1:cdd5880742fc 40 {
PrzemekWirkus 1:cdd5880742fc 41 if (KEY_LEFT) { game.try_move_left(); break; }
PrzemekWirkus 1:cdd5880742fc 42 if (KEY_RIGHT) { game.try_move_right(); break; }
PrzemekWirkus 1:cdd5880742fc 43 if (KEY_UP) { game.try_rotate(); break; }
PrzemekWirkus 1:cdd5880742fc 44 if (KEY_DOWN) { game.move_brick_down(); break; }
PrzemekWirkus 1:cdd5880742fc 45
PrzemekWirkus 1:cdd5880742fc 46 KEY_LEFT = false;
PrzemekWirkus 1:cdd5880742fc 47 KEY_RIGHT = false;
PrzemekWirkus 1:cdd5880742fc 48 KEY_UP = false;
PrzemekWirkus 1:cdd5880742fc 49 KEY_DOWN = false;
PrzemekWirkus 1:cdd5880742fc 50
PrzemekWirkus 1:cdd5880742fc 51 // PRINT MATRIX
PrzemekWirkus 1:cdd5880742fc 52 for (int x = 0; x < LCD_W; x++)
PrzemekWirkus 1:cdd5880742fc 53 {
PrzemekWirkus 1:cdd5880742fc 54 for (int y = 0; y < LCD_H; y++)
PrzemekWirkus 1:cdd5880742fc 55 {
PrzemekWirkus 1:cdd5880742fc 56 // This should be replaces with just 'putpixel on LCD'
PrzemekWirkus 1:cdd5880742fc 57 int draw_pix_x = x*BOUNCER_SIZE;
PrzemekWirkus 1:cdd5880742fc 58 int draw_pix_y = y*BOUNCER_SIZE;
PrzemekWirkus 1:cdd5880742fc 59
PrzemekWirkus 1:cdd5880742fc 60 if (game.get_matrix_cell(x, y))
PrzemekWirkus 1:cdd5880742fc 61 {
PrzemekWirkus 1:cdd5880742fc 62 //lcd.rect(draw_pix_x, draw_pix_y, draw_pix_x+BOUNCER_SIZE-1, draw_pix_y+BOUNCER_SIZE-1, 1);
PrzemekWirkus 1:cdd5880742fc 63 lcd.rect(draw_pix_y, draw_pix_x, draw_pix_y+BOUNCER_SIZE-1, draw_pix_x+BOUNCER_SIZE-1, 1);
PrzemekWirkus 1:cdd5880742fc 64 }
PrzemekWirkus 1:cdd5880742fc 65 else
PrzemekWirkus 1:cdd5880742fc 66 {
PrzemekWirkus 1:cdd5880742fc 67 //lcd.rect(draw_pix_x, draw_pix_y, draw_pix_x+BOUNCER_SIZE-1, draw_pix_y+BOUNCER_SIZE-1, 0);
PrzemekWirkus 1:cdd5880742fc 68 lcd.rect(draw_pix_y, draw_pix_x, draw_pix_y+BOUNCER_SIZE-1, draw_pix_x+BOUNCER_SIZE-1, 0);
PrzemekWirkus 1:cdd5880742fc 69 }
PrzemekWirkus 0:644f70b470b5 70 }
PrzemekWirkus 0:644f70b470b5 71 }
PrzemekWirkus 1:cdd5880742fc 72
PrzemekWirkus 1:cdd5880742fc 73 // PRINT BRICK
PrzemekWirkus 1:cdd5880742fc 74 for (int x = 0; x < BRICK_SIZE_X; x++)
PrzemekWirkus 0:644f70b470b5 75 {
PrzemekWirkus 1:cdd5880742fc 76 for (int y = 0; y < BRICK_SIZE_Y; y++)
PrzemekWirkus 0:644f70b470b5 77 {
PrzemekWirkus 1:cdd5880742fc 78 if (game.get_brick_cell(x, y))
PrzemekWirkus 1:cdd5880742fc 79 {
PrzemekWirkus 1:cdd5880742fc 80 std::pair<int, int> brick_pos = game.get_brick_pos();
PrzemekWirkus 1:cdd5880742fc 81
PrzemekWirkus 1:cdd5880742fc 82 int draw_pix_x = (brick_pos.first + x) * BOUNCER_SIZE;
PrzemekWirkus 1:cdd5880742fc 83 int draw_pix_y = (brick_pos.second + y) * BOUNCER_SIZE;
PrzemekWirkus 1:cdd5880742fc 84 //lcd.rect(draw_pix_x, draw_pix_y, draw_pix_x+BOUNCER_SIZE-1, draw_pix_y+BOUNCER_SIZE-1, 1);
PrzemekWirkus 1:cdd5880742fc 85 lcd.rect(draw_pix_y, draw_pix_x, draw_pix_y+BOUNCER_SIZE-1, draw_pix_x+BOUNCER_SIZE-1, 1);
PrzemekWirkus 1:cdd5880742fc 86 }
PrzemekWirkus 0:644f70b470b5 87 }
PrzemekWirkus 0:644f70b470b5 88 }
PrzemekWirkus 1:cdd5880742fc 89
PrzemekWirkus 1:cdd5880742fc 90
PrzemekWirkus 1:cdd5880742fc 91 lcd.copy_to_lcd();
PrzemekWirkus 1:cdd5880742fc 92 game.move_brick_down();
PrzemekWirkus 0:644f70b470b5 93 }
PrzemekWirkus 1:cdd5880742fc 94 wait(0.01);
PrzemekWirkus 1:cdd5880742fc 95 loop++;
PrzemekWirkus 0:644f70b470b5 96 }
PrzemekWirkus 0:644f70b470b5 97 }