📄 pathfinder2d.cpp
字号:
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 + -