该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
}//获取游戏速度
void Get_GameSpeed(void)
{
//速度最慢 0.8s,之后每35个方块减0.05
if(Pool.Speed > 0.1f)
{
Pool.Speed = 0.8f - (Pool.BlockCount/35)*0.05f;
}
}//显示本次方块和上次方块的形状
void Show_BlockInfo(void)
{
uint8 i,j;
uint16 Code_now;
uint16 Code_next;
Code_now = ShapeCode[Block.Shape][0];
Code_next = ShapeCode[Block.Next_Shape][0];
//先清空
for(i = 0;i < 4;i++)
{
GotoCursor(1+i,63);
printf(" ");
}
for(i = 0;i < 4;i++)
{
GotoCursor(9+i,63);
printf(" ");
}
//再显示
for(i = 0;i < 4;i++)
{
for(j = 0;j < 4;j++)
{
if((Code_now&0x8000))
{
GotoCursor(1+i,63+j*2);
printf("■");
}
Code_now <<= 1;
}
}
for(i = 0;i < 4;i++)
{
for(j = 0;j < 4;j++)
{
if((Code_next&0x8000))
{
GotoCursor(9+i,63+j*2);
printf("□");
}
Code_next <<= 1;
}
}
}//显示游戏工作空间
void Show_GameWorkSpace(void)
{
GotoCursor(2,1);
printf("-------------------");
GotoCursor(3,7);
printf("分数");
GotoCursor(5,1);
printf("-------------------");
GotoCursor(8,1);
printf("-------------------");
GotoCursor(12,1);
printf("-------------------");
GotoCursor(15,1);
printf("------------------");
GotoCursor(16,1);
printf("当前窗口大小:%d*%d",POOL_ROW_WIDE,POOL_RANK_WIDE);
GotoCursor(17,1);
printf("------------------");
GotoCursor(20,1);
printf("游戏名:俄罗斯方块");
GotoCursor(22,1);
printf("By:路帅、殷呈祥、于雪颖");
GotoCursor(24,1);
printf("日期:2018-07-02");
GotoCursor(0,61);
printf("------------");
GotoCursor(5,61);
printf("------------");
GotoCursor(8,61);
printf("------------");
GotoCursor(13,61);
printf("------------");
GotoCursor(2,74);
printf("当");
GotoCursor(3,74);
printf("前");
GotoCursor(10,74);
printf("下");
GotoCursor(11,74);
printf("一");
GotoCursor(12,74);
printf("个"); GotoCursor(15,61);
printf("→ :右移,长按加速");
GotoCursor(17,61);
printf("← :左移,长按加速");
GotoCursor(19,61);
printf("↑ :旋转,长按加速");
GotoCursor(21,61);
printf("↓ :加速落地");
}//显示游戏信息
void Show_GameInfo(void)
{
GotoCursor(4,7);
printf("%d",Pool.Score);
GotoCursor(10,1);
switch(Pool.BlockCount/125)
{
case 0:printf("当前游戏速度:最慢");break;
case 1:printf("当前游戏速度: 慢");break;
case 2:printf("当前游戏速度: 中");break;
case 3:printf("当前游戏速度: 快");break;
case 4:printf("当前游戏速度:最快");break;
default:break;
}
}//显示需要显示的游戏池边界,非扩充后的边界
void Show_PoolBorder(void)
{
uint8 i = 0;
//显示左右边界
for(i = 0;i < POOL_ROW_WIDE;i++)
{
GotoCursor(i+POOL_ROW+SCALING,POOL_RANK-2+SCALING*2);
printf("■");
GotoCursor(i+POOL_ROW+SCALING,POOL_RANK+(POOL_RANK_WIDE+SCALING)*2);
printf("■");
}
//显示底部
GotoCursor(POOL_ROW+SCALING+POOL_ROW_WIDE,POOL_RANK-2+SCALING*2);
for(i = 0;i < POOL_RANK_WIDE+2;i++)
{
printf("■");
}
}//游戏初始化
void Game_Init(void)
{
uint8 i = 0;
memset((uint32 *)&Pool.DisBuf,0,sizeof(Pool.DisBuf));//初始化数组
srand((unsigned) time(NULL));//获取时间种子
Get_Block();// 获取当前和下一个方块
Get_Block();
Show_PoolBorder();//显示游戏池显示边界
Show_GameWorkSpace();//显示游戏工作区
Show_GameInfo();//显示游戏信息
Show_BlockInfo();//显示方块信息
Hidden_Cursor();//隐藏光标
}int main(void)
{
clock_t time_now, time_last = clock();
Game_Init();//初始化游戏
Display_Pool();//显示游戏池
while(1)
{
KeyScan();//检测按键
time_now = clock();
if (time_now - time_last > Pool.Speed * CLOCKS_PER_SEC)//定时自动下移
{
Move_Down();
time_last = time_now;
}
EliminateRow_Check();//消行检测
Show_GameInfo();//显示游戏信息
Get_GameSpeed();//获取游戏速度
}
}