题目描述

2048游戏是一个4*4矩阵,用户可以按上下左右4个方向键让所有的方块向同一个方向运动,两个相同数字方块撞一起之后合并成为他们的和,每次操作之后随即生成一个2或者4.
合并规则:相邻会碰撞的两个数字合并且一个位置只会触发一次合并,并且优先合并移动方向顶部的位置
比如:
2 2 2 2行向右合并为0 0 4 4
0 2 2 2行向右合并为0 0 2 4输入描述:
输入第一行是用户按下的方向键,其中1,2,3,4分表代表上、下、左、右键;
接下来是一个4*4的矩阵,空格分割,0代表该位置没有数字.
输出描述:
输出用户按下该方向键后生成的数字矩阵.
不考虑随机生成的数字.输入样例#:
1
0 0 0 2
0 0 0 2
0 0 4 8
0 0 4 8
输出样例#:
0 0 8 4
0 0 0 16
0 0 0 0
0 0 0 0

分析

步骤分为:计算和紧凑

计算(按照行列)

  • 相等元素合并并且删除一个
  • 元素之间可能隔着0
  • 元素之间若是别的数字则可以忽略

紧凑

  • 若是遇到0则用冒泡的方法将0换到末尾
  • 此时还要判断是否换过之后此位置是否还是0
  • 需要设置计时器

代码

#include <stdio.h>int n;
int aaa[5][5];void ww(){    //计算for(int i =1;i<4;i++){for(int j=1;j<5;j++){ if(aaa[i][j]!=0){int k=i+1;while(k<5){if(aaa[i][j]==aaa[k][j]){aaa[i][j] = aaa[i][j]*2;aaa[k][j]=0;break;}else if(aaa[k][j]==0){k--;}else{break;}}}}        }//紧凑for(int i =1;i<4;i++){for(int j=1;j<5;j++){int e=1;while(aaa[i][j]==0&&e<5){//若遇到0for(int w=i;w<4;w++){//冒泡法将0换到末尾int mmm=aaa[w+1][j];aaa[w+1][j]=aaa[w][j];aaa[w][j]=mmm;}e++;}}}
}
void ss(){//计算for(int i =4;i>1;i--){for(int j=1;j<5;j++){if(aaa[i][j]!=0){int k=i-1;while(k>0){if(aaa[i][j]==aaa[k][j]){aaa[i][j] = aaa[i][j]*2;aaa[k][j]=0;break;}else if(aaa[k][j]==0){k--;}else{break;}}}}      }//紧凑for(int i =4;i>1;i--){for(int j=1;j<5;j++){int e=1;while(aaa[i][j]==0&&e<5){//若遇到0for(int w=i;w>1;w--){//冒泡法将0换到末尾int mmm=aaa[w-1][j];aaa[w-1][j]=aaa[w][j];aaa[w][j]=mmm;}e++;}}}
}
void aa(){//计算for(int j =1;j<4;j++){//列for(int i=1;i<5;i++){//行if(aaa[i][j]!=0){int k=j+1;while(k<5){if(aaa[i][j]==aaa[i][k]){aaa[i][j] = aaa[i][j]*2;aaa[i][k]=0;break;}else if(aaa[i][k]==0){k--;}else{break;}}}}     }//紧凑for(int j =1;j<4;j++){for(int i=1;i<5;i++){int e=1;while(aaa[i][j]==0&&e<5){//若遇到0for(int w=j;w<4;w++){//冒泡法将0换到末尾int mmm=aaa[i][w+1];aaa[i][w+1]=aaa[i][w];aaa[i][w]=mmm;}e++;}}}
}
void dd(){//计算for(int j =4;j>1;j--){//列for(int i=1;i<5;i++){//行if(aaa[i][j]!=0){int k=j-1;while(k>0){if(aaa[i][j]==aaa[i][k]){aaa[i][j] = aaa[i][j]*2;aaa[i][k]=0;break;}else if(aaa[i][k]==0){k--;}else{break;}}}}        }//紧凑for(int j =4;j>1;j--){for(int i=1;i<5;i++){int e=1;while(aaa[i][j]==0&&e<5){//若遇到0for(int w=j;w>1;w--){//冒泡法将0换到末尾int mmm=aaa[i][w-1];aaa[i][w-1]=aaa[i][w];aaa[i][w]=mmm;}e++;}}}}int main(){while(scanf("%d",&n)!=EOF){for(int i =1;i<5;i++){for(int j=1;j<5;j++){scanf("%d",&aaa[i][j]);}}if(n==1){ww();}else if(n==2){ss();}else if(n==3){aa();}else if(n==4){dd();}for(int i =1;i<5;i++){for(int j=1;j<5;j++){printf("%-2d",aaa[i][j]);}printf("\n");}}return 0;
}

(算法)2048游戏相关推荐

  1. 2048游戏-AI程序算法分析

    针对目前火爆的2048游戏,有人实现了一个AI程序,可以以较大概率(高于90%)赢得游戏,并且作者在stackoverflow上简要介绍了AI的算法框架和实现思路.但是这个回答主要集中在启发函数的选取 ...

  2. 花了一个深夜,才用C语言写了一个2048游戏雏形

    12年我毕业的第二个月工资,我就买了一个IPAD,然后在IPAD上下了一个2048游戏,玩起来非常爽. 然后这几天看到好几个公众号都发了自己写这个游戏的代码,然后我自己也想试试,所以就有了这篇文章,写 ...

  3. 2048游戏c语言实验报告,2048游戏语言实验报告.doc

    2048游戏语言实验报告 成绩评定 教师签名 评定日期 嘉应学院 计算机学院 实验报告 课程名称: C程序设计 开课学期: 2015-2016学年第1学期 班 级: 计算机1505 指导老师: 陈广明 ...

  4. Python 《Python 实现 2048 游戏》实验报告

    74340da14d79fae0a21de03d44699f80b6c624f3.jpg 2048 游戏 wiki:<2048>是一款单人在线和移动端游戏,由19岁的意大利人 Gabrie ...

  5. LibGDX_8.1: LibGDX 项目实战: 开发跨平台 2048 游戏

    本文链接: http://blog.csdn.net/xietansheng/article/details/50188259 LibGDX 基础教程(总目录) 声明: 游戏中使用到的部分图片和音频资 ...

  6. 【STM32单片机】2048游戏设计

    文章目录 一.简介 二.硬件资源 1.硬件准备 2.硬件连接 四.软件设计 1.软件结构 2.主要代码 五.实验现象 一.简介 本项目支持STM32F103/STM32F407控制器,使用TFTLCD ...

  7. 分享一下自己写的2048游戏(3*3,4*4,5*5,6*6多种玩法,可反悔)

    2048是一款非常常见的小游戏,所以我也想自己尝试着写一款,给自己练练手.说道练手,这里需要交代一下:我从事Android的工作刚刚一年,平时的工作主要是客制化UI和修改Bug,也就是这里改改,那里改 ...

  8. 2048游戏分析、讨论与扩展 - Part I - 游戏分析与讨论

    2048这个游戏从刚出开始就风靡整个世界.本技术博客的目的是想对2048涉及到相关的所有问题进行细致的分析与讨论,得到一些大家能够接受并且理解的结果.在这基础上,扩展2048的游戏性,使其变得更好玩, ...

  9. 2048游戏之——C++与控制台

    2048游戏之--C++与控制台 概要 需求 设计 一.Map类 二.Event类 三.GameController类 四.total.h 五.gameloop.cpp 实现 一.实现Map 1.构造 ...

  10. 2048游戏java版

    最近上java看,写了个2048游戏 分3个文件,一个是Game类写算法的,一个是Win类写图形界面的,一个是游戏的主类my2048 主要算法思路:每次上下左右,分割成单独一行或者一列处理,就变成了对 ...

最新文章

  1. Python标准库:内置函数dict(mapping, **kwarg)
  2. zhihu 知乎社区里点击了Ctrl + C组合键的技术实现
  3. mjorm java_MongoDB 的 ORM框架 MJORM
  4. 随想录(什么是软件架构师)
  5. SQL Server 网络协议和 TDS 端点
  6. 团队合作-需求分析之WBS
  7. JavaScript等于 == 与 恒等于 === 的区别
  8. 如何批量打印jpg图片
  9. 22二叉树非递归遍历算法
  10. 【Unity】 HTFramework框架(十四)Audio音频管理器
  11. 【仿】阿里巴巴首页(未登录)
  12. 使用 apifm 插件进行 Flutter 云开发——QQ一键登录/注册
  13. 【百度地图】折线图平面图
  14. 给女朋友写的h5(移动端)小游戏,超简单
  15. QT 显示动态GIF
  16. fireworks 8中文版
  17. 计算机普通话测试三分钟自述,普通话考试三分钟
  18. 实例分享--消消乐也能做H5游戏?
  19. Nginx版本升级以及Docker中的Nginx版本升级
  20. C#pdf电子发票转图片

热门文章

  1. 小程序页面简单功能模块化之取整
  2. 最新 | 诺奖得主涉嫌论文造假
  3. 【你离诺贝尔奖也就20米】记一次诺奖得主讲座聆听感受
  4. listbox java_listbox读取数据库
  5. uni-app app-plus
  6. vs2013编译 解决 error c1083 无法打开文件 'winsock2.h' 等问题记录
  7. emc re 整改 超标_EMC测试及整改办法
  8. UTC时间转北京时间
  9. 【项目管理】干系人绩效域管理
  10. 计算机安全模式怎么消除计,win10如何解除安全模式,教您如何解除电脑安全模式...