如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
实验一:游戏地图的创建与显示一、实验目的学习VC++下游戏地图的创建与显示二、实验仪器电脑VirturalStudio6.0三、实验原理及过程菱形地图通常前一个坐标轴为X坐标,后一个坐标轴为Y坐标当X坐标值增大时,对应的菱形水平位置右移n*菱形小地图长度/2,竖直位置下移n*菱形小地图高度/2当Y坐标值增大时,对应的菱形水平位置左移n*菱形小地图长度/2,竖直位置下移n*菱形小地图高度/2菱形地图算法实现intMapDraw(HDChdc){inti,j;intlim=MAXSCREENX/TILEWIDE;//所需绘制地图的范围for(i=-lim;i<lim;i++){for(j=-lim;j<lim;j++){intsx=MAXSCREENX/2-(TILEWIDE/2)+(i*TILEWIDE/2)-(j*TILEWIDE/2);intsy=MAXSCREENY/2-(TILEHIGH/2)+(i*TILEHIGH/2)+(j*TILEHIGH/2);if((sx<MAXSCREENX)&&(sy<MAXSCREENY)&&(sx+TILEWIDE>0)&&(sy+TILEHIGH>0)&&(playerx+i<100&&playerx+i>=0)&&(playery+j<100&&playery+j>=0)){//边界判断TransparentBlt(hdcMem,sx,sy,TILEWIDE,TILEHIGH,hdcTiles[Data[playerx+i][playery+j]],0,0,TILEWIDE,TILEHIGH,RGB(0,255,0));//贴图}}}BitBlt(hdc,0,0,MAXSCREENX,MAXSCREENY,hdcMem,0,0,SRCCOPY);//画到窗口return0;}描述菱形地图显示的算法原理加载地图:for(inti=0;i<4;i++){_tcscpy(szName,TEXT("MAP"));_itot(i,tempChar,10);_tcscat(szName,tempChar);hdcTiles[i]=CreateCompatibleDC(hdc);hBitmapTiles[i]=LoadBitmap(hInstance,szName);SelectObject(hdcTiles[i],hBitmapTiles[i]);}其中文件夹中有4张地图图片,运用for循环语句分别把四张地图MAP0,MAP1,MAP2,MAP3加载进来。在窗口铺满地图:for(intyi=0;yi<SIZE;yi++){for(intxi=0;xi<SIZE;xi++){Data[yi][xi]=rand()%4;}}运用for循环语句,通过x和y的坐标进行在窗口中绘图,直至绘满整个窗口。描述程序实现时的思路包括对每个调用的API进行详细说明程序实现的思路:设置变量MAXSCREENX和MAXSCREENY为窗口的宽和高,TILEWIDE和TILEHIGH为菱形地图的宽和高,Data[100][100]为地图数据数组。创建变量hdcTiles[4]对应的内存设备中,存储着4个不同的矩形小地图,地图4个角用纯绿色填充,再通过消息回调函数LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam)中的WM_CREATE读取地图文件,然后再执行InitMap,在地图的每一个格子随机添上贴图,在读取文件之后执行WM_PAINT,即可以在地图上画出附上图片,在输出图像时,使用MapDraw(hdc)中的TransparentBlt()函数将绿色作为透明关键色,即裁去4个角,从而实现菱形图形效果。所调用的API的详细说明:1.全局变量:变量MAXSCREENX和MAXSCREENY为窗口的宽和高,TILEWIDE和TILEHIGH为菱形地图的宽和高,创建变量hdcTiles[4]对应的内存设备中,存储着4个不同的矩形小地图。2.消息回调函数LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam)中的WM_CREATE读取地图文件,该函数是先将文件中的图形文件读取到入口函数WINMAIN的参数hInstance句柄中,然后将消息反馈到消息函数WndProc中,执行caseWM_CREAT