📄 fan.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 + -