```cpp
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<ctime>
using namespace std;
int x[4+10][4+10];
char c[11+10];
int up( ){
int i,j,k,s=0;
for(i=1;i<5;i++)
for(j=1;j<5;j++)
if(x[i][j]!=0)
for(k=i-1;k>0;k--){
if(x[k][j]==0){
x[k][j]=x[k+1][j];
x[k+1][j]=0;
}
else if(x[k][j]==x[k+1][j]){
x[k][j]*=2;
s+=x[k][j];
x[k+1][j]=0;
}
else
break;
}
return s;
}
int down( ){
int i,j,k,s=0;
for(i=4;i>0;i--)
for(j=1;j<5;j++)
if(x[i][j]!=0)
for(k=i+1;k<5;k++){
if(x[k][j]==0){
x[k][j]=x[k-1][j];
x[k-1][j]=0;
}
else if(x[k][j]==x[k-1][j]){
x[k][j]*=2;
s+=x[k][j];
x[k-1][j]=0;
}
else
break;
}
return s;
}
int left( ){
int i,j,k,s=0;
for(i=1;i<5;i++)
for(j=1;j<5;j++)
if(x[i][j]!=0)
for(k=j-1;k>0;k--){
if(x[i][k]==0){
x[i][k]=x[i][k+1];
x[i][k+1]=0;
}
else if(x[i][k]==x[i][k+1]){
x[i][k]*=2;
s+=x[i][k];
x[i][k+1]=0;
}
else
break;
}
return s;
}
int right( ){
int i,j,k,s=0;
for(i=1;i<5;i++)
for(j=4;j>0;j--)
if(x[i][j]!=0)
for(k=j+1;k<5;k++){
if(x[i][k]==0){
x[i][k]=x[i][k-1];
x[i][k-1]=0;
}
else if(x[i][k]==x[i][k-1]){
x[i][k]*=2;
s+=x[i][k];
x[i][k-1]=0;
}
else
break;
}
return s;
}
void ran(int s){
printf("Write Your Name Are There\n");
gets(c);
freopen("C:\\Documents and Settings\\Administrator\\桌面\\2048\\2048ranking.txt","r",stdin);
int i,j,k,sco[10+10]={0};
char str[10+10][100+10]={0},nam[10+10][100+10]={0};
for(i=1;i<11;i++){
gets(str[i]);
sscanf(str[i],"%*s:%s:%d",nam[i],sco[i]);
}
fclose(stdin);
for(i=10;i>0;i--){
if(s<=sco[i]){
if(i==10){
printf("Sorry,You Doesn\'t Have Ranking!");
getchar( );
return;
}
else{
for(j=10;j>i+1;j--){
for(k=0;k<strlen(nam[j-1]);k++)
nam[j][k]=nam[j-1][k];
for(k=strlen(nam[j-1]);k<strlen(nam[j]);k++)
nam[j][k]=0;
sco[j]=sco[j-1];
}
sco[i+1]=s;
printf("You Are No.%d!",i+1);
for(j=0;j<strlen(c);j++)
nam[i+1][j]=c[j];
for(j=strlen(c);j<strlen(nam[i+1]);j++)
nam[i+1][j]=0;
freopen("C:\\Documents and Settings\\Administrator\\桌面\\2048\\2048ranking.txt","w",stdout);
for(j=1;j<11;j++)
printf("No.%d:%s:%d",j,nam[j],sco[j]);
fclose(stdout);
getchar( );
return;
}
}
}
for(j=10;j>1;j--){
for(k=0;k<strlen(nam[j-1]);k++)
nam[j][k]=nam[j-1][k];
for(k=strlen(nam[j-1]);k<strlen(nam[j]);k++)
nam[j][k]=0;
sco[j]=sco[j-1];
}
sco[1]=s;
printf("You Are No.1!");
gets(nam[1]);
for(j=0;j<strlen(c);j++)
nam[1][j]=c[j];
for(j=strlen(c);j<strlen(nam[1]);j++)
nam[1][j]=0;
freopen("C:\\Documents and Settings\\Administrator\\桌面\\2048\\2048ranking.txt","w",stdout);
for(j=1;j<11;j++)
printf("No.%d:%s:%d\n",j,nam[j],sco[j]);
fclose(stdout);
getchar( );
return;
}
int main( ){
srand((unsigned)time(NULL));
int i,j,n,m,s=0,w=4,v;
bool p,q,u,d,l,r;
n=rand( )%4+1;
m=rand( )%4+1;
x[n][m]=(rand( )%2)*2+2;
while(1){
n=rand( )%4+1;
m=rand( )%4+1;
if(x[n][m]==0){
x[n][m]=(rand( )%2)*2+2;
break;
}
}
for(i=1;i<5;i++){
for(j=1;j<5;j++)
printf("%d ",x[i][j]);
putchar('\n');
}
while(1){
u=false;
d=false;
l=false;
r=false;
for(i=1;i<5;i++)
for(j=1;j<5;j++)
if(x[i][j]!=0){
if((!u) && i>1 && (x[i-1][j]==0 || x[i-1][j]==x[i][j]))
u=true;
if((!d) && i<4 && (x[i+1][j]==0 || x[i+1][j]==x[i][j]))
d=true;
if((!l) && j>1 && (x[i][j-1]==0 || x[i][j-1]==x[i][j]))
l=true;
if((!r) && j<4 && (x[i][j+1]==0 || x[i][j+1]==x[i][j]))
r=true;
}
if(!(u || d || l || r)){
printf("Game Over!\nThe Score is %d\nDo You See The Ranking?\n",s);
gets(c);
if(c[0]=='y' || c[0]=='Y')
ran(s);
return 0;
}
gets(c);
if((c[0]=='w' && u) || (c[0]=='s' && d) || (c[0]=='a' && l) || (c[0]=='d' && r)){
if(c[0]=='w' && u)
s+=up( );
else if(c[0]=='s' && d)
s+=down( );
else if(c[0]=='a' && l)
s+=left( );
else if(c[0]=='d' && r)
s+=right( );
while(1){
n=rand( )%4+1;
m=rand( )%4+1;
if(x[n][m]==0){
x[n][m]=(rand( )%2)*2+2;
break;
}
}
for(i=1;i<5;i++){
for(j=1;j<5;j++)
printf("%4d ",x[i][j]);
putchar('\n');
}
printf("The Score is %d\n",s);
}
else if(c[0]=='g' || c[0]=='G'){
printf("Game Over!\nThe Score is %d\nDo You See The Ranking?\n",s);
gets(c);
if(c[0]=='y' || c[0]=='Y')
ran(s);
return 0;
}
}
return 0;
}
```
by lzr20040310 @ 2016-10-06 20:10:32
对于这款游戏有任何问题都可以私信我或在本帖@我
如果有P党想要Pas版的……你也按上一行的做吧,我尽量帮忙
by lzr20040310 @ 2016-10-06 20:12:24
http://www.ztjy-sp.com/space-home-view-hot.html
by 安好 @ 2016-10-06 20:14:16
太感谢了!!
by nuclear @ 2016-10-06 20:14:55
挺有趣,谢谢,但是源代码我不怎么能看得懂,或许是我太弱了=\_=
by wh_ZH @ 2016-10-06 20:20:03
建议楼主在
```cpp
while(1){
n=rand( )%4+1;
m=rand( )%4+1;
if(x[n][m]==0){
x[n][m]=(rand( )%2)*2+2;
break;
}
}
```
之后(也就是输出前)
加上system ("cls");清屏
(鄙人的愚见,个人认为屏幕上太多的矩阵看的难过)
by wh_ZH @ 2016-10-06 20:32:02
感谢不过一次好像可以合并多次2 2 2 2 一下子就变成8了 @ lzr20040310
by 冯豫川555 @ 2016-10-06 20:32:33
@ lzr20040310
建议楼主在
```cpp
while(1){
n=rand( )%4+1;
m=rand( )%4+1;
if(x[n][m]==0){
x[n][m]=(rand( )%2)*2+2;
break;
}
}
```
之后(也就是输出前) 加上system ("cls");清屏
(鄙人的愚见,个人认为屏幕上太多的矩阵看的难过)
by wh_ZH @ 2016-10-06 20:32:36
嗯,这很2048,不错不错,兹瓷下!
by winmt @ 2016-10-06 21:19:22
@[lzr20040310](/space/show?uid=18182) 我的东西你一点也没参照?
by CraZYali @ 2016-10-06 21:51:01