网上解释很多了,直接上代码吧,这个功能很简单,易于学习,后期有时间会完善功能

#include<stdio.h>
#include<stdlib.h>
#include<string.h>#define Key_Up 0x4800 // 向上方向键   
#define Key_Down 0x5000 // 向下方向键
#define Key_Right 0x4d00 // 向右方向键
#define Key_Left 0x4b00 // 向左方向键int map[4][4] = { 0 };
int check[4] = { 0 };  //判断游戏是否结束,如果都不为0,游戏结束
int i, j;//
//显示在屏幕上
//
void print()
{for (i = 0; i < 4; i++){for (j = 0; j < 4; j++){printf("%d\t", map[i][j]);}printf("\n");}
}//
//向右移动
//
int moveRight() {int flag = 0;  //来标记是否整个map矩阵能否改变,以此判断整个游戏是否结束//这个循环的目的是为了做某一行的加减,如某一行为[2 2 4 4],经过以下运算就会变为[0 4 0 8];for (i = 0; i < 4; i++){for (j = 4 - 1; j >= 0; j--){int cell = map[i][j];if (cell != 0){int k = j - 1;while (k >= 0){int nextcell = map[i][k];if (nextcell != 0){if (cell == nextcell){flag = 1;map[i][j] += map[i][k];map[i][k] = 0;}k = -1;break;}k--;}}}}//上一步做的是数据加减,这一步对加减后的数据做数据处理//例如某一行经过上一步的数据为【0 4 0 8】,将会变为【0 0 4 8】for (i = 0; i < 4; i++){for (j = 4 - 1; j > 0; j--){int cell = map[i][j];if (cell == 0){int k = j - 1;while (k >= 0){int nextcell = map[i][k];if (nextcell != 0){flag = 1;//当前元素为0,说明能移动,改变flag的值map[i][j] = nextcell;map[i][k] = 0;k = -1;}k--;}}}}if (flag)return 0;elsereturn 4;  //游戏结束
}//
//向左移动
//
int moveLeft() {int flag=0;for (i = 0; i < 4; i++){for (j = 0; j < 4; j++){int cell = map[i][j];//cell单词用的不太恰当,表示当前元素,你可以采用更有意义的命名if (cell != 0){int k = j + 1;while (k < 4){int nextcell = map[i][k];if (nextcell != 0){if (cell == nextcell){flag = 1;//相邻两个元素相同,就说明能移动,所以改变flag的值map[i][j] += map[i][k];map[i][k] = 0;}k = 4;break;}k++;}}}}//修改部分:for循环中的i或者j的循环条件for (i = 0; i < 4; i++){for (j = 0; j < 4 - 1; j++){int cell = map[i][j];if (cell == 0){int k = j + 1;while (k < 4){int nextcell = map[i][k];if (nextcell != 0){flag = 1;map[i][j] = nextcell;map[i][k] = 0;k = 4;}k++;}}}}if (flag)return 0;elsereturn 3;
}//
//向下移动
//
int moveDown() {int flag=0;for (i = 4 - 1; i >= 0; i--){for (j = 0; j < 4; j++){int cell = map[i][j];if (cell != 0){int k = i - 1;while (k >= 0){int nextcell = map[k][j];if (nextcell != 0){if (map[i][j] == map[k][j]){flag = 1;map[i][j] += map[k][j];map[k][j] = 0;}k = 0;break;}k--;}}}}//修改部分:for循环中的i或者j的循环条件for (i = 4 - 1; i > 0; i--){for (j = 0; j < 4; j++){int cell = map[i][j];if (cell == 0){int k = i - 1;while (k >= 0){int nextcell = map[k][j];if (nextcell != 0){flag = 1;map[i][j] = nextcell;map[k][j] = 0;k = 0;}k--;}}}}if (flag)return 0;elsereturn 2;
}//
//向上移动
//
int moveUp() {int flag=0;for (i = 0; i < 4; i++){for (j = 0; j < 4; j++){int cell = map[i][j];if (cell != 0){int k = i + 1;while (k < 4){int nextcell = map[k][j];if (nextcell != 0){if (cell == nextcell){flag = 1;map[i][j] += map[k][j];map[k][j] = 0;}k = 4;break;}k++;}}}}//修改部分:for循环中的i或者j的循环条件for (i = 0; i < 4 - 1; i++){for (j = 0; j < 4; j++){int cell = map[i][j];if (cell == 0){int k = i + 1;while (k < 4){int nextcell = map[k][j];if (nextcell != 0){flag = 1;map[i][j] = nextcell;map[k][j] = 0;k = 4;}k++;}}}}if (flag==0)return 0;elsereturn 1;
}//
//随机生成在空格上生成2或者4,并且判断是否游戏结束
//
int randInteger()  //有缺陷,【0 0 0 0】
{for (i = 0; i < 4; i++){for (j = 0; j < 4; j++){if (map[i][j] == 0){map[i][j] = (rand() % 2 + 1) * 2;   //return 0;}}}return 0;
}int main()
{print();char key;while (1){printf("上:w;下:s;左:a;右:d;退出:q\n");printf("请输入要执行的操作:");scanf("%c", &key);switch (key){case 'w':{randInteger();moveUp();printf(" 向上方向键被按下\n");print();break;}case 's':{randInteger();moveDown();printf(" 向下方向键被按下\n");print();break;}case 'a':{randInteger();moveLeft();printf(" 向左方向键被按下\n");print();break;}case 'd':{randInteger();moveRight();printf(" 向右方向键被按下\n");print();break;}case 'q':return 0;}}return 0;
}

C语言实现最简单的2048小游戏相关推荐

  1. linux 剪刀石头布c语言,C语言实现最简单的剪刀石头布小游戏示例

    本文实例讲述了C语言实现最简单的剪刀石头布小游戏.分享给大家供大家参考,具体如下: #include #include #include /*************\ * 剪刀 石头 布 * * 最 ...

  2. Docker(3)具体的安装部署过程和一些简单应用(2048小游戏,nginx,ubuntu)

    1.实验环境 一台rhel7.3的虚拟机server1和一台rhel7.3的物理机 主机信息 作用 server1(172.25.70.1) 搭建docker 物理机(172.25.70.250) 测 ...

  3. 一个简单的2048小游戏

    2048小游戏的核心是:通过控制键盘上的"上"."下"."左"."右"键来实现数字的移动.相加.以及生成新的数字. 上图 ...

  4. Jquery简单实现2048小游戏

    Jquery实现2048小游戏思路整理 1.搭建基础的UI界面 2048需要4*4的表格,所我们要先搭建基础的UI界面:可以使用表格,然后再对基础的单元格进行样式设置: <body>< ...

  5. 用C语言实现一个简单的扫雷小游戏(附全代码及教程)

    本文实例为大家分享了C语言实现扫雷游戏的具体代码,供大家参考,具体内容如下: 首先,创建一个text.c文件: 编写主函数: int main() {test();return 0; } 定义test ...

  6. C语言编写2048小游戏

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/104992424 2 ...

  7. 原生js 实现2048小游戏

    2048小游戏 首先2048小游戏离不开16个格子,我们通过html和css创建好对应的标签和样式, 然后开始js逻辑 <div id="box">//一个盒子里面16 ...

  8. c语言课程结束小项目:2048小游戏

    <C语言程序设计基础>学习完毕,完成第一个项目:2048小游戏. //思考:编程时,要先想整个框架还是先想每个函数的算法. //思考:每一个函数要不要传参数(即数组) //思考:每一个函数 ...

  9. Linux C语言编写2048小游戏

    2048 2048小游戏是用Linux C语言写的,运行在Ubuntu系统上,其中Ubuntu链接Ncuses库.首先,我们简单了解一下Ncurses. Ncurses库是由原CURSES库发展而来的 ...

最新文章

  1. 优化你的CPU来做深度学习
  2. 利用计算机进行自动控制 控制对象主要指,计算机试卷10
  3. 各种网络监控拓扑图,十分齐全!
  4. pyquery获取不到网页完整源代码_PyQuery 详解
  5. sublime关于行操作的快捷键:如快速复制整行等
  6. linux下手动删除数据库实例
  7. 怒卸python3.4.1
  8. Avalonia跨平台入门第一篇
  9. 腾讯微博Android客户端开发——自动获取验证码
  10. IO流递归拷贝一个文件夹里面的所有文件,到另一个文件夹。如果重复不拷贝,可续拷
  11. 电子科技大学计算机应用技术专科段,2020年电子科技大学成都学院计算机应用技术(专科)专业介绍...
  12. Python读取系统文件夹内所有文件并统计数量
  13. 邮件定时发送微博热搜
  14. Beagleboneblack 中DDS模块驱动源码(AD9833)
  15. 18-一种准确高效的领域知识图谱构建方法
  16. 苹果电脑Mac电脑使用心得M1芯片快捷键
  17. EMC传导骚扰的共模电流与差模电流
  18. 零基础学前端系列教程 | 和前端谈恋爱的第005天——约会账单
  19. SQL Server Always Encrypted加密使用
  20. 前端工程师面试题详解(二)

热门文章

  1. Python Requests快速入门
  2. Swift - 添加、修改、删除通讯录联系人
  3. 001.搭建开发环境
  4. .NET 4 上的REST 框架
  5. 开始使用VS2005+ASP.NET+Access(以后可能是MS SQL Server)编写管理系统的计划
  6. 声腔设计中无前腔的影响
  7. Ubuntu搭建git服务器,外网可访问
  8. Spring Boot微信点餐——实战开发DAO层
  9. shell编程学习笔记--整数自增
  10. 使用手势,让键盘在点击空白处消失