C语言2048游戏
用C实现了2048游戏
windows上运行的纯C命令行项目
代码 2048.c
说明 https://www.cnblogs.com/GhostZCH/p/3634244.html
界面
方向键控制,r键重启,esc退出。
代码简要说明
移动一个格子的代码
//********************************************
// Method : MoveOneStep
// Description : 尝试从(i1,j1)移动到(i2,j2),返回移动结果,更新uData
//********************************************
BOOL MoveOneStep(int i1, int j1, int i2, int j2, UINT32* uData)
{
UINT32 uNextData = GetByPosition( i2, j2 );
if( 0 == uNextData )
{
SetAddMatByPosition( i2, j2, GetAddMatByPosition( i1, j1 ) );
SetAddMatByPosition( i1, j1, FALSE );
SetByPosition( i1, j1, 0 );
SetByPosition( i2, j2, (*uData) );
return TRUE;
}
if ( FALSE == GetAddMatByPosition( i1, j1 ) &&
FALSE == GetAddMatByPosition( i2, j2 ) &&
(*uData) == uNextData )
{
(*uData) *= 2;
SetByPosition( i1, j1, 0 );
SetByPosition( i2, j2, (*uData) );
SetAddMatByPosition( i2, j2, TRUE );
return TRUE;
}
return FALSE;
}
然后在这个函数中调用上面的函数,每次移动一块到不能移动为止
//********************************************
// Method : MoveOneUp
// Description : 向上移动一块
//********************************************
BOOL MoveOneUp(int i, int j)
{
BOOL bHasMoved = FALSE;
UINT32 uData = GetByPosition( i, j );
if ( 0 == uData )
{
return FALSE;
}
while ( i > 0 )
{
if( FALSE == MoveOneStep( i, j, i-1, j, &uData) )
{
break; // 此次没有移动结束循环
}
else
{
bHasMoved = TRUE; // 此次移动更新状态
i--;
}
}
return bHasMoved;
}
这个函数的被一个接受用户输入的函数调用,当按方向键时执行,调用上面的函数,逐块移动:
//********************************************
// Method : cmdUp
// Description : ↑
//********************************************
void cmdUp()
{
int i,j;
BOOL bHasMoved = FALSE;
if ( FALSE == BeforeMove() )
{
return ;
}
for ( i = 0; i < SIZE ; i ++)
{
for ( j = 0; j < SIZE ; j ++)
{
bHasMoved = (TRUE == MoveOneUp(i,j) ? TRUE : bHasMoved);
}
}
if ( TRUE == bHasMoved)
{
AfterMove();
}
}
The End
- My github location
- View Source of this website GhostZch.github.io
- Commit issues to discuss with me and others