亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? map.cpp

?? diablo圖形引擎例子
?? CPP
字號(hào):
// Map.cpp: implementation of the Map class.
//
//////////////////////////////////////////////////////////////////////

#include <assert.h>
#include <stdlib.h>
#include "Map.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

Map::Map()
{
	m_lpMapBlock=NULL;
	m_lpMapFileHeader=NULL;
	m_lpImageList=NULL;
}

Map::~Map()
{
	if(m_lpMapBlock) delete m_lpMapBlock;
	if (m_lpMapFileHeader) delete m_lpMapFileHeader;
	if (m_lpImageList) delete m_lpImageList;
}

void Map::ConvertPosition(int & x, int & y)
{
	int xo,yo,x1,y1;

	xo=x+m_lpCharactar->m_ixOffset-320+16-8;
	yo=y+m_lpCharactar->m_iyOffset-240+32;

	x1 = yo + (xo/2);
	y1 = yo - (xo/2);

	if(x1 < 0) x1 -= 31; 
	if(y1 < 0) y1 -= 31;

	x = x1 /32;
	y = y1 /32;
}

bool Map::LoadMapFile(char *lpszFilename)
{
	FILE *fp=fopen(lpszFilename,"rb");
	assert(fp);

	m_lpMapFileHeader=(MAPFILEHEADER *)malloc(sizeof(MAPFILEHEADER));

	fread(m_lpMapFileHeader,sizeof(MAPFILEHEADER),1,fp);

	int width=m_lpMapFileHeader->mWidth;
	int height=m_lpMapFileHeader->mHeight;

	m_lpMapBlock=(MAPBLOCK* )malloc(width*height*sizeof(MAPBLOCK));
	
	fread(m_lpMapBlock,sizeof(MAPBLOCK),width*height,fp);
	
	fclose(fp);
	return true;

}

bool Map::LoadMapCGL(char *lpszFilename,bool bColorMode)
{
	if (m_lpImageList!=NULL) delete  m_lpImageList;
	
	m_lpImageList=new ImageList;
	
    return m_lpImageList->Create(lpszFilename,bColorMode,4);
}




void Map::DrawMapLayer(int x, int y, WORD *lpBitmap,long lPitch)
{

	///delete this
	m_lpCharactar->Loop();


	//draw floor

	int mapx,mapy,xo,yo,xa,ya,mx,my,screenx,screeny;
	int i,j,tx,ty,length;

    
	//轉(zhuǎn)換坐標(biāo)
    mapx = x / 32;
    xo   = x % 32;
    mapy = y / 32;
    yo   = y % 32;
    xa   = xo - yo;
    ya   = xo/2 + yo/2;

    mx = mapx;
    my = mapy;
    screeny = -ya-32;
	
    
	// 垂直畫屏幕循環(huán)
    for (i=0;i<33;i++)	// 畫40 列圖塊
	{
      tx = mx;
      ty = my;
      screenx =  -xa-64;
	  length = 12;		// number of tiles to be drawn horizontally (even lines)
      if(i&1)			// if line is odd :
	  {
        length++;		// one more tile to be drawn horizontally (so 25)
        screenx-=32;	// pre-step 16 pixels back left
      }
	  
	  // This loop takes care of the horizontal screen draw which is done first
      for (j=0;j<length;j++) // it is repeated (length) time, one for each tile in the line
	  {
         // This loop takes care of all the tiles (num) in this tile coordinates
	
		   if(tx>=0 && tx<m_lpMapFileHeader->mWidth && ty>=0 && ty<m_lpMapFileHeader->mHeight)
			{
					int index= m_lpMapBlock[tx+ty*m_lpMapFileHeader->mWidth].ElementIndex[0];
					if (index>0 && index<m_lpImageList->m_iTotalFrame) 
					{			
							m_lpImageList->Draw(index,screenx,screeny,lpBitmap,lPitch);
					}
			}
 
		screenx+=64; // move 64 pixels right for next tile
	    tx+=1;ty-=1;
     }
     screeny+=16; // move 16 pixels down for next line
     if(i & 1) // if line is odd
	  {
        mx+=1;
      } 
	  else		// if line is even
	  {
        my+=1;
         
      }
  } 



		//////////////////

	//轉(zhuǎn)換坐標(biāo)
    mapx = x / 32;
    xo   = x % 32;
    mapy = y / 32;
    yo   = y % 32;
    xa   = xo - yo;
    ya   = xo/2 + yo/2;

    mx = mapx;
    my = mapy;
    screeny = -ya-32;
	
    
	// 垂直畫屏幕循環(huán)
    for (i=0;i<33;i++)	// 畫40 列圖塊
	{
      tx = mx;
      ty = my;
      screenx =  -xa-64;
	  length = 12;		// number of tiles to be drawn horizontally (even lines)
      if(i&1)			// if line is odd :
	  {
        length++;		// one more tile to be drawn horizontally (so 25)
        screenx-=32;	// pre-step 16 pixels back left
      }
	  
	  // This loop takes care of the horizontal screen draw which is done first
      for (j=0;j<length;j++) // it is repeated (length) time, one for each tile in the line
	  {
         // This loop takes care of all the tiles (num) in this tile coordinates
	
		   if(tx>=0 && tx<m_lpMapFileHeader->mWidth && ty>=0 && ty<m_lpMapFileHeader->mHeight)
			{
			   for (int k=1;k<3;k++)
				{
					int index= m_lpMapBlock[tx+ty*m_lpMapFileHeader->mWidth].ElementIndex[k];
					if (index>0 && index<m_lpImageList->m_iTotalFrame) 
					{			
				
												
				/*	 int xx,yy,mmx,mmy;
					 xx=m_lpCharactar->m_ix;
					 yy=m_lpCharactar->m_iy;
					 mmx=xx/32;
					 mmy=yy/32;

  					 if (tx>=mmx && ty >=mmy)
								m_lpImageList->DrawAlpha750(index,screenx,screeny-m_lpImageList->GetHeight(index)+32+m_lpMapBlock[tx+ty*m_lpMapFileHeader->mWidth].ElementHeight[k],lpBitmap,lPitch);
					 else 
					 	      	m_lpImageList->Draw(index,screenx,screeny-m_lpImageList->GetHeight(index)+32+m_lpMapBlock[tx+ty*m_lpMapFileHeader->mWidth].ElementHeight[k],lpBitmap,lPitch);
								*/
						m_lpImageList->DrawCenter(index,screenx,screeny+32+m_lpMapBlock[tx+ty*m_lpMapFileHeader->mWidth].ElementHeight[k],lpBitmap,lPitch);
					}
				}
			   m_lpCharactar->Draw(screenx,screeny,tx,ty,lpBitmap,lPitch);
			}
		screenx+=64; // move 64 pixels right for next tile
        tx+=1;ty-=1;
     }
     screeny+=16; // move 16 pixels down for next line
     if(i & 1) // if line is odd
	  {
        mx+=1;
      } 
	  else		// if line is even
	  {
        my+=1;
         
      }
  } 



 // SaveAllPos(x,y);

 // SortY();

 // DrawIt(lpBitmap,lPitch);

}


void Map::CreateCharactar(bool bColorMode)
{
	m_lpCharactar=new Charactar;
	m_lpCharactar->SetupMapInfo(m_lpMapBlock,m_lpMapFileHeader->mWidth,m_lpMapFileHeader->mHeight);
	m_lpCharactar->Load("charactar.ini",bColorMode);
	
}

bool Map::GetMoveStatus(int x, int y)
{
	if (x<0 || x>=m_lpMapFileHeader->mWidth || y<0 || y>=m_lpMapFileHeader->mHeight) return false;

	int ofs=x+y*m_lpMapFileHeader->mWidth;

	if (m_lpMapBlock[ofs].bMoveAble==false || m_lpMapBlock[ofs].bHaveAnother==true) return false;
	else return true;
}


void Map::SaveAllPos(int x,int y)
{
	
	WORD i,j;
	int mapx,mapy,mx,my,tx,ty,xo,yo,xa,ya,screenx,screeny,length;

	int countz=0;

	mapx = x / 32;
    xo   = x % 32;
    mapy = y / 32;
    yo   = y % 32;
    xa   = xo - yo;
    ya   = xo/2 + yo/2;

    mx = mapx;
    my = mapy;
    screeny = -ya-32;
	
    
	// 垂直畫屏幕循環(huán)
    for (i=0;i<33;i++)	// 畫40 列圖塊
	{
      tx = mx;
      ty = my;
      screenx =  -xa-64;
	  length = 12;		// number of tiles to be drawn horizontally (even lines)
      if(i&1)			// if line is odd :
	  {
        length++;		// one more tile to be drawn horizontally (so 25)
        screenx-=32;	// pre-step 16 pixels back left
      }
	  
	  // This loop takes care of the horizontal screen draw which is done first
      for (j=0;j<length;j++) // it is repeated (length) time, one for each tile in the line
	  {
         // This loop takes care of all the tiles (num) in this tile coordinates
	
		   if(tx>=0 && tx<m_lpMapFileHeader->mWidth && ty>=0 && ty<m_lpMapFileHeader->mHeight)
			{
			   for (int k=0;k<2;k++)
				{
					int index= m_lpMapBlock[tx+ty*m_lpMapFileHeader->mWidth].ElementIndex[k];
					if (index>0 && index<m_lpImageList->m_iTotalFrame) 
					{			
				
						ZBuffer[countz].x=screenx;
						ZBuffer[countz].y=screeny;
						ZBuffer[countz].tx=tx;
						ZBuffer[countz].ty=ty;
						ZBuffer[countz].index=index;
						ZBuffer[countz].k=k;
						ZBuffer[countz].type=0;
						countz++;
						m_ztt=countz;
					//	m_lpImageList->Draw(index,screenx,screeny-m_lpImageList->GetHeight(index)+32+m_lpMapBlock[tx+ty*m_lpMapFileHeader->mWidth].ElementHeight[k],lpBitmap,lPitch);
					}
				}
		//	   m_lpCharactar->Draw(screenx,screeny,tx,ty,lpBitmap,lPitch);

			   int cx,cy,cmapx,cmapy,cxo,cyo,cxa,cya;

			   cx=m_lpCharactar->m_ix;cy=m_lpCharactar->m_iy;
			   cmapx = cx / 32;
			   cxo   = cx % 32;
			   cmapy = cy / 32;
			   cyo   = cy % 32;
			   cxa   = cxo - cyo;
			   cya   = cxo/2 + cyo/2;

			   if (tx==cmapx && ty==cmapy)
			   {
					ZBuffer[countz].x=screenx;
					ZBuffer[countz].y=screeny;
					ZBuffer[countz].tx=tx;
					ZBuffer[countz].ty=ty;
					//ZBuffer[countz].index=index;
					ZBuffer[countz].xa=cxa;
					ZBuffer[countz].ya=cya;
					//ZBuffer[countz].k=k;
					ZBuffer[countz].type=1;
					countz++;
					m_ztt=countz;
			   }			   

			}
		screenx+=64; // move 64 pixels right for next tile
        tx+=1;ty-=1;
     }
     screeny+=16; // move 16 pixels down for next line
     if(i & 1) // if line is odd
	  {
        mx+=1;
      } 
	  else		// if line is even
	  {
        my+=1;
         
      }
  } 

}

void Map::DrawIt(WORD *lpBitmap, long lPitch)
{	
	int screenx,screeny,index,k,tx,ty;

	for(int i=0;i<m_ztt;i++)
	{
		if (ZBuffer[i].type==0)
		{
			screenx=ZBuffer[i].x;
			screeny=ZBuffer[i].y;
			index=ZBuffer[i].index;
			k=ZBuffer[i].k;
			tx=ZBuffer[i].tx;
			ty=ZBuffer[i].ty;

			m_lpImageList->Draw(index,screenx,screeny-m_lpImageList->GetHeight(index)+32+m_lpMapBlock[tx+ty*m_lpMapFileHeader->mWidth].ElementHeight[k],lpBitmap,lPitch);
		}
		else 
		{
			int xa,ya;
			screenx=ZBuffer[i].x;
			screeny=ZBuffer[i].y;
			index=ZBuffer[i].index;
			k=ZBuffer[i].k;
			tx=ZBuffer[i].tx;
			ty=ZBuffer[i].ty;
			xa=ZBuffer[i].xa;
			ya=ZBuffer[i].ya;
			
			m_lpCharactar->DrawiT(screenx+xa,screeny+ya,lpBitmap,lPitch);

		}

	}

}

void Map::SortY()
{
	for (int i=0;i<m_ztt-1;i++)
	 for(int j=i+1;j<m_ztt;j++)
	 {
		if (ZBuffer[i].y>=ZBuffer[j].y)
		{
			int temp;
			temp=ZBuffer[i].y;
			ZBuffer[i].y=ZBuffer[j].y;
			ZBuffer[j].y=temp;
		}
	 }
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
看电视剧不卡顿的网站| 国产欧美精品一区| 亚洲成人手机在线| 欧美日韩mp4| 日韩成人精品在线| 日韩精品资源二区在线| 国产麻豆一精品一av一免费 | 国内精品久久久久影院薰衣草 | 国产亚洲欧美日韩日本| 国产精品一卡二| 国产欧美中文在线| 97久久人人超碰| 亚洲在线中文字幕| 日韩欧美一二区| 国产盗摄一区二区| 亚洲人精品午夜| 在线不卡的av| 国产成人精品三级| 亚洲精品高清视频在线观看| 91麻豆精品国产91久久久久| 国产精品99久久久久| 亚洲女同ⅹxx女同tv| 91精品国产福利| 国产精品一区一区| 亚洲一区在线视频观看| 制服丝袜国产精品| 成人教育av在线| 亚洲国产wwwccc36天堂| 久久亚洲精品小早川怜子| 91色婷婷久久久久合中文| 天天综合色天天综合| 国产亚洲一区二区三区| 在线视频国内一区二区| 九一久久久久久| 亚洲日本青草视频在线怡红院| 69堂亚洲精品首页| 成人va在线观看| 免费成人在线观看视频| 亚洲免费伊人电影| 久久影院视频免费| 欧美日韩国产bt| av综合在线播放| 激情综合色播激情啊| 艳妇臀荡乳欲伦亚洲一区| 久久久久久久久岛国免费| 色婷婷久久一区二区三区麻豆| 激情都市一区二区| 午夜久久电影网| 亚洲欧美视频一区| 中文字幕乱码一区二区免费| 欧美一区午夜精品| 欧美制服丝袜第一页| 粉嫩久久99精品久久久久久夜| 日日欢夜夜爽一区| 亚洲精品中文在线| 国产欧美一区二区精品性| 91精品国产全国免费观看| 色妞www精品视频| 成人小视频在线| 国产一区二区三区四| 日本欧洲一区二区| 亚洲午夜久久久久| 一区二区三区四区五区视频在线观看| 久久亚洲综合色一区二区三区| 3atv在线一区二区三区| 欧美日韩精品三区| 在线视频欧美区| 在线免费精品视频| 色婷婷综合久久久中文字幕| 波多野洁衣一区| www.视频一区| 99精品视频一区二区三区| 成人av免费在线观看| 国产成人av福利| 国产高清在线观看免费不卡| 国产原创一区二区三区| 国产一区二区女| 国产精品一区一区| 国产成人精品综合在线观看| 国产精品一级黄| 国产成人综合视频| 国产成人av一区二区三区在线观看| 国产精品一二三| 高清国产午夜精品久久久久久| 国产成人高清视频| voyeur盗摄精品| 91在线视频播放| 欧美亚洲一区二区在线观看| 欧美午夜一区二区三区免费大片| 欧美性极品少妇| 在线电影院国产精品| 日韩欧美亚洲另类制服综合在线| 久久综合色婷婷| 国产精品日韩精品欧美在线| 亚洲人一二三区| 亚洲电影欧美电影有声小说| 秋霞国产午夜精品免费视频| 韩国女主播成人在线| 成人白浆超碰人人人人| 色婷婷久久综合| 欧美一区二区视频在线观看2020| 精品国产百合女同互慰| 国产亲近乱来精品视频| 亚洲黄色免费网站| 日韩**一区毛片| 国产成人免费视频| 在线视频欧美精品| 日韩精品中文字幕在线一区| 欧美激情一区不卡| 一区2区3区在线看| 奇米777欧美一区二区| 国产99精品国产| 欧美日韩国产在线播放网站| 99精品热视频| 日韩你懂的在线观看| 国产精品久久毛片a| 亚洲午夜在线电影| 国产美女一区二区| 欧美四级电影网| 久久久影视传媒| 亚洲1区2区3区视频| 懂色一区二区三区免费观看| 日本电影欧美片| 2021国产精品久久精品| 一区二区成人在线视频| 韩国精品久久久| 欧美日韩精品免费| 国产精品久久久久毛片软件| 日韩影视精彩在线| 99精品视频一区二区| 亚洲精品一区二区三区影院| 亚洲综合免费观看高清在线观看| 国产精品中文欧美| 欧美日韩国产另类一区| 日本一区二区三区电影| 日本强好片久久久久久aaa| 99久久久久久99| 久久人人97超碰com| 午夜成人免费视频| 91蜜桃免费观看视频| 久久伊人蜜桃av一区二区| 天涯成人国产亚洲精品一区av| 91在线视频在线| 国产女人水真多18毛片18精品视频| 日韩高清在线不卡| 欧美综合亚洲图片综合区| 日本一区二区久久| 国产一区二区三区| 日韩精品一区二区三区中文精品| 亚洲图片欧美综合| 色悠久久久久综合欧美99| 国产精品拍天天在线| 国产一区二区三区在线观看精品| 91精品一区二区三区久久久久久| 一区二区三区欧美视频| av电影在线不卡| 国产精品理伦片| 成人性生交大片免费看中文| 久久精品一区二区三区不卡| 美女视频免费一区| 日韩一区二区视频在线观看| 亚洲18女电影在线观看| 欧美色综合天天久久综合精品| 最好看的中文字幕久久| 91亚洲精华国产精华精华液| 国产精品国产三级国产普通话三级| 国产成人免费视频精品含羞草妖精| 久久综合九色综合97婷婷女人| 美女一区二区久久| 欧美成人vps| 韩国成人在线视频| 久久久美女毛片| 国产成人免费在线观看| 国产精品无圣光一区二区| 国产成人精品影视| 国产精品白丝在线| 色哟哟一区二区在线观看| 一区二区三区四区在线播放| 欧美日韩一区二区电影| 日韩精品1区2区3区| 欧美大片在线观看| 国内精品免费在线观看| 国产欧美日韩精品在线| 不卡大黄网站免费看| 亚洲伦理在线免费看| 欧美精品久久99| 久久91精品国产91久久小草| 久久蜜桃av一区二区天堂| 北岛玲一区二区三区四区 | 国产精品理论片在线观看| 99re成人精品视频| 午夜亚洲福利老司机| 日韩午夜在线观看视频| 国产福利一区二区三区视频在线| 中文字幕一区二区三区视频| 欧美亚洲国产一区二区三区| 美女视频免费一区| 国产精品女同一区二区三区| 欧美色图12p| 国产麻豆成人精品|