C语言如何实现2048游戏
这篇文章主要介绍了C语言如何实现2048游戏,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
实现的效果如图
先来讲一下我的思路吧
1.首先肯定是要一个4X4的二维数组来存放数字存放0、2、4……2.游戏开始与过程中需要随机出现2或者4,所以需要调用time.h这个库3.游戏开始时,假如当获取字符为‘w'则先用循环判定这个数字的下方有无和它相等的数字。如无则跳过,如有相加。然后在判定是否可以向上移动
下面是我的代码
(我本来是还要写一个撤回的函数 可惜写出来却不能运行。求大神指教)
#include//#include #include #include #include int_back[4][4]={}; voiddraw();//绘图 voidplay(); voidinit();//初始化数字 void_up();//向上移动 void_down();//向下移动 void_left();//像左移动 void_right();//向右移动 voidadd_number();//增加一个数字 inta[4][4]={0}; intemtpy; //空格的数量 voiddraw() { inti,j; for(i=0;i<4;i++) { for(j=0;j<4;j++) { _back[i][j]=a[i][j]; PIMAGEimg; img=newimage(); switch(a[i][j]) { case0: { getimage(img,"2048\\0.png"); putimage(j*180,i*180,img); break; } case2: { getimage(img,"2048\\2.png"); putimage(j*180,i*180,img); break; } case4: { getimage(img,"2048\\4.png"); putimage(j*180,i*180,img); break; } case8: { getimage(img,"2048\\8.png"); putimage(j*180,i*180,img); break; } case16: { getimage(img,"2048\\16.png"); putimage(j*180,i*180,img); break; } case32: { getimage(img,"2048\\32.png"); putimage(j*180,i*180,img); break; } case64: { getimage(img,"2048\\64.png"); putimage(j*180,i*180,img); break; } case128: { getimage(img,"2048\\128.png"); putimage(j*180,i*180,img); break; } case256: { getimage(img,"2048\\256.png"); putimage(j*180,i*180,img); break; } case512: { getimage(img,"2048\\512.png"); putimage(j*180,i*180,img); break; } case1024: { getimage(img,"2048\\1024.png"); putimage(j*180,i*180,img); break; } case2048: { getimage(img,"2048\\2048.png"); putimage(j*180,i*180,img); break; } } } } } voidinit() { intx,y; srand(time(0)); x=rand()%4; y=rand()%4; a[x][y]=2; emtpy=15; } void_up() { intx,y,i; for(y=0;y<4;++y){//从上向下合并相同的方块 for(x=0;x<4;++x){ if(a[x][y]==0) ; else{ for(i=x+1;i<4;++i){ if(a[i][y]==0) ; elseif(a[x][y]==a[i][y]){ a[x][y]+=a[i][y]; a[i][y]=0; ++emtpy; x=i; break; } else{ break; } } } } } for(y=0;y<4;++y)//向上移动箱子 for(x=0;x<4;++x) { if(a[x][y]==0) ; else{ for(i=x;(i>0)&&(a[i-1][y]==0);--i){ a[i-1][y]=a[i][y]; a[i][y]=0; } } } } void_down(){ intx,y,i; for(y=0;y<4;++y)//向下合并相同的方格 for(x=3;x>=0;--x){ if(a[x][y]==0) ; else{ for(i=x-1;i>=0;--i){ if(a[i][y]==0) ; elseif(a[x][y]==a[i][y]){ a[x][y]+=a[i][y]; a[i][y]=0; ++emtpy; x=i; break; } else break; } } } for(y=0;y<4;++y)//向下移动方格 for(x=3;x>=0;--x){ if(a[x][y]==0) ; else{ for(i=x;(i<3)&&(a[i+1][y]==0);++i){ a[i+1][y]=a[i][y]; a[i][y]=0; } } } } void_left() { intx,y,i; for(x=0;x<4;++x)//向左合并相同的方格 for(y=0;y<4;++y){ if(a[x][y]==0) ; else{ for(i=y+1;i<4;++i){ if(a[x][i]==0) ; elseif(a[x][y]==a[x][i]){ a[x][y]+=a[x][i]; a[x][i]=0; emtpy++; y=i; break; } else break; } } } for(x=0;x<4;++x)//向左移动方格 for(y=0;y<4;++y){ if(a[x][y]==0) ; else{ for(i=y;(i>0)&&(a[x][i-1]==0);--i){ a[x][i-1]=a[x][i]; a[x][i]=0; } } } } void_right(){ intx,y,i; for(x=0;x<4;++x)//向右合并相同的方格 for(y=3;y>=0;--y){ if(a[x][y]==0) ; else{ for(i=y-1;i>=0;--i){ if(a[x][i]==0) ; elseif(a[x][y]==a[x][i]){ a[x][y]+=a[x][i]; a[x][i]=0; ++emtpy; y=i; break; } else break; } } } for(x=0;x<4;++x)//向右移动方格 for(y=3;y>=0;--y){ if(a[x][y]==0) ; else{ for(i=y;(i<3)&&(a[x][i+1]==0);++i){ a[x][i+1]=a[x][i]; a[x][i]=0; } } } } voidadd_number() { srand(time(0)); if(emtpy>0) { intx,y,temp; do { x=rand()%4; y=rand()%4; }while(a[x][y]!=0); temp=rand(); inti=temp%2; if(i==1) { a[x][y]=2; emtpy--; } else { a[x][y]=4; emtpy--; } } } voidplay() { charc=getch(); switch(c) { case'w': case'W': { _up(); add_number(); draw(); break; } case's': case'S': { _down(); add_number(); draw(); break; } case'a': case'A': { _left(); add_number(); draw(); break; }case'd': case'D': { _right(); add_number(); draw(); break; } case'q': case'Q': { for(inti=0;i<4;i++) { for(intj=0;j<4;j++) { a[i][j]=_back[i][j]; draw(); } } } } } intmain() { init(); inti,j; initgraph(724,724);//初始化 PIMAGEimg; img=newimage(); getimage(img,"2048/背景.jpg"); putimage(0,0,img); draw(); for(;is_run();delay_fps(30)) { for(inti=0;i<4;i++) { for(intj=0;j<4;j++) { _back[i][j]=a[i][j]; } } play(); } }
感谢你能够认真阅读完这篇文章,希望小编分享的“C语言如何实现2048游戏”这篇文章对大家有帮助,同时也希望大家多多支持恰卡编程网,关注恰卡编程网行业资讯频道,更多相关知识等着你来学习!
推荐阅读
windows安装touble c
近期有些网友想要了解windows?安装touble的相关情况,小编通过整理给您分享一下。为什么现在还需要TurboC?在当今V...
C/C++如何获取CAN信号
C/C++如何获取CAN信号本篇内容主要讲解“C/C++如何获取C...
C语言怎么通过二分查找实现猜数字游戏
C语言怎么通过二分查找实现猜数字游戏本文小编为大家详细介绍“C语言...
C语言数据结构中的线性表怎么使用
C语言数据结构中的线性表怎么使用这篇文章主要介绍“C语言数据结构中...
C语言的数据结构怎么理解
C语言的数据结构怎么理解这篇文章主要介绍了C语言的数据结构怎么理解...
C语言与C++中内存管理的方法
C语言与C++中内存管理的方法这篇文章主要介绍了C语言与C++中内...
C语言链式队列与循环队列怎么实现
C语言链式队列与循环队列怎么实现这篇文章主要介绍了C语言链式队列与...
C语言冒泡排序怎么实现
C语言冒泡排序怎么实现这篇文章主要介绍了C语言冒泡排序怎么实现的相...
C语言如何实现斐波那契数列
C语言如何实现斐波那契数列这篇文章主要介绍了C语言如何实现斐波那契...
C语言如何实现无符号数和有符号数间的运算
C语言如何实现无符号数和有符号数间的运算本篇内容主要讲解“C语言如...