2048小游戏【c++】

#include <iostream>
#include<cstdlib>
#include<time.h> 
using namespace std;

int temp[4][4] = {
  {0,0,0,0},
  {0,0,0,0},
  {0,0,0,0},
  {0,0,0,0}
};
#define ROW 4
#define COL 4

int x = -1, y = -1,countmp=0;
/*打印数据*/
void printftemp()
{
  for (int i = 0; i < ROW; i++)
  {
    for (int j = 0; j < COL; j++)
    {
      if (temp[i][j] != 0)
      {
        countmp++;
      }
      cout << temp[i][j]<<" ";
    }
    cout << endl;
  }
}

void move_right()
{
  for (int i = 0; i < ROW; i++)
  {
    for (int j = (COL - 2); j >= 0; j--)
    {
      if (temp[i][j + 1] == temp[i][j])
      {
        temp[i][j+1] *= 2;
        temp[i][j] = 0;
      }
    }
  }
  for (int i = 0; i < ROW; i++)
  {
    int x = COL - 1, y = COL - 1;
    while (y >= 0)
    {
      if (temp[i][x] != 0)
      {
        x--;
        y--;
      }
      else
      {
        while (y >= 0)
        {
          if (temp[i][y] != 0)
          {
            temp[i][x] = temp[i][y];
            temp[i][y] = 0;
            break;
          }
          y--;
        }
      }
    }
  }
}


void move_left()
{
  for (int i = 0; i < ROW; i++)
  {
    for (int j = 1; j < COL; j++)
    {
      if (temp[i][j - 1] == temp[i][j])
      {
        temp[i][j - 1] *= 2;
        temp[i][j] = 0;
      }
    }
  }
  for (int i = 0; i < ROW; i++)
  {
    int x =0, y =0;
    while (y<COL)
    {
      if (temp[i][x] != 0)
      {
        x++;
        y++;
      }
      else
      {
        while (y<COL)
        {
          if (temp[i][y] != 0)
          {
            temp[i][x] = temp[i][y];
            temp[i][y] = 0;
            break;
          }
          y++;
        }
      }
    }
  }

}

void move_up()
{
  for (int j = 0; j < COL; j++)
  {
    for (int i = 1; i < ROW; i++)
    {
      if (temp[i-1][j]==temp[i][j])
      {
        temp[i - 1][j] *= 2;
        temp[i][j] = 0;
      }
    }
  }
  for (int j = 0; j < COL; j++)
  {
    int x = 0, y = 0;
    while (y < ROW)
    {
      if (temp[x][j] != 0)
      {
        x++;
        y++;
      }
      else
      {
        while (y < ROW)
        {
          if (temp[y][j] != 0)
          {
            temp[x][j] = temp[y][j];
            temp[y][j] = 0;
            break;
          }
          y++;
        }
      }
    }
  }
  
}

void move_down()
{
  for (int j = 0; j < COL; j++)
  {
    for (int i = ROW-2; i>=0; i--)
    {
      if (temp[i + 1][j] == temp[i][j])
      {
        temp[i + 1][j] *= 2;
        temp[i][j] = 0;
      }
    }
  }

  for (int j = 0; j < COL; j++)
  {
    int x = ROW-1, y = ROW - 1;
    while (y>=0)
    {
      if (temp[x][j] != 0)
      {
        x--;
        y--;
      }
      else
      {
        while (y>=0)
        {
          if (temp[y][j] != 0)
          {
            temp[x][j] = temp[y][j];
            temp[y][j] = 0;
            break;
          }
          y--;
        }
      }
    }
  }
}

void move_random()
{
  x = rand() % 4;
  y = rand() % 4;
  while (temp[x][y] != 0) {
    x = rand() % 4;
    y = rand() % 4;
  }
  temp[x][y] = 2;
}
/* 0 上,1  下,2 左,3 右 */
int main()
{
  int input = 0;
  srand((unsigned)time(NULL));
  move_random();
  printftemp();
  cout << endl;
  while (true)
  {
    countmp = 0;
    cout <<"please input:";
    cin >> input;
    switch (input)
    {
    case 0:
      move_up();
      break;
    case 1:
      move_down();
      break;
    case 2:
      move_left();
      break;
    case 3:
      move_right();
      break;
    default:
      break;
    }
    move_random();
    printftemp();
    if (countmp >= 16)
    {
      cout << "game over" << endl;
      break;
    }
  }
  return 0;
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值