โฒ๏ธDaily Time Table

๐Ÿ€ ํ•œ ์ค„ ํ‰ :

๊ณต๋ถ€์‹œ๊ฐ„ : 0h 0min


์‘์›ํ•ด์ฃผ๋Š” ์‚ฌ๋žŒ๋“ค์˜ ์–ผ๊ตด๊ณผ ๋ง๋“ค์„ ๋– ์˜ฌ๋ ค



1. ์˜ค์ „


  1. A* ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฝ”๋“œ ๋ณต์Šต ๋ฐ ์ดํ•ด. : **์ฝ”๋“œ๋ฅผ ์˜†์— ๋‘๊ณ  ๊ฐ™์ด ๋”ฐ๋ผ ์ฝ์–ด๊ฐ€๋ฉด ์ดํ•ดํ•˜๊ธฐ ์ข‹์Œ. โ˜… ๋Œ€๋žต์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๊ด„ โ˜…

  2. ํƒ€์ผ์„ ์ˆœํšŒํ•˜๋ฉฐ ์ธ์ ‘ ํƒ€์ผ์˜ ๋น„์šฉ์„ ๊ณ„์‚ฐ ํ›„, ์ •๋ ฌ, โ†’ OpenList์— ์ €์žฅ. (๊ณ„์‚ฐ ๋œ ํƒ€์ผ์€ CloseList์— ์ €์žฅ.)

  3. ๋น„์šฉ์ด ๊ฐ€์žฅ ์ž‘์€ ํƒ€์ผ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ์žฌ๊ท€์ ์œผ๋กœ ์ธ์ ‘ ํƒ€์ผ ๋น„์šฉ ๊ณ„์‚ฐ.

  4. ๊ณ„์‚ฐ ํ•ด๊ฐ€๋ฉฐ ์ƒˆ ์ธ์ ‘ํƒ€์ผ์„ ๊ณ„์‚ฐํ•  ๋•Œ. ํƒ€์ผ์˜ iParentIndex ์— ์ด์ „ ํƒ€์ผ ์ €์žฅ.

  5. ์ ์€ ๋น„์šฉ๋Œ€๋กœ ์ธ์ ‘ํƒ€์ผ ๊ณ„์‚ฐํ•˜๋‹ค๋ณด๋ฉด ๋ชฉํ‘œํƒ€์ผ์„ ๋งŒ๋‚˜๊ฒŒ ๋จ.

  6. Best List์— ๋ชฉํ‘œํƒ€์ผ์˜ iParentIndex ๋ถ€ํ„ฐ ์—ญ์œผ๋กœ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์•„์„œ ์ €์žฅ.**

    1. [Player.cpp :: Update()] Player์—์„œ ๋งˆ์šฐ์Šค ํด๋ฆญ์‹œ Using_Astar ํ•จ์ˆ˜ ์‹œ์ž‘๊ณผ ๋™์‹œ์— vStart(Player์˜ ์œ„์น˜)์™€ vGoal(๋งˆ์šฐ์Šค ํฌ์ธํ„ฐ ์œ„์น˜)๋ฅผ ๋„˜๊ฒจ์ค€๋‹ค.
    2. [AstarMgr :: Using_Astar()] Close, Open, Best LIst ๋ฅผ ๋ชจ๋‘ Clearํ•ด์ค€๋‹ค.
    3. [AstarMgr :: Using_Astar()] Get_Terrain()์„ ํ†ตํ•ด Terrain Obj ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , Get_Tile์„ ํ†ตํ•ด Tile์˜ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ๋Š” Vector๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
    4. [AstarMgr :: Using_Astar()] Get_TileIndex()๋ฅผ ํ†ตํ•ด vStart์™€ vGoal ์˜ (x,y)์ขŒํ‘œ์— ํ•ด๋‹นํ•˜๋Š” ํƒ€์ผ Index๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
      1. [Get_TileIndex()] vecTile์„ ์ˆœํšŒํ•˜๋ฉด์„œ, ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง„ ์ขŒํ‘œ์— ํ•ด๋‹นํ•˜๋Š” ํƒ€์ผ์˜ ๋ฒˆํ˜ธ(Index)๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ํ•จ์ˆ˜.
      2. [Get_TileIndex()]
      3. Terrain class ์™€ vecTile์„ ๊ฐ€์ ธ์˜ด.
      4. vecTile์„ ์ˆœํšŒํ•˜๋ฉด์„œ Picking(vPos, iIndex) ํ•จ์ˆ˜๋ฅผ ์ˆœํšŒ
        1. [Picking()] ๋ฒกํ„ฐ์˜ ๋‚ด์ ์„ ์ด์šฉํ•˜์—ฌ ํŠน์ • ์ขŒํ‘œ(vPos)๊ฐ€ ํŠน์ •ํƒ€์ผ(Index)์— ๋“ค์–ด๊ฐ€ ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜.
        • ๋งค๊ฐœ๋ณ€์ˆ˜ : vPos, iIndex(ํ˜„์žฌ ์ˆœํšŒ์ค‘์ธ Tile์˜ Index.
        1. [Picking()]

          1. Terrain class ์™€ vecTile์„ ๊ฐ€์ ธ์˜ด.

          2. ํ˜„์žฌ Index์— ํ•ด๋‹นํ•˜๋Š” ํƒ€์ผ์˜ ๋„ค ๊ผญ์ง“์ ์„ vPoint[4]์— ์ €์žฅ.

          3. vPoint๋ฅผ ํ†ตํ•ด ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ํ–ฅํ•˜๋Š” ๋„ค ๋ฐฉํ–ฅ ๋ฒกํ„ฐ๋ฅผ ๊ตฌํ•ด์„œ vDir[4]์— ์ €์žฅ

          4. vDir[i]์˜ ๊ฐ ๋ฒ•์„  ๋ฒกํ„ฐ๋ฅผ ๊ตฌํ•จ. 2์ฐจ์›์—์„œ (x, y)์— ๋Œ€ํ•œ ๋ฒ•์„  ๋ฒกํ„ฐ๋Š” (-y, x) ์ด๋‹ค. vNormal[4]์— ์ €์žฅ.

          5. ๊ฐ vPoint์—์„œ ๋งˆ์šฐ์Šค ํด๋ฆญ ํฌ์ธํŠธ vPos ๋กœ ํ–ฅํ•˜๋Š” ๋ฒกํ„ฐ๋ฅผ ๊ตฌํ•ด์„œ vMouseDir[4]์— ์ €์žฅ

          6. vMouseDir[i] ๊ณผ vNormal[i] ์ •๊ทœํ™” ํ•œ ๋’ค, ๋‚ด์ ํ•จ.

            1. ํ”ผํ‚น ํฌ์ธํŠธ๊ฐ€ ๋งˆ๋ฆ„๋ชจ ์•ˆ์ชฝ.

              1. vMouseDir[i] ๊ณผ vNormal[i]์ด **๋‘”๊ฐ(ฮธ > 90)**์„ ์ด๋ฃฌ๋‹ค. โ‡’ ฮธ > 90 ์ด๋ฏ€๋กœ, ์ •๊ทœํ™”ํ•œ ๋ฒกํ„ฐ๋ฅผ ๋‚ด์ ํ•˜์—ฌ ๋‚˜์˜ค๋Š” cosฮธ ์˜ ๊ฐ’์ด ์Œ์ˆ˜์ด๋‹ค. (๊ทธ๋ฆผ์ฐธ์กฐ)

                Untitled

            2. ํ”ผํ‚น ํฌ์ธํŠธ๊ฐ€ ๋งˆ๋ฆ„๋ชจ ๋ฐ”๊นฅ์ชฝ.

              1. vMouseDir[i] ๊ณผ vNormal[i]์ด **์˜ˆ๊ฐ(ฮธ < 90)**์„ ์ด๋ฃฌ๋‹ค. โ‡’ ฮธ < 90 ์ด๋ฏ€๋กœ, ์ •๊ทœํ™”ํ•œ ๋ฒกํ„ฐ๋ฅผ ๋‚ด์ ํ•˜์—ฌ ๋‚˜์˜ค๋Š” cosฮธ ์˜ ๊ฐ’์ด ์–‘์ˆ˜์ด๋‹ค.
          7. ๋‚ด์ ๊ฐ’์ด ํ•˜๋‚˜๋ผ๋„ ์–‘์ˆ˜์ผ ๊ฒฝ์šฐ, ํƒ€์ผ์˜ ๋ฐ”๊นฅ์ชฝ์ด๋ผ ํŒ๋‹จํ•˜์—ฌ false๋ฅผ ๋ฐ˜ํ™˜.

            Untitled

            Untitled

        2. [Picking()] vPos๊ฐ€ ํ˜„์žฌ ์ˆœํšŒ์ค‘์ธ Index์˜ ํƒ€์ผ์˜ ์•ˆ์ชฝ์ผ ๊ฒฝ์šฐ โ†’ true๋ฅผ ๋ฐ˜ํ™˜

      5. [Get_TileIndex()] Picking()โ†’true์ผ ๊ฒฝ์šฐ. ํ˜„์žฌ Index๋ฅผ ๋ฐ˜ํ™˜. ์•„๋‹๊ฒฝ์šฐ, -1 ๋ฐ˜ํ™˜.
    5. [AstarMgr :: Using_Astar()] vStart์™€ vGoal ์˜ ์— ํ•ด๋‹นํ•˜๋Š” ํƒ€์ผ์˜ Index๋ฅผ m_iStartIdx์™€ m_GoalIdx ์— ์ €์žฅ.
    6. [AstarMgr :: Using_Astar()] ์˜ˆ์™ธ ์กฐ๊ฑด. m_iStartIdx์™€ m_GoalIdx ๊ฐ€ i. ์ „์ฒด ํƒ€์ผ์˜ Index๋ฒˆํ˜ธ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜, ii. 0๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜, (Picking ์‹คํŒจํ•ด์„œ -1๊ฐ’์„ ๊ฐ€์ง„ ๊ฒฝ์šฐ) iii. m_iStartIdx==m_GoalIdx ์ด๊ฑฐ๋‚˜, iv. m_GoalIdx ์˜ byOption ์ด 0์ด ์•„๋‹ ๊ฒฝ์šฐ(์žฅ์• ๋ฌผ ํƒ€์ผ ์ธ ๊ฒฝ์šฐ), ํ•จ์ˆ˜ retrun.
    7. ๊ทธ ์ด์™ธ์—๋Š” Make_Route(m_iStartIdx, m_GoalIdx) ํ•จ์ˆ˜ ์‹คํ–‰.
    8. [AstarMgr :: Make_Route(m_iStartIdx, m_GoalIdx)] - ์žฌ๊ท€์ ์ธ ํ•จ์ˆ˜ (์™„์ „ํ•œ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์ง€ ์•Š๊ณ  ์ตœ๋‹จ ๊ฒฝ๋กœ์˜ ๊ทผ์‚ฌ๊ฐ’์„ ์ฐพ์•„๋‚ด๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ)
      1. ์‚ฌ์‹ค์ƒ A* ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„ ๋œ ๋ถ€๋ถ„.
      2. CTerrain class, vecTile, vecAdj ๋ฅผ ๊ฐ€์ ธ์˜ด.
        • vector<list<TILE*>> m_vecAdjacency : ๊ฐ๊ฐ์˜ ํƒ€์ผ๋งˆ๋‹ค ์ธ์ ‘ํ•œ ํƒ€์ผ์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ vector. : ์žฅ์• ๋ฌผ์ธ์ง€ or ์ตœ์™ธ๊ฐ ํƒ€์ผ์ธ์ง€ ์˜ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ์ธ์ ‘ ํƒ€์ผ์„ ์ €์žฅ.
    bool CAstarMgr::Make_Route(int iCurIdx, int iGoalIdx)
    {
    	// ํƒ€์ผ ๊ด€๋ จ ์ •๋ณด ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ.
    	CObj* pTerrain = CObjMgr::Get_Instance()->Get_Terrain();
    	if (nullptr == pTerrain)
    		goto Jump;
    
    	vector<TILE*>& vecTile = dynamic_cast<CTerrain*>(pTerrain)->Get_VecTile();
    	if (vecTile.empty())
    		goto Jump;
    
    	vector<list<TILE*>>& vecAdj = dynamic_cast<CTerrain*>(pTerrain)->Get_Adj();
    	if (vecAdj.empty())
    		goto Jump;
    	/*=======================================================*/
    
    	// ๋‘๋ฒˆ ์งธ ์ดํ›„์˜ Make_Route ํ•จ์ˆ˜ ์‹คํ–‰ ์ƒํƒœ ์ธ ๊ฒฝ์šฐ.
    	// ํ˜„์žฌ iCurIdx๊ฐ€ m_OpenList.front() ์ด๋ฏ€๋กœ, m_OpenList.pop_front() ํ•ด์คŒ.
    	if (!m_OpenList.empty())
    		m_OpenList.pop_front();
    
    	// ํ˜„์žฌ iCurIdx์„ ํƒ์ƒ‰ ์™„๋ฃŒ๋œ ํƒ€์ผ๋กœ push_back ํ•ด์คŒ.
    	m_CloseList.push_back(iCurIdx);
    
    	// ํ˜„์žฌ Index์— ํ•ด๋‹นํ•˜๋Š” ๋ฒกํ„ฐ์˜ ์ธ์ ‘ ํƒ€์ผ๋“ค์„ ์ˆœํšŒ.
    	for (auto& AdjTile : vecAdj[iCurIdx])
    	{
    		// ํ˜„์žฌ ์ˆœํšŒ์ค‘์ธ ์ธ์ ‘ ํƒ€์ผ์ด ๋ชฉํ‘œ ํƒ€์ผ์ผ ๊ฒฝ์šฐ 
    		// -> ํ˜„์žฌ ์ˆœํšŒ์ค‘์ธ ์ธ์ ‘ ํƒ€์ผ(๋ชฉํ‘œํƒ€์ผ)์˜ iParentIndex์— iCurIdx ๊ธฐ์ž….
    		// -> ํƒ์ƒ‰ ์ข…๋ฃŒ.
    		if (iGoalIdx == AdjTile->iIndex)
    		{
    			AdjTile->iParentIndex = iCurIdx;
    			return true;
    		}
    
    		// ๋ชฉํ‘œ ํƒ€์ผ์ด ์•„๋‹ˆ์—ˆ๋‹ค,
    		// ํ˜„์žฌ ์ˆœํšŒ์ค‘์ธ ์ธ์ ‘ ํƒ€์ผ์ด Opon, Close ๋ฆฌ์ŠคํŠธ์— ์žˆ๋Š”์ง€ ์กฐ์‚ฌ
    		if (false == Check_Close(AdjTile->iIndex) &&
    			false == Check_Open(AdjTile->iIndex))
    		{
    			// ํ˜„์žฌ ์ˆœํšŒ์ค‘์ธ ์ธ์ ‘ ํƒ€์ผ์˜ iParentIndex์— iCurIdx ๊ธฐ์ž….
    			// ์ตœ๋‹จ ๋น„์šฉ ๊ณ„์‚ฐ์„ ์œ„ํ•ด OpenList์— ํ˜„์žฌ ์ˆœํšŒ์ค‘์ธ ์ธ์ ‘ ํƒ€์ผ ์ €์žฅ. x 4.
    			AdjTile->iParentIndex = iCurIdx;
    			m_OpenList.push_back(AdjTile->iIndex);
    		}
    	}
    
    	// ๋” ์ด์ƒ ์ฐพ์„ ๊ธธ์ด ์—†์„ ๊ฒฝ์šฐ
    	if (m_OpenList.empty())
    		goto Jump;
    
    	int	iStart = m_iStartIdx;
    
    	// ์ด๋™๊ฐ€๋Šฅํ•œ ์ธ์ ‘ ํƒ€์ผ๋“ค์˜ h(), g() (์ด๋™ ๋น„์šฉ (๊ฐ€์ค‘์น˜) ) ๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ 
    	// Open List ์—์„œ ์ •๋ ฌํ•จ --> ๊ฐ€์žฅ ๋น„์šฉ์ด ์ž‘์€ Front๋ถ€ํ„ฐ ์“ธ ์˜ˆ์ •.
    	//												list ์›์†Œ ์ˆœํšŒ.
    	m_OpenList.sort([&vecTile, &iStart, &iGoalIdx](int Temp, int Sour)->bool
    		{
    			// cost = PCost + GCost
    
    			// ์‹œ์ž‘์  ํƒ€์ผ์—์„œ ํ˜„์žฌ ํƒ€์ผ๊นŒ์ง€์˜ ์ด๋™๊ฐ€๋Šฅํ•œ ์ธ์ ‘ ํƒ€์ผ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ ๋น„์šฉ.
    			D3DXVECTOR3	vPCost1 = vecTile[iStart]->vPos - vecTile[Temp]->vPos;
    			D3DXVECTOR3	vPCost2 = vecTile[iStart]->vPos - vecTile[Sour]->vPos;
    
    			// ์ด๋™๊ฐ€๋Šฅํ•œ ์ธ์ ‘ ํƒ€์ผ๋กœ๋ถ€ํ„ฐ ๋ชฉํ‘œ ํƒ€์ผ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ ๋น„์šฉ
    			D3DXVECTOR3	vGCost1 = vecTile[Temp]->vPos - vecTile[iGoalIdx]->vPos;
    			D3DXVECTOR3	vGCost2 = vecTile[Sour]->vPos - vecTile[iGoalIdx]->vPos;
    
    			float	fDist1 = D3DXVec3Length(&vPCost1) + D3DXVec3Length(&vGCost1);
    			float	fDist2 = D3DXVec3Length(&vPCost2) + D3DXVec3Length(&vGCost2);
    
    			// ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ.
    			return fDist1 < fDist2;
    		});
    
    	// ์ด๋™๋น„์šฉ์ด ๊ฐ€์žฅ ์ž‘์€ ํƒ€์ผ์„ ์‹œ์ž‘์ ์œผ๋กœ ๋‹ค์‹œ Make_Route์‹คํ–‰.
    	return Make_Route(m_OpenList.front(), iGoalIdx);
    
    Jump:
    	return false;
    }
    
  7. ์šฉ์ฑ… ๋ณต์Šตํ•˜๊ธฐ. : 11:40 ~ 13:00 : ํŽ˜์ด์ง€ : ใ…‡ ~ ใ…‡ 1.