http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=4681

4681: 2048

时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte
总提交: 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;
}

2048小游戏主要算法实现相关推荐

  1. html2048游戏算法逻辑,2048小游戏算法解析

    数组转换 为了方便理解,我们使用二维数组来进行分析 2048 的算法逻辑. 首先我们简单的了解一下游戏玩法: 简言之,就是通过上.下.左.右移动,使相邻的相同元素进行合并,进而数字相加得到 2048的 ...

  2. html css js实现快递单打印_JS与HTML、CSS实现2048小游戏(六)

    在前面的五篇文章中,小编带大家完成了网页版2048小游戏的基本游戏逻辑.但是在游戏结束的gameover()方法中咱们只是简单的通过alert来弹出一些信息,这样的话只能出现下图的效果.这样的游戏,不 ...

  3. c语言2048代码linux,C语言实现2048小游戏(示例代码)

    2048 一.设计思路 1.游戏规则 想要制作游戏,首先需要了解游戏的规则,下面就来介绍2048的游戏规则 2048游戏共有16个格子,初始时初始数字由2或者4构成. 手指向一个方向滑动,所有格子会向 ...

  4. 2048小游戏编写思路

    有点难 关键知识点 下面请各位读者先学习一下该游戏中涉及到的几个关键知识点,有了这些必备条件,我们才好讲解 2048 游戏的设计思路. 1) 改变文本颜色 2048 游戏设置的格子边框颜色为湖蓝色,其 ...

  5. java2048ai,2048小游戏ai设计

    感谢我的朋友许博瑀,他一定要赞助我个域名,于是网站改为以下地址: >>>>>>>>>>>>>>>>> ...

  6. 程序设计-在校整理-06 最常公共子序列与子串+2048小游戏+KNN简单实例

    [在校整理-06 最常公共子序列与子串+2048小游戏+KNN简单实例](注:仅供参考学习使用) 一.课题内容和要求 1.问题描述 1.1最长公共子序列与子串 1.2 2048小游戏 1.3 K-NN ...

  7. html+css+js适合前端小白的实战全解(超详细)——2048小游戏(三)

    续上一小节,我们回到newgame()这个函数,我们之前只做了init()内函数,相当于一个初始化操作 现在,我们需要再随机两个两个生成数字. 随机生成数字在这个游戏里会经常出现,用户移动一步,也会产 ...

  8. 2048小游戏js实现

    摘要 2048小游戏,采用原生js的dom操作,做的比较粗糙,目的是练习原生js的常用操作.游戏功能与界面均为他人设计,本demo具体代码实现由本人独立实现. 样式 demo功能: 常见的2048游戏 ...

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

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

最新文章

  1. 2022-2028年中国餐具行业市场研究及前瞻分析报告
  2. R语言attributes函数(获取属性、设置属性)、attr函数(改变一个属性)、structure函数(改变数据形状)实战
  3. java多线程(3)Thread的静态方法
  4. Apache PHP7 多站点 多端口的配置
  5. VR跨界一触即发,探秘87870“魔都之夜”VR派对
  6. python判断日期_python如何判断日期的合法性?
  7. html密码框不显示,密码框中密码的显示与隐藏切换(JS)
  8. linux共享文件权限设置,linux – Windows更改Samba文件共享中的文件权限
  9. 并行执行 Job - 每天5分钟玩转 Docker 容器技术(134)
  10. 腾讯的老照片修复算法,我把它搬到网上,随便玩
  11. PHP公鸡五文钱,公鸡
  12. ubuntu 文件权限命令详解使用格式和方法
  13. python简单代码-代码的重试机制(python简单实现)
  14. P2422 良好的感觉
  15. 如何用手机修改证件照尺寸大小
  16. 使用 MitmProxy 玩爬虫的,这篇文章别错过了!
  17. 微软一站式示例代码库(中文版)2012-2-10版本, 新添加ASP.NET, Windows Form, VSX, Windows Shell, WPF等16个Sample
  18. c1-02西班牙的语言,【图片】考试的同学看过来~DELE-C1两个月准备(实用经验+超详细流程)转【西班牙语吧】_百度贴吧...
  19. Python多线程-手慢无的真相
  20. 第四届中国(广东)国际“互联网+”博览会今日在佛山开幕 聚集工业“智慧”推动产业加速转型...

热门文章

  1. python怎么安装tensorflow-Python使用pip安装TensorFlow模块
  2. Installing ROS 2 on Ubuntu20.04 Linux
  3. C语言switch分支结构
  4. 计算机网络实验四:利用UDP协议实现点对点聊天
  5. 项目war包部署到第三方Tomcat,访问路径必须加上项目名称的坑
  6. 毕业论文 | 人工智能侵权责任法律问题研究——以无人驾驶汽车为例
  7. Verilog | HDL 音乐盒设计(代码类)
  8. java同步锁实例_Java lock同步锁使用实例解析
  9. ssm mysql动态分页_SSM项目手动分页详解
  10. 基于pygame的射击小游戏制作(五)绘制开始按钮