📄 fangkuai.c
字号:
Show_num(13,6,Game_Score/10%10);
Show_num(12,6,Game_Score/100%10); //显示个位 ,十位,百位
}
else
{
Show_num(15,6,Game_Score%10);
Show_num(14,6,Game_Score/10%10);
Show_num(13,6,Game_Score/100%10); //显示个位 ,十位,百位,千位
Show_num(12,6,Game_Score/1000);
}
if(Game_Score%1000==0)
{
if(Game_Score>0)
{
Game_Level++;
if(Game_Level==10)
{
Game_Stop=1;
hanzhi(7,5,12,1); // 输出“太棒了"
hanzhi(7,7,13,1);
hanzhi(7,9,14,1);
}
Show_num(13,11,Game_Level); //显示水平
}
}
}
//**************************************************************************
//= 函数原型:void Undisplay_line()
//= 功 能: 消除行
//= 参 数: 无
//= 返 回 值: 无
//= 函数性质:私有函数
//= 注 意:
//***************************************************************************
void UnDisplay_line()
{
uchar Del_Line; //标识要删除的行
uchar Del_Line_Num=0; //标识删除的行数
uchar i,j,k;
bit HavePoint; //标识一行中是否有空白点
for(i=0;i<4;i++)
{
for(j=1;j<13;j++)
{
if(Platform[j][yy+i]==0)
break; //如果这一行中有一个为空,则退出这一行的循环
else if(j==12)
{
Del_Line=yy+i; //确定要删除的行
if(Del_Line<20)
{
Del_Line_Num++; //计算共删除的行数
for(k=1;k<13;k++)
{
XiaoFengKuai(k,Del_Line,0); //删除行
Platform[k][Del_Line]=0; //平台数据清零
}
while(1) //下移
{
HavePoint=0;
for(k=1;k<13;k++)
{
if(Platform[k][Del_Line-1]==1)
{
HavePoint=1; //标识这一行有要下移的点
XiaoFengKuai(k,Del_Line-1,0); //删除小方块
Platform[k][Del_Line-1]=0; //平台数据清零
XiaoFengKuai(k,Del_Line,1) ; //将小方块下移
Platform[k][Del_Line]=1; //平台数据置1,表明此位置已被占用
}
}
if(HavePoint==0) break; //没有要下移的行,退出本循环
Del_Line--; //下移上一行
}
}
}
}
}
if(Del_Line_Num)
{
Show_score(Del_Line_Num); //刷新分数显示
}
}
//**************************************************************************
//= 函数原型:void Show_shape(uchar x1,uchar y1,uchar Tshape,bit mode)
//= 功 能: 显示一个方块形状或删除一个方块形状
//= 参 数: (x1,y1)为显示位置,Tshape为显示的形状,mode=1为显示,mode=0不显示
//= 返 回 值:
//= 函数性质:私有函数
//= 注 意:
//***************************************************************************
void Show_shape(uchar x1,uchar y1,uchar Tshape,bit mode)
{
if(mode==1)
{
XiaoFengKuai(x1+shape[Tshape].point[0].x,y1+shape[Tshape].point[0].y,1); //显示形状
XiaoFengKuai(x1+shape[Tshape].point[1].x,y1+shape[Tshape].point[1].y,1);
XiaoFengKuai(x1+shape[Tshape].point[2].x,y1+shape[Tshape].point[2].y,1);
XiaoFengKuai(x1+shape[Tshape].point[3].x,y1+shape[Tshape].point[3].y,1);
}
else
{
XiaoFengKuai(x1+shape[Tshape].point[0].x,y1+shape[Tshape].point[0].y,0); //删除形状
XiaoFengKuai(x1+shape[Tshape].point[1].x,y1+shape[Tshape].point[1].y,0);
XiaoFengKuai(x1+shape[Tshape].point[2].x,y1+shape[Tshape].point[2].y,0);
XiaoFengKuai(x1+shape[Tshape].point[3].x,y1+shape[Tshape].point[3].y,0);
}
}
//**************************************************************************
//= 函数原型:void Fangkuai_down()
//= 功 能: 方块下降处理
//= 参 数:
//= 返 回 值:
//= 函数性质:公有函数
//= 注 意:
//***************************************************************************
static uint DSpeed=MIN_SLOW_SPEED; //标识下降速度
static uint Now_Speed=MIN_SLOW_SPEED; //当前速度
void Fangkuai_down()
{
uchar i;
static bit New_shape=1; //标识是否要产生新形状
if(Game_Stop==1) return;
if(New_shape==1)
{
New_shape=0;
xx=X_START;
yy=Y_START;
This_shape=Next_shape; //当前方块等于预方块
Show_shape(15,18,Next_shape,0); // 产生一下个方块前,将预方块删除
Next_shape=Random(); //产生下一个方块
Show_shape(xx,yy,This_shape,1); //显示当前方块
Show_shape(15,18,Next_shape,1); //预显示下一个方块
if(Bottom_Anti())
{
Game_Stop=1;
Show_Image(35,15,94,114,0); //清屏
char_wr(6,6,Game_Char,0,4); //显示Game
char_wr(6,8,Over_Char,0,4); //显示over
return;
}
}
else
{
if(DSpeed==0)
{
DSpeed=Now_Speed; //确定方块下落的速度
if(Bottom_Anti())
{
New_shape=1;//产生新的形状
for(i=0;i<4;i++)
{
Platform[xx+shape[This_shape].point[i].x][yy+shape[This_shape].point[i].y]=1;//写入平台
}
UnDisplay_line();//消行计分
return;
}
else
{
Show_shape(xx,yy,This_shape,0); //删除当前形状
yy++;
Show_shape(xx,yy,This_shape,1); //显示形状(形状下移一个位置)
return;
}
}
else
{
DSpeed--;
}
}
}
//**************************************************************************
//= 函数原型:void Fangkuai_Control()
//= 功 能: 方块游戏控制
//= 参 数:
//= 返 回 值:
//= 函数性质:公有函数
//= 注 意:
//***************************************************************************
#define Move_Left 4
#define Move_Right 6
#define Add_Speed 5
#define Change_Shape 8
#define Game_Star 7
#define Game_Pause 9
void Fangkuai_Control()
{
switch(Key) //消息处理
{
case Move_Left:
{
Key=Nothing; //信息已被处理,抛弃它
if(!Left_Anti())
{
Show_shape(xx,yy,This_shape,0); //删除当前形状
xx--;
Show_shape(xx,yy,This_shape,1); //显示移动后的形状
}
}break;
case Move_Right:
{
Key=Nothing; //信息已被处理,抛弃它
if(!Right_Anti())
{
Show_shape(xx,yy,This_shape,0); //删除当前形状
xx++;
Show_shape(xx,yy,This_shape,1); //显示移动后的形状
}
}break;
case Add_Speed:
{
Key=Nothing; //信息已被处理,抛弃它
if(Game_Stop==1)
{
if(Game_Level==0)
{
Game_Level=9;
Show_num(13,11,9); //显示等级水平
Game_Speed=MIN_SLOW_SPEED/(Game_Level+1); //根据水平确定速度
}
else
{
Game_Level--;
Show_num(13,11,Game_Level); //显示等级水平
Game_Speed=MIN_SLOW_SPEED/(Game_Level+1); //根据水平确定速度
}
}
else
{
Now_Speed=1; //调整位置后,加速下降
DSpeed=Now_Speed;
}
}break;
case Change_Shape:
{
Key=Nothing; //信息已被处理,抛弃它
if(Game_Stop==1)
{
if(Game_Level==9)
{
Game_Level=0;
Show_num(13,11,0); //显示等级水平
Game_Speed=MIN_SLOW_SPEED/(Game_Level+1); //根据水平确定速度
}
else
{
Game_Level++;
Show_num(13,11,Game_Level); //显示等级水平
Game_Speed=MIN_SLOW_SPEED/(Game_Level+1); //根据水平确定速度
}
}
else
{
if(!Change_Shape_Anti())
{
Show_shape(xx,yy,This_shape,0); //删除当前形状
This_shape=shape[This_shape].next;
Show_shape(xx,yy,This_shape,1); //显示变化后的形状
}
}
}break;
case Game_Star:
{
Key=Nothing; //信息已被处理,抛弃它
ClrGraphic();
Show_Image(35,15,94,114,0);
Init_GamePlatform();
Game_Stop=0;
}break;
case Game_Pause:
{
Key=Nothing; //信息已被处理,抛弃它
Game_Stop=!Game_Stop;
}
default:Now_Speed=Game_Speed;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -