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

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

?? asedoc.cpp

?? 一個用VC編寫的
?? CPP
字號:
// aseDoc.cpp : implementation of the CAseDoc class
//

#include "stdafx.h"
#include "ase.h"

#include "nodeview.h"

#include "aseDoc.h"
#include "aseView.h"
#include "mainfrm.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAseDoc

IMPLEMENT_DYNCREATE(CAseDoc, CDocument)

BEGIN_MESSAGE_MAP(CAseDoc, CDocument)
	//{{AFX_MSG_MAP(CAseDoc)
	ON_COMMAND(ID_RUNTOBREAKPOINT, OnRunToBreakpoint)
	ON_UPDATE_COMMAND_UI(ID_RUNTOBREAKPOINT, OnUpdateRunToBreakpoint)
	ON_COMMAND(ID_EXECUTEASTAR, OnExecuteAStar)
	ON_COMMAND(ID_STEPASTAR, OnStepAStar)
	ON_COMMAND(ID_PATHING_ALLOWDIAGONAL, OnPathingAllowDiagonal)
	ON_UPDATE_COMMAND_UI(ID_PATHING_ALLOWDIAGONAL, OnUpdatePathingAllowDiagonal)
	ON_COMMAND(ID_VIEW_AROUTE, OnViewARoute)
	ON_UPDATE_COMMAND_UI(ID_VIEW_AROUTE, OnUpdateViewARoute)
	ON_COMMAND(ID_PATHING_CONTINUOUSUPDATE, OnPathingContinuousUpdate)
	ON_UPDATE_COMMAND_UI(ID_PATHING_CONTINUOUSUPDATE, OnUpdatePathingContinuousUpdate)
	ON_COMMAND(ID_PATHING_RELATIVECOSTING, OnPathingRelativeCosting)
	ON_UPDATE_COMMAND_UI(ID_PATHING_RELATIVECOSTING, OnUpdatePathingRelativeCosting)
	//}}AFX_MSG_MAP
	ON_COMMAND_RANGE(ID_WEIGHT0, ID_ENDPOINT, OnBrushType)	
	ON_UPDATE_COMMAND_UI_RANGE(ID_WEIGHT0, ID_ENDPOINT, OnUpdateUIBrushType)	
	ON_COMMAND_RANGE(ID_PATHING_BREAKPOINTS_POINT, ID_PATHING_BREAKPOINTS_NEWCHILD, OnBreakpointType)	
	ON_UPDATE_COMMAND_UI_RANGE(ID_PATHING_BREAKPOINTS_POINT, ID_PATHING_BREAKPOINTS_NEWCHILD, OnUpdateUIBreakpointType)	
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAseDoc construction/destruction

CAseDoc::CAseDoc()
{
	memset(m_cBoard, 0, sizeof(m_cBoard));
	m_bAllowDiagonal = true;
	m_bContinualUpdate = false;
	m_uBrushType = 0;
	m_bRelativeCosting = false;
}

CAseDoc::~CAseDoc()
{
}

BOOL CAseDoc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;

	memset(m_cBoard, 0, sizeof(m_cBoard));
	m_cStart.x = -1;
	m_cEnd.x = -1;
	m_cBreakpoint.x = -1;
	m_iBreakData = -1;
	m_bStepped = false;

	m_cAStar.Reset();
	m_bDrawRoute = false;

	return TRUE;
}

BOOL CAseDoc::OnOpenDocument(LPCTSTR lpszPathName) 
{
	if (!CDocument::OnOpenDocument(lpszPathName))
		return FALSE;
	
	m_bStepped = false;
	m_cBreakpoint.x = -1;
	m_iBreakData = -1;
	
	m_cAStar.Reset();
	m_bDrawRoute = false;

	return TRUE;
}


/////////////////////////////////////////////////////////////////////////////
// CAseDoc serialization

void CAseDoc::Serialize(CArchive& ar)
{
	int x = ASE_BOARDX, y = ASE_BOARDY;

	if (ar.IsStoring()) {
		ar << x;
		ar << y;
		ar << m_cStart;
		ar << m_cEnd;

		for (int i=0; i<x; i++) {
			for (int j=0; j<y; j++) {
				ar << m_cBoard[i][j];
			}
		}
	} else {
		ar >> x;
		ar >> y;
		ar >> m_cStart;
		ar >> m_cEnd;

		for (int i=0; i<x; i++) {
			for (int j=0; j<y; j++) {
				ar >> m_cBoard[i][j];
			}
		}
	}
}

/////////////////////////////////////////////////////////////////////////////
// CAseDoc diagnostics

#ifdef _DEBUG
void CAseDoc::AssertValid() const
{
	CDocument::AssertValid();
}

void CAseDoc::Dump(CDumpContext& dc) const
{
	CDocument::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CAseDoc commands

int CAseDoc::AS_Valid(_asNode *parent, _asNode *node, int data, void *pointer) 
{
	int x = node->x, y = node->y;
	CAseDoc *me = reinterpret_cast<CAseDoc *>(pointer);

	if (x < 0 || y < 0 || x >= ASE_BOARDX || y >= ASE_BOARDY) return FALSE;
	if (me->m_cBoard[x][y] == 3) return FALSE;

	if (!(me->m_bAllowDiagonal)) {
		int px = parent->x;
		int py = parent->y;

		if (px - x != 0 && py - y != 0) return FALSE;
	}

	return TRUE;
}

int CAseDoc::AS_Cost(_asNode *parent, _asNode *node, int data, void *pointer) 
{
	CAseDoc *me = reinterpret_cast<CAseDoc *>(pointer);

	int cost = me->m_cBoard[node->x][node->y]+1;	// Ensure always cost > 1

	return cost;
}

int CAseDoc::AS_RelativeCost(_asNode *parent, _asNode *node, int data, void *pointer) 
{
	CAseDoc *me = reinterpret_cast<CAseDoc *>(pointer);

	int cost = abs(me->m_cBoard[node->x][node->y] - 
		           me->m_cBoard[parent->x][parent->y])+1;

	return cost;
}

void CAseDoc::NodeAdded(_asNode *node, int data) 
{
	if (m_cBreakpoint.x == -1 && m_iBreakData == -1) return;

	if (node->x == m_cBreakpoint.x && node->y == m_cBreakpoint.y) {
		m_bBreakpointHit = true;
		m_pcBreakNode = node;
	} 
	
	if (data == m_iBreakData) {
		m_bBreakpointHit = true;
		m_pcBreakNode = node;
	}
}

CNodeView *CAseDoc::GetNodeView()
{
	POSITION pos;
	pos = GetFirstViewPosition();

	CNodeView *nv = reinterpret_cast<CNodeView *>(GetNextView(pos));

	return nv;
}

CAseView *CAseDoc::GetAseView()
{
	CMainFrame* pMfm = STATIC_DOWNCAST(CMainFrame, AfxGetMainWnd());
	CAseView *view = reinterpret_cast<CAseView *>(pMfm->GetRightPane());
	
	return view;
}

bool CAseDoc::SetupAStar(bool stepped/* = false*/)
{
	if (m_cStart.x == -1 || m_cEnd.x == -1) {
		MessageBox("Please ensure that both the start and end points are specified.\nA red and green square denote the start and end points, respectively.", "A* Explorer", MB_ICONERROR);
		return false;
	}

	CNodeView *nv = GetNodeView();
	GetAseView()->RemoveHighlight();

	m_cAStar.SetRows(ASE_BOARDX);
	m_cAStar.udValid = AS_Valid;
	m_cAStar.udCost = (m_bRelativeCosting) ? AS_RelativeCost : AS_Cost;
	
	m_cAStar.udNotifyList = NULL;
	m_cAStar.udNotifyChild = (m_bContinualUpdate) ? NULL : CNodeView::OnNotifyChild;

	m_cAStar.m_pCBData = reinterpret_cast<void *>(this);
	m_cAStar.m_pNCData = reinterpret_cast<void *>(nv);

	nv->OnPreAStar();

	if (stepped) {
		CTreeCtrl &tree = GetNodeView()->GetTreeCtrl();
		tree.InsertItem("A* Tree", 6, 6);
		tree.InsertItem("Open List", 7, 7);
		tree.InsertItem("Closed List", 8, 8);

		m_cAStar.udNotifyList = CNodeView::OnNotifyList;
		m_cAStar.StepInitialize(m_cStart.x, m_cStart.y, m_cEnd.x, m_cEnd.y);
	}

	return true;
}

void CAseDoc::DrawNode(_asNode *node)
{
	GetAseView()->HighlightNode(node, true);
}

void CAseDoc::MessageBox(CString title, CString caption, UINT type)
{
	AfxGetMainWnd()->MessageBox(title, caption, type);
}

void CAseDoc::OnBreakpointType(UINT uType)
{
	int type = uType - ID_PATHING_BREAKPOINTS_POINT;

	if (type == 0) {
		m_cBreakpoint.x = -1;
		UpdateAllViews(NULL);
	}

	m_iBreakData = (type == 0) ? -1 : type;
}

void CAseDoc::OnUpdateUIBreakpointType(CCmdUI *pCmdUI)
{
	UINT uID = pCmdUI->m_nID;

	if (uID == ID_PATHING_BREAKPOINTS_POINT) {
		pCmdUI->Enable((m_cBreakpoint.x != -1));
		pCmdUI->SetCheck((m_cBreakpoint.x != -1));
		return;
	}

	pCmdUI->SetCheck(uID == unsigned(m_iBreakData + ID_PATHING_BREAKPOINTS_POINT));
}

void CAseDoc::OnRunToBreakpoint() 
{
	if (!m_bStepped) {
		if (!SetupAStar(true)) return;

		m_bDrawRoute = false;
		m_bStepped = true;

		m_bBreakpointHit = (m_cBreakpoint == m_cStart) ? true : false;
	} else {
		m_bBreakpointHit = false;
	}
	
	int retval = 1;
	while (!m_bBreakpointHit) {
		retval = m_cAStar.Step();
		GetNodeView()->SortOpen();

		if (retval == -1) {
			m_bStepped= false;
			MessageBox("A path could not be found.", "A* Explorer", MB_ICONERROR);
			break;
		} else if (retval == 1) {
			m_bDrawRoute = true;
			m_bStepped = false;
			GetNodeView()->OnPostAStar(m_cAStar.GetBestNode());
			UpdateAllViews(NULL);

			MessageBox("Stepping complete. A path has been found.", "A* Explorer", MB_ICONINFORMATION);
			break;
		}
	}

	if (m_bBreakpointHit) {
		CString str;
		if (m_iBreakData == -1) {
			str.Format("Breakpoint at (%d,%d) hit.", m_cBreakpoint.x, m_cBreakpoint.y);
		} else {
			str = "The conditional breakpoint has been satisfied in this iteration.";
		}

		MessageBox(str, "A* Explorer", MB_ICONSTOP);

		CTreeCtrl &tree = GetNodeView()->GetTreeCtrl();
		tree.EnsureVisible(HTREEITEM(m_pcBreakNode->dataptr));
		tree.SelectItem(HTREEITEM(m_pcBreakNode->dataptr));
		tree.Invalidate();
	}
}

void CAseDoc::OnUpdateRunToBreakpoint(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable((m_iBreakData != -1 || m_cBreakpoint.x != -1));
}

void CAseDoc::OnExecuteAStar() 
{
	if (m_bStepped) {
		int retval;
		while (true) {
			retval = m_cAStar.Step();
			if (retval == -1) {
				m_bStepped= false;
				GetNodeView()->SortOpen();
				MessageBox("A path could not be found.", "A* Explorer", MB_ICONERROR);
				break;
			} else if (retval == 1) {
				m_bDrawRoute = true;
				m_bStepped = false;
				GetNodeView()->OnPostAStar(m_cAStar.GetBestNode());
				UpdateAllViews(NULL);

				GetNodeView()->SortOpen();
				MessageBox("Stepping complete. A path has been found.", "A* Explorer", MB_ICONINFORMATION);
				break;
			}
		}

		return;
	}

	if (!SetupAStar()) return;

	if (m_cAStar.GeneratePath(m_cStart.x, m_cStart.y, m_cEnd.x, m_cEnd.y)) {
		m_bDrawRoute = true;
		GetNodeView()->OnPostAStar(m_cAStar.GetBestNode());
	} else {
		m_bDrawRoute = false;

		MessageBox("A path could not be found.", "A* Explorer", MB_ICONERROR);
	}

	UpdateAllViews(NULL);
}

void CAseDoc::OnStepAStar() 
{
	if (!m_bStepped) {
		if (!SetupAStar(true)) return;

		m_bStepped = true;
		m_bDrawRoute = false;

		GetNodeView()->RedrawWindow();
	} else {
		int retval = m_cAStar.Step();
		GetNodeView()->SortOpen();

		if (retval == -1) {
			m_bDrawRoute = false;
			m_bStepped = false;

			MessageBox("A path could not be found.", "A* Explorer", MB_ICONERROR);
		} else if (retval == 1) {
			m_bDrawRoute = true;
			m_bStepped = false;

			GetNodeView()->OnPostAStar(m_cAStar.GetBestNode());

			MessageBox("Stepping complete. A path has been found.", "A* Explorer", MB_ICONINFORMATION);
		}

		UpdateAllViews(NULL);
	}
}

void CAseDoc::OnPathingAllowDiagonal() 
{
	m_bAllowDiagonal = !m_bAllowDiagonal;
}

void CAseDoc::OnUpdatePathingAllowDiagonal(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_bAllowDiagonal);
}

void CAseDoc::OnBrushType(UINT uType)
{
	m_uBrushType = uType - ID_WEIGHT0;
	
	GetAseView()->SetBrushType(m_uBrushType);
}

void CAseDoc::OnUpdateUIBrushType(CCmdUI *pCmdUI)
{
	UINT uType = pCmdUI->m_nID;

	pCmdUI->SetCheck((m_uBrushType == uType - ID_WEIGHT0));
}

void CAseDoc::OnViewARoute() 
{
	m_bDrawRoute = !m_bDrawRoute;

	UpdateAllViews(NULL);
}

void CAseDoc::OnUpdateViewARoute(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable((m_cAStar.GetBestNode() != NULL));
	pCmdUI->SetCheck(m_bDrawRoute);
}

void CAseDoc::OnPathingContinuousUpdate() 
{
	m_bContinualUpdate = !m_bContinualUpdate;
}

void CAseDoc::OnUpdatePathingContinuousUpdate(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_bContinualUpdate);
}

void CAseDoc::NotifyClick()
{
	if (m_bContinualUpdate && m_cStart.x != -1 && m_cEnd.x != -1) {
		m_bStepped = false;
		OnExecuteAStar();
	}
}

void CAseDoc::OnPathingRelativeCosting() 
{
	m_bRelativeCosting = !m_bRelativeCosting;
}

void CAseDoc::OnUpdatePathingRelativeCosting(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_bRelativeCosting);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
eeuss鲁片一区二区三区| 亚洲成av人片在线观看无码| 成人性生交大片免费看在线播放 | 在线日韩av片| 亚洲综合一区在线| 91精品婷婷国产综合久久竹菊| 日韩电影在线观看网站| 久久久久久久久久久久电影 | 日日嗨av一区二区三区四区| 91精品国产高清一区二区三区蜜臀 | 欧美在线视频你懂得| 天涯成人国产亚洲精品一区av| 91精品国产色综合久久不卡电影 | 欧美xxxxxxxxx| 国产成人精品免费看| 亚洲欧美日韩久久| 欧美一区二区播放| 成人综合在线网站| 丝袜美腿一区二区三区| 久久精品人人做人人爽人人 | 欧美日韩一级大片网址| 国模无码大尺度一区二区三区| 亚洲欧美一区二区久久| 日韩欧美国产wwwww| 不卡视频一二三| 日韩精品乱码免费| 日韩一区在线看| 欧美va天堂va视频va在线| 972aa.com艺术欧美| 久久97超碰国产精品超碰| 一区免费观看视频| 精品国产一区二区三区久久久蜜月| 春色校园综合激情亚洲| 欧美aaaaaa午夜精品| 亚洲欧洲日本在线| 久久综合久久鬼色中文字| 在线精品视频小说1| 国产成人亚洲综合色影视| 婷婷开心激情综合| 亚洲少妇屁股交4| 精品久久久久久无| 欧美日韩你懂得| 色婷婷综合激情| 粉嫩13p一区二区三区| 男女男精品视频| 亚洲国产aⅴ成人精品无吗| 中文字幕欧美激情一区| 精品久久久久久久久久久院品网 | 麻豆国产精品一区二区三区 | 日本视频一区二区| 亚洲毛片av在线| 欧美激情在线观看视频免费| 欧美一卡二卡三卡四卡| 精品视频色一区| 日本丶国产丶欧美色综合| 成人福利电影精品一区二区在线观看| 麻豆久久一区二区| 蜜臀av在线播放一区二区三区| 亚洲午夜羞羞片| 亚洲一区二区欧美日韩| 伊人色综合久久天天| 18涩涩午夜精品.www| 国产精品午夜春色av| 国产亚洲成年网址在线观看| 26uuu另类欧美亚洲曰本| 欧美电视剧在线观看完整版| 日韩一区二区麻豆国产| 欧美日韩高清在线播放| 欧美日本一区二区| 欧美日韩成人激情| 欧美精品免费视频| 欧美一区二视频| 日韩一本二本av| 欧美成人激情免费网| 精品国产欧美一区二区| 欧美α欧美αv大片| 久久这里只精品最新地址| 久久久国际精品| 国产精品看片你懂得| 国产精品国产精品国产专区不片| 国产精品久久久久永久免费观看 | 一区二区欧美国产| 亚洲国产va精品久久久不卡综合| 一区二区三区资源| 亚洲大片一区二区三区| 欧美aaaaa成人免费观看视频| 久久99久久久欧美国产| 国产精品69毛片高清亚洲| 成人av中文字幕| 在线视频欧美区| 欧美一区二区三区电影| 久久精品欧美一区二区三区麻豆| 国产片一区二区三区| 亚洲美女精品一区| 亚洲成人免费观看| 黄色精品一二区| 99国产精品99久久久久久| 欧美色网站导航| 精品毛片乱码1区2区3区| 中文字幕精品一区二区三区精品 | 午夜欧美在线一二页| 蜜桃视频在线观看一区| 国产999精品久久久久久| 91福利精品视频| 91精品国产高清一区二区三区蜜臀 | 成人性色生活片免费看爆迷你毛片| 91碰在线视频| 91精品国产综合久久福利软件 | 88在线观看91蜜桃国自产| 久久久久久日产精品| 亚洲精品一卡二卡| 另类小说视频一区二区| 99riav一区二区三区| 日韩一区二区精品| 国产精品免费看片| 欧美aⅴ一区二区三区视频| 不卡av在线网| 日韩精品一区二区三区中文不卡 | 欧美日韩高清在线| 日本一区二区成人| 日本不卡不码高清免费观看| 丁香啪啪综合成人亚洲小说| 91麻豆精品国产91久久久资源速度 | 国产网红主播福利一区二区| 亚洲成人一区二区| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 日韩欧美一区在线| 欧美韩国日本不卡| 日本欧美一区二区三区乱码| 成人av网址在线| 日韩精品一区二区三区视频| 亚洲欧美偷拍卡通变态| 久久精品国内一区二区三区 | 欧美高清精品3d| 国产精品入口麻豆九色| 日本视频一区二区三区| 一本大道久久精品懂色aⅴ| 国产亚洲va综合人人澡精品| 五月天视频一区| av中文一区二区三区| 精品少妇一区二区| 日韩不卡在线观看日韩不卡视频| 色综合婷婷久久| 国产精品毛片久久久久久久| 国产美女在线观看一区| 制服视频三区第一页精品| 亚洲国产视频一区| 色94色欧美sute亚洲线路二 | 性久久久久久久久久久久 | 欧美日韩夫妻久久| 最新国产精品久久精品| 成人精品视频一区二区三区尤物| 精品福利av导航| 美女脱光内衣内裤视频久久影院| 欧美日韩三级一区二区| 亚洲美女一区二区三区| 91美女片黄在线观看| 亚洲色欲色欲www| 91在线观看一区二区| 国产免费成人在线视频| 国产乱码字幕精品高清av | 国产欧美日本一区二区三区| 精品一区二区在线播放| 精品第一国产综合精品aⅴ| 午夜激情一区二区| 欧美日韩在线一区二区| 亚洲高清在线精品| 欧美电影一区二区三区| 日韩和欧美的一区| 91精品在线一区二区| 奇米影视7777精品一区二区| 欧美成人女星排行榜| 韩国精品主播一区二区在线观看 | av电影一区二区| 国产精品久久久久久福利一牛影视 | 国产人伦精品一区二区| 国产成人自拍网| 中文字幕在线观看一区| 欧美综合一区二区三区| 午夜精品免费在线| 亚洲精品一区二区三区蜜桃下载 | 激情五月播播久久久精品| 久久午夜羞羞影院免费观看| 国产一区福利在线| 国产精品国产三级国产aⅴ无密码| 色综合婷婷久久| 青青草成人在线观看| 久久精品视频一区二区三区| 9i在线看片成人免费| 亚洲国产日韩在线一区模特| 日韩午夜在线观看| www.亚洲国产| 日韩激情中文字幕| 国产欧美一区二区精品性| 欧美吻胸吃奶大尺度电影| 国内精品国产成人国产三级粉色| 国产精品―色哟哟| 欧美精品久久99久久在免费线 | 亚洲男人天堂av| 日韩欧美国产综合在线一区二区三区|