2048小游戏

话不多说,直接上代码

#include<iostream>
#include<vector>
#include<ctime>
#include<cstdlib>
using namespace std;
class Game_2048
{public:Game_2048();~Game_2048();void introduction();bool judgeOver();                            //判断游戏是否结束void reSize();void printBoard();                          //打印函数void getRand();                              //随机在棋盘上生成2,4;void slide();                                //滑动
private:int m=4, n=4;char op;                                   //用户操作vector< vector<int> >   board;                              //棋盘vector<int>  row;bool judgeInsert(int x,int y);bool judgeSlide();                               //判断是否能滑动,(未写完)void copyBoard(vector< vector<int> > &newBoard,vector< vector<int> > &board);void inputOp();char getOp();                         //返回操作符bool judgeLeftSlide(bool mark=true);void leftSlide();                            //左滑动bool judgeRightSlide(bool mark = true);void rightSlide();bool judgeUpSlide(bool mark = true);void upSlide();bool judgeDownSlide(bool mark = true);void downSlide();void reStart();void enlarge();                             //将值扩大二倍
};int main()
{Game_2048 NB;NB.introduction();NB.getRand();NB.printBoard();while (!NB.judgeOver()){NB.slide();NB.getRand();NB.printBoard();} cout << "游戏结束!!!\n";system("pause");return 0;}void Game_2048::introduction()
{cout << "这是一个2048游戏,规则如下:\n";cout << "上划:W;\n下滑:S;\n左划:A;\n右划:D;\n退出:Q;\n重新开始:R;\n请输入下次操作,\n";
}void Game_2048::slide()
{inputOp();switch (getOp()){case 'a':case 'A':if (judgeLeftSlide())doleftSlide();while (judgeLeftSlide(false));else{cout << "无法左滑动,请重试!!!\n";slide();}break;case 'd':case 'D':if (judgeRightSlide())dorightSlide();while (judgeRightSlide(false));      else{cout << "无法右滑动,请重试!!!\n";slide();}break;case 'w':case 'W':if(judgeUpSlide())doupSlide();while (judgeUpSlide(false));else{cout << "无法上滑动,请重试!!!\n";slide();}break;case 's':case 'S':if(judgeDownSlide())do  downSlide();while (judgeDownSlide(false));else{cout << "无法下滑动,请重试!!!\n";slide();}break;case 'p':case 'P':enlarge();break;case 'q':case 'Q':exit(0);break;case 'r':case 'R':reStart();break;default:cout << "输入错误,作为惩罚,随机生成一个数!\n";break;}
}void Game_2048::reStart()
{for (int i = 0; i < m; i++)for (int j = 0; j < n; j++) {board[i][j] = 0;}
}void Game_2048::enlarge()
{for (int i = 0; i < m; i++)for (int j = 0; j < n; j++){board[i][j] *= 2;}
}char Game_2048::getOp()
{return op;
}void Game_2048::upSlide()
{for (int j = 0; j < n; j++)for (int i = m - 1; i > 0; i--) {                              //n-1!!if (board[i][j] != 0 && board[i - 1][j] == 0)            //移动{board[i - 1][j] = board[i][j];board[i][j] = 0;}}for (int j = 0; j < n; j++)for (int i = m - 1; i > 0; i--) {if (board[i][j] != 0 && board[i-1][j] == board[i][j])  //覆盖{board[i-1][j] += board[i][j];board[i][j] = 0;}}
}bool Game_2048::judgeUpSlide(bool mark)
{if (mark){for (int i = 0; i < m; i++)for (int j = n - 1; j > 0; j--){if (board[i][j] == 0)return true;}}for (int j = 0; j < n; j++)for (int i = m - 1; i > 0; i--) {                              //n-1!!if (board[i][j] != 0 && board[i - 1][j] == 0)            //移动return true;if (board[i][j] != 0 && board[i - 1][j] == board[i][j])  //覆盖return true;}return false;
}bool Game_2048::judgeDownSlide(bool mark)
{if (mark) {for (int i = 0; i < m; i++)for (int j = n - 1; j > 0; j--){if (board[i][j] == 0)return true;}}for (int j = 0; j < n; j++)for (int i = 0; i < m - 1; i++) {                              //n-1!!if (board[i][j] != 0 && board[i + 1][j] == 0)            //移动return true;if (board[i][j] != 0 && board[i + 1][j] == board[i][j])  //覆盖return true;}return false;
}void Game_2048::downSlide()
{for (int j = 0; j < n; j++)for (int i = 0; i < m - 1; i++) {                         if (board[i][j] != 0 && board[i + 1][j] == 0)            //移动{board[i + 1][j] = board[i][j];board[i][j] = 0;}}for (int j = 0; j < n; j++)for (int i = 0; i < m - 1; i++) {if (board[i][j] != 0 && board[i + 1][j] == board[i][j])  //覆盖{board[i + 1][j] += board[i][j];board[i][j] = 0;}}
}void Game_2048::rightSlide()
{for (int i = 0; i < m; i++)for (int j = 0; j < n - 1; j++) {                              //n-1!!if (board[i][j] != 0 && board[i][j + 1] == 0)            //移动{board[i][j + 1] = board[i][j];board[i][j] = 0;}}for (int i = 0; i < m; i++)for (int j = 0; j < n - 1; j++) {if (board[i][j] != 0 && board[i][j + 1] == board[i][j])  //覆盖{board[i][j + 1] += board[i][j];board[i][j] = 0;}}
}bool Game_2048::judgeRightSlide(bool mark )
{if (mark) {for (int i = 0; i < m; i++)for (int j = n - 1; j > 0; j--){if (board[i][j] == 0)return true;}}for (int i = 0; i < m; i++)for (int j = 0; j < n - 1; j++) {                              //n-1!!if (board[i][j] != 0 && board[i][j + 1] == board[i][j])  //覆盖return true;if (board[i][j] != 0 && board[i][j + 1] == 0)return true;}return false;
}void Game_2048::leftSlide()
{for (int i = 0; i < m; i++)for (int j = 1; j < n; j++) {                              //n-1!!if (board[i][j] != 0 && board[i][j - 1] == 0)            //移动{board[i][j - 1] = board[i][j];board[i][j] = 0;}}for (int i = 0; i < m; i++)for (int j = 1; j < n; j++) {if (board[i][j] != 0 && board[i][j - 1] == board[i][j])  //覆盖{board[i][j - 1] += board[i][j];board[i][j] = 0;}}
}bool Game_2048::judgeLeftSlide(bool mark)
{if (mark) {for (int i = 0; i < m; i++)for (int j = n - 1; j > 0; j--){if (board[i][j] == 0)return true;}}for (int i = 0; i < m; i++)for (int j = n - 1; j > 0; j--) {                              //n-1!!if (board[i][j] != 0 && board[i][j - 1] == 0)            //移动return true;if (board[i][j] != 0 && board[i][j - 1] == board[i][j])  //覆盖return true;}return false;
}bool Game_2048::judgeOver()
{if (op == 'q' || op == 'Q')return true;for (int i = 0; i < m; i++)for (int j = 0; j < n; j++) {if (board[i][j] == 2048){printBoard();cout << "有数字达到了2048,恭喜!!!\n";return true;}  }for (int i = 0; i < m; i++)for (int j = 0; j < n; j++) {if (board[i][j] == 0)return false;}if (judgeSlide())return false;else{cout << "无法再滑动\n";return true;}}bool Game_2048::judgeSlide()
{vector< vector<int> >  copyBoard;                              //棋盘vector<int>  copyRow;for (int i = 0; i < n; i++) {copyRow.push_back(0);}for (int i = 0; i < m; i++) {copyBoard.push_back(copyRow);}copyBoard = board;upSlide();downSlide();leftSlide();rightSlide();for (int i = 0; i < m; i++)for (int j = 0; j < n; j++){if (board[i][j] == 0) {board = copyBoard;return true;} }return false;
}void Game_2048::copyBoard(vector< vector<int> >& newBoard, vector< vector<int> >&  board)
{for (int i = 0; i < m; i++)for (int j = 0; j < n; j++)newBoard[i][j] = board[i][j];
}bool Game_2048::judgeInsert(int x,int y)
{if (board[x][y] == 0)return true;elsereturn false;
}
void Game_2048::getRand()
{srand(time(0));int x, y,val;do{x = rand() % m;y = rand() % n;} while (!judgeInsert(x,y));val = (rand() % 2 + 1)*2;board[x][y] = val;}void Game_2048::inputOp()
{cin >> op;
}
void Game_2048::reSize()
{cout << "请输入棋盘大小m*n\n";cin >> m >> n;Game_2048();
}Game_2048::~Game_2048()
{}Game_2048::Game_2048()
{for (int i = 0; i < n; i++){row.push_back(0);}for (int i = 0; i < m; i++){board.push_back(row);}
}
void Game_2048::printBoard()
{cout << "\n--------------\n";for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {cout << board[i][j];if (j < n-1){cout << "—";}if (j == n-1 && i < m-1){cout << endl;int count = 0;while (count++ < n-1){cout << "|  ";}cout << "|" << endl;}}}cout << "\n--------------\n" ;
}

C++实现2048小游戏(转载)相关推荐

  1. C语言编写2048小游戏

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/104992424 2 ...

  2. 使用JS实现2048小游戏

    JS实现2048小游戏源码 效果图: 代码如下,复制即可使用: (适用浏览器:360.FireFox.Chrome.Opera.傲游.搜狗.世界之窗. 不支持Safari.IE8及以下浏览器.) &l ...

  3. 2019.8.8 2048小游戏

    本次为2048的小游戏制作,运用了之前的HTML+CSS以及现在的Jascript部分知识 目的是巩固之前所学内容,掌握现在的新知识,以及对面向对象能有进一步的理解 下面为html,css和JS三大页 ...

  4. Python学习—2048小游戏等4个小练习

    Python学习-2048小游戏等4个小练习 转载于:https://www.cnblogs.com/ChangAn223/p/10627777.html

  5. 关于2048小游戏的开发感想

    最近通过python实现2048小游戏的开发,在开发过程中遇到了一些问题,发现了自己的不足之处,特此进行简单的反思. 一.状态机: 状态机是表示有限个状态以及这些状态之间转移和动作等行为的数学模型,状 ...

  6. Swift实战之2048小游戏

    上周在图书馆借了一本Swift语言实战入门,入个门玩一玩^_^正好这本书的后面有一个2048小游戏的实例,笔者跟着实战了一把. 差不多一周的时间,到今天,游戏的基本功能已基本实现,细节我已不打算继续完 ...

  7. python游戏代码五子棋_用20行Python代码实现2048小游戏,你会吗?

    前些天在b站上看到有个大佬用c写了一个2048小游戏,我便一下来了兴趣.心想着,我貌似也能用Python来整一波,话不多说,直接开搞. 2048的游戏规则: 2048游戏总共有16个格子,初始时会有两 ...

  8. python秒表游戏代码_用20行Python代码实现2048小游戏,你会吗?

    前些天在b站上看到有个大佬用c写了一个2048小游戏,我便一下来了兴趣.心想着,我貌似也能用Python来整一波,话不多说,直接开搞. 2048的游戏规则: 2048游戏总共有16个格子,初始时会有两 ...

  9. 我的名片能运行Linux和Python,还能玩2048小游戏,成本只要20元

    晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI 猜猜它是什么?印着姓名.职位和邮箱,看起来是个名片.可是右下角有芯片,看起来又像是个PCB电路板. 其实它是一台超迷你的ARM计算机,不仅 ...

最新文章

  1. mysql 5.6.15_mysql-5.6.15-win32.zip免安装配置
  2. 2020牛客多校第7场C-A National Pandemic[树链剖分+思维]
  3. androidinclude作用
  4. Socket简介及客户端服务器连接实例
  5. BOOST_TEST_FOREACH宏相关的测试程序
  6. 从行驶的车上向上抛球,球真的会回到原地吗?
  7. 字体外面怎么加边框_有钱人家连电视墙都发“光”,大理石墙周围加一圈镜面边框,华丽...
  8. B端可视化:图表设计
  9. 成为百万程序员第一步:从安装Python开始
  10. PHP 500 -Invalid command RewriteEngine的解决
  11. 小波说雨燕 第三季 构建 swift UI 之 度假清单 学习笔记
  12. Facebook开源问答系统DrQA:基于单一信源回答开放域提问
  13. 去除 火狐浏览器自动给域名前加 www.
  14. RestSharp使用说明
  15. vi和nano实用操作
  16. JVM垃圾回收的二次标记
  17. 做跨境电商一年买了房:未来五年的风口行业,90%的人都不知道
  18. Apsara Clouder云计算专项技能认证考试题目和答案
  19. Advanced Auto Layout Toolbox
  20. 互联网摸鱼日报(2022-10-08)

热门文章

  1. java swing 版坦克大战
  2. 我们注视的,是相同的世界吗
  3. NOI 1.5 45
  4. 用CSAI_BOM_MAINTAIN修改WBS BOM
  5. maven整合SSM搭建项目
  6. sed 替换行中 转义单引号
  7. JVM的符号引用和直接引用
  8. DTCloud 第1天
  9. 北航计算机学院2017年博导,北航机械工程及自动化学院2017博士生导师:乔立红...
  10. verilog中关于always语句嵌套task执行顺序和@(posedge clk)执行方式的问题