C语言实现最简单的2048小游戏
网上解释很多了,直接上代码吧,这个功能很简单,易于学习,后期有时间会完善功能
#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小游戏相关推荐
- linux 剪刀石头布c语言,C语言实现最简单的剪刀石头布小游戏示例
本文实例讲述了C语言实现最简单的剪刀石头布小游戏.分享给大家供大家参考,具体如下: #include #include #include /*************\ * 剪刀 石头 布 * * 最 ...
- Docker(3)具体的安装部署过程和一些简单应用(2048小游戏,nginx,ubuntu)
1.实验环境 一台rhel7.3的虚拟机server1和一台rhel7.3的物理机 主机信息 作用 server1(172.25.70.1) 搭建docker 物理机(172.25.70.250) 测 ...
- 一个简单的2048小游戏
2048小游戏的核心是:通过控制键盘上的"上"."下"."左"."右"键来实现数字的移动.相加.以及生成新的数字. 上图 ...
- Jquery简单实现2048小游戏
Jquery实现2048小游戏思路整理 1.搭建基础的UI界面 2048需要4*4的表格,所我们要先搭建基础的UI界面:可以使用表格,然后再对基础的单元格进行样式设置: <body>< ...
- 用C语言实现一个简单的扫雷小游戏(附全代码及教程)
本文实例为大家分享了C语言实现扫雷游戏的具体代码,供大家参考,具体内容如下: 首先,创建一个text.c文件: 编写主函数: int main() {test();return 0; } 定义test ...
- C语言编写2048小游戏
该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/104992424 2 ...
- 原生js 实现2048小游戏
2048小游戏 首先2048小游戏离不开16个格子,我们通过html和css创建好对应的标签和样式, 然后开始js逻辑 <div id="box">//一个盒子里面16 ...
- c语言课程结束小项目:2048小游戏
<C语言程序设计基础>学习完毕,完成第一个项目:2048小游戏. //思考:编程时,要先想整个框架还是先想每个函数的算法. //思考:每一个函数要不要传参数(即数组) //思考:每一个函数 ...
- Linux C语言编写2048小游戏
2048 2048小游戏是用Linux C语言写的,运行在Ubuntu系统上,其中Ubuntu链接Ncuses库.首先,我们简单了解一下Ncurses. Ncurses库是由原CURSES库发展而来的 ...
最新文章
- 优化你的CPU来做深度学习
- 利用计算机进行自动控制 控制对象主要指,计算机试卷10
- 各种网络监控拓扑图,十分齐全!
- pyquery获取不到网页完整源代码_PyQuery 详解
- sublime关于行操作的快捷键:如快速复制整行等
- linux下手动删除数据库实例
- 怒卸python3.4.1
- Avalonia跨平台入门第一篇
- 腾讯微博Android客户端开发——自动获取验证码
- IO流递归拷贝一个文件夹里面的所有文件,到另一个文件夹。如果重复不拷贝,可续拷
- 电子科技大学计算机应用技术专科段,2020年电子科技大学成都学院计算机应用技术(专科)专业介绍...
- Python读取系统文件夹内所有文件并统计数量
- 邮件定时发送微博热搜
- Beagleboneblack 中DDS模块驱动源码(AD9833)
- 18-一种准确高效的领域知识图谱构建方法
- 苹果电脑Mac电脑使用心得M1芯片快捷键
- EMC传导骚扰的共模电流与差模电流
- 零基础学前端系列教程 | 和前端谈恋爱的第005天——约会账单
- SQL Server Always Encrypted加密使用
- 前端工程师面试题详解(二)