⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pathfinder2d.cpp

📁 一个VC写A*寻路的程序库
💻 CPP
📖 第 1 页 / 共 4 页
字号:
							for(int y=-3;y<3;y++)
							{
								for(int x=-3;x<3;x++)
								{
									line(lastx+x,lasty+y,xPos+x,yPos+y);
								}
							}
						}
						lastx=xPos;
						lasty=yPos;
						vGeneric->UpdateWorld();
						Redraw(hWnd);
					}
				}
			}
		}
		break;
		
		//
	case WM_COMMAND:
		wmId    = LOWORD(wParam); 
		wmEvent = HIWORD(wParam); 
		// Parse the menu selections:
		switch (wmId)
		{
		case IDM_ABOUT:
			DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
			break;
			
		case IDM_CONTENTS:
			WinHelp(hWnd,"pathfinder.hlp",HELP_CONTENTS,0);
			break;
		case IDM_INDEX:
			WinHelp(hWnd,"pathfinder.hlp",HELP_INDEX,0);
			break;
		case IDM_FIND:
			WinHelp(hWnd,"pathfinder.hlp",HELP_FINDER,0);
			break;
			
		case IDM_PAUSE_RESUME:
			runflag=!runflag;
			Redraw(hWnd);
			break;
			
		case IDM_REPATH:
			runflag=true;
			vGeneric->Reset();
			Redraw(hWnd);
			break;
			
		case IDM_UPDATE_AND_REPATH:
			runflag=true;
			update(hWnd);
			break;
			
		case IDM_ZOOM:
			if(!vGeneric->routing_view)
			{
				zoom=!zoom;
				Redraw(hWnd);
			}
			break;
			
		case IDM_DRAWMODE:
			if(drawmode)
				vSetup->Presearch();
			drawmode=!drawmode;
			runflag=!drawmode;
			vSetup->blocking_walls();
			Redraw(hWnd);
			break;
			
			//
		case IDM_PRESEARCH:
			vSetup->presearch_toggle=!vSetup->presearch_toggle;
			update(hWnd);
			break;
		case IDM_PRESEARCH_VIEW:
			presearch_view=!presearch_view;
			Redraw(hWnd);
			break;
			
			//
		case IDM_SAVE_SETTINGS:
			vSetup->save_settings();
			break;
		case IDM_LOAD_SETTINGS:
			vSetup->load_settings();
			vGeneric->Reset();
			Redraw(hWnd);
			break;
			
			//
		case IDM_GAMEMODE:
			if(vGeneric->gamemode)
				vGeneric->set_GameMode(false);
			else
				vGeneric->set_GameMode(true);
			vGeneric->Reset();
			Redraw(hWnd);
			break;
			
		case IDM_ROUTING_VIEW:
			vGeneric->routing_view=!vGeneric->routing_view;
			Redraw(hWnd);
			break;
			
			//
		case IDM_DEVELOPMENT:
			vGeneric->Switch_Algorithms(DEVELOPMENT_ALGORITHM);
			vGeneric->Reset();
			Redraw(hWnd);
			break;
		case IDM_ASTAR:
			vGeneric->Switch_Algorithms(ASTAR_ALGORITHM);
			vGeneric->Reset();
			Redraw(hWnd);
			break;
		case IDM_ASTAR_HEAPINTEGER:
			vGeneric->Switch_Algorithms(ASTAR_HEAPINTEGER_ALGORITHM);
			vGeneric->Reset();
			Redraw(hWnd);
			break;
		case IDM_ASTAR_HEAP:
			vGeneric->Switch_Algorithms(ASTAR_HEAP_ALGORITHM);
			vGeneric->Reset();
			Redraw(hWnd);
			break;
		case IDM_ASTAR_COMPLETE:
			vGeneric->Switch_Algorithms(ASTAR_COMPLETE_ALGORITHM);
			vGeneric->Reset();
			Redraw(hWnd);
			break;
		case IDM_ASTAR_ARRAY:
			vGeneric->Switch_Algorithms(ASTAR_ARRAY_ALGORITHM);
			vGeneric->Reset();
			Redraw(hWnd);
			break;
		case IDM_ASTAR_LINKEDLIST:
			vGeneric->Switch_Algorithms(ASTAR_LINKEDLIST_ALGORITHM);
			vGeneric->Reset();
			Redraw(hWnd);
			break;
		case IDM_DIJKSTRA:
			vGeneric->Switch_Algorithms(DIJKSTRA_ALGORITHM);
			vGeneric->Reset();
			Redraw(hWnd);
			break;
		case IDM_BREADTHFIRST:
			vGeneric->Switch_Algorithms(BREADTHFIRST_ALGORITHM);
			vGeneric->Reset();
			Redraw(hWnd);
			break;
		case IDM_BESTFIRST:
			vGeneric->Switch_Algorithms(BESTFIRST_ALGORITHM);
			vGeneric->Reset();
			Redraw(hWnd);
			break;
		case IDM_DEPTHFIRST:
			vGeneric->Switch_Algorithms(DEPTHFIRST_ALGORITHM);
			vGeneric->Reset();
			Redraw(hWnd);
			break;
		case IDM_BIBFS:
			vGeneric->Switch_Algorithms(BIBFS_ALGORITHM);
			vGeneric->Reset();
			Redraw(hWnd);
			break;
		case IDM_DSTAR:
			vGeneric->Switch_Algorithms(DSTAR_ALGORITHM);
			vGeneric->Reset();
			Redraw(hWnd);
			break;
		case IDM_RIGHTHANDRULE:
			vGeneric->Switch_Algorithms(RIGHTHANDRULE_ALGORITHM);
			vGeneric->Reset();
			Redraw(hWnd);
			break;
			
			//
		case IDM_COLORSCHEME_WHITE:
			vSetup->colorscheme=COLORSCHEME_WHITE;
			Redraw(hWnd);
			break;
		case IDM_COLORSCHEME_BLACK:
			vSetup->colorscheme=COLORSCHEME_BLACK;
			Redraw(hWnd);
			break;
		case IDM_COLORSCHEME_GRAY:
			vSetup->colorscheme=COLORSCHEME_GRAY;
			Redraw(hWnd);
			break;
		case IDM_COLORSCHEME_PAPER:
			vSetup->colorscheme=COLORSCHEME_PAPER;
			Redraw(hWnd);
			break;
			
			// update screen
		case IDM_FPS_60: //60fps
			TIMER_RATE=17;
			KillTimer(hWnd, TIMER_ID);
			SetTimer(hWnd, TIMER_ID, TIMER_RATE, NULL);
			Redraw(hWnd);
			break;
		case IDM_FPS_30:
			TIMER_RATE=33;
			KillTimer(hWnd, TIMER_ID);
			SetTimer(hWnd, TIMER_ID, TIMER_RATE, NULL);
			Redraw(hWnd);
			break;
		case IDM_FPS_10:
			TIMER_RATE=100;
			KillTimer(hWnd, TIMER_ID);
			SetTimer(hWnd, TIMER_ID, TIMER_RATE, NULL);
			Redraw(hWnd);
			break;
		case IDM_FPS_1:
			TIMER_RATE=1000;
			KillTimer(hWnd, TIMER_ID);
			SetTimer(hWnd, TIMER_ID, TIMER_RATE, NULL);
			Redraw(hWnd);
			break;
		case IDM_FPS_10S:
			TIMER_RATE=10000;
			KillTimer(hWnd, TIMER_ID);
			SetTimer(hWnd, TIMER_ID, TIMER_RATE, NULL);
			Redraw(hWnd);
			break;
			
			//
		case IDM_MEDIAN_1:
			vSetup->median_terrain_cost=1.0f;
			vGeneric->UpdateSettings();
			vGeneric->Reset();
			Redraw(hWnd);
			break;
		case IDM_MEDIAN_8:
			vSetup->median_terrain_cost=8.0f;
			vGeneric->UpdateSettings();
			vGeneric->Reset();
			Redraw(hWnd);
			break;
		case IDM_MEDIAN_16:
			vSetup->median_terrain_cost=16.0f;
			vGeneric->UpdateSettings();
			vGeneric->Reset();
			Redraw(hWnd);
			break;
		case IDM_MEDIAN_AUTO:
			vSetup->median_terrain_cost=vSetup->median_terrain_cost_auto;
			vGeneric->UpdateSettings();
			vGeneric->Reset();
			Redraw(hWnd);
			break;
			
			//
		case IDM_DIAGONAL_COST_1:
			vSetup->diagonal_cost=1.0f;
			vGeneric->UpdateSettings();
			vGeneric->Reset();
			Redraw(hWnd);
			break;
		case IDM_DIAGONAL_COST_1_4:
			vSetup->diagonal_cost=1.4f;
			vGeneric->UpdateSettings();
			vGeneric->Reset();
			Redraw(hWnd);
			break;
			
			//
		case IDM_COST_0:
			vSetup->use_terrain=false;
			vSetup->cost=0.0f;
			vGeneric->UpdateSettings();
			vGeneric->Reset();
			Redraw(hWnd);
			break;
		case IDM_COST_0_5:
			vSetup->use_terrain=false;
			vSetup->cost=0.5f;
			vGeneric->UpdateSettings();
			vGeneric->Reset();
			Redraw(hWnd);
			break;
		case IDM_COST_0_25:
			vSetup->use_terrain=false;
			vSetup->cost=0.25f;
			vGeneric->UpdateSettings();
			vGeneric->Reset();
			Redraw(hWnd);
			break;
		case IDM_COST_0_125:
			vSetup->use_terrain=false;
			vSetup->cost=0.125f;
			vGeneric->UpdateSettings();
			vGeneric->Reset();
			Redraw(hWnd);
			break;
		case IDM_COST_1:
			vSetup->use_terrain=false;
			vSetup->cost=1.0f;
			vGeneric->UpdateSettings();
			vGeneric->Reset();
			Redraw(hWnd);
			break;
		case IDM_COST_2:
			vSetup->use_terrain=false;
			vSetup->cost=2.0f;
			vGeneric->UpdateSettings();
			vGeneric->Reset();
			Redraw(hWnd);
			break;
		case IDM_COST_4:
			vSetup->use_terrain=false;
			vSetup->cost=4.0f;
			vGeneric->UpdateSettings();
			vGeneric->Reset();
			Redraw(hWnd);
			break;
		case IDM_COST_8:
			vSetup->use_terrain=false;
			vSetup->cost=8.0f;
			vGeneric->UpdateSettings();
			vGeneric->Reset();
			Redraw(hWnd);
			break;
		case IDM_COST_16:
			vSetup->use_terrain=false;
			vSetup->cost=16.0f;
			vGeneric->UpdateSettings();
			vGeneric->Reset();
			Redraw(hWnd);
			break;
		case IDM_COST_BY_TERRAIN:
			vSetup->use_terrain=true;
			vGeneric->UpdateSettings();
			vGeneric->Reset();
			Redraw(hWnd);
			break;
			
			//
		case IDM_PYTHAGORAS_DISTANCE:
			vSetup->distance_method=PYTHAGORAS_DISTANCE;
			vGeneric->UpdateSettings();
			vGeneric->Reset();
			Redraw(hWnd);
			break;
		case IDM_MANHATTAN_DISTANCE:
			vSetup->distance_method=MANHATTAN_DISTANCE;
			vGeneric->UpdateSettings();
			vGeneric->Reset();
			Redraw(hWnd);
			break;
		case IDM_DIAGONAL_DISTANCE:
			vSetup->distance_method=DIAGONAL_DISTANCE;
			vGeneric->UpdateSettings();
			vGeneric->Reset();
			Redraw(hWnd);
			break;
		case IDM_SIMPLE_PYTHAGORAS_DISTANCE:
			vSetup->distance_method=SIMPLE_PYTHAGORAS_DISTANCE;
			vGeneric->UpdateSettings();
			vGeneric->Reset();
			Redraw(hWnd);
			break;
			
			//
		case IDM_ITERATIONS_1:
			vSetup->iterations_per_frame=1;
			vGeneric->UpdateSettings();
			break;
		case IDM_ITERATIONS_10:
			vSetup->iterations_per_frame=10;
			vGeneric->UpdateSettings();
			break;
		case IDM_ITERATIONS_100:
			vSetup->iterations_per_frame=100;
			vGeneric->UpdateSettings();
			break;
		case IDM_ITERATIONS_1000:
			vSetup->iterations_per_frame=1000;
			vGeneric->UpdateSettings();
			break;
		case IDM_ITERATIONS_10000:
			vSetup->iterations_per_frame=10000;
			vGeneric->UpdateSettings();
			break;
		case IDM_ITERATIONS_FULL:
			vSetup->iterations_per_frame=WIDTH*HEIGHT;
			vGeneric->UpdateSettings();
			break;
			
			//
		case IDM_DEBUG12:
			vGeneric->set_GameMode(false);
			vSetup->set_start(10,10);
			vSetup->set_end(190,190);
			vSetup->distance_method=MANHATTAN_DISTANCE;
			vSetup->directions=4;
			vSetup->iterations_per_frame=WIDTH*HEIGHT;
			vSetup->use_terrain=true;
			vSetup->diagonal_cost=1.0f;
			vSetup->Load("mars200x200.tga");
			update(hWnd);
			break;
		case IDM_DEBUG11:
			vGeneric->set_GameMode(false);
			vSetup->set_start(10,10);
			vSetup->set_end(138,177);
			vSetup->distance_method=MANHATTAN_DISTANCE;
			vSetup->directions=4;
			vSetup->iterations_per_frame=1000;
			vSetup->use_terrain=true;
			vSetup->Load("mars.tga");
			update(hWnd);
			break;
		case IDM_DEBUG10:
			vGeneric->set_GameMode(false);
			vSetup->set_start(10,10);
			vSetup->set_end((BYTE)(HEIGHT-20),(BYTE)(WIDTH-20));
			vSetup->distance_method=MANHATTAN_DISTANCE;
			vSetup->directions=4;
			vSetup->iterations_per_frame=WIDTH*HEIGHT;
			vSetup->use_terrain=true;
			vSetup->Load("mars.tga");
			update(hWnd);
			break;
		case IDM_DEBUG9:
			vGeneric->set_GameMode(false);
			vSetup->set_start(HEIGHT/8,WIDTH/2);
			vSetup->set_end(HEIGHT-HEIGHT/8,WIDTH/2);
			vSetup->distance_method=MANHATTAN_DISTANCE;
			vSetup->directions=8;
			vSetup->iterations_per_frame=WIDTH*HEIGHT;
			vSetup->use_terrain=false;
			//vSetup->cost=1.0f;
			vSetup->Map_StraightLine();
			update(hWnd);
			break;
		case IDM_DEBUG8:
			vGeneric->set_GameMode(false);
			vSetup->set_start(10,10);
			vSetup->set_end(HEIGHT-10,WIDTH-10);
			vSetup->directions=8;
			vSetup->iterations_per_frame=WIDTH*HEIGHT;
			vSetup->use_terrain=false;
			//vSetup->cost=0.5f;
			vSetup->Map_BoxOnBox();
			update(hWnd);
			break;
		case IDM_DEBUG7:
			vGeneric->set_GameMode(false);
			vSetup->set_start(10,10);
			vSetup->set_end((BYTE)(HEIGHT-20),(BYTE)(WIDTH-20));
			vSetup->iterations_per_frame=WIDTH*HEIGHT;
			vSetup->use_terrain=true;
			vSetup->Map_PipeMaze();
			update(hWnd);
			break;
		case IDM_DEBUG6:
			vGeneric->set_GameMode(false);
			vSetup->set_start(10,10);
			vSetup->set_end(HEIGHT-10,WIDTH-10);
			vSetup->distance_method=MANHATTAN_DISTANCE;
			vSetup->directions=8;
			vSetup->iterations_per_frame=WIDTH*HEIGHT;
			vSetup->use_terrain=false;
			vSetup->Load("clutter.tga");
			update(hWnd);
			break;
		case IDM_DEBUG5:
			vGeneric->set_GameMode(false);
			vSetup->set_start(10,10);
			vSetup->set_end((BYTE)(HEIGHT-20),(BYTE)(WIDTH-20));
			vSetup->iterations_per_frame=WIDTH*HEIGHT;
			vSetup->use_terrain=true;
			vSetup->Map_Random();
			update(hWnd);
			break;
		case IDM_DEBUG4:
			vSetup->directions=8;
			vGeneric->set_GameMode(false);
			vSetup->set_start(2,2);
			vSetup->set_end(HEIGHT-2,WIDTH-2);
			vSetup->iterations_per_frame=WIDTH*HEIGHT;
			vSetup->use_terrain=false;
			vSetup->Map_Clear_Path();
			update(hWnd);
			break;
		case IDM_DEBUG3:
			vSetup->directions=8;
			vGeneric->set_GameMode(false);
			vSetup->set_start(2,WIDTH-2);
			vSetup->set_end(HEIGHT-2,2);
			vSetup->iterations_per_frame=WIDTH*HEIGHT;
			vSetup->use_terrain=false;
			vSetup->Map_Clear_Path();
			update(hWnd);
			break;
		case IDM_DEBUG2:
			vSetup->directions=8;
			vGeneric->set_GameMode(false);
			vSetup->set_start(HEIGHT>>1,2);
			vSetup->set_end(HEIGHT>>1,WIDTH-2);
			vSetup->iterations_per_frame=WIDTH*HEIGHT;
			vSetup->use_terrain=false;
			vSetup->Map_Clear_Path();
			update(hWnd);
			break;
		case IDM_DEBUG1:
			vSetup->directions=8;
			vGeneric->set_GameMode(false);
			vSetup->set_start(10,10);
			vSetup->set_end(10,11);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -