C语言2048
老规矩先上干货: 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的更多相关文章
- C#,JavaScript两种语言 2048小游戏
<html> <head> <style type="text/css"> .haha { border-width: 2; font-size ...
- 博客更换至 www.zhaoch.top
博客更换至 www.zhaoch.top 随手拷了一些链接 http://www.zhaoch.top/操作系统/linux/常用命令备忘.html http://www.zhaoch.top/操作系 ...
- 一个用 C 语言写的迷你版 2048 游戏,仅仅有 500个字符
Jay Chan 用 C 语言写的一个迷你版 2048 游戏,仅仅有 487 个字符. 来围观吧 M[16],X=16,W,k;main(){T(system("stty cbreak&qu ...
- R语言写2048游戏
2048 是一款益智游戏,只需要用方向键让两两相同的数字碰撞就会诞生一个翻倍的数字,初始数字由 2 或者 4 构成,直到游戏界面全部被填满,游戏结束. 编程时并未查看原作者代码,不喜勿喷. 程序结构如 ...
- 2048小游戏代码解析 C语言版
2048小游戏,也算是风靡一时的益智游戏.其背后实现的逻辑比较简单,代码量不算多,而且趣味性强,适合作为有语言基础的童鞋来加强编程训练.本篇分析2048小游戏的C语言实现代码. 前言 游戏截图: 游 ...
- C语言实现简易2048小游戏
一直很喜欢玩这个小游戏,简单的游戏中包含运气与思考与策略,喜欢这种简约又不失内涵的游戏风格.于是萌生了用C语言实现一下的想法. 具体代码是模仿这个:https://www.cnblogs.com/ju ...
- C++学习(三十九)(C语言部分)之 游戏项目(2048游戏)
/***************************项目 2048**********************c语言编写 图形库制作时间:2019.04.03 准备工具: vs2013 图形库 i ...
- C语言写的2048小游戏
基于"基于C_语言的2048算法设计_颜冠鹏.pdf" 这一篇文献提供的思路 在中国知网上能找到 就不贴具体内容了 [摘 要] 针对2048的游戏规则,分析了该游戏的算法特点,对其 ...
- C语言小游戏: 2048.c
概要:2048.c是一个C语言编写的2048游戏,本文将详细分析它的源码和实现.C语言是一种经典实用的编程语言,本身也不复杂,但是学会C语言和能够编写实用的程序还是有一道鸿沟的.本文试图通过一个例子展 ...
随机推荐
- POJ 3670 , 3671 LIS
题意:两题意思差不多,都是给你一个序列,然后求最少需要改变多少个数字,使得成为一个最长不升,或者最长不降子序列. 当然3671是只能升序,所以更简单一点. 然后就没有什么了,用二分的方法求LIS即可. ...
- POJ 3616 DP
题意:给你N的时间,M的工作时间段,每个时间段有一个权重,还有一个R,每次完成一个工作需要休息R,问最后在时间N内,最大权重是多少. 思路:很简单的DP,首先对区间的右坐标进行排序,然后直接转移方程就 ...
- wpf 计算器布局练习
先看一下windows自带计算机的布局: 大概布局能看出,有菜单栏(menu),有显示框(textbox),然后剩下的6行5列的布局 先看下代码: <StackPanel> <Gri ...
- 通过NSURLProtocol拦截HTTP转HTTPS来整合SPDY的记录
众所周知,iOS 9.0之后苹果引入ATS限制,苹果也推荐尽量不要使用HTTP通讯了,毕竟是很不安全的.而国内各个有(wu)节操的运营商也会经常篡改请求HTTP请求.所以如果可能,在不影响性能的情况下 ...
- vim乱码处理
编辑~/.vimrc文件,加上如下几行: set fileencodings=utf-8set termencoding=utf-8set encoding=utf-8
- 基于DOM的XSS注入漏洞简单解析
基于DOM的XSS注入漏洞简单解析http://automationqa.com/forum.php?mod=viewthread&tid=2956&fromuid=21
- Web Services之SOAP学习
Web Services之SOAP [toc] 什么是SOAP SOAP(Simple Object Access Protocol)简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一 ...
- verilog 数组参数
verilog 支持定义数组参数,这样工程很大时,例化模块时可以使代码更简洁:详见实例 module dma_controller #( parameter integer C0_MAX_MIG_BL ...
- 企业级应用框架(五)IOC容器在框架中的应用
前言 在上一篇我大致的介绍了这个系列所涉及到的知识点,在本篇我打算把IOC这一块单独提取出来讲,因为IOC容器在解除框架层与层之间的耦合有着不可磨灭的作用.当然在本系列前面的三篇中我也提供了一种基于反 ...
- 关于redhat6的服务说明
服务名称 功能 默认 建议 备注说明 NetworkManager 主要用于图形网络连接管理 开启 关闭 对服务器无用 abrt-ccpp Automated Bug Reporting Tool 开 ...