代码还有BUG:向左回超出边界,左右移动时,钻进空格中会悬停,懒得改了, 过两天有时间再说吧,其它不影响玩,主函数重新上电后会继续开始游戏,需要的自己重新写下循环就好了
//部分代码见下,完整代码和原理图见压缩包
//开机画面显示,延时5s
void display_start_page(void)
{
for(char i = 0; i < 8; i++)
{
Display_temp_win1[0][i] = Tetris_Num[11][i];
}
for(char i = 0; i < 16; i++)
{
Display_temp_win2[0][i] = Tetris_All_Shape[21][i];
}
Display_win1();
Display_win2();
//延时2s
delay(50000);
delay(50000);
win_clear(2);
}
//显示成绩
void display_grade(void)
{
for(char i = 0; i < 8; i++)
{
Display_temp_win1[0][i] = Tetris_Num[Tetris_grade+1][i];
}
Display_win1();
}
/*************************************************************************
Function: void tetris_rolls(char Tetris_Shape_Num)
Description: WIN_2 下落任意形状 满行消除
Input: none
Output: none
Return: none
Others: ...改变Right_step_now的值,左右移动,改变Tetris_Shape_Num的值旋转,满行消除
*************************************************************************/
void tetris_rolls(void)
{
//显示16次
for(char roll_step = 0; roll_step < 16; roll_step++)
{
//显示这次的每一行
for ( char y = 0; y < 16; y++)
{
if(y <= roll_step)
{
//如果为负
if(Right_step_now < 0)
{
//有下降空间
if( ( Display_temp_win2_backup[0][roll_step] & (Tetris_All_Shape[Tetris_Shape_Num][15 - roll_step + roll_step] << (-Right_step_now)) ) == 0)
{
if(roll_step>=3)
{
if(((Display_temp_win2_backup[0][roll_step - 0] & Tetris_All_Shape[Tetris_Shape_Num][15 - 0] << (-Right_step_now)) == 0)\
&&((Display_temp_win2_backup[0][roll_step - 1] & Tetris_All_Shape[Tetris_Shape_Num][15 - 1]