c语言源代码.docx
- 文档编号:30712634
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:10
- 大小:15.75KB
c语言源代码.docx
《c语言源代码.docx》由会员分享,可在线阅读,更多相关《c语言源代码.docx(10页珍藏版)》请在冰豆网上搜索。
c语言源代码
#include
#include
#include
#include
#include
#defineN4
intgrid[N][N]={0};
intD=0;
intM=2048;
//显示
voidshowdata()
{
inti,j;
system("CLS");
for(i=0;i for(i=0;i { printf("%5c",'+'); for(j=0;j if(grid[i][j]! =0) printf("%5d",grid[i][j]); else printf("%5c",''); printf("%5c",'+'); printf("\n\n"); } for(i=0;i } //判断是否有空位 intisNotFull() { inti,j,k=0; for(i=0;i for(j=0;j if(grid[i][j]==0) { k=1;break; } returnk; } //随机数字 voidrandomdata() { intr,c,x; x=rand()%2*2+2; do { r=rand()%N; c=rand()%N; }while(grid[r][c]! =0); grid[r][c]=x; } //获取最大值 intgetMax() { inti,j,max=0; for(i=0;i for(j=0;j if(max returnmax; } //移动相加,返回1表示有移动,返回0表示无移动 intadd() { inti,j,cr,w,F=0; if(D==1)//top { for(i=1;i for(j=0;j { cr=i;w=0;//0: 未合并1: 合并过 while(cr>=1&&grid[cr][j]! =0) { if(grid[cr-1][j]==0)//上方有空位,上移 { grid[cr-1][j]=grid[cr][j]; grid[cr][j]=0;F=1; } else//上方无空位 { if(grid[cr-1][j]==grid[cr][j]&&w==0)//相等,相加 { grid[cr-1][j]=grid[cr-1][j]*2; grid[cr][j]=0;w=1;F=1; } else//不等 { break; } } cr--; } } } if(D==2)//down { for(i=N-2;i>=0;i--) for(j=0;j { cr=i;w=0; while(cr<=N-2&&grid[cr][j]! =0) { if(grid[cr+1][j]==0)//下方有空位,下移 { grid[cr+1][j]=grid[cr][j]; grid[cr][j]=0;F=1; } else//下方无空位 { if(grid[cr+1][j]==grid[cr][j]&&w==0)//相等,相加 { grid[cr+1][j]=grid[cr+1][j]*2; grid[cr][j]=0;w=1;F=1; } else//不等 { break; } } cr++; } } } if(D==3)//left { for(i=0;i for(j=1;j { cr=j;w=0; while(cr>=1&&grid[i][cr]! =0) { if(grid[i][cr-1]==0)//左方有空位,左移 { grid[i][cr-1]=grid[i][cr]; grid[i][cr]=0;F=1; } else//左方无空位 { if(grid[i][cr-1]==grid[i][cr]&&w==0)//相等,相加 { grid[i][cr-1]=grid[i][cr-1]*2; grid[i][cr]=0;w=1;F=1; } else//不等 { break; } } cr--; } } } if(D==4)//right { for(i=0;i for(j=N-2;j>=0;j--) { cr=j;w=0; while(cr<=N-2&&grid[i][cr]! =0) { if(grid[i][cr+1]==0)//右方有空位,右移 { grid[i][cr+1]=grid[i][cr]; grid[i][cr]=0;F=1; } else//右方无空位 { if(grid[i][cr+1]==grid[i][cr]&&w==0)//相等,相加 { grid[i][cr+1]=grid[i][cr+1]*2; grid[i][cr]=0;w=1;F=1; } else//不等 { break; } } cr++; } } } returnF; } intgetKey() { intk=0; charc=getch(); if(c<0)//c<0为特殊键,还要再读下一个字节判断为何键 { c=getch(); if(c==72){D=1;k=1;}//top if(c==80){D=2;k=1;}//down if(c==75){D=3;k=1;}//left if(c==77){D=4;k=1;}//right } returnk; } //在数字全满下,检查是否还有合并的可能,有则返回1; intcanAdd() { inti,j,k,F=0; for(i=0;i for(j=0;j if(grid[i][j]==grid[i][j+1])F=1; for(j=0;j for(i=0;i if(grid[i][j]==grid[i+1][j])F=1; returnF; } main() { charc;intmov,key,isf; printf("请输入游戏要拼凑的最大数字,例如32,64,128,...,2048: "); scanf("%d",&M); //初次状态 srand(time(NULL)); randomdata();//随机第一个数 randomdata();//随机第二个数 showdata(); do { key=getKey();//读取操作键 if(key==0)continue;//不是上下左右键,重新读取键盘 mov=add();//根据方向键合并相加,返回1表示有移动 if(mov==1)showdata();//显示 if(getMax()==M)//判断是否胜利 { printf("你赢了! \n");break; } isf=isNotFull();//返回1表示还有空位 if(isf==1&&mov==1)//有空位且有移动再随机 { randomdata();//再随机 showdata();//显示 } if(isf==0)//没有空间则游戏结束 { if(canAdd()==1) printf("请选择另一个方向滑动! \n"); elsebreak; } }while (1); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 源代码
![提示](https://static.bdocx.com/images/bang_tan.gif)