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

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

?? dlgmain.cpp

?? A*算法
?? CPP
字號:
#include <windows.h>
#include <winuser.h>
#include "main.h"
#include "resource.h"
#include "WayPoint.h"
#include "AStar.h"
#include <math.h>
#include "MyDialog.h"

char FileName[512]={0};
HWND _hWnd; 
CWayPoint WayPoint;
CAStar AStar;
HHOOK hMsgHook=NULL;
bool bControlIsDown=false;
HDC hdc;
float Scale=1.0f;//比例
int DrawLeft=0;//顯示區域的左上角
int DrawTop=0;//顯示區域的左上角
HBRUSH BackColorHbr;
RECT CanvasRect;
int OldMousePosX,OldMousePosY;
int SelectedIndex=-1;
int SelectedIndexTo=-1;
POINT tempLineF,tempLineT;

//創建內存兼容DC
HDC DestHdc;//目標DC
HDC CompDC;//內存兼容dc
HBITMAP CompBMP;//內存兼容bmp
HGDIOBJ oldOBJBMP;//

struct SSMallTestMan
{
	int x;
	int y;
	int endNode;
	int nextNode;
}smallTestMan;

void DrawCircle(int x,int y,int r,int color)
{
	HPEN hPen=CreatePen(PS_SOLID,1,color);
	HGDIOBJ oldObj=SelectObject(CompDC,hPen);
	int tempx=(x)*Scale-DrawLeft;
	int tempy=(y)*Scale-DrawTop;
	Ellipse(CompDC,tempx-r/2,tempy-r/2,tempx+r/2,tempy+r/2);
	SelectObject(CompDC,oldObj);
	DeleteObject(hPen);
}
void DrawLine(int fx,int fy,int tx,int ty,int color)
{
	int tempx=(fx)*Scale-DrawLeft;
	int tempy=(fy)*Scale-DrawTop;
	MoveToEx(CompDC,tempx,tempy,NULL);
	tempx=(tx)*Scale-DrawLeft;
	tempy=(ty)*Scale-DrawTop;
	LineTo(CompDC,tempx,tempy);
}

void ShowAllPoint()
{

	FillRect(CompDC,&CanvasRect,BackColorHbr);//填充背景色
	int NCount=WayPoint.GetNodeCount();
	for(int i=0;i<NCount;i++)
	{
		SWPNode *tempNode=WayPoint.GetWPNode(i);
		DrawCircle(tempNode->x,tempNode->y,6,0);
		if(i==SelectedIndex)
			DrawCircle(tempNode->x,tempNode->y,8,RGB(0,0,0xff));
		if(i==SelectedIndexTo)
			DrawCircle(tempNode->x,tempNode->y,8,RGB(0,0xff,0));
		for(int j=0;j<tempNode->NeighborCount;j++)
		{
			SWPNode *NbNode=WayPoint.GetWPNodeByID(tempNode->Neighbor[j]);
			DrawLine(tempNode->x,tempNode->y,NbNode->x,NbNode->y,0);
		}
	}
	if(SelectedIndex!=-1&&bControlIsDown)
	{
		//DrawLine(tempLineF.x,tempLineF.y,tempLineT.x,tempLineT.y,0);
		MoveToEx(CompDC,tempLineF.x,tempLineF.y,NULL);
		LineTo(CompDC,tempLineT.x,tempLineT.y);
	}
	DrawCircle(smallTestMan.x,smallTestMan.y,9,RGB(0xff,0,0));
	BitBlt(hdc,0,0,CanvasRect.right,CanvasRect.bottom,CompDC,0,0,SRCCOPY);
}

void Open_OnClick()
{
	CMyDialog mydlg(_hWnd,_hInstance);
	mydlg.SetFilter("*.txt");
	mydlg.SetFileName("*.txt");
	if(mydlg.ShowOpen())
	{
		mydlg.GetFile(FileName);
		if(FileName[0]!='\0')
		{
			SetWindowText(_hWnd,FileName);
			WayPoint.ReadWayPointFile(FileName);
			SelectedIndex=-1;
			int NCount=WayPoint.GetNodeCount();
			ShowAllPoint();
		}
	}
}

void Save_OnClick()
{
	if(FileName[0]=='\0')
	{
		CMyDialog mydlg(_hWnd,_hInstance);
		mydlg.SetFilter("*.txt");
		mydlg.SetFileName("*.txt");
		mydlg.ShowSave();
		mydlg.GetFile(FileName);
	}
	if(FileName[0]!='\0')
	{
		WayPoint.SaveWayPointToFile(FileName);
		SetWindowText(_hWnd,FileName);
	}
}

void New_OnClick()
{
	WayPoint.ClearNode();
	FileName[0]='\0';
	SelectedIndex=-1;
	SetWindowText(_hWnd,"新建");
	ShowAllPoint();
}

void Form_OnLoad()
{
	BackColorHbr=CreateSolidBrush(0xaaaaaa);
	GetClientRect(GetDlgItem(_hWnd,IDC_PICMAIN),&CanvasRect);
	hdc=GetDC(GetDlgItem(_hWnd,IDC_PICMAIN));
	Scale=1;
	DrawLeft=0;
	RegisterHotKey(_hWnd,GlobalAddAtom("ctrl+a"),MOD_CONTROL,'P');
	/***********************/
	GetClientRect(_hWnd,&CanvasRect);
	//創建內存兼容DC
	DestHdc=GetDC(_hWnd);	
	CompDC=CreateCompatibleDC(NULL);
	CompBMP=CreateCompatibleBitmap(DestHdc,CanvasRect.right,CanvasRect.bottom);
	oldOBJBMP=SelectObject(CompDC,CompBMP);
}

void Form_OnClose()
{
	ReleaseDC(GetDlgItem(_hWnd,IDC_PICMAIN),hdc);
}

void Form_OnKeyDown(WPARAM wParam)
{
	switch(wParam)
	{
	case VK_CONTROL:
		bControlIsDown=true;
		SetCursor(LoadCursor(NULL,MAKEINTRESOURCE(32649)));
		break;
	case VK_SHIFT:
		SetCursor(LoadCursor(NULL,IDC_CROSS));
		break;
	case VK_DELETE:
		if(SelectedIndex!=-1)
		{
			WayPoint.RemoveNode(SelectedIndex);
			SelectedIndex=-1;
			ShowAllPoint();
		}
	}
}

void Form_OnKeyUp(WPARAM wParam)
{
	switch(wParam)
	{
	case VK_CONTROL:case VK_SHIFT:
		bControlIsDown=false;
		SelectedIndexTo=-1;
		ShowAllPoint();
		SetCursor(LoadCursor(NULL,IDC_ARROW));
		break;
	}
}

void Form_OnMouseWheel(int fwKeys,int zDelta,int xPos,int yPos )
{
	float cx,cy;//實際的位置
	cx=(CanvasRect.right/2+DrawLeft)/Scale;
	cy=(CanvasRect.bottom/2+DrawTop)/Scale;
	if(zDelta>0)
	{
		Scale=Scale*1.2;		
		DrawLeft=(cx)*Scale-CanvasRect.right/2;
		DrawTop=cy*Scale-CanvasRect.bottom/2;
	}
	else
	{
		Scale=Scale/1.2;
		DrawLeft=(cx)*Scale-CanvasRect.right/2;
		DrawTop=cy*Scale-CanvasRect.bottom/2;
	}
	ShowAllPoint();
}

int GetPointNearMouse(int xPos,int yPos)
{
	int TempIndex=-1;
	int NCount=WayPoint.GetNodeCount();
	for(int i=0;i<NCount;i++)
	{
		SWPNode *tempNode=WayPoint.GetWPNode(i);
		int dx=(xPos+DrawLeft)-tempNode->x*Scale;
		int dy=(yPos+DrawTop)-tempNode->y*Scale;
		if(dx*dx+dy*dy<36)
		{
			TempIndex=i;
			break;
		}
	}
	return TempIndex;
}

void Form_OnMouseMove(WPARAM fwKeys,int xPos,int yPos)
{
	if(fwKeys&MK_SHIFT)
	{
		SetCursor(LoadCursor(NULL,IDC_CROSS));
	}
	else if(fwKeys&MK_CONTROL)
	{
		SetCursor(LoadCursor(NULL,MAKEINTRESOURCE(32649)));
		if(SelectedIndex!=-1)
		{
			tempLineF.x=WayPoint.GetWPNode(SelectedIndex)->x*Scale-DrawLeft;
			tempLineF.y=WayPoint.GetWPNode(SelectedIndex)->y*Scale-DrawTop;
			tempLineT.x=xPos;
			tempLineT.y=yPos;
		}
		SelectedIndexTo=GetPointNearMouse(xPos,yPos);
		if(SelectedIndexTo!=-1)
		{
			tempLineT.x=WayPoint.GetWPNode(SelectedIndexTo)->x*Scale-DrawLeft;
			tempLineT.y=WayPoint.GetWPNode(SelectedIndexTo)->y*Scale-DrawTop;
		}
		ShowAllPoint();
	}
	else if(fwKeys&MK_LBUTTON)
	{
		SetCursor(LoadCursor(NULL,IDC_SIZEALL));
		DrawLeft=DrawLeft-xPos+OldMousePosX;
		DrawTop=DrawTop-yPos+OldMousePosY;
		OldMousePosX=xPos;
		OldMousePosY=yPos;
		ShowAllPoint();
	}
}

void Form_OnLButtonDown(WPARAM fwKeys,int xPos,int yPos)
{
	if(fwKeys&MK_SHIFT&&GetPointNearMouse(xPos,yPos)==-1)
	{
		WayPoint.AddNode((xPos+DrawLeft)/Scale+0.5,(yPos+DrawTop)/Scale+0.5,WayPoint.GetNewID());
		ShowAllPoint();
	}
	else if(fwKeys&MK_CONTROL)
	{
		if(SelectedIndex!=-1)
		{
			int tempToIndex=GetPointNearMouse(xPos,yPos);
			if(tempToIndex!=-1 && tempToIndex!=SelectedIndex)
			{
				int dx=WayPoint.GetWPNode(SelectedIndex)->x
						-WayPoint.GetWPNode(tempToIndex)->x;
				int dy=WayPoint.GetWPNode(SelectedIndex)->y
						-WayPoint.GetWPNode(tempToIndex)->y;
				WayPoint.AddNeighbor(SelectedIndex,
					WayPoint.GetWPNode(tempToIndex)->ID,sqrt(float(dx*dx+dy*dy)));
				WayPoint.AddNeighbor(tempToIndex,
					WayPoint.GetWPNode(SelectedIndex)->ID,sqrt(float(dx*dx+dy*dy)));
				SelectedIndex=tempToIndex;
			}
		}
		ShowAllPoint();
	}
	else
	{
		if(GetPointNearMouse(xPos,yPos)!=-1)
			SelectedIndex=GetPointNearMouse(xPos,yPos);
		ShowAllPoint();
	}
	OldMousePosX=xPos;
	OldMousePosY=yPos;
	//SetCursor(LoadCursor(NULL,IDC_SIZEALL));
}

void Form_OnRButtonDown(WPARAM fwKeys,int xPos,int yPos)
{
	if(WayPoint.GetNodeCount()>0)
	{
		//右鍵指定測試小人的目標
		int destX=(xPos+DrawLeft)/Scale;
		int destY=(yPos+DrawTop)/Scale;
		int fromIndex=WayPoint.GetNearestIndex(smallTestMan.x,smallTestMan.y);
		int toIndex=WayPoint.GetNearestIndex(destX,destY);
		AStar.InitNodeByWayPoint(&WayPoint);
		if(AStar.FindPath(fromIndex,toIndex))
		{
			smallTestMan.nextNode=0;
			smallTestMan.endNode=AStar.GetNodeCount()-1;
			SetTimer(_hWnd,0,10,NULL);
		}
		ShowAllPoint();
	}
}

void Form_OnTimer()
{
	//移動測試小人
	int ni=AStar.GetNodeIndex(smallTestMan.nextNode);
	int dx=WayPoint.GetWPNode(ni)->x-smallTestMan.x;
	int dy=WayPoint.GetWPNode(ni)->y-smallTestMan.y;
	int dist=sqrt(float(dx*dx+dy*dy));
	if(dist<=4)
	{
		if(smallTestMan.nextNode==smallTestMan.endNode)
			KillTimer(_hWnd,0);
		else
			smallTestMan.nextNode++;
	}
	int step=dist/3;
	if(step==0)
		step=1;
	int vx=dx/step;
	int vy=dy/step;
	smallTestMan.x+=vx;
	smallTestMan.y+=vy;
	LPPAINTSTRUCT lps=NULL;
	BeginPaint(GetDlgItem(_hWnd,IDC_PICMAIN),lps);
	ShowAllPoint();
	EndPaint(GetDlgItem(_hWnd,IDC_PICMAIN),lps);
}

LRESULT CALLBACK GetMsgProc(int code,WPARAM wParam,LPARAM lParam)
{
	MSG *msg;
	if(code==HC_ACTION)
	{
		msg=(MSG *)lParam;
		switch(msg->message)
		{
		case WM_KEYDOWN:
			Form_OnKeyDown(msg->wParam);
			break;
		case WM_KEYUP:
			Form_OnKeyUp(msg->wParam);
			break;
		case WM_HOTKEY:
			MessageBox(_hWnd,"ppppp","",NULL);
			break;
		}
	}
	return CallNextHookEx(hMsgHook,code,wParam,lParam);
}


BOOL CALLBACK DlgMainProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	//RECT rp,rc;
	LPPAINTSTRUCT lps=NULL;
	switch(message)
	{
	case WM_INITDIALOG:
		SetIcon(hWnd,LoadIcon(_hInstance,MAKEINTRESOURCE(IDI_ICON1)),true);
		hMsgHook=SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)GetMsgProc,_hInstance,GetWindowThreadProcessId(hWnd,NULL));
		_hWnd=hWnd;
		Form_OnLoad();
		break;
	case WM_COMMAND:
		switch(LOWORD(wParam))
		{
		case IDC_OPEN:
			Open_OnClick();
			break;
		case IDC_SAVE:
			Save_OnClick();
			break;
		case IDC_NEW:
			New_OnClick();
			break;
		}
		break;
	case WM_MOUSEMOVE:
		Form_OnMouseMove(wParam, LOWORD(lParam),HIWORD(lParam));
		break;
	case WM_LBUTTONDOWN:
		Form_OnLButtonDown(wParam, LOWORD(lParam),HIWORD(lParam));
		break;
	case WM_RBUTTONDOWN:
		Form_OnRButtonDown(wParam, LOWORD(lParam),HIWORD(lParam));
		break;
	case 0x20A:
		Form_OnMouseWheel(LOWORD(wParam),(short) HIWORD(wParam),
			LOWORD(lParam),HIWORD(lParam));
		break;
	case WM_PAINT:
		BeginPaint(GetDlgItem(_hWnd,IDC_PICMAIN),lps);
		ShowAllPoint();
		EndPaint(GetDlgItem(_hWnd,IDC_PICMAIN),lps);
		break;
	case WM_TIMER:
		Form_OnTimer();
		break;
	case WM_SYSCOMMAND:
		switch(wParam)
		{
		case SC_CLOSE:
			Form_OnClose();
			EndDialog(hWnd,0);
			return TRUE;
		}
		break;
	}
	return FALSE;
}

BOOL ShowDlgMain()
{
	if(-1==DialogBox(_hInstance,"DLGMAIN",NULL,DlgMainProc))
	{
		MessageBox(NULL,"生成窗體失敗",appName,MB_DEFBUTTON1);
		return FALSE;
	}
	return TRUE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区激情在线| 国产精品久久网站| 亚洲一区二区三区小说| 9人人澡人人爽人人精品| 国产亚洲欧洲997久久综合| 极品瑜伽女神91| 欧美成人女星排名| 久久国产夜色精品鲁鲁99| 日韩一区二区在线免费观看| 亚洲高清一区二区三区| 欧美日韩精品系列| 亚洲国产视频a| 欧美人xxxx| 麻豆91精品91久久久的内涵| 日韩一级片在线观看| 美美哒免费高清在线观看视频一区二区 | 久久久精品黄色| 欧美视频三区在线播放| 一区二区三区在线播放| 欧美日韩在线播放一区| 亚洲丝袜美腿综合| 成人国产视频在线观看| 亚洲欧洲美洲综合色网| 9人人澡人人爽人人精品| 亚洲另类中文字| 欧美性猛交xxxx黑人交| 午夜精品福利一区二区三区蜜桃| 这里是久久伊人| 国产一区在线观看麻豆| 国产精品萝li| 国产99精品视频| 亚洲一区在线视频| 91精品国产手机| 国产成人精品1024| 成人欧美一区二区三区1314| 欧洲国产伦久久久久久久| 人人精品人人爱| 国产日韩欧美精品一区| 91久久线看在观草草青青| 婷婷国产在线综合| 日韩免费视频一区| 91亚洲男人天堂| 蜜臀国产一区二区三区在线播放| 国产日韩欧美亚洲| 欧美精品 日韩| jlzzjlzz欧美大全| 玖玖九九国产精品| 亚洲美女视频一区| 久久综合九色综合欧美98| 91成人免费电影| 美女看a上一区| 中文字幕电影一区| 91精品国产综合久久精品图片 | 一区二区理论电影在线观看| 日韩一本二本av| 91麻豆国产在线观看| 日本女人一区二区三区| 国产精品理论片在线观看| 欧美一区二区三区四区五区| 99精品欧美一区二区蜜桃免费| 一区二区三区日韩欧美精品| 欧美videofree性高清杂交| 一本大道久久a久久综合婷婷| 久久国产福利国产秒拍| 亚洲一区二区综合| 国产精品免费aⅴ片在线观看| 精品视频123区在线观看| 成人午夜免费视频| 五月天久久比比资源色| 最新国产精品久久精品| www国产成人| 欧美精品自拍偷拍| www久久精品| 欧美一区二区三区精品| 91福利视频网站| 91视频91自| 国产激情一区二区三区桃花岛亚洲| 视频一区在线播放| 亚洲精品福利视频网站| 综合色天天鬼久久鬼色| 久久天天做天天爱综合色| 欧美肥妇毛茸茸| 欧美熟乱第一页| 国产福利一区二区三区在线视频| 亚洲裸体xxx| 自拍视频在线观看一区二区| 国产精品嫩草99a| 国产视频一区二区在线| 欧美精品一区二区精品网| 日韩午夜电影在线观看| 欧美一级日韩不卡播放免费| 欧美系列在线观看| 欧美日韩国产成人在线免费| 欧美在线看片a免费观看| 色综合视频在线观看| 99精品1区2区| 色婷婷激情久久| 欧美性欧美巨大黑白大战| 欧美亚洲丝袜传媒另类| a亚洲天堂av| 99精品视频一区| 99久久免费视频.com| 一本在线高清不卡dvd| 色8久久精品久久久久久蜜| 色欧美88888久久久久久影院| 在线视频你懂得一区| 在线免费观看日本一区| 91视频在线观看免费| 欧美午夜精品电影| 欧美一区午夜视频在线观看| 日韩免费成人网| 国产欧美精品一区| 亚洲精品v日韩精品| 蜜臀av亚洲一区中文字幕| 免费观看成人鲁鲁鲁鲁鲁视频| 极品少妇一区二区| 97精品国产露脸对白| 欧美午夜精品久久久久久孕妇| 91麻豆精品国产91| 国产欧美精品区一区二区三区| 欧美一级在线视频| 国产亚洲精品免费| 一级中文字幕一区二区| 免费观看在线综合色| 国产精品一区二区91| 色婷婷久久一区二区三区麻豆| 欧美日韩精品久久久| 久久人人97超碰com| 成人欧美一区二区三区白人 | 国产欧美一区二区在线| 亚洲人成精品久久久久| 91丨九色丨黑人外教| 91福利视频久久久久| 欧美一区二区黄色| 一区精品在线播放| 蜜臀av在线播放一区二区三区| 懂色av一区二区夜夜嗨| 欧美日韩国产一级二级| 26uuu精品一区二区在线观看| 亚洲女与黑人做爰| 国产美女在线观看一区| 91麻豆国产香蕉久久精品| 日韩一区二区免费视频| 亚洲最色的网站| 成人av资源网站| 国产丝袜欧美中文另类| 六月丁香综合在线视频| 欧美三区在线观看| 亚洲欧美激情小说另类| 成人黄色在线网站| 久久久精品黄色| 国产精品一区二区不卡| 欧美va亚洲va香蕉在线| 免费av成人在线| 制服丝袜日韩国产| 亚洲成a人v欧美综合天堂下载| 91激情五月电影| 亚洲日本青草视频在线怡红院| 99久久免费精品| 亚洲品质自拍视频| 91视频免费播放| 亚洲一区二区偷拍精品| 欧美色图激情小说| 亚洲风情在线资源站| 欧美日韩国产成人在线免费| 亚洲成人一区在线| 欧美日韩国产欧美日美国产精品| 亚洲国产欧美另类丝袜| 欧美日韩中文字幕一区| 午夜视频久久久久久| 欧美日韩在线播放一区| 日本视频免费一区| 日韩精品中文字幕在线一区| 国产主播一区二区| 欧美国产成人在线| 91在线无精精品入口| 亚洲一区二区三区三| 欧美日韩一区二区三区四区五区| 亚洲国产乱码最新视频| 欧美高清激情brazzers| 热久久免费视频| 欧美精品一区二区三区在线| 国产精品一二三四五| 国产精品视频免费看| 日本精品视频一区二区三区| 亚洲国产综合人成综合网站| 91精品久久久久久蜜臀| 国产一区二区三区精品视频| 亚洲国产精品成人久久综合一区| 成人免费看片app下载| 一区二区三区不卡在线观看| 制服丝袜日韩国产| 国产一区二区视频在线播放| 成人欧美一区二区三区1314 | 91丨porny丨中文| 日韩精品乱码av一区二区| 欧美精品一区二区三| 97se亚洲国产综合自在线观| 天堂影院一区二区| 久久精品在线观看|