2048c语言源代码推荐文档.docx

上传人:scccc 文档编号:12603242 上传时间:2021-12-04 格式:DOCX 页数:7 大小:16.16KB
返回 下载 相关 举报
2048c语言源代码推荐文档.docx_第1页
第1页 / 共7页
2048c语言源代码推荐文档.docx_第2页
第2页 / 共7页
2048c语言源代码推荐文档.docx_第3页
第3页 / 共7页
2048c语言源代码推荐文档.docx_第4页
第4页 / 共7页
2048c语言源代码推荐文档.docx_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《2048c语言源代码推荐文档.docx》由会员分享,可在线阅读,更多相关《2048c语言源代码推荐文档.docx(7页珍藏版)》请在三一文库上搜索。

1、#i nclude <stdlib.h>#in clude<time.h>#i nclude <stdio.h>#in elude <coni o.h>#in clude<wi ndows.h>#defi ne N 4in t gridNN=0;int D=0;int M=2048;/显示void showdata()int i,j;system("CLS");for(i=0;i<N+2;i+)pri ntf("%5c",'+');pri ntf("nn"

2、;);for(i=0;i<N;i+)prin tf("%5c",'+');for(j=0;j<N;j+)if(gridij!=O)prin tf("%5d",gridij);elseprin tf("%5c",'');prin tf("%5c",'+');prin tf("nn");for(i=0;i<N+2;i+)pri ntf("%5c",'+');pri ntf("n"

3、);/判断是否有空位in t isNotFull()int i,j,k=O;for(i=0;i<N;i+)for(j=0;j<N;j+)if(gridij=0)k=1; break;return k;II随机数字void ran domdata()int r,c, x;x = ran d()%2*2+2;dor = ran d()%N;c = ran d()%N;while(gridrc!=O); gridrc=x;获取最大值in t getMax()int i,j,max=0;for(i=0;i<N;i+)for(j=0;j<N;j+)if(max<gridij

4、) max=gridij;return ma x;II移动相加,返回1表示有移动,返回0表示无移动int add()int i,j,cr,w,F=0;if(D=1)IItopfor(i=1;i<N;i+)for(j=0;j<N;j+)cr=i;w=0;II0:未合并 1:合并过while(cr>=1 && gridcrj!=0 )if(gridcr-1j=0)II 上方有空位,上移 gridcr-1j=gridcrj; gridcrj=0;F=1;elseII上 方无空位等,相加 if(gridcr-1j=gridcrj&& w=0)II gr

5、idcr-1j=gridcr-1j*2; gridcrj=0; w=1; F=1;elseII不 等break;cr-;if(D=2)/dow nfor(i=N-2;i>=0;i-)for(j=0;j<N;j+)cr=i;w=0;while(cr<=N-2 && gridcrj!=0 )if(gridcr+1j=0) 下方有空位,下移 gridcr+1j=gridcrj; gridcrj=0;F=1;else/下方无空位等,相加if(gridcr+1j=gridcrj && w=0)/ gridcr+1j=gridcr+1j*2; gridcr

6、j=O; w=1;F=1;else/不等 break; cr+;if(D=3)/leftfor(i=0;i<N;i+)for(j=1;j<N;j+)cr=j;w=0;while(cr>=1 && gridicr!=O ) if(gridicr-1=0) 左方有空位,左移 gridicr-1=gridicr; gridicr=0;F=1;else/左方无空位等,相加if(gridicr-1=gridicr && w=0) gridicr-1=gridicr-1*2; gridicr=0;w=1;F=1;else/不 等break;cr-;if(D

7、=4)/rightfor(i=0;i<N;i+)for(j=N-2;j>=0;j-)cr=j;w=0;while(cr<=N-2 && gridicr!=O )if(gridicr+1=0) 右方有空位,右移 gridicr+1=gridicr; gridicr=0;F=1;else/右方无空位等,相加if(gridicr+1=gridicr && w=0)/ gridicr+1=gridicr+1*2; gridicr=0; w=1; F=1;else/不 等break;cr+;return F;in t getKey()int k=0;ch

8、ar c=getch();if(c<0) c<0为特殊键,还要再读下一个字节判断为何键c=getch();if(c=72) D=1; k=1;/topif(c=80) D=2; k=1;/dow nif(c=75) D=3; k=1;/leftif(c=77) D=4; k=1;/rightreturn k;在数字全满下,检查是否还有合并的可能,有则返回1;int can Add()int i,j,k,F=O;for(i=0;i<N;i+)for(j=0;j<N-1;j+)if(gridij=gridij+1) F=1;for(j=0;j<N;j+)for(i=0

9、;i<N-1;i+)if(gridij=gridi+1j) F=1;return F;main ()char c;i nt mov,key,isf;,2048:");printf("请输入游戏要拼凑的最大数字,例如32,64, 128,sca nf("%d",&M);/初次状态sran d(time(NULL);ran domdata();/ 随机第一个数ran domdata();随机第二个数showdata();dokey=getKey();读取操作键 if(key=O) continue; /不是上下左右键,重新读取键盘 mov=add();根据方向键合并相加,返回1表示有移动 if(mov=1) showdata(); 显示if(getMax()=M)判断是否胜利printf("你赢了! n ”);break;isf=isNotFull();返回1表示还有空位if(isf=1 && mov=1)/ 有空位且有移动再随机ran domdata();/ 再随机showdata();/ 显示if(isf=0)/没有空间则游戏结束if(can Add()=1)printf("请选择另一个方向滑动!n");else break;while(1);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1