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