#include <iostream>
#include <windows.h>
#include <ctime>
using namespace std;  int const ROW = 4;
int const COL = 4;
int game[ROW][COL] = {0};//上下左右
int const UP = 1;
int const DOWN = 2;
int const LEFT = 3;
int const RIGHT = 4;  //游戏所处的状态
int const GAME_OVER = 1;
int const GAME_WIN = 2;
int const GAME_CONTINUE = 3;  enum GameNum
{  Game_2 = 2,  Game_4 = 4,  Game_8 = 8,  Game_16 = 16,  Game_32 = 32,  Game_64 = 64,  Game_128 = 128,  Game_256 = 256,  Game_512 = 512,  Game_1024 = 1024,  Game_2048 = 2048,
};  //打印所得的数组
void Print()
{  system("cls");  cout << "*****************  2048 控 制 台 版  ******************" << endl;  cout << "*****************  By Tanzf (Intern) ******************" << endl << endl;  for (int i = 0; i < ROW; ++i)  {  cout << "---------------------------------"<< endl;  for (int j = 0; j < COL; ++j)  {  if (game[i][j] == 0)  {cout <<"|    \t";}  else   {  cout <<"|  " << game[i][j] << "\t";  }  }  cout << "|" << endl;  }  cout << "---------------------------------"<< endl;
}  bool CreateNumber()
{  int x = -1;  int y = -1;  int times = 0;  int maxTimes = ROW * COL;int whitch = rand() % 3;  do   {  x = rand() % ROW;  y = rand() % COL;  ++times;  } while (game[x][y] != 0 && times <= maxTimes);  //说明格子已经满了  if(times >= maxTimes)  {  return false;  }  else  {  GameNum num;  if(whitch == 0)  {  num = Game_4; }  elsenum = Game_2; game[x][y] = num;  }  return true;
}  void Process(int direction)
{  switch (direction)  {  case UP:  //最上面一行不动  for(int row = 1; row < ROW; ++row)  {  for(int crow = row; crow >= 1; --crow)  {  for(int col = 0; col < COL; ++col)  {  //上一个格子为空  if(game[crow-1][col] == 0)  {  game[crow-1][col] = game[crow][col];  game[crow][col] = 0;  }  else   {  //合并  if(game[crow-1][col] == game[crow][col])  {  game[crow - 1][col] *= 2;  game[crow][col] = 0;  }  }  }  }  }  break;  case DOWN:  //最下面一行不动  for(int row = ROW - 2; row >= 0; --row)  {  for(int crow = row; crow < ROW - 1; ++crow)  {  for(int col = 0; col < COL; ++col)  {  //上一个格子为空  if(game[crow + 1][col] == 0)  {  game[crow + 1][col] = game[crow][col];  game[crow][col] = 0;  }  else   {  //合并  if(game[crow + 1][col] == game[crow][col])  {  game[crow + 1][col] *= 2;  game[crow][col] = 0;  }  }  }  }  }  break;  case LEFT:  //最左边一列不动  for(int  col = 1; col < COL; ++col)  {  for(int ccol = col; ccol >= 1; --ccol)  {  for(int row = 0; row < ROW; ++row)  {  //上一个格子为空  if(game[row][ccol-1] == 0)  {  game[row][ccol - 1] = game[row][ccol];  game[row][ccol] = 0;  }  else   {  //合并  if(game[row][ccol - 1] == game[row][ccol])  {  game[row][ccol - 1] *= 2;  game[row][ccol] = 0;  }  }  }  }  }  break;  case RIGHT:  //最右边一列不动  for(int  col = COL - 2; col >= 0; --col)  {  for(int ccol = col; ccol <= COL - 2; ++ccol)  {  for(int row = 0; row < ROW; ++row)  {  //上一个格子为空  if(game[row][ccol + 1] == 0)  {  game[row][ccol + 1] = game[row][ccol];  game[row][ccol] = 0;  }  else   {  //合并  if(game[row][ccol + 1] == game[row][ccol])  {  game[row][ccol + 1] *= 2;  game[row][ccol] = 0;  }  }  }  }  }  break;  }  }  //处理输入输出,返回上下左右
int Input()
{  //读取上下左右四个方向键  int upArrow = 0;  int downArrow = 0;  int leftArrow = 0;  int rightArrow = 0;  int direction = 0;  while (true)  {  upArrow = GetAsyncKeyState(VK_UP);  downArrow = GetAsyncKeyState(VK_DOWN);  leftArrow = GetAsyncKeyState(VK_LEFT);  rightArrow = GetAsyncKeyState(VK_RIGHT);  if(upArrow)  {  direction = UP;  break;  }  else if(downArrow)  {  direction = DOWN;  break;  }  else if(leftArrow)  {  direction = LEFT;  break;  }  else if(rightArrow)  {  direction = RIGHT;  break;  }  Sleep(100);  }  return direction;
}  //判断游戏状态
int Judge()
{  //赢得游戏  for(int i = 0; i < ROW; ++i)  {  for(int j = 0; j < COL; ++j)  {  if(game[i][j] == 8192)  {  return GAME_WIN;  break;  }  }  }  //横向检查  for(int i = 0 ; i < ROW; ++i)  {  for(int j = 0; j < COL - 1; ++j)  {  if(!game[i][j] || (game[i][j] == game[i][j+1]))  {  return GAME_CONTINUE;  break;  }  }  }  //纵向检查  for(int j = 0; j< COL; ++j)  {  for(int i = 0; i < ROW -1; ++i)  {  if(!game[i][j] || (game[i][j] == game[i+1][j]))  {  return GAME_CONTINUE;  break;  }  }  }  //不符合上述两种状况,游戏结束  return GAME_OVER;  }  int main()
{  //设置一个随机数种子  srand((unsigned int)time(0));  CreateNumber();  CreateNumber();  Print();  int direction = 0;  int gameState = -1;  while(true)  {  direction = Input();  gameState = Judge();  if(direction && gameState == GAME_CONTINUE)  {  Process(direction);  CreateNumber();  Print();  Sleep(100);  }  else if(gameState == GAME_WIN)  {  Print();  cout << "You Win!" << endl;  break;  }  else if(gameState == GAME_OVER)  {  Print();  cout <<"You lose!" << endl;  break;  }  }  return 0;
}

C++ 2048 编程 小游戏相关推荐

  1. python能做什么游戏-有趣又好玩的9个Python编程小游戏、简直太棒了

    打开搜狗搜索APP,查看更多精彩资讯 学习编程对大多数人来说是枯燥而无聊,大家有时候往往会觉得精神崩溃,提不起学习的兴趣,因此从入门到放弃,面临这种困境该怎么办呢? 这时候就有一些大牛设计出用游戏来学 ...

  2. 搭建2048网页小游戏

    本文已发表于本人博客 哔哔哔哔-搭建2048网页小游戏 玩羊了个羊玩腻的话,可以试试2048 前言 仓库地址 https://github.com/gst-be/2048 本站演示站点 https:/ ...

  3. python小游戏合集-9个Python编程小游戏,有趣又好玩,简直太棒了

    前言 学习编程对大多数人来说是枯燥而无聊,大家有时候往往会觉得精神崩溃,提不起学习的兴趣,因此从入门到放弃(笑哭),面临这种困境该怎么办呢?这时候就有一些大牛设计出用游戏来学习编程知识点,所以,这世界 ...

  4. python小游戏代码200行左右,python编程小游戏代码

    大家好,本文将围绕python小游戏代码200行左右展开说明,小游戏程序代码python是一个很多人都想弄明白的事情,想搞清楚python编程小游戏代码需要先了解以下几个事情. 1.python简单小 ...

  5. python简单游戏程序设计_有趣又好玩的9个Python编程小游戏、简直太棒了

    打开搜狗搜索APP,查看更多精彩资讯 学习编程对大多数人来说是枯燥而无聊,大家有时候往往会觉得精神崩溃,提不起学习的兴趣,因此从入门到放弃,面临这种困境该怎么办呢? 这时候就有一些大牛设计出用游戏来学 ...

  6. 9个Python编程小游戏,有趣又好玩,简直太棒了

    前言 学习编程对大多数人来说是枯燥而无聊,大家有时候往往会觉得精神崩溃,提不起学习的兴趣,因此从入门到放弃(笑哭),面临这种困境该怎么办呢?这时候就有一些大牛设计出用游戏来学习编程知识点,所以,这世界 ...

  7. CSS小游戏2048—简单小游戏编程有手就行~会玩?你会写吗?

    简单实现2048小游戏 想实现2048游戏书写代码时可以分为三个步骤 一.HTML部分 先书写HTML把游戏结构搭建出来 <!DOCTYPE html> <html lang=&qu ...

  8. python编程小游戏-python编程游戏有哪些

    python编程游戏有哪些?下面给大家介绍几款由Python开发的游戏: 1.Github上面有个项目Free Python Games,里面集合了不少的Python开发的小游戏,能玩,也适合新手用来 ...

  9. python编程小游戏-python趣味入门——写几个常玩的游戏

    文档介绍 利用python写"猜数字","猜词语","谁是卧底"这三个游戏,从而快速掌握python编程的入门知识,包括python语法/列 ...

最新文章

  1. WPF窗口长时间无人操作鼠标自动隐藏
  2. Chapter10:观察者模式
  3. [Erlang-0011][OTP] External Term Format
  4. vi测试仪维修成功率高吗?_电工电路板检测维修无图电路板的技巧
  5. oracle10g_vista_,Vista系统 安装Oracle10g 不成功?
  6. 兼容IE和FF的JS HTMLEncode和HTMLDecode的完整实例[转]
  7. VS2017 网站打包发布生成的文件中包含.pdb文件,解决办法
  8. 23万字 前端HTML与CSS学习笔记总结篇(超详细)
  9. 团队管理22-团队文化
  10. ASM和AAM的一些代码资源
  11. OpenWrt路由开启DDNS+端口转发进行外网访问
  12. re.search与re.findall的区别
  13. 【虹科】人工智能和工业相机助力瓶盖质量控制
  14. 关于ubuntu使用鼠标延迟问题
  15. 带你认识什么是一级指针、二级指针、三级指针
  16. 你遇到过启动电脑以后系统桌面无法显示吗
  17. 微信发明者自曝 专利已秘密转让腾讯
  18. 通过Zerotier访问局域网所有设备
  19. 百看不如一练,55个Java练手项目(附源码+视频教程),全都在这里了
  20. 高效解决PPA软件源卡顿出错的问题(ppa.launchpad.net)

热门文章

  1. 彻底弄懂Webpack中的Loader机制
  2. Python爬虫实战,requests+re模块,Python实现爬取豆瓣电影《魔女2》影评
  3. Ubuntu图形界面卡住
  4. 伸缩式网线如何缩回去
  5. 【数据结构】图的详细分析(全)
  6. 生日必去卡油的19个地方!!!
  7. PhoneGap是什么?
  8. Kubernetes Service的headless类型
  9. 什么是对象池?有什么用?
  10. Spring的三种事务控制