这篇文章主要讲解了“C语言怎么实现2048游戏”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言怎么实现2048游戏”吧!
代码如下:
#include<stdio.h>#include<stdlib.h>#include<time.h>#include<curses.h>/*头文件*/int i,j,a[4][4]={};/*二维数组a[4][4]全为0*/void kaishi()/*生成开始界面*/{ printf("Welcome to 2048\n"); printf(" 1).新游戏\n"); printf(" 2).帮助\n");}int defen(int a[][4])/*计分函数*/{ int max=a[0][0]; int static sum=0; for(i=0;i<4;i++) for(j=0;j<4;j++) if(a[i][j]>max) max=a[i][j]; sum+=max; return sum;/*以最大数的累加作为得分*/}void jiemian(int a[][4]){ int b[2]={2,4},c[4]={0,1,2,3},sum,n,m; do { srand((int)time(NULL));/*以时间作为随机数种子*/ m=c[rand()%4]; n=c[rand()%4]; /*随机生成坐标*/ if(a[m][n]==0)/*判断是否为空格*/ { a[m][n]=b[rand()%2];/*随机生成2或4*/ break;/*跳出循环*/ } }while(1); printf("%d %d %d\n",m,n,a[m][n]); for(i=0;i<4;i++) { printf("-------------------------\n"); for(j=0;j<4;j++) { if((m==i)&&(n==j)) printf("| %d ",a[m][n]);/*输出随机生成的2或4*/ else { if(a[i][j]>0) printf("| %d ",a[i][j]);/*如果a[i][j]有数字,则输出数字*/ else printf("| ");/*如果a[i][j]无数字则输出空格*/ } } printf("|\n"); } printf("-------------------------\n"); printf(" 得分:%d\n",sum=defen(a));}void hebingup(int a[][4])/*向上合并*/{ int m; for(j=0;j<4;j++) for(i=0;i<3;i++) if(a[i][j]>0)/*若a[i][j]不为0则进行判断,否则直接跳到下一项*/ if(a[i][j]==a[i+1][j]&&a[i][j]!=0)/*判读相邻两项是否相等*/ { a[i][j]=2*a[i][j];/*上面一项变成两倍*/ if(i==2) a[i+1][j]=0; else for(m=i+1;m<3;m++) { a[m][j]=a[m+1][j]; a[m+1][j]=0; } /*将下面的数整体上移,再循环*/ }}void hebingdown(int a[][4])/*向下合并*/{ int m; for(j=0;j<4;j++) for(i=3;i>0;i--) if(a[i][j]>0) if(a[i][j]==a[i-1][j]) { a[i][j]=2*a[i][j]; if(i==1) a[i-1][j]=0; else for(m=i-1;m>0;m--) { a[m][j]=a[m-1][j]; a[m-1][j]=0; } }}void hebingleft(int a[][4])/*向左合并*/{ int m; for(i=0;i<4;i++) for(j=0;j<3;j++) if(a[i][j]>0) if(a[i][j]==a[i][j+1]) { a[i][j]=2*a[i][j]; if(j==2) a[i][j+1]=0; else for(m=j+1;m<3;m++) { a[i][m]=a[i][m+1]; a[i][m+1]=0; } }}void hebingright(int a[][4])/*向右合并*/{ int m; for(i=0;i<4;i++) for(j=3;j>0;j--) if(a[i][j]>0) if(a[i][j]==a[i][j-1]) { a[i][j]=2*a[i][j]; if(j==1) a[i][j-1]=0; else for(m=j-1;m>0;m--) { a[i][m]=a[i][m-1]; a[i][m-1]=0; } }}void yidong(char b){ int x,m; switch(b) { case 'w' : for(j=0;j<4;j++) for(i=1;i<=3;i++) for(x=i,m=i;x>0;x--,m--)/*x为循环次数,m替代i使循环继续*/ { if(a[m-1][j]>0) break;/*若上一位非0,则跳到下一位*/ else { a[m-1][j]=a[m][j]; a[m][j]=0; } } hebingup(a); break; case 's' : for(j=0;j<4;j++) for(i=2;i>=0;i--) for(x=3-i,m=i;x>0;x--,m++) { if(a[m+1][j]>0) break; else { a[m+1][j]=a[m][j]; a[m][j]=0; } } hebingdown(a); break; case 'a' : for(i=0;i<4;i++) for(j=1;j<=3;j++) for(x=j,m=j;x>0;x--,m--) { if(a[i][m-1]>0) break; else { a[i][m-1]=a[i][m]; a[i][m]=0; } } hebingleft(a); break; case 'd' : for(i=0;i<4;i++) for(j=2;j>=0;j--) for(x=3-j,m=j;x>0;x--,m++) { if(a[i][m+1]>0) break; else { a[i][m+1]=a[i][m]; a[i][m]=0; } } hebingright(a); break; }}int main(int argc,char *argv[]){ int flag=1; char c,k; system("stty -icanon");outloop:; kaishi(); k=getchar(); printf("\n"); if(k=='1') { while(flag==1) { jiemian(a); c=getchar(); printf("\n"); yidong(c); for(i=0;i<4;i++) for(j=0;j<4;j++) { if(a[i][j]==0) { flag=1; goto end;/*如果棋盘中存在一个空格,则跳出判断,继续生成随机数*/ } else flag=0; } end:; } } if(k=='2') { do { printf("游戏规则:通过点击<w>,<s>,<a>,<d>键来实现数字的上下左右的移动,使相同的数字相加,每个格子中的数的累加将作为得分,当格子填满且无法移动时,游戏结束。\n"); printf(" 3).返回\n"); k=getchar(); }while(k!=3); goto outloop;/*跳到开始界面*/ } printf(" 游戏结束\n"); return 0;}
感谢各位的阅读,以上就是“C语言怎么实现2048游戏”的内容了,经过本文的学习后,相信大家对C语言怎么实现2048游戏这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。