这段时间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     if(  == uNextData )

     {

         SetAddMatByPosition( i2, j2, GetAddMatByPosition( i1, j1 ) );

         SetAddMatByPosition( i1, j1, FALSE );

 

         SetByPosition( i1, j1,  );

         SetByPosition( i2, j2, (*uData) );

         

         return TRUE;

     }

     

     if ( FALSE == GetAddMatByPosition( i1, j1 ) &&

          FALSE == GetAddMatByPosition( i2, j2 ) &&

          (*uData) == uNextData )

     {

         (*uData) *= ;

         

         SetByPosition( i1, j1,  );

         SetByPosition( i2, j2, (*uData) );

 

         SetAddMatByPosition( i2, j2, TRUE );

        

         return TRUE;

     }

     

     return FALSE;

 }  

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

 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 );

     

     if (  == uData )

     {

         return FALSE;

     }

 

     while ( i >  )

     {

         if( FALSE == MoveOneStep( i, j, i-, j, &uData) )

         {

             break; // 此次没有移动结束循环

         }

         else

         {

             bHasMoved = TRUE; // 此次移动更新状态

             i--;

         }

     }

 

     return bHasMoved;

 }

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


 1 //******************************************** 
 2 // Method      :  cmdUp  3 // Description :  ↑  4 //********************************************  5 void cmdUp()  6 {  7     int i,j;  8     BOOL bHasMoved = FALSE;  9       if ( FALSE == BeforeMove() )      {          return ;      }            for ( i = ; i < SIZE ; i ++)      {          for ( j = ; j < SIZE ; j ++)          {              bHasMoved = (TRUE == MoveOneUp(i,j) ? TRUE : bHasMoved);          }      }        if ( TRUE == bHasMoved)      {          AfterMove();      }  }     

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

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

C语言2048的更多相关文章

  1. C#,JavaScript两种语言 2048小游戏

    <html> <head> <style type="text/css"> .haha { border-width: 2; font-size ...

  2. 博客更换至 www.zhaoch.top

    博客更换至 www.zhaoch.top 随手拷了一些链接 http://www.zhaoch.top/操作系统/linux/常用命令备忘.html http://www.zhaoch.top/操作系 ...

  3. 一个用 C 语言写的迷你版 2048 游戏,仅仅有 500个字符

    Jay Chan 用 C 语言写的一个迷你版 2048 游戏,仅仅有 487 个字符. 来围观吧 M[16],X=16,W,k;main(){T(system("stty cbreak&qu ...

  4. R语言写2048游戏

    2048 是一款益智游戏,只需要用方向键让两两相同的数字碰撞就会诞生一个翻倍的数字,初始数字由 2 或者 4 构成,直到游戏界面全部被填满,游戏结束. 编程时并未查看原作者代码,不喜勿喷. 程序结构如 ...

  5. 2048小游戏代码解析 C语言版

    2048小游戏,也算是风靡一时的益智游戏.其背后实现的逻辑比较简单,代码量不算多,而且趣味性强,适合作为有语言基础的童鞋来加强编程训练.本篇分析2048小游戏的C语言实现代码. 前言 游戏截图:  游 ...

  6. C语言实现简易2048小游戏

    一直很喜欢玩这个小游戏,简单的游戏中包含运气与思考与策略,喜欢这种简约又不失内涵的游戏风格.于是萌生了用C语言实现一下的想法. 具体代码是模仿这个:https://www.cnblogs.com/ju ...

  7. C++学习(三十九)(C语言部分)之 游戏项目(2048游戏)

    /***************************项目 2048**********************c语言编写 图形库制作时间:2019.04.03 准备工具: vs2013 图形库 i ...

  8. C语言写的2048小游戏

    基于"基于C_语言的2048算法设计_颜冠鹏.pdf" 这一篇文献提供的思路 在中国知网上能找到 就不贴具体内容了 [摘 要] 针对2048的游戏规则,分析了该游戏的算法特点,对其 ...

  9. C语言小游戏: 2048.c

    概要:2048.c是一个C语言编写的2048游戏,本文将详细分析它的源码和实现.C语言是一种经典实用的编程语言,本身也不复杂,但是学会C语言和能够编写实用的程序还是有一道鸿沟的.本文试图通过一个例子展 ...

随机推荐

  1. TOMCAT 集群之 PERSISTENT SESSION

    tomcat的session保存在数据库中,不是很复杂,写下来供大家参考. 准备工作: 两架Ubuntu Server 12.04 64位,确定两级服务器可以互相ping的通并属于同一个网段 安装jd ...

  2. oracle并行模式(Parallel)

    1.  用途 强行启用并行度来执行当前SQL.这个在Oracle 9i之后的版本可以使用,之前的版本现在没有环境进行测试.也就是说,加上这个说明,可以强行启用Oracle的多线程处理功能.举例的话,就 ...

  3. 通用块层、IO调度层以及设备驱动层的数据结构

    http://blog.chinaunix.net/uid-28897358-id-3775640.html

  4. 【转】Cocos2d-x 2.0 拖尾效果深入分析

    Cocos2d-x 2.0 拖尾效果深入分析 另:本章所用Cocos2d-x版本为: cocos2d-2.0-x-2.0.2@ Aug 30 2012 http://cn.cocos2d-x.org/ ...

  5. eclipse 中修改 M2_REPO的值--转载

    从eclipse中增加了maven2的插件之后,maven默认的本地库的路径是${user}/.m2/repository/下,一般windows用户的操作系统都安装在C盘,所以这个目录 下的jar包 ...

  6. 从源码角度深入分析ant

    Ant的基本概念 首先是ant的基本概念:Project,Target,Tasks,Properties,Paths 1.Project <project> build.xml文件最顶层的 ...

  7. UPDATE sql 优化

    一个网友说他的存储过程中有一段update sql,运行了15分钟还没出结果,需要优化一下 他把sql发给我 UPDATE TB_RESULT R SET R.VOTE_COUNT=NVL(( SEL ...

  8. centos6.5 apache+tomcat结合 负载均衡

    一. 负载均衡:根据 uri 表达式把请求分发给各个服务器处理.如:/*.jsp = lb_s  就是说把所有jsp请求交给lb_s , 当然它是个Tomcat. 二. 安装配置mod_jk    m ...

  9. 微信公众号支付(三):页面调用微信支付JS并完成支付

    一.调用微信的JS文件 1.首先要绑定[JS接口安全域名],“公众号设置”的“功能设置”中 2.引入JS文件 备注:支持使用 AMD/CMD 标准模块加载方法加载 <script type=&q ...

  10. 四种方式写按钮点击事件和Android 中常用的布局

    1.匿名内部类的方式 2.创建一个类实现onClickListener,实现onClick方法,设置控件点击时传一个类的对象 3.让当前类实现onClickListener,设置控件点击事件时传递一个 ...