#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;
}