图片资源和图形库可以私聊我。
#include#include #include #include //清屏时用到的头文件 #include //getch函数用到的头文件 #include int i,j; IMAGE img[12];//定义12张图片 int Map[4][4]={0};//绘制表格 int imgIndex[12]={0,2,4,8,16,32,64,128,256,512,1024,2048};//imgIndex表示角码, void loadResource()//定义子函数,加载图片资源, { for(i=0;i<12;i++) { char fileName[20]=""; sprintf(fileName,"%d.bmp",imgIndex[i]);//图片类型为.bmp loadimage(img+i,fileName); } } void drawMap()//子函数,画图, { setbkcolor(RGB(250,215,215));//背景颜色 cleardevice();//清屏 settextcolor(WHITE);//文本颜色 settextstyle(35,0,"隶书");//字号, outtextxy(50,10,"2048游戏");//字体距离 //画表格,表格为4*4的,用for循环 int x,y,k; for(i=0;i<4;i++) { for(j=0;j<4;j++) { x=60*j; y=60*i+40;//,x,y表示长宽 for(k=0;k<12;k++) { if(imgIndex[k]==Map[i][j]) break; } putimage(x,y,img+k);//显示图片函数 } } } int randIntNum()//产声随机数,用到头文件time.h { srand((unsigned int)time(NULL)); for(i=0;i<4;i++) { for(j=0;j<4;j++) { if(Map[i][j]==0) { Map[i][j]=(rand()%3)*2;//产生随机数0,1,2;然后*2,使动一次,随机产生2或4 if(Map[i][j]==0) continue; return 0; } } } return 0; } int moveRight()//向右移动,有两种移动, { int flag=0; for(i=0;i<4;i++)//第一种,例如 2 2 4 4 →0 4 0 8 { for(j=3;j>=0;j--) { int curKey=Map[i][j];//curKey表示当前位置,curKeyNext表示当前位置的下一个 if(curKey!=0) { int k=j-1; while(k>=0) { int curKeyNext=Map[i][k]; if(curKeyNext!=0) { if(curKeyNext==curKey) { flag=1; Map[i][j]+=Map[i][k]; Map[i][k]=0; } k=-1; break; } k--; } } } } for(i=0;i<4;i++)//第二种,例如 0 2 0 8 → 0 0 2 8 { for(j=3;j>0;j--) { int curKey=Map[i][j]; if(curKey==0) { int k=j-1; while(k>=0) { int curKeyNext=Map[i][k]; if(curKeyNext!=0) { flag=1; Map[i][j]=curKeyNext; Map[i][k]=0; k=-1; } k--; } } } } if(flag) return 0; else return 4;//结束标志, } int moveLeft()//上下左和上面类似,不过建议自己动手重新写一遍。 { int flag=0; for(i=0;i<4;i++) { for(j=0;j<4;j++) { int curKey=Map[i][j]; if(curKey!=0) { int k=j+1; while(k<4) { int curKeyNext=Map[i][k]; if(curKeyNext!=0) { if(curKeyNext==curKey) { flag=1; Map[i][j]+=Map[i][k]; Map[i][k]=0; } k=4; break; } k++; } } } } for(i=0;i<4;i++) { for(j=0;j<3;j++) { int curKey=Map[i][j]; if(curKey==0) { int k=j+1; while(k<4) { int curKeyNext=Map[i][k]; if(curKeyNext!=0) { flag=1; Map[i][j]=curKeyNext; Map[i][k]=0; k=4; } k++; } } } } if(flag) return 0; else return 4; } int moveUp()//上 { int flag=0; for(i=0;i<4;i++) { for(j=0;j<4;j++) { int curKey=Map[i][j]; if(curKey!=0) { int k=i+1; while(k<4) { int curKeyNext=Map[k][j]; if(curKeyNext!=0) { if(curKeyNext==curKey) { flag=1; Map[i][j]+=Map[k][j]; Map[k][j]=0; } k=4; break; } k++; } } } } for(i=0;i<3;i++) { for(j=0;j<4;j++) { int curKey=Map[i][j]; if(curKey==0) { int k=i+1; while(k<4) { int curKeyNext=Map[k][j]; if(curKeyNext!=0) { flag=1; Map[i][j]=curKeyNext; Map[k][j]=0; k=4; } k++; } } } } if(flag) return 0; else return 4; } int moveDown()//下 { int flag=0; for(i=3;i>=0;i--) { for(j=0;j<4;j++) { int curKey=Map[i][j]; if(curKey!=0) { int k=i-1; while(k>=0) { int curKeyNext=Map[k][j]; if(curKeyNext!=0) { if(curKeyNext==curKey) { flag=1; Map[i][j]+=Map[k][j]; Map[k][j]=0; } k=-1; break; } k--; } } } } for(i=3;i>0;i--) { for(j=0;j<4;j++) { int curKey=Map[i][j]; if(curKey==0) { int k=i-1; while(k>=0) { int curKeyNext=Map[k][j]; if(curKeyNext!=0) { flag=1; Map[i][j]=curKeyNext; Map[k][j]=0; k=-1; } k--; } } } } if(flag) return 0; else return 4; } //子函数控制按键, void keyDown() { char key=_getch(); switch(key) { case 'w': case 'W': case 72://数字表示电脑小键盘上的箭头 randIntNum(); drawMap();//重新画图 moveUp();//调用方向子函数 break; case 's': case 'S': case 80: randIntNum(); drawMap(); moveDown(); break; case 'a': case 'A': case 75: randIntNum(); drawMap(); moveLeft(); break; case 'd': case 'D': case 77: randIntNum(); drawMap(); moveRight(); break; } } int main() { loadResource();//调用加载资源 initgraph(60*4,60*4+50);//创建窗口 //IMAGE background;//声明图片变量 //loadimage(&background,"class.jpg",800,400);//加载图片,用loadimage //putimage(0,0,img+0);//显示图片,用putimage drawMap(); while(1) { keyDown(); drawMap();//调用函数 } getchar();//防止闪屏 closegraph();//关闭窗口 system("pause"); return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)