C语言2048


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

 

老规矩先上干货: http://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------------


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM