2048小游戏主要算法实现
算法 实现 主要 小游戏 2048
2023-09-11 14:20:46 时间
http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=4681
4681: 2048
时间限制(普通/Java):1000MS/3000MS 内存限制:65536KByte
总提交: 45 測试通过:16
总提交: 45 測试通过:16
描写叙述
2048是一款近期较为流行的数字游戏。非常多同学在课堂上研究怎样得到更高的积分,以至影响了学习效果,不如自己写下这款游戏吧,这样预计也就没有玩的兴趣了。游戏的规则是:给定一个4*4的方格,開始的时候仅仅有若干个2, 每次能够选择上下左右当中一个方向去滑动,每滑动一次,全部的数字方块都会往滑动的方向靠拢外,系统也会在空白的地方乱数出现一个数字方块,同样数字的方块在靠拢、相撞时会相加,能够连续移动但不能连续相加。玩家的目标就是尽快凑出“2048”这个数字方块。
作为一个程序猿。写一个2048游戏当然难不倒你。通过分析你发现主要问题是怎样依据当前状态和滑动方向,确定出下一个方格状态即滑动后的结果(不考虑新增加的随机方格)。
每一个状态绘制出来便成了一个简单的2048游戏。
输入
输入数据有多组,每组数据的第一行为一个整数d(0表示向左滑,1表示向右滑。2表示向上滑,3表示向下滑)。
接下来有4行4列的方格,每一个方格的值仅仅能为0。2,4。8,16,32,64。128,256,512,1024,2048。当中0表示该格子为空白。
输出
每组输出滑动后的状态,即4行4列的格子值。
例子输入
2
0 0 0 0
0 0 0 0
0 2 2 0
2 0 0 0
0
2 2 2 0
0 0 2 0
0 0 0 0
0 0 0 0
例子输出
2 2 2 0
0 0 0 0
0 0 0 0
0 0 0 0
4 2 0 0
2 0 0 0
0 0 0 0
0 0 0 0
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> using namespace std; int a[4][4],n; void up_remove_blank(){ int i,j,k; for(j=0;j<4;j++){ for(i=1;i<4;i++){ k=i; while(k-1>=0&&a[k-1][j]==0){//上面的那个为空 swap(a[k][j],a[k-1][j]); k--; } } } } void down_remove_blank(){ int i,j,k; for(j=0;j<4;j++){ for(i=2;i>=0;i--){ k=i; while(k+1<=3&&a[k+1][j]==0){//上面的那个为空 swap(a[k][j],a[k+1][j]); k++; } } } } void left_remove_blank(){ int i,j,k; for(i=0;i<4;i++){ for(j=1;j<4;j++){ k=j; while(k-1>=0&&a[i][k-1]==0){//上面的那个为空 swap(a[i][k],a[i][k-1]); k--; } } } } void right_remove_blank(){ int i,j,k; for(i=0;i<4;i++){ for(j=2;j>=0;j--){ k=j; while(k+1<=3&&a[i][k+1]==0){//上面的那个为空 swap(a[i][k],a[i][k+1]); k++; } } } } void left(){ int i,j; for(i=0;i<4;i++){ for(j=0;j<3;j++){ if(a[i][j]==a[i][j+1]){ a[i][j]+=a[i][j+1]; a[i][j+1]=0; left_remove_blank(); } } } } void right(){ int i,j; for(i=0;i<4;i++){ for(j=3;j>=1;j--){ if(a[i][j]==a[i][j-1]){ a[i][j]+=a[i][j-1]; a[i][j-1]=0; right_remove_blank(); } } } } void up(){ int i,j; for(j=0;j<4;j++){//每一列 for(i=0;i<3;i++){ if(a[i][j]==a[i+1][j]){ a[i][j]=a[i][j]+a[i+1][j]; a[i+1][j]=0; //移除空格 up_remove_blank(); } } } } void down(){ int i,j; for(j=0;j<4;j++){//每一列 for(i=3;i>=1;i--){ if(a[i][j]==a[i-1][j]){ a[i][j]=a[i][j]+a[i-1][j]; a[i-1][j]=0; //移除空格 down_remove_blank(); } } } } void output(){ int i,j; for(i=0;i<4;i++){ for(j=0;j<4;j++){ if(j==3) printf("%d\n",a[i][j]); else printf("%d ",a[i][j]); } } } int main(){ int i,j; while(scanf("%d",&n)==1){ for(i=0;i<4;i++){ for(j=0;j<4;j++){ scanf("%d",&a[i][j]); } } if(n==0){//左 left_remove_blank(); left(); }else if(n==1){//右 right_remove_blank(); right(); }else if(n==2){//上 up_remove_blank(); up(); } else{//下 down_remove_blank(); down(); } output(); } return 0; }
相关文章
- 【学习排序】 Learning to Rank 中Listwise关于ListNet算法讲解及实现
- 二叉树的常见算法
- java实现fp-growth算法
- Java实现算法竞赛入门经典例题-蚂蚁
- Java实现有向图强连通分量的Tarjan算法
- java 实现 蓝桥杯 算法提高 排列数
- Java实现 蓝桥杯VIP 算法提高 阮小二买彩票
- Java实现 蓝桥杯VIP 算法提高 5-3日历
- Java实现 蓝桥杯VIP 算法提高 字符串跳步
- Java实现 蓝桥杯VIP 算法训练 会议中心
- Java实现 蓝桥杯VIP 算法训练 黑白无常
- Java实现 蓝桥杯VIP 算法训练 麦森数
- Java实现 蓝桥杯VIP 算法训练 Hanoi问题
- Java实现 蓝桥杯VIP 算法训练 FBI树
- Java实现 蓝桥杯VIP 算法训练 新生舞会
- 蓝桥杯 算法提高 11-1实现strcmp函数 (JAVA方法)
- 机器学习之决策树(ID3)算法与Python实现
- (算法)最长单词
- (算法)从0到n整数中数字2出现的次数
- (算法)和为0的最大连续子数组
- 数据库索引使用数据结构及算法, 及MySQL不同引擎索引实现
- Python实现的选择排序算法原理与用法实例分析
- Interview:算法岗位面试—上海某公司算法岗位(偏图像算法,互联网科技行业)技术面试考点之区块链的TPS等问题
- Algorithm:【Algorithm算法进阶之路】之算法中的数学编程相关习题(时间速度、进制转换、排列组合、条件概率、斐波那契数列)
- ML之Clustering之H-clustering:Hierarchical clustering算法相关论文、主要思路、关键步骤、代码实现等相关配图之详细攻略
- 龙贝格算法(Matlab实现)
- Python实现贝叶斯优化器(Bayes_opt)优化支持向量机分类模型(SVC算法)项目实战
- 【项目实战】Python实现LightGBM回归模型(LGBMRegressor算法)项目实战
- 高速排序之算法导论实现
- 【数据结构与算法】FST 有穷状态转换器详解:Finite State Transducers & 算法核心思想和代码实现(Golang语言)
- 【大数据开发运维解决方案】Solr6.2默认相似性算法检索匹配得分高于5.1版本问题分析