您的位置:首页 > 编程语言 > C语言/C++

c语言-2048

2015-10-06 21:54 351 查看
/*2048*/
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>

//全局变量
int x[4][4]={0};
int score=0;
int can_move;

int empty()
{
int i,j;
int n=0;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(x[i][j]==0)
n++;
}
}
return n;
}

int check()
{
int i,j;
int a,b;
if(empty() == 0)
{
a=b=0;
for(i=0;i<4;i++)
{
for(j=0;j<3;j++)
{
if(x[i][j]==x[i][j+1])
a=1;
}
}
for(j=0;j<4;j++)
{
for(i=0;i<3;i++)
{
if(x[i][j]==x[i+1][j])
b=1;
}
}
if(a==0 && b==0)
return 0;
else
return 1;
}
else
return 1;
}

int win()
{
int i,j;
int a=0;
if(check())
{
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(x[i][j]==2048)
a=1;
}
}
}
return a;
}

void add()
{
int i,j;
int n=0;
if(empty() > 0)
{
while(n<16)
{
i=rand()%4;
j=rand()%4;
if(x[i][j] == 0)
{
if(rand()%100 < 80)
{
x[i][j]=2;
}
else
{
x[i][j]=4;
}
break;
}
n++;
}
}
}

void move_up()
{
int i,j,k;
can_move=0;
for(j=0;j<4;j++)
{
for(i=0;i<4;i++)
{
if(x[i][j] == 0)
{
for(k=i+1;k<4;k++)
{
if(x[k][j] != 0)
{
x[i][j]=x[k][j];
x[k][j]=0;
can_move=1;
break;
}
}
}
}

for(i=0;i<3;i++)
{
if(x[i][j] == x[i+1][j] && x[i][j] != 0)
{
x[i][j] *= 2;
x[i+1][j]=0;
can_move=1;
score += x[i][j];
}
}

for(i=0;i<4;i++)
{
if(x[i][j] == 0)
{
for(k=i+1;k<4;k++)
{
if(x[k][j] != 0)
{
x[i][j]=x[k][j];
x[k][j]=0;
break;
}
}
}
}
}
if(can_move == 1)
{
add();
}
}

void move_down()
{
int i,j,k;
can_move=0;
for(j=0;j<4;j++)
{
for(i=3;i>=0;i--)
{
if(x[i][j] == 0)
{
for(k=i-1;k>=0;k--)
{
if(x[k][j] != 0)
{
x[i][j]=x[k][j];
x[k][j]=0;
can_move=1;
break;
}
}
}
}

for(i=3;i>0;i--)
{
if(x[i][j] == x[i-1][j] && x[i][j] != 0)
{
x[i][j] *= 2;
x[i-1][j]=0;
can_move=1;
score += x[i][j];
}
}

for(i=3;i>=0;i--)
{
if(x[i][j] == 0)
{
for(k=i-1;k>=0;k--)
{
if(x[k][j] != 0)
{
x[i][j]=x[k][j];
x[k][j]=0;
break;
}
}
}
}
}
if(can_move == 1)
{
add();
}

}

void move_left()
{
int i,j,k;
can_move=0;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(x[i][j] == 0)
{
for(k=j+1;k<4;k++)
{
if(x[i][k] != 0)
{
x[i][j]=x[i][k];
x[i][k]=0;
can_move=1;
break;
}
}
}
}

for(j=0;j<3;j++)
{
if(x[i][j] == x[i][j+1] && x[i][j] != 0)
{
x[i][j] *= 2;
x[i][j+1]=0;
can_move=1;
score += x[i][j];
}
}

for(j=0;j<3;j++)
{
if(x[i][j] == 0)
{
for(k=j+1;k<4;k++)
{
if(x[i][k] != 0)
{
x[i][j]=x[i][k];
x[i][k]=0;
break;
}
}
}
}
}
if(can_move == 1)
{
add();
}
}

void move_right()
{
int i,j,k;
can_move=0;
for(i=0;i<4;i++)
{
for(j=3;j>=0;j--)
{
if(x[i][j] == 0)
{
for(k=j-1;k>=0;k--)
{
if(x[i][k] != 0)
{
x[i][j]=x[i][k];
x[i][k]=0;
can_move=1;
break;
}
}
}
}

for(j=3;j>0;j--)
{
if(x[i][j] == x[i][j-1] && x[i][j] != 0)
{
x[i][j] *= 2;
x[i][j-1]=0;
can_move=1;
score += x[i][j];
}
}

for(j=3;j>=0;j--)
{
if(x[i][j] == 0)
{
for(k=j-1;k>=0;k--)
{
if(x[i][k] != 0)
{
x[i][j]=x[i][k];
x[i][k]=0;
break;
}
}
}
}
}
if(can_move == 1)
{
add();
}
}

void out()
{
int i,j;
system("cls");
for(i=0;i<10;i++)
{
if(i==0)printf("┏━━┳━━┳━━┳━━┓\n┃    ┃    ┃    ┃    ┃\n┃");
else if(i==8)printf("┗━━┻━━┻━━┻━━┛\n");
else if(i==9)printf(" SCORE:%d\n",score);
else if(i%2==0)printf("┣━━╋━━╋━━╋━━┫\n┃    ┃    ┃    ┃    ┃\n┃");
else
{
for(j=0;j<4;j++)
{
if(x[i/2][j]!=0)printf("%4d",x[i/2][j]); else printf("    ");
printf("┃");
}
printf("\n");
}

}
if(win())
{printf("You are win!");}
if(!check())
{printf("Game over!");}
}

int main()
{

unsigned char key;
add();
add();
out();
while(1)
{
key = getch();
switch(key)
{
case 'w': move_up();       break;
case 'a': move_left();     break;
case 's': move_down();     break;
case 'd': move_right();    break;
}
out();
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: