feat(MCU课设): 增加消除整行逻辑和部分UI

This commit is contained in:
iridiumR 2022-06-06 15:55:51 +08:00
parent 49cb727472
commit 785539a2c9
7 changed files with 863 additions and 687 deletions

File diff suppressed because it is too large Load diff

View file

@ -180,3 +180,28 @@ void moveRightPiece()
base[i][j] = 0;
}
}
//判断是否需要清除一行
void judgeBlock()
{
char i, j, k, h, count;
//逐行扫描
for(j = 0; j < MAX_Y; j++)
{
count = 0;
for(i = 0; i < MAX_X; i++)
{
//有则计数
if(base[i][j] == 1)
{
count++;
}
}
//计数足则整体下移
if(count == 8)
for(k = 0; k < MAX_X; k++)
for(h = j ; h < MAX_Y-1; h++)
base[k][h] = base[k][h + 1];
}
}

View file

@ -33,4 +33,5 @@ void dropPiece();
void drawBlock();
void moveLeftPiece();
void moveRightPiece();
void judgeBlock();
#endif

View file

@ -319,3 +319,37 @@ void drawVerticalDottedLine(char x)
}
}
void drawBLOCKSCORE()
{
unsigned int j;
for(j = 0; j < 32; j++)
{
CSA = 0;
CSB = 1;
RS = 0;
RW = 0;
P1 = 0xb8 + 0;
write();
P1 = 0X40 +5+ j;
write(); //Ò³0ÁÐ5+jÆÁB
RS = 1;
RW = 0;
P1 = FONT_SCORE0[j];
write();
RS = 0;
RW = 0;
P1 = 0xb8 + 1;
write();
P1 = 0X40 + 5+ j;
write(); //Ò³1ÁÐ5+jÆÁB
RS = 1;
RW = 0;
P1 = FONT_SCORE1[j];
write();
}
}

View file

@ -10,7 +10,7 @@ void drawMAINMENU(unsigned char);
void placeIMG_BLOCK(unsigned char x,unsigned char y);
void placeVOID_BLOCK(unsigned char x,unsigned char y);
void drawBLOCKSCORE();
////=================== ¼¸ºÎ ==================
void drawVerticalDottedLine(char x);
#endif

View file

@ -95,4 +95,36 @@ code unsigned char IMG_BLOCK[]={
};
code unsigned char FONT_SCORE0[]={
0x00,0x10,0x88,0xC4,0x33,0x00,0xBE,0xAA,0xAA,0xAA,0xAA,0xAA,0xBE,0x80,0x00,0x00,
0x80,0x40,0x20,0x90,0x88,0x86,0x80,0x80,0x80,0x83,0x8C,0x10,0x20,0x40,0x80,0x00,
};
code unsigned char FONT_SCORE1[]={
0x02,0x01,0x00,0xFF,0x00,0x02,0x0A,0x12,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x00,
0x00,0x80,0x40,0x20,0x18,0x07,0x00,0x40,0x80,0x40,0x3F,0x00,0x00,0x00,0x00,0x00,
};
code unsigned char SUPER_NUM0[]={
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,
0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,
0x00,0x70,0x08,0x08,0x08,0x08,0xF0,0x00,
0x00,0x30,0x08,0x08,0x08,0x88,0x70,0x00,
0x00,0x00,0x80,0x40,0x30,0xF8,0x00,0x00,
0x00,0xF8,0x88,0x88,0x88,0x08,0x08,0x00,
0x00,0xE0,0x10,0x88,0x88,0x90,0x00,0x00,
0x00,0x18,0x08,0x08,0x88,0x68,0x18,0x00,
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,
0x00,0xF0,0x08,0x08,0x08,0x10,0xE0,0x00,
};
code unsigned char SUPER_NUM1[]={
0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,
0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
0x00,0x18,0x20,0x21,0x21,0x22,0x1C,0x00,
0x00,0x06,0x05,0x24,0x24,0x3F,0x24,0x24,
0x00,0x19,0x20,0x20,0x20,0x11,0x0E,0x00,
0x00,0x0F,0x11,0x20,0x20,0x20,0x1F,0x00,
0x00,0x00,0x00,0x3E,0x01,0x00,0x00,0x00,
0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
0x00,0x01,0x12,0x22,0x22,0x11,0x0F,0x00,
};
#endif

View file

@ -107,6 +107,7 @@ void m_block(struct _menu* this)
{
LAST = &M_BLOCK;
drawVerticalDottedLine(64);
drawBLOCKSCORE();
blockInit();
}
//ÖØÖÃ
@ -132,9 +133,10 @@ void m_block(struct _menu* this)
return;
}
genPiece();
dropPiece();
drawBlock();
genPiece(); //若有需要,生成新块
dropPiece(); //若有需要,块下落
judgeBlock(); //若有需要,清除一行
drawBlock(); //绘制界面
delay(200);