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

📄 fan.c

📁 手机开发环境BREW实例
💻 C
字号:


#include "Fan.h"
///////////////////////////////////////////////
//初始化7个方块中相应的小方块。
//////////////////////////////////////////////
void Star(TimerApp * sTimerApp)
{
	int i;
	JulianType julianDate;
	uint16 sec;
	
	GET_JULIANDATE(0, &julianDate);

	sec = julianDate.wSecond;

	sTimerApp->index = sec;

	for(i=0;i<4;i++)
	{
		sTimerApp->aa[i].x=0;
		sTimerApp->aa[i].y=0;
	}
	sTimerApp->R=0;
	sTimerApp->H=5;
	sTimerApp->index %= 7;
	switch(sTimerApp->index)
	{
		case 1:
				sTimerApp->aa[0].x=sTimerApp->R;
				sTimerApp->aa[0].y=sTimerApp->H;
				sTimerApp->aa[1].x=sTimerApp->R;
				sTimerApp->aa[1].y=sTimerApp->H+1;
				sTimerApp->aa[2].x=sTimerApp->R;
				sTimerApp->aa[2].y=sTimerApp->H-1;
				sTimerApp->aa[3].x=sTimerApp->R;
				sTimerApp->aa[3].y=sTimerApp->H-2;
				sTimerApp->TempColor = MAKE_RGB(80,154,175);			
				break;
		case 2:
				sTimerApp->aa[0].x=sTimerApp->R;
				sTimerApp->aa[0].y=sTimerApp->H;
				sTimerApp->aa[1].x=sTimerApp->R;
				sTimerApp->aa[1].y=sTimerApp->H+1;
				sTimerApp->aa[2].x=sTimerApp->R+1;
				sTimerApp->aa[2].y=sTimerApp->H+1;
				sTimerApp->aa[3].x=sTimerApp->R+1;
				sTimerApp->aa[3].y=sTimerApp->H+2;
				sTimerApp->TempColor = MAKE_RGB(129,115,253);
				break;
		case 3:
				sTimerApp->aa[0].x=sTimerApp->R;
				sTimerApp->aa[0].y=sTimerApp->H;
				sTimerApp->aa[1].x=sTimerApp->R;
				sTimerApp->aa[1].y=sTimerApp->H+1;
				sTimerApp->aa[2].x=sTimerApp->R-1;
				sTimerApp->aa[2].y=sTimerApp->H+1;
				sTimerApp->aa[3].x=sTimerApp->R-1;
				sTimerApp->aa[3].y=sTimerApp->H+2;
				sTimerApp->TempColor = MAKE_RGB(233,149,22);
				break;
		case 4:
				sTimerApp->aa[0].x=sTimerApp->R;
				sTimerApp->aa[0].y=sTimerApp->H;
				sTimerApp->aa[1].x=sTimerApp->R;
				sTimerApp->aa[1].y=sTimerApp->H+1;
				sTimerApp->aa[2].x=sTimerApp->R;
				sTimerApp->aa[2].y=sTimerApp->H+2;
				sTimerApp->aa[3].x=sTimerApp->R+1;
				sTimerApp->aa[3].y=sTimerApp->H+2;
				sTimerApp->TempColor = MAKE_RGB(210,23,191);
				break;
		case 5:
				sTimerApp->aa[0].x=sTimerApp->R;
				sTimerApp->aa[0].y=sTimerApp->H;
				sTimerApp->aa[1].x=sTimerApp->R;
				sTimerApp->aa[1].y=sTimerApp->H+1;
				sTimerApp->aa[2].x=sTimerApp->R;
				sTimerApp->aa[2].y=sTimerApp->H+2;
				sTimerApp->aa[3].x=sTimerApp->R-1;
				sTimerApp->aa[3].y=sTimerApp->H+2;
				sTimerApp->TempColor = MAKE_RGB(9,24,225);
				break;
		case 6:
				sTimerApp->aa[0].x=sTimerApp->R;
				sTimerApp->aa[0].y=sTimerApp->H;
				sTimerApp->aa[1].x=sTimerApp->R+1;
				sTimerApp->aa[1].y=sTimerApp->H;
				sTimerApp->aa[2].x=sTimerApp->R+1;
				sTimerApp->aa[2].y=sTimerApp->H+1;
				sTimerApp->aa[3].x=sTimerApp->R+1;
				sTimerApp->aa[3].y=sTimerApp->H-1;
				sTimerApp->TempColor = MAKE_RGB(5,228,211);
				break;
		case 0:
				sTimerApp->aa[0].x=sTimerApp->R;
				sTimerApp->aa[0].y=sTimerApp->H;
				sTimerApp->aa[1].x=sTimerApp->R;
				sTimerApp->aa[1].y=sTimerApp->H+1;
				sTimerApp->aa[2].x=sTimerApp->R+1;
				sTimerApp->aa[2].y=sTimerApp->H;
				sTimerApp->aa[3].x=sTimerApp->R+1;
				sTimerApp->aa[3].y=sTimerApp->H+1;
				sTimerApp->TempColor = MAKE_RGB(77,68,70);
				break;
	}	
	myDraw(sTimerApp);
	sTimerApp->K = 1;
}

///////////////////////////////////////////////////////////////
//判断俄罗斯方块是否到底部,或是否到其他方块的上边缘。
///////////////////////////////////////////////////////////////
int Isbottom(TimerApp * sTimerApp)
{
	int i,j;
	for(i = 0;i<4;i++)
	{
		//判断是否到底部。如果到底部,把cor[i][j]置2.
		if(sTimerApp->aa[i].x==13)
		{
			for(j =0;j<4;j++)
			{
				sTimerApp->cor[sTimerApp->aa[j].x][sTimerApp->aa[j].y]=2;
				sTimerApp->color[sTimerApp->aa[j].x][sTimerApp->aa[j].y]=sTimerApp->TempColor;
				//表明已到底部
				sTimerApp->flag2=1;
			}
//			sTimerApp->k=0;
			return 0;
		}
		//判断是否到其他方块的上边缘,如果是,则把cor[i][j]置2.
		if(sTimerApp->cor[sTimerApp->aa[i].x+1][sTimerApp->aa[i].y]==2)
		{
			for(j =0;j<4;j++)
			{
				sTimerApp->cor[sTimerApp->aa[j].x][sTimerApp->aa[j].y]=2;
				sTimerApp->color[sTimerApp->aa[j].x][sTimerApp->aa[j].y]=sTimerApp->TempColor;
				//表明已到其他方块的上边缘。
				sTimerApp->flag2=1;
			}
//			sTimerApp->k=0;
			return 0;
		}
	
	}
	return 1;
}

///////////////////////////////////////////////////////
//判断俄罗斯方块是否到边界或是否到其他方块边缘
//////////////////////////////////////////////////////
int Isout(TimerApp * sTimerApp)
{	
	int i;
	for(i =0;i<4;i++)
	{
		//俄罗斯方块是否到左右边缘或到其他方块的边缘。
		
		if((sTimerApp->aa[i].y<=0)||(sTimerApp->aa[i].y>=9)||(sTimerApp->cor[sTimerApp->aa[i].x][sTimerApp->aa[i].y+1]==2) || (sTimerApp->cor[sTimerApp->aa[i].x][sTimerApp->aa[i].y-1]==2))
		{
			return 0;
		}
	}
	
	return 1;
}

void Isover(TimerApp * sTimerApp)
{
	int iOverFlg,n;
	int i,j;
	int a,b,t;
	iOverFlg = 0;
	n = 0;
	for(a=13;a>=0;a--)
	{
		iOverFlg=0;
		for(b=0;b<10;b++)
		{
			if(sTimerApp->cor[a][b]==2)
			{
				iOverFlg++;
			}
		}
		if(iOverFlg==10)
		{
			sTimerApp->count =+ 100;
			for(b=0;b<10;b++)
			{
					sTimerApp->cor[a][b]=0;
					sTimerApp->color[a][b]=MAKE_RGB(255,255,255);
			}
			for(t=a;t>0;t--)
			{
				
				for(b=0;b<10;b++)
				{
					if(sTimerApp->cor[t-1][b]==2)
					{
						sTimerApp->cor[t][b]=2;
						sTimerApp->color[t][b]=sTimerApp->color[t-1][b];
						sTimerApp->flag2=1;
						sTimerApp->cor[t-1][b]=0;
						sTimerApp->color[t-1][b]=MAKE_RGB(255,255,255);
					}
				}
			}
			a=a+1;
		}
	}
	for(a=0;a<9;a++)
	{
		if(sTimerApp->cor[0][a]==2)
		{
//			KillTimer(IDC_TIMER);
//			MessageBox("游戏结束");
		//	clean(1);
//			count=0;
//			sTimerApp->
			for(i=0;i<14;i++)
			{
				for(j=0;j<10;j++)
				{
					sTimerApp->cor[i][j]=0;
					sTimerApp->flag2=1;
				}
			}
//			SetTimer(IDC_TIMER,time,NULL);

		}
	}
/*	CMainFrame * frame=(CMainFrame *)AfxGetMainWnd();
	UINT nID,nStyle;
	int cxwidth;
	frame->m_wndStatusBar.GetPaneInfo(0,nID,nStyle,cxwidth);
	frame->m_wndStatusBar.SetPaneInfo(0,nID,SBPS_STRETCH|SBPS_NORMAL,cxwidth);
	CString cs;
	cs.Format("得分=%d",count);
	frame->m_wndStatusBar.SetPaneText(0,cs);*/
}
/////////////////////////////////////////////
//清除当前小方块处的数据。
////////////////////////////////////////////
void clean(TimerApp * sTimerApp)
{
	int i;
	for(i = 0;i < 4;i++)
	{
		sTimerApp->dd[i].x = sTimerApp->aa[i].x;
		sTimerApp->dd[i].y = sTimerApp->aa[i].y;
		sTimerApp->cor[sTimerApp->aa[i].x][sTimerApp->aa[i].y] = 0;
	}
}
void myDraw(TimerApp * sTimerApp)
{
	RGBVAL rgbFrameT = MAKE_RGB(120,120,120);
	RGBVAL rgbFillB = MAKE_RGB(255,255,255);
	AEERect TempRect;
	int i,j;
	int x,y;
	int cx = 12;
	int cy = 10;
	
	// 清除上一次的方块。
	for(i=0;i<4;i++)
	{
		x = sTimerApp->dd[i].y * cx;
		y = sTimerApp->dd[i].x * cy;
		SETAEERECT(&TempRect,x,y,cx,cy);
		IDISPLAY_DrawFrame(sTimerApp->a.m_pIDisplay,&TempRect,AEE_FT_EMPTY,rgbFrameT);
		IDISPLAY_FillRect(sTimerApp->a.m_pIDisplay,&TempRect,rgbFillB);
	}

	//画方块,flag表明现在小方块正处在移动阶段。
	if(sTimerApp->flag)
	{
		for(i = 0;i < 4;i++)
		{
			//把相应的方块位置处(即cor[i][j])置为1,表明要加色。
			sTimerApp->cor[sTimerApp->aa[i].x][sTimerApp->aa[i].y] = 1;
		}
		
		//对整个方块区域进行搜索,有小方块处(即cor[i][j]==1)就上色。
		for(i=0;i<14;i++)
		{
			for(j=0;j<10;j++)
			{
				if(sTimerApp->cor[i][j]==1)
				{
					x = j * cx;
					y = i * cy;
					SETAEERECT(&TempRect,x,y,cx,cy);
					IDISPLAY_DrawFrame(sTimerApp->a.m_pIDisplay,&TempRect,AEE_FT_EMPTY,sTimerApp->TempColor);
					IDISPLAY_FillRect(sTimerApp->a.m_pIDisplay,&TempRect,sTimerApp->TempColor);
				}
			}
		}
	}
	

	//表明小方块到底部了或在其它小方块的上面。
	if(sTimerApp->flag2)
	{
			for(i=0;i<14;i++)
			{
				for(j=0;j<10;j++)
				{
					//重新画方格区域。
					x = j * 12;
					y = i * 10;
					SETAEERECT(&TempRect,x,y,cx,cy);
					IDISPLAY_DrawFrame(sTimerApp->a.m_pIDisplay,&TempRect,AEE_FT_EMPTY,rgbFrameT);
					IDISPLAY_FillRect(sTimerApp->a.m_pIDisplay,&TempRect,rgbFillB);
				}
			}

			//上色所有被标志为有小方块和停止的小方块。
			for( i=0;i<14;i++)
			{
				for(j=0;j<10;j++)
				{
					if((sTimerApp->cor[i][j]==1)||(sTimerApp->cor[i][j]==2))
					{
						x = j * 12;
						y = i * 10;
						SETAEERECT(&TempRect,x,y,cx,cy);
						IDISPLAY_DrawFrame(sTimerApp->a.m_pIDisplay,&TempRect,AEE_FT_EMPTY,sTimerApp->color[i][j]);
						IDISPLAY_FillRect(sTimerApp->a.m_pIDisplay,&TempRect,sTimerApp->color[i][j]);
					}
				}
			}
			sTimerApp->flag2=0;
	}
	IDISPLAY_Update(sTimerApp->a.m_pIDisplay);

}

/////////////////////////////////////////////////
//从顶部到底部逐一检查,下一处被填充,则把整个方
//块填充处就相应的也填充;
//或当小方块有一处到底部了,就把整个方块填充。
//如果都不是,则让方块向下移一处。
/////////////////////////////////////////////////
int dop(TimerApp * sTimerApp)
{
	int i,j,k;
	for(i = 0;i < 14;i++)
	{
		for(j = 0;j < 4;j++)
		{
			if(sTimerApp->cor[sTimerApp->aa[j].x + 1][sTimerApp->aa[j].y] == 2)
			{
				for(k = 0;k < 4;k++)
				{
					sTimerApp->cor[sTimerApp->aa[k].x][sTimerApp->aa[k].y] = 2;
					sTimerApp->color[sTimerApp->aa[k].x][sTimerApp->aa[k].y] = sTimerApp->TempColor ;
					sTimerApp->flag2 = 1;
				}
				return 0;
			}
		}
		for(j = 0;j < 4;j++)
		{
			if(sTimerApp->aa[j].x == 13)
			{
				for(k = 0;k < 4;k++)
				{
					sTimerApp->cor[sTimerApp->aa[k].x][sTimerApp->aa[k].y] = 2;
					sTimerApp->color[sTimerApp->aa[k].x][sTimerApp->aa[k].y] = sTimerApp->TempColor;
					sTimerApp->flag2 = 1;
				}
				return 0;
			}
		}
		for(k = 0;k < 4;k++)
		{
			sTimerApp->aa[k].x = sTimerApp->aa[k].x + 1;
		}
	}
	return 1;
}

int round(TimerApp * sTimerApp)
{
	int x,y,i,j,k;
	int temp2,temp1;
	x = 0;
	y = 0;
	j = 0;
	k = 0;
	temp1 = 0;
	temp2 = 0;
	for(i=0;i<4;i++)
	{
		sTimerApp->bb[i].x=sTimerApp->aa[i].x;
		sTimerApp->bb[i].y=sTimerApp->aa[i].y;
	}
	if(sTimerApp->index==1)
	{
		temp1=sTimerApp->aa[2].x;
		temp2=sTimerApp->aa[2].y;
		k = 2;

	}
	else
	{
		temp1=sTimerApp->aa[1].x;
		temp2=sTimerApp->aa[1].y;
		k = 1;
	}
	for(i=0;i<4;i++)
	{
		if(i!=k)
		{
			x=(sTimerApp->aa[i].x-temp1);
			y=(sTimerApp->aa[i].y-temp2);
			sTimerApp->aa[i].x=y+temp1;
			sTimerApp->aa[i].y=-x+temp2;
			if((sTimerApp->cor[sTimerApp->aa[i].x][sTimerApp->aa[i].y]==2)||(sTimerApp->aa[i].y>9)||(sTimerApp->aa[i].y<0)||(sTimerApp->aa[i].x>13)||(sTimerApp->aa[i].x<0))
			{
				for(j=0;j<4;j++)
				{
					sTimerApp->aa[j].x=sTimerApp->bb[j].x;
					sTimerApp->aa[j].y=sTimerApp->bb[j].y;
				}
				return 0;
			}
		}
	}
	return 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -