⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fangkuai.c

📁 单片机游戏大全
💻 C
📖 第 1 页 / 共 2 页
字号:
	 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 + -