Simple tetris game to show usage of C12832 LCD.

Dependencies:   C12832_lcd mbed

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?

UserRevisionLine numberNew 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 }