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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? map.cpp

?? 泡泡堂單機版(含ASL游戲引擎源碼 泡泡堂單機版(含ASL游戲引擎源碼
?? CPP
字號:
#include "map.h"
#include <algorithm>

CMap::CMap()
: m_pbmGround(NULL)
, m_pbmExplosion(NULL)
{
	ASLFileLoader loader;
	loader.SetDirApp("Pic");
	m_pbmExplosion = new ASLBitmap();
	m_pbmExplosion->LoadBMP(loader.Load("Explosion.bmp"));
	m_pbmExplosion->SetBlock(14, 5);
	m_pbmExplosion->SetColorKey(clFuchsia);
	for (int i = 0; i < ROLE_NUM; ++i)
	{
		m_vRoleSeq[i] = i;
	}
}

CMap::~CMap()
{
	ReleaseMap();
	SAFE_DELETE(m_pbmGround);
	SAFE_DELETE(m_pbmExplosion);
}

CMap& CMap::Instance(void)
{
	static CMap instance;
	return instance;
}

bool Greater(int r1, int r2)
{
	if (ROLE[r1].GetY() != ROLE[r2].GetY())
	{
		return ROLE[r1].GetY() < ROLE[r2].GetY();
	}
	else
	{
		return ROLE[r1].GetOffsetY() < ROLE[r2].GetOffsetY();
	}
}

void CMap::Update(float fDelta)
{
	// 更新活動物體
	for (int i = 0; i < CELL_NUM; ++i)
	{
		if (m_vCell[i].pItem != NULL)
		{
			m_vCell[i].pItem->Update(fDelta);
		}
		if (m_vCell[i].pBlindage != NULL)
		{
			m_vCell[i].pBlindage->Update(fDelta);
		}
	}

	// 對角色繪制順序排序
	std::sort(&m_vRoleSeq[0], &m_vRoleSeq[ROLE_NUM], Greater);

	// 更新爆炸效果
#define EXP m_vCell[i].Explosion

	for (int i = 0; i < CELL_NUM; ++i)
	{
		if (EXP.Status == 1)
		{
			EXP.Timer--;
			if (EXP.Timer == 0)
			{
				EXP.Status++;
			}
		}
		else if (EXP.Status > 1)
		{			
			if (EXP.Dr == drMiddle && EXP.Status >= 12)
			{
				EXP.Status = 0;
			}
			else if (EXP.Status >= 20)
			{
				EXP.Status = 0;
				if (EXP.Gift != 0)
				{
					m_vCell[i].pItem = FACTORY.MakeFixedItem(EXP.Gift);
					m_vCell[i].pItem->SetPosition(i / CELL_X_ALL, i % CELL_X_ALL);
				}
			}
			else
			{
				EXP.Status++;
			}
		}
	}

#undef EXP
}

void CMap::Draw(void) const
{
#define CELL m_vCell[i * CELL_X_ALL + j]

	// 畫地面
	DrawGround();

	for (int i = 1; i <= CELL_Y; ++i)
	{
		// 畫普通物體
		for (int j = CELL_X; j >= 1; --j)
		{
			if (CELL.Type >= itFirm && CELL.Type <= itBox && CELL.Blind == btNone)
			{
				if (CELL.pItem != NULL)
				{
					CELL.pItem->Draw();
				}
			}
			else if (CELL.Blind >= btBush)
			{
				ASSERT(CELL.pBlindage != NULL);
				CELL.pBlindage->Draw();
			}
		}

		// 畫寶物和泡泡
		for (int j = 1; j <= CELL_X; ++j)
		{
			if (CELL.Type == itGift || CELL.Type == itPopo && CELL.Blind == btNone)
			{
				ASSERT(CELL.pItem != NULL);
				CELL.pItem->Draw();
			}
		}

		// 爆炸
		for (int j = 1; j <= CELL_X; ++j)
		{
			if (MAP[i][j].Explosion.Status > 1 && MAP[i][j].Blind != btTent)
			{
				DrawExplosion(i, j);
			}
		}

		// 畫主角
		for (int j = 0; j < ROLE_NUM; ++j)
		{
			int nX = ROLE[m_vRoleSeq[j]].GetX();
			int nY = ROLE[m_vRoleSeq[j]].GetY();
			if (nY == i && m_vCell[i * CELL_X_ALL + nX].Blind == btNone)
			{
				ROLE[m_vRoleSeq[j]].Draw();
			}
		}
	}

#undef CELL
}

void CMap::LoadMap(ASLFile *pFile)
{
	ASLFileLoader loader;
	ASLIni ini;
	int nMapType;
	char szBuffer[80];
	Cell *pCell = m_vCell;

	ASSERT(pFile != NULL);

	// 加載地圖原型
	pFile->Read(&nMapType, sizeof(int));
	sprintf(szBuffer, "MapType%d.ini", nMapType);
	loader.SetDirApp("Ini");
	FACTORY.LoadMapPrototype(loader.Load(szBuffer));
	
	// 加載地面圖片
	ini.Load(loader.Load(szBuffer));
	ini.SetSection("Setup");
	loader.SetDirApp("Pic");
	SAFE_DELETE(m_pbmGround);
	m_pbmGround = new ASLBitmap();
	m_pbmGround->LoadBMP(loader.Load(ini.SafeReadString("Ground").c_str()));
	m_pbmGround->SetBlock(ini.SafeReadInteger("GroundBlock"), 1);

	// 釋放原地圖塊內容
	ReleaseMap();

	// 讀取地圖的每塊內容
	for (int i = 0; i < CELL_NUM; ++i)
	{
		// 讀取屬性
		pFile->Read(pCell, 4);

		// 加載物體
		if (pCell->Blind >= btBush)
		{
			pCell->pBlindage = (CBlindage*)FACTORY.MakeMapItem(pCell->ID);
			pCell->pBlindage->SetPosition(i / CELL_X_ALL, i % CELL_X_ALL);
		}
		else if (pCell->ID > 0)
		{
			pCell->pItem = FACTORY.MakeMapItem(pCell->ID);
			pCell->pItem->SetPosition(i / CELL_X_ALL, i % CELL_X_ALL);
		}

		// 初始化爆炸效果
		pCell->Explosion.Status = 0;

		// 進入下一格
		++pCell;
	}

	SAFE_DELETE(pFile);
}

void CMap::ReleaseMap(void)
{
	for (int i = 0; i < CELL_NUM; ++i)
	{
		SAFE_DELETE(m_vCell[i].pItem);
		SAFE_DELETE(m_vCell[i].pBlindage);
	}
}

void CMap::DrawGround(void) const
{
	int x, y;

	if (m_pbmGround == NULL)
	{
		return;
	}

	for (int i = 1; i <= CELL_Y; ++i)
	{
		for (int j = 1; j <= CELL_X; ++j)
		{
			x = (j-1) * CELL_SIZE + SCENE_LEFT;
			y = (i-1) * CELL_SIZE + SCENE_TOP;
			m_pbmGround->Draw(SCREEN, x, y, m_vCell[i * CELL_X_ALL + j].Ground);
		}
	}
}

void CMap::DrawExplosion(int nCellY, int nCellX) const
{
#define EXP m_vCell[nCellY * CELL_X_ALL + nCellX].Explosion

	int col;
	int x = (nCellX-1) * CELL_SIZE + SCENE_LEFT;
	int y = (nCellY-1) * CELL_SIZE + SCENE_TOP;

	if (EXP.Dr == drMiddle)
	{
		col = EXP.Status % 4;
	}
	else
	{
		if (EXP.IsHead == 0)
		{
			if (EXP.Status == 2)
			{
				col = 0;
			}
			else if (EXP.Status < EXP.Dead)	// Dead min = 12
			{
				col = (EXP.Status - 3) / 3 % 2 + 3;
			}
			else
			{
				col = EXP.Status - 7;
			}
		}
		else
		{
			if (EXP.Status <= 11)
			{
				col = (EXP.Status - 2) / 3;
			}
			else
			{
				col = EXP.Status - 7;
			}
		}
	}

	m_pbmExplosion->Draw(SCREEN, x, y, EXP.Dr, col);

#undef EXP
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品高清视频在线观看| 中文字幕一区视频| 欧美午夜电影网| 色综合中文字幕国产| 国产一区二区三区精品视频| 久久99精品久久久久久久久久久久| 日本美女一区二区三区视频| 日韩不卡免费视频| 美女精品一区二区| 国产盗摄一区二区| 成人免费高清在线观看| 色综合久久久久综合99| 精品视频在线免费看| 日韩一区二区三区四区五区六区| 欧美一级午夜免费电影| 国产亚洲一区二区三区在线观看| 欧美精彩视频一区二区三区| 日韩码欧中文字| 天堂av在线一区| 国产精品一区二区在线观看不卡 | 亚洲免费在线播放| 亚洲午夜精品网| 久久99深爱久久99精品| 国产91在线|亚洲| 在线观看精品一区| 亚洲精品一线二线三线无人区| 国产精品欧美一区二区三区| 亚洲自拍偷拍综合| 韩日av一区二区| 成人aa视频在线观看| 欧美老女人在线| 国产欧美日韩卡一| 亚洲第一综合色| 国产成人aaa| 7799精品视频| 亚洲欧洲av另类| 日韩高清在线观看| 99精品欧美一区二区三区综合在线| 欧美三级日韩在线| 日本一区二区三区免费乱视频| 亚洲二区视频在线| av在线播放一区二区三区| 制服丝袜在线91| 亚洲人被黑人高潮完整版| 久久99九九99精品| 欧美日韩的一区二区| 国产农村妇女毛片精品久久麻豆| 天天色天天操综合| 色综合久久久久久久| 久久久久久久电影| 日韩精品乱码免费| 日本精品裸体写真集在线观看| 久久久久久久久久久久电影 | 国产成人免费xxxxxxxx| 91.com在线观看| 亚洲精品你懂的| 成人av手机在线观看| 精品国精品国产| 人人狠狠综合久久亚洲| 欧美综合色免费| 一区二区久久久| 91网站黄www| 国产精品国产自产拍高清av | 日韩免费观看2025年上映的电影| 亚洲自拍偷拍欧美| 色8久久人人97超碰香蕉987| 国产精品免费网站在线观看| 国产精品自在欧美一区| 久久色.com| 国产在线一区二区| 欧美mv和日韩mv国产网站| 日本在线不卡视频一二三区| 欧美日韩一二三| 日韩高清不卡一区二区| 欧美精品一二三四| 天堂成人免费av电影一区| 51午夜精品国产| 秋霞电影网一区二区| 日韩一级黄色大片| 老司机精品视频一区二区三区| 欧美一级二级三级蜜桃| 精品亚洲国产成人av制服丝袜| 日韩美女在线视频| 国产大片一区二区| 综合网在线视频| 欧美在线999| 日本伊人精品一区二区三区观看方式| 欧美日韩视频在线一区二区 | 国产盗摄精品一区二区三区在线 | 欧美tickle裸体挠脚心vk| 麻豆精品新av中文字幕| 精品国产91乱码一区二区三区| 精品一区二区三区免费| 中文字幕免费在线观看视频一区| 成人av免费在线| 亚洲午夜羞羞片| 日韩欧美一级精品久久| 国产精品一级二级三级| 亚洲色图制服诱惑| 日韩一区二区在线观看视频播放| 精品亚洲免费视频| 亚洲少妇30p| 日韩一区二区精品| caoporn国产一区二区| 丝袜诱惑亚洲看片| 国产欧美va欧美不卡在线| 欧美日韩一区二区三区在线| 国产精品一级二级三级| 亚洲一级在线观看| 国产欧美日韩另类一区| 欧美日韩在线播放三区四区| 国产盗摄精品一区二区三区在线| 一区二区三区在线视频观看| 久久人人爽人人爽| 欧美老肥妇做.爰bbww| 成人小视频免费在线观看| 天涯成人国产亚洲精品一区av| 国产日韩成人精品| 欧美猛男gaygay网站| a在线欧美一区| 精品写真视频在线观看| 亚洲线精品一区二区三区| 久久网站热最新地址| 欧美日韩aaa| 在线观看亚洲专区| 成人美女视频在线观看| 久久99国产精品麻豆| 亚洲资源中文字幕| 1000精品久久久久久久久| 久久美女高清视频| 日韩三级精品电影久久久| 欧美日韩中文精品| 91麻豆6部合集magnet| 国产91精品一区二区麻豆亚洲| 日韩**一区毛片| 日韩中文字幕区一区有砖一区| 亚洲三级理论片| 亚洲人成亚洲人成在线观看图片| 欧美精品一区二区三区蜜臀| 91精品国产综合久久精品麻豆| 日本久久一区二区三区| 色婷婷一区二区| 99vv1com这只有精品| 波多野结衣在线一区| 国产激情偷乱视频一区二区三区| 韩国女主播一区| 国产一区在线视频| 国产一区二区久久| 国产在线视频一区二区| 国产老肥熟一区二区三区| 国产一区二区精品久久99| 久久se精品一区二区| 国产一区二区毛片| 国产91综合网| 色偷偷一区二区三区| 欧美色图激情小说| 在线播放一区二区三区| 日韩免费视频线观看| 久久一日本道色综合| 久久蜜桃一区二区| 成人免费在线视频| 亚洲自拍欧美精品| 免费欧美日韩国产三级电影| 精品一区二区三区免费播放| 国产成人一区在线| 一本到不卡免费一区二区| 欧美在线观看一二区| 欧美一区二区三区日韩视频| 精品久久久久久亚洲综合网| 国产亚洲欧美在线| 亚洲色图19p| 奇米色一区二区三区四区| 国产福利电影一区二区三区| 97超碰欧美中文字幕| 91精品欧美一区二区三区综合在| 日韩午夜av一区| 国产精品美女久久福利网站| 一区二区不卡在线播放| 久久电影国产免费久久电影| 不卡视频一二三| 欧美一区二区日韩| 国产精品久久久久久亚洲伦| 亚洲第一福利视频在线| 国产成人亚洲综合a∨婷婷| 在线观看成人小视频| 精品处破学生在线二十三| 亚洲精品视频在线观看免费| 免费成人在线视频观看| 99久久精品费精品国产一区二区| 这里是久久伊人| 国产精品福利在线播放| 蜜桃视频第一区免费观看| 波多野结衣欧美| 日韩情涩欧美日韩视频| 一区二区三区精品视频| 国产成人av电影在线播放| 欧美一区二区网站| 亚洲乱码中文字幕| 国产主播一区二区| 91精品一区二区三区在线观看|