详细编写2048小游戏

图片资源和图形库可以私聊我。

#include <stdio.h>
#include <stdlib.h>
#include <graphics.h>/*用到graphics,此处没有图形库插件,可能会报错,只需安装插件EasyX插件就行.*/
#include <windows.h>//清屏时用到的头文件
#include <conio.h>//getch函数用到的头文件
#include <time.h>
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;
 } 

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇

)">
下一篇>>