#include
#include
#include
#include
#include
#define true 1
#define false 0
void square_frame(int array[4][4]);
void output_array(int array[4][4] , int i);
void rand_array(int array[4][4]);
void moveway(char c , int array[4][4]);
void sum_a(int a[] , int n);
void movezore(int a[] , int n);
void no_huanhang(char c);
int search(int array[4][4]);
void before(void);
static long score = 0;
int main()
{
int a[4][4] = {{0,},} , count = 0 , m;
char c ;
system("color f0");
before();
system("cls");
srand((unsigned)time(NULL));
rand_array(a);
rand_array(a);
printf("SCORE:%ld\n" , score);
printf("当前步数是:%d\n" , count);
square_frame(a);
printf("请输入方向(w a s d):");
while (1)
{
scanf("%c" , &c);
if(c != '\n')
{
moveway(c , a);
system("cls");
count ++ ;
printf("SCORE:%ld\n" , score);
printf("当前步数是:%d\n" , count);
square_frame(a);
printf("请输入方向(w a s d):");
Sleep(500);
system("cls");
rand_array(a);
printf("SCORE:%ld\n" , score);
printf("当前步数是:%d\n" , count);
square_frame(a);
printf("请输入方向(w a s d):");
m = search(a) ;
if(m == 0)
{
break ;
}
}
}
printf("\nGame Over!!!\n你的最后分数为:%ld\n" , score);
system("pause") ;
return 0;
}
void rand_array(int array[4][4])
{
int i , j , k;
do
{
i = rand() % 4 ;
j = rand() % 4 ;
} while (array[i][j] != 0);
k = rand() % 100 + 1 ;
if(k > 90) array[i][j] = 4;
else
array[i][j] = 2 ;
}
void square_frame(int array[4][4])
{
int i = 0 ;
printf("┌╌╌╌╌┬╌╌╌╌┬╌╌╌╌┬╌╌╌╌┐\n");
output_array(array , i++);
printf("├╌╌╌╌┼╌╌╌╌┼╌╌╌╌┼╌╌╌╌┤\n");
output_array(array , i++);
printf("├╌╌╌╌┼╌╌╌╌┼╌╌╌╌┼╌╌╌╌┤\n");
output_array(array , i++);
printf("├╌╌╌╌┼╌╌╌╌┼╌╌╌╌┼╌╌╌╌┤\n");
output_array(array , i++);
printf("└╌╌╌╌┴╌╌╌╌┴╌╌╌╌┴╌╌╌╌┘\n");
}
void output_array(int array[4][4] , int i)
{
int j ;
for(j = 0 ; j < 4; j ++)
{
if(array[i][j] != 0)
{
if(array[i][j] < 100)
printf("╎ %-2d " , array[i][j]);
else if(array[i][j] >= 100)
printf("╎%-4d" , array[i][j]);
}
else
printf("╎ ");
}
printf("╎\n");
}
void moveway(char c , int array[4][4])
{
switch(c)
{
int i , j , k;
int a[4];
case 'w':
for(j = 0; j < 4; j++)
{
a[0] = array[0][j], a[1] = array[1][j], a[2] = array[2][j], a[3] = array[3][j] ;
movezore(a , 4);
sum_a(a , 4) ;
movezore(a , 4);
array[0][j] = a[0], array[1][j] = a[1], array[2][j] = a[2], array[3][j] = a[3] ;
}
break;
case 'a':
for(j = 0; j < 4; j++)
{
a[0] = array[j][0], a[1] = array[j][1], a[2] = array[j][2], a[3] = array[j][3] ;
movezore(a , 4);
sum_a(a , 4) ;
movezore(a , 4);
array[j][0] = a[0], array[j][1] = a[1], array[j][2] = a[2], array[j][3] = a[3] ;
}
break;
case 's':
for(j = 0; j < 4; j++)
{
a[0] = array[3][j], a[1] = array[2][j], a[2] = array[1][j], a[3] = array[0][j] ;
movezore(a , 4);
sum_a(a , 4) ;
movezore(a , 4);
array[3][j] = a[0], array[2][j] = a[1], array[1][j] = a[2], array[0][j] = a[3] ;
}
break;
case 'd':
for(j = 0; j < 4; j++)
{
a[0] = array[j][3], a[1] = array[j][2], a[2] = array[j][1], a[3] = array[j][0] ;
movezore(a , 4);
sum_a(a , 4) ;
movezore(a , 4);
array[j][3] = a[0], array[j][2] = a[1], array[j][1] = a[2], array[j][0] = a[3] ;
}
break;
}
}
void movezore(int a[] , int n)
{
int i , j = -1;
for(i = 0; i < n; i ++ )
{
if(a[i] != 0)
{
++j ;
if(j != i)
{
a[j] = a[i] ;
a[i] = 0 ;
}
}
}
}
void sum_a(int a[] , int n)
{
int i , conditon ;
conditon = true ;
for(i = 0; i < n && conditon; i ++)
{
if(a[i] == a[i + 1] && a[i] != 0)
{
a[i] *= 2 ;
a[i+1] = 0 ;
score += a[i];
conditon = false ;
}
}
}
int search(int array[4][4])
{
int i , j ;
for(i = 0 ; i < 4 ; i ++)
{
for(j = 0; j < 4; j ++)
{
if(array[i][j] == 0)
return 1;
}
}
return 0;
}
void before(void)
{
printf("文字版2048\n");
printf("制作人:小铭\n");
printf("规则:与2048一样,当没有空的方框时游戏结束\n");
printf("游戏马上开始了哦o((>ω< ))o");
Sleep(7000);
}