#include "block.h" #include "draw.h" #include "button.h" #include char base[MAX_X][MAX_Y] = {0}; //x*y //0为空 1为下落完成 2为正在下落 enum BLK_TP type = none; void blockInit() { base[0][0] = 1; base[0][1] = 1; base[0][2] = 1; } void blockDestroy() { memset(base, 0, sizeof(base)); } void genPiece() { char i, j; //需要一点随机性 int random = TH0 % 4; int len = 2 + TH0 % 3; //若存在尚未下落完成的方块则打断 for(i = 0; i < MAX_X; i++) for(j = 0; j < MAX_Y; j++) if(base[i][j] == 2) return; //当两个方块的情况 if(len == 2) { if(random % 2 == 0) { base[4][7] = 2; // base[4][8] = 2; // } else { base[3][7] = 2; //// base[4][7] = 2; } } //当三个方块的情况 if(len == 3) { if(random == 0) { base[4][7] = 2; base[4][8] = 2; base[4][9] = 2; } else if(random == 1) { base[3][7] = 2; base[4][7] = 2; base[5][7] = 2; } else if(random == 2) { base[3][8] = 2; base[3][7] = 2; base[4][7] = 2; } else if (random == 3) { base[4][8] = 2; base[3][7] = 2; base[4][7] = 2; } } //当四个方块的情况 if(len == 3) { base[3][7] = 2; base[4][7] = 2; base[3][8] = 2; base[4][8] = 2; } } //动作是否在屏幕内 unsigned char isIegal(char i, char j) { if(i >= 0 && i < MAX_X && j >= 0 && j < MAX_Y && base[i][j] == 0) return 1; return 0; } //方块绘制 void drawBlock() { char i, j; for(i = 0; i < 8; i++) for(j = 0; j < 8; j++) if(base[i][j] != 0) placeIMG_BLOCK(i, j); else place_VOID_BLOCK(i, j); } //方块下落与合并 void dropPiece() { char i, j, flag = 0; //检测是否触底 for(i = 0; i < MAX_X; i++) { for(j = 0; j < MAX_Y; j++) { if(flag == 1) break; if(base[i][j] == 2) { //若触底,做标记 if(flag == 0 && (base[i][j - 1] == 1 || j == 0)) { flag = 1; break; } } } if(flag == 1) break; } //转换嵌套 for(i = 0; i < MAX_X; i++) { for(j = 0; j < MAX_Y; j++) { if(base[i][j] == 2) { //无标记则下落 if(flag == 0 && isIegal(i, j - 1)) { base[i][j - 1] = 2; base[i][j] = 0; } //有标记则转换 else if(flag == 1) base[i][j] = 1; } } } } //方块平移 void movePiece(enum OPR opr) { char i, j; for(i = 0; i < MAX_X; i++) for(j = 0; j < MAX_Y; j++) if(base[i][j] == 2) { if(opr == left && isIegal(i - 1, j)) { base[i - 1][j] = 2; base[i][j] = 0; } else if(opr == left && isIegal(i + 1, j)) { base[i + 1][j] = 2; base[i][j] = 0; } } }