先说说2048游戏的规则:

开始的时候空格中会出现两个数字(只能为2或者4),用户可以选择上下左右键进行移动,数字们整体沿着方向移动,中间不存在空格,如果相邻的两个数字相等,那么合并至沿着方向的后一个,更新最大值,总分数加上新出现的数字。当出现2048,Win。或者没有空格了,Lose。

基本就是一个按照思路的模拟题,没有什么难度。不过我想写一个自动求解的程序,但是bfs搜索的话解空间太庞大,没有想到好的方法,有路过的牛人还请指点。

//2048  by Tach#include<iostream>
#include<string>
#include<ctime>
#include<cstring>
#include<conio.h>
#include<iomanip>
#include<algorithm>
using namespace std;
int g[4][4];
int vis[4][4];
int maxNum=0,score=0;
void print()   //打印图案
{for(int i=0;i<4;i++){for(int j=0;j<4;j++)cout<<setw(5)<<g[i][j];cout<<endl<<endl;} cout<<"Max:"<<maxNum<<"  "<<"Score:"<<score<<endl;
}
void init()
{for(int i=0;i<4;i++)for(int j=0;j<4;j++)g[i][j]=0;memset(vis,0,sizeof(vis));print();
}
bool GameOver()  //判断是是否还有空格
{bool flag=false;for(int i=0;i<4;i++)for(int j=0;j<4;j++){if(vis[i][j]==0){flag=true;goto loop;}}loop:return flag;
}bool GetResult() //判断是否出现2048
{for(int i=0;i<4;i++)for(int j=0;j<4;j++){if(g[i][j]==2048)return true;}
}
void RandNum(int f)  //随机生成2或者4,f代表需要生成的个数
{int num=0;while(1){int x=rand()%4;int y=rand()%4;if(vis[x][y]==0){vis[x][y]=1;int z=rand()%4+2;if(z%2!=0)z-=1;g[x][y]=z;num++;if(num==f)break;}}system("cls");print();
}
void work() //主函数,处理按键
{while(1){int ch=getch();if(ch==72)//上{for(int j=0;j<4;j++)for(int i=0;i<4;i++){if(vis[i][j]==1){for(int k=i-1;k>=0;k--){if(vis[k][j]==1){if(g[k][j]==g[k+1][j]){g[k][j]+=g[k][j];g[k+1][j]=0;vis[k+1][j]=0;maxNum=max(maxNum,g[k][j]);score+=g[k][j];break;}elsebreak;} else{int temp=g[k][j];//类似冒泡g[k][j]=g[k+1][j];g[k+1][j]=temp;vis[k+1][j]=0;vis[k][j]=1;}}}} RandNum(1);system("cls");print();if(GameOver()==false){cout<<"Game Over!!1"<<endl;break;}if(GetResult()==true){cout<<"You Win!!"<<endl;break;}}if(ch==80)//下 {for(int j=0;j<4;j++)for(int i=3;i>=0;i--){if(vis[i][j]==1){for(int k=i+1;k<4;k++){if(vis[k][j]==1){if(g[k][j]==g[k-1][j]){g[k][j]+=g[k-1][j];g[k-1][j]=0;vis[k-1][j]=0;maxNum=max(maxNum,g[k][j]);score+=g[k][j];break;}elsebreak;} else{int temp=g[k][j];g[k][j]=g[k-1][j];g[k-1][j]=temp;vis[k-1][j]=0;vis[k][j]=1;}}}} RandNum(1);system("cls");print();if(GameOver()==false){cout<<"Game Over!!1"<<endl;break;}if(GetResult()==true){cout<<"You Win!!"<<endl;break;}}if(ch==75)//左 {for(int i=0;i<4;i++)for(int j=0;j<4;j++){if(vis[i][j]==1){for(int k=j-1;k>=0;k--){if(vis[i][k]==1){if(g[i][k]==g[i][k+1]){g[i][k]+=g[i][k+1];g[i][k+1]=0;vis[i][k+1]=0;maxNum=max(maxNum,g[i][k]);score+=g[i][k];break;}elsebreak;} else{int temp=g[i][k];g[i][k]=g[i][k+1];g[i][k+1]=temp;vis[i][k+1]=0;vis[i][k]=1;}}}} RandNum(1);system("cls");print();if(GameOver()==false){cout<<"Game Over!!!"<<endl;break;}if(GetResult()==true){cout<<"You Win!!"<<endl;break;}}if(ch==77)//右 {for(int i=0;i<4;i++)for(int j=3;j>=0;j--){if(vis[i][j]==1){for(int k=j+1;k<4;k++){if(vis[i][k]==1){if(g[i][k]==g[i][k-1]){g[i][k]+=g[i][k-1];g[i][k-1]=0;vis[i][k-1]=0;maxNum=max(maxNum,g[i][k]);score+=g[i][k];break;}elsebreak;} else{int temp=g[i][k];g[i][k]=g[i][k-1];g[i][k-1]=temp;vis[i][k-1]=0;vis[i][k]=1;}}}} RandNum(1);system("cls");print();if(GameOver()==false){cout<<"Game Over!!!"<<endl;break;}if(GetResult()==true){cout<<"You Win!!"<<endl;break;}}}
}
int main()
{init();srand((unsigned)time(NULL));RandNum(2);work();return 0;
} 

C++ 控制台版 2048小游戏相关推荐

  1. 2048网页版html项目报告,jQuery编写网页版2048小游戏

    大致介绍 看了一个实现网页版2048小游戏的视频,觉得能做出自己以前喜欢玩的小游戏很有意思便自己动手试了试,真正的验证了这句话-不要以为你以为的就是你以为的,看视频时觉得看懂了,会写了,但是自己实现起 ...

  2. java编辑2048小游戏_Java 制作命令行版 2048小游戏

    Java 命令行版 2048小游戏(2020年8月14日) 制作背景 大二即将开学,从头开始学习了一个多月的java,对二维数组的操作稍微熟悉了一些.于是想做一个简单的2048来试一试. 众所周知,2 ...

  3. 网页版2048小游戏

    网页版2048小游戏 使用jquery3.3.1 进行的一次开发,各文件源码如下: 2048.css .div_2048{background-color: #FFFAF0;width:1000px; ...

  4. C语言版2048小游戏创作思路及代码

    自己学习c语言也有一段时间,但还是对c语言没有感觉,所有想通过写博客来提高自己对c语言的理解. 在写2048的时候,参考了不少优秀的代码,也有一些自己的理解,希望能给大家一些参考. 先要有界面,顺带把 ...

  5. 2048c语言的思路,C语言版2048小游戏创作思路及代码

    #include "stdafx.h" #include "stdlib.h" #include "conio.h" //writeKey( ...

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

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

  7. java编写2048小游戏

    java版2048小游戏 java编写2048小游戏 java编写2048小游戏 // An highlighted block /*** */ package games;/*** @author ...

  8. C++实现2048小游戏(控制台版的)

    无聊,在公司写了个2048小游戏的程序,聊以自娱.(事实是我手机坏了,没得玩). 很简单,直接上代码了. #include <iostream> #include <windows. ...

  9. 2048小游戏 java版(代码+注释)

            一个纯纯小白,想写点什么,也想学习一下怎么在这里写东西,就简单的写个2048小游戏.写的不好,大佬就不用看了,希望和大家交流学习,有写的不好或有更好的建议也欢迎提出来.(需要用的可直接 ...

最新文章

  1. 计算机设备报废界定,福建省国家税务局关于印发《计算机及其附属设备报废淘汰暂行办法》的通知...
  2. Window平台下的Android的环境配置
  3. php redis新增数据类型,Redis有哪几种数据类型
  4. C语言之去掉https链接的默认443端口
  5. blue html中转换,BlueFox Free PDF to HTML Converter(PDF文件转换软件)
  6. Spring Boot 操作 Memcache
  7. HTML文档包应含几个基本标记,HTML基本结与常用标记.doc
  8. python接口自动化(十九)--Json 数据处理---实战(详解)
  9. mysql 5.5主从同步_MySQL 5.5主从同步
  10. 万维网文档在服务器端动态,信息网络应用基础作业2.docx
  11. 从一个MFC工程移植对话框类到另一个MFC工程
  12. 我从编程总结的 22 个经验
  13. Keil下载代码闪退的问题(已解决)
  14. JS对象定义和基本方法
  15. LiveVideoStackCon2021 北京站专访:从上云到创新,视频云的新技术、新场景
  16. 基于Bootstrap4写的一个JQuery分页插件
  17. 用Python做一个好玩的朋友圈九宫格抽奖
  18. 对*.mht文件结构的一个浅显分析
  19. C#控件之OpenFileDialog选择图片文件并在picturebox里面显示
  20. 报错:Could not connect to any X display

热门文章

  1. 三元函数的几何图形一般是_三元函数(三元函数能几何表示吗)
  2. FHQ Treap及其可持久化与朝鲜树式重构
  3. Mac 系统文件占用 100g
  4. 【转载】CAD快捷键
  5. 数据库mysql试卷B卷_MySQL-测试卷一
  6. 分析数据获得:新浪微博兴趣圈自动挖掘
  7. CSS 设置图片旋转角度
  8. 详解const 用法
  9. 设置maven项目默认添加地址
  10. c++ string头文件详解