C语言2048

这段时间google上有个小游戏挺火的,我也很喜欢,业余时间做个C语言版的。

 

老规矩先上干货: https://files.cnblogs.com/GhostZCH/2048.rar (.c & .exe)

 

最近在忙毕业设计, 写的不是很好,可能还有不少bug,待优化的地方也不少。还望各位大侠多多指正,不吝赐教。

 

方向键控制,r键重启,esc退出。

 

 界面截图如下:

 

 

 以向上移动为例说明移动命令的处理:

 

首先现有一个将格子的数字移动一步的函数:

 1 //********************************************
 2 // Method      :  MoveOneStep
 3 // Description :  尝试从(i1,j1)移动到(i2,j2),返回移动结果,更新uData
 4 //********************************************
 5 BOOL MoveOneStep(int i1, int j1, int i2, int j2, UINT32* uData)
 6 {
 7     UINT32 uNextData = GetByPosition( i2, j2 );
 8 
 9     if0 == uNextData )
10     {
11         SetAddMatByPosition( i2, j2, GetAddMatByPosition( i1, j1 ) );
12         SetAddMatByPosition( i1, j1, FALSE );
13 
14         SetByPosition( i1, j1, 0 );
15         SetByPosition( i2, j2, (*uData) );
16         
17         return TRUE;
18     }
19     
20     if ( FALSE == GetAddMatByPosition( i1, j1 ) &&
21          FALSE == GetAddMatByPosition( i2, j2 ) &&
22          (*uData) == uNextData )
23     {
24         (*uData) *= 2;
25         
26         SetByPosition( i1, j1, 0 );
27         SetByPosition( i2, j2, (*uData) );
28 
29         SetAddMatByPosition( i2, j2, TRUE );
30        
31         return TRUE;
32     }
33     
34     return FALSE;
35 }  

 

 然后在这个函数中调用上面的函数,每次移动一块到不能移动为止

 2 //********************************************
 3 // Method      :  MoveOneUp
 4 // Description :  向上移动一块
 5 //********************************************
 6 BOOL MoveOneUp(int i, int j)
 7 {
 8     BOOL bHasMoved = FALSE;
 9     UINT32 uData = GetByPosition( i, j );
10     
11     if ( 0 == uData )
12     {
13         return FALSE;
14     }
15 
16     while ( i > 0 )
17     {
18         if( FALSE == MoveOneStep( i, j, i-1, j, &uData) )
19         {
20             break// 此次没有移动结束循环
21         }
22         else
23         {
24             bHasMoved = TRUE; // 此次移动更新状态
25             i--;
26         }
27     }
28 
29     return bHasMoved;
30 }

 

 这个函数的被一个接受用户输入的函数调用,当按方向键时执行,调用上面的函数,逐块移动:

 

 1 //********************************************

 

 2 // Method      :  cmdUp
 3 // Description :  ↑
 4 //********************************************
 5 void cmdUp()
 6 {
 7     int i,j;
 8     BOOL bHasMoved = FALSE;
 9 
10     if ( FALSE == BeforeMove() )
11     {
12         return ;
13     }
14     
15     for ( i = 0; i < SIZE ; i ++)
16     {
17         for ( j = 0; j < SIZE ; j ++)
18         {
19             bHasMoved = (TRUE == MoveOneUp(i,j) ? TRUE : bHasMoved);
20         }
21     }
22 
23     if ( TRUE == bHasMoved)
24     {
25         AfterMove();
26     }
27 }
28    

 

好了,就写这么多,很简单的小玩意,练练手

 

 --------END------------

posted @ 2014-03-30 16:59  Ghost_zhao  阅读(3381)  评论(1编辑  收藏  举报