Skip to content

2048.cpp #1

@firebrain7

Description

@firebrain7

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions