zoukankan      html  css  js  c++  java
  • 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------------

  • 相关阅读:
    Stack堆栈的数据结构
    反坦克导弹相关网页
    Java 执行jar文件出现版本错误信息
    Python3 数字保留后几位
    Python3: Windows系统上同时安装Python2和Python3
    Linux 搭建FTP
    DBCP、c3p0、Druid三大连接池区别
    Sybase 存储过程中IF的用法
    Confluence5.8部分空间名称显示为问号的解决方案
    Mysql 更改编码方式
  • 原文地址:https://www.cnblogs.com/GhostZCH/p/3634244.html
Copyright © 2011-2022 走看看