自创c++小游戏--2048

学术版

```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


| 下一页