My ELEC2645 joystick project Tetris Game NAME: JIANWEI CHEN SID: 200879849
Dependencies: N5110 SDFileSystem mbed
main.cpp
- Committer:
- cjw851102
- Date:
- 2016-04-17
- Revision:
- 0:12a1972fa0d0
- Child:
- 1:2a758565f691
File content as of revision 0:12a1972fa0d0:
#include "mbed.h" #include "Patterns.h" #include "N5110.h" //VCC, SCE, RST, D/C, MOSI,SCLK, LED N5110 lcd(PTE26,PTA0,PTC4,PTD0,PTD2,PTD1,PTC3); Patterns patterns; void drawPattern(int type,int rotation,int x,int y,int fill); // draw pattern at (x,y), fill = 0 white, fill = 1 black void left_collisionDetect(); int left_xMin = 0; int left_collision_flag = 0; void right_collisionDetect(); int right_xMax = 29; int right_collision_flag = 0; void bottom_collisionDetect(); int bottom_yMax = 47; int bottom_collision_flag = 0; struct Position { float x; float y; int type; int rotation; }; typedef struct Position position; position pos_current; void init_game(); int pattern_buffer[6][6]; void get_pattern(int type, int rotatin); void scan(); int buffer[84][48]; int main() { wait(2.0); // short delay for power to settle lcd.init(); lcd.normalMode(); // normal colour mode lcd.setBrightness(1.0); // put LED backlight on 50% /* init_game(); lcd.clear(); lcd.drawLine(0,16,25,16,1); drawPattern(pos_current.type,pos_current.rotation,pos_current.x,pos_current.y,1); right_collisionDetect(); if (right_collision_flag == 1) { lcd.printString("1",0,0); } lcd.drawLine(35,0,35,47,2); lcd.printString("Level:",42,0); lcd.printString("easy",42,1); lcd.printString("Score:",42,2); lcd.printString("100",42,3); lcd.printString("Next:",42,4); wait(0.5); lcd.refresh();*/ /* lcd.clear(); drawPattern(0,0,0,0,1); drawPattern(1,0,10,0,1); drawPattern(2,0,20,0,1); drawPattern(3,0,30,0,1); drawPattern(4,0,40,0,1); drawPattern(5,0,50,0,1); drawPattern(6,0,60,0,1); lcd.refresh(); */ int i =0; while (1) { drawPattern(0,i,0,0,1); drawPattern(1,i,10,0,1); drawPattern(2,i,20,0,1); drawPattern(3,i,30,0,1); drawPattern(4,i,40,0,1); drawPattern(5,i,50,0,1); drawPattern(6,i,60,0,1); lcd.refresh(); i++; if (i==4) { i=0; } wait(0.5); lcd.clear(); } } void init_game() { pos_current.x = 10; pos_current.y = 10; pos_current.type = 6; pos_current.rotation = 2; } void get_pattern(int type, int rotation) { for(int i=0; i<=5; i++) { for(int j=0; j<=5; j++) { pattern_buffer[i][j] = patterns.getPatterns(type,rotation,j,i); // return pattern[type][rotation][y][x]; } } } void scan() { for (int i=0; i<=83; i++) { for (int j=0; j<=47; j++) { if(lcd.getPixel(i,j)) { buffer[i][j] = 1; } else { buffer[i][j] = 0; } } } } void drawPattern(int type,int rotation,int x,int y,int fill) { get_pattern(type,rotation); for(int i=x; i <= x+5; i++) { // (x,y) is the left top point of a 6*6 square for(int j=y; j <= y+5; j++) { if(pattern_buffer[i-x][j-y]==1) { if (fill==0) { lcd.clearPixel(i,j); } else if (fill==1) { lcd.setPixel(i,j); } } } } } void left_collisionDetect() { scan(); get_pattern(pos_current.type,pos_current.rotation); int left_boundary[6][6]; // get the left boundary pattern for (int j=0; j<=6; j++) { // for (int i=0; i<=6; i++) { if (pattern_buffer[i][j]==1) { left_boundary[i][j]=1; for(int k=i+1; k<=6; k++) { left_boundary[k][j] = 0; } } else { left_boundary[i][j]=0; } } } //check left collision int x = pos_current.x; int y = pos_current.y; for(int i = x; i <= x+5; i++) { // (x,y) is the left top point of a 6*6 square for(int j=y; j <= y+5; j++) { if(left_boundary[i-x][j-y]==1) { if(i == 0) { left_collision_flag = 1; left_xMin = 0; } else if (buffer[i-1][j] == 1) { left_collision_flag = 1; if (i > left_xMin) { left_xMin = i; } } } } } } void right_collisionDetect() { scan(); get_pattern(pos_current.type,pos_current.rotation); int right_boundary[6][6]; // get the left boundary pattern for (int j=0; j<=6; j++) { for (int i=6; i>=0; i--) { if (pattern_buffer[i][j]==1) { right_boundary[i][j]=1; for(int k=i-1; k>=0; k--) { right_boundary[k][j] = 0; } } else { right_boundary[i][j]=0; } } } //check left collision int x = pos_current.x; int y = pos_current.y; for(int i = x; i <= x+5; i++) { // (x,y) is the left top point of a 6*6 square for(int j=y; j <= y+5; j++) { if(right_boundary[i-x][j-y]==1) { if(i == 29) { right_collision_flag = 1; right_xMax = 29; } else if (buffer[i+1][j] == 1) { right_collision_flag = 1; if(i< right_xMax) { right_xMax = i; } } } } } } void bottom_collisionDetect() { scan(); get_pattern(pos_current.type,pos_current.rotation); int bot_boundary[6][6]; // get the left boundary pattern for (int i=0; i<=6; i++) { for (int j=6; j>=0; j--) { if (pattern_buffer[i][j]==1) { bot_boundary[i][j]=1; for(int k=i-1; k>=0; k--) { bot_boundary[i][k] = 0; } } else { bot_boundary[i][j]=0; } } } //check left collision int x = pos_current.x; int y = pos_current.y; for(int i = x; i <= x+5; i++) { // (x,y) is the left top point of a 6*6 square for(int j=y; j <= y+5; j++) { if(bot_boundary[i-x][j-y]==1) { if(j == 47) { bottom_collision_flag = 1; bottom_yMax = 47; } else if (buffer[i][j+1] == 1) { right_collision_flag = 1; if(j< bottom_yMax) { bottom_yMax = j; } } } } } }