当前位置: 首页 > 工具软件 > 2048.cpp > 使用案例 >

2048小游戏【c++】

胡元明
2023-12-01
#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;
}

 类似资料: