游戏地图的创建与显示ogre.docxVIP

  • 1
  • 0
  • 约2.94千字
  • 约 6页
  • 2019-11-26 发布于广东
  • 举报
实验一:游戏地图的创建与显示 一、 实验目的 学习VC++下游戏地图的创建与显示 二、 实验仪器 一台电脑、Virtural Studio 6.0 三、 实验原理及过程 先按照【图】菱形地图的排列所示的方式将地图分割并标上二维坐标。 前一个坐标值被称为X坐标,后一个被称为Y坐标。当X坐标值增大n吋,对应的菱形水平位置右 移n*菱形小地图长度/2,竖直位置下移十菱形小地图高度/2。同理,当Y坐标值增大n吋,对应的菱形水 平位置左移十菱形小地图长度/2,竖直位置下移N菱形小地图高度/2。 设置变量MAXSCREENX和MAXSCREENY为窗口的宽和高,T1LEW1DE和TILEHIGH为菱形地 图的宽和高,Data[I00][100]^地图数据数组。创建变量hdcTiles[4]对应的内存设备屮,存储着4个不同的 矩形小地图,地图4个角用纯绿色填充。 0,01.00. 10,20,3 1.2 0,0 1.0 0. 1 0,2 0,3 1.2 菱形地图的排列 在消息回调函数 LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM IParam)中的WM_CREATE读取地图文件,代码为下: case WM_CREATE: hlnstance= ( (LPCREATESTRUCT) IParam)-hlnstance ; hdc=GetDC(hwnd); hdcMem=CreateCompatibleDC(hdc); hBitmapMem=CreateCompetibleBitmep(hdc,1024*2,768*2); SelectObject(hdcMem,hBitmapMem); { for (int i=0; i4;i++){ _tcscpy(szName,TEXT(HmapH)); _itot(i,tempChar^10); _tcscat(szNAme,tempChAr); hdcTiles[i]=CreateCompatibleDC(hdc); hBitmapTiles[i]=LoadBitmap( hlnstance,szName); SelectObject(hdcTiles[i]z hBitmapTiles[i]); } } 工nitMap(); playerx=playery=SIZE/2; break; 其中函数InitMap ()见主要代码。 该机制是先将文件中的图形文件读取到入口函数WINMAIN的参数hlnstance句柄川,然后将消息反馈到 消息函数WndProc中,执行case WM_CREATE语句,将hlnstance中的信息传送到文件句柄hdcTiles中, 这样就实现了文件的读取。然后再执行InitMap,在地图的每一个格子随机添上贴图。 playerx=playery=SIZE/2的意思是将开始的位置定在地图的中心。 在读取文件之后执行WM_PAINT,即可以在地图上画出附上图片。代码如下: case WM_PAINT: hdc = BeginPaint (hwnd, ps) ; GetClientRect (hwnd, rect); MapDraw(hdc); EndPaint (hwnd, ps); return 0 ; 其屮MapDraw(hdc)是建立整个地图的核心,见主要代码。 在输出图像时,使用MapDraw(hdc)屮的TransparentBlt()函数将绿色作为透明关键色,即裁去4个角,从而 实现菱形图形效果。 实现方法为: TransparentBlt(hdcMem,sx,sy,TILEWIDE,TILEHIGH,hdcTiles[Data[playerx+iJlplayery+j]],OATILEWIDE,TIL EHIGH,RGB(0,255,0)) 四、实验结果 实验截图: 五、实验心得(需包括有何不足如何改进) 木实验需掌握创建windows窗口的基本方法,在此基础上菱形地图排列和贴图,得以实现最简单的二维世 界地图,但是在本次实验中所有格子上的贴图都是随机附于的,还没有实现在指定的位置上添加指定的贴 图,要制作一个简单的二维游戏地图还有很多事情要做。而且一般的游戏不仅仅只有一张地图,所以还需 要多张地图的创建和地图之间的转换。 六、主要代码 int InitMap(){ srand( (unsigned)time( NULL ) ); for (int yi=0; yiSIZE; yi++){ for (int xi=0; xiSIZE; xi++){ Data[yi][xi]=rand()%4; } } return 0; } int MapDraw(HDC hdc)

文档评论(0)

1亿VIP精品文档

相关文档