Simple tetris game to show usage of C12832 LCD.

Dependencies:   C12832_lcd mbed

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?

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