-
Notifications
You must be signed in to change notification settings - Fork 0
Description
//it is running in cmd.
include<stdio.h>
include
include<stdlib.h>
include <time.h>
int main()
{
void run(int a[8][8], int score);
int a[8][8] = { 0 };
int k, i, j;
srand((unsigned)time(NULL));
int score = 0;
printf(" 2 0 4 8~\n ");
printf(" 操作方法\n ");
printf("w是向上移动 \n ");
printf("a是向左移动 \n ");
printf("s是向下移动 \n ");
printf("d是向右移动\n");
for (k = 1; k <= 3; k++)
{
i = rand() % 4 + 1;
j = rand() % 4 + 1;
a[i][j] = 2;
}
for (i = 1; i <= 4; i++)
{
for (j = 1; j <= 4; j++)
{
printf("%6d", a[i][j]);
printf(" ");
}
printf("\n");
}
run(a, score);
return 0;
}
//主要过程//
void run(int a[8][8], int score)
{
void up(int a[8][8], int score);
void down(int a[8][8], int score);
void right(int a[8][8], int score);
void left(int a[8][8], int score);
void newnum(int a[8][8]);
int pass(int a[8][8]);
char in;
scanf_s("%c", &in);
if (int(in) == 97) //输入方向//
{
left(a, score);
newnum(a);
}
else if (int(in) == 100)
{
right(a, score);
newnum(a);
}
else if (int(in) == 115)
{
down(a, score);
newnum(a);
}
else if (int(in) == 119)
{
up(a, score);
newnum(a);
}
if (pass(a) == 1)
{
run(a, in);
}
else
{
printf("game over");
printf("score is %d", score);
scanf_s("%s");
}
}
//向上走//
void up(int a[8][8], int score)
{
int i, j, fre = 0;
for (i = 1; i <= 4; i++)
{
for (j = 4; j > 1; j--)
if (a[j][i] == a[j - 1][i] || a[j - 1][i] == 0)
{
int m = 0;
if (a[j - 1][i] == a[j][i] != 0)
{
m = a[j][i];
score += m;
}
a[j - 1][i] += a[j][i];
a[j][i] = 0;
}
if (++fre % 3 != 0) //能否直接等于0?//
--i;
}
}
//向下走//
void down(int a[8][8], int score)
{
int i, j, fre = 0;
for (i = 1; i <= 4; i++)
{
for (j = 1; j < 4; j++)
if (a[j][i] == a[j + 1][i] || a[j + 1][i] == 0)
{
int m = 0;
if (a[j + 1][i] == a[j][i] != 0)
{
m = a[j][i];
score += m;
}
a[j + 1][i] += a[j][i];
a[j][i] = 0;
}
if (++fre % 3 != 0) //能否直接等于0?//
--i;
}
}
//向左走//
void left(int a[8][8], int score)
{
int i, j, fre = 0;
for (j = 1; j <= 4; j++)
{
for (i = 4; i > 1; i--)
if (a[j][i] == a[j][i - 1] || a[j][i - 1] == 0)
{
int m = 0;
if (a[j][i] == a[j][i - 1] != 0)
{
m = a[j][i];
score += m;
}
a[j][i - 1] += a[j][i];
a[j][i] = 0;
}
if (++fre % 3 != 0) //能否直接等于0?//
--j;
}
}
//向右走
void right(int a[8][8], int score)
{
int i, j, fre = 0;
for (j = 1; j <= 4; j++)
{
for (i = 1; i <4; i++)
if (a[j][i] == a[j][i + 1] || a[j][i + 1] == 0)
{
int m = 0;
if (a[j][i] == a[j][i + 1] != 0)
{
m = a[j][i];
score += m;
}
a[j][i + 1] += a[j][i];
a[j][i] = 0;
}
if (++fre % 3 != 0) //能否直接等于0?//
--j;
}
}
//产生新的数字//
void newnum(int a[8][8])
{
int i, j, t = 0, k, q = 0;
srand((unsigned)time(NULL));
for (j = 1; j <= 4; j++)
for (i = 1; i <= 4; i++) //是否所有数都非0//
if (a[j][i] != 0)
t += 1;
if (t == 16)
return;
for (k = 1; k < 2; k++)
{
i = rand() % 4 + 1;
j = rand() % 4 + 1;
if (a[i][j] != 0)
--k;
else
a[i][j] = 2;
}
for (i = 1; i <= 4; i++)
{
for (j = 1; j <= 4; j++)
{
printf("%6d", a[i][j]);
printf(" ");
}
printf("\n");
}
}
//判断游戏是否结束//
int pass(int a[8][8])
{
int i, j, t = 0, h;
for (j = 1; j <= 4; j++)
for (i = 1; i <= 4; i++)
{
if ((a[i][j] != a[i + 1][j]) && (a[i][j] != a[i - 1][j]) &&
(a[i][j] != a[i][j + 1]) && (a[i][j] != a[i][j - 1]))
t++;
}
if (t == 16)
h = 0;
else
h = 1;
return h;
}