poprawiony movement oraz maxFloat
This commit is contained in:
parent
1bf1dc50b9
commit
8faa04ecb5
68
Main.cpp
68
Main.cpp
@ -9,6 +9,8 @@
|
||||
#include<stack>
|
||||
|
||||
using namespace std;
|
||||
|
||||
const float maxFloat=FLT_MAX;
|
||||
const int ROW = 27;
|
||||
const int COL = 27;
|
||||
typedef pair<int, int> Pair;
|
||||
@ -19,9 +21,9 @@ struct cell
|
||||
double f, g, h;
|
||||
};
|
||||
|
||||
|
||||
char pole[27][27][2];
|
||||
int pozycjaTraktoraX = 1, pozycjaTraktoraY = 1;
|
||||
char currentWay = 'S';
|
||||
|
||||
void color(string foregroundColor, string backgroundColor)
|
||||
{
|
||||
@ -153,6 +155,43 @@ void updatePola()
|
||||
}
|
||||
}
|
||||
|
||||
void correctMovement(char wantedWay)
|
||||
{
|
||||
while (currentWay != wantedWay)
|
||||
{
|
||||
switch (currentWay)
|
||||
{
|
||||
case 'N':
|
||||
{
|
||||
if (wantedWay == 'S')
|
||||
currentWay = wantedWay;
|
||||
else
|
||||
currentWay = 'W';
|
||||
}break;
|
||||
case 'S':
|
||||
{
|
||||
if (wantedWay == 'N')
|
||||
currentWay = wantedWay;
|
||||
else
|
||||
currentWay = 'W';
|
||||
}break;
|
||||
case 'W':
|
||||
{
|
||||
if (wantedWay == 'E')
|
||||
currentWay = wantedWay;
|
||||
else
|
||||
currentWay = 'N';
|
||||
}break;
|
||||
case 'E':
|
||||
{
|
||||
if (wantedWay == 'W')
|
||||
currentWay = wantedWay;
|
||||
else
|
||||
currentWay = 'N';
|
||||
}break;
|
||||
}
|
||||
}
|
||||
}
|
||||
void Move(char kierunek)
|
||||
{
|
||||
switch (kierunek)
|
||||
@ -162,10 +201,10 @@ void Move(char kierunek)
|
||||
{
|
||||
if (pole[pozycjaTraktoraY - 1][pozycjaTraktoraX][0] != '#')
|
||||
{
|
||||
correctMovement('N');
|
||||
pole[pozycjaTraktoraY][pozycjaTraktoraX][0] = '.';
|
||||
pozycjaTraktoraY--;
|
||||
pole[pozycjaTraktoraY][pozycjaTraktoraX][0] = 'T';
|
||||
|
||||
}
|
||||
updatePola();
|
||||
}break;
|
||||
@ -174,10 +213,10 @@ void Move(char kierunek)
|
||||
{
|
||||
if (pole[pozycjaTraktoraY + 1][pozycjaTraktoraX][0] != '#')
|
||||
{
|
||||
correctMovement('S');
|
||||
pole[pozycjaTraktoraY][pozycjaTraktoraX][0] = '.';
|
||||
pozycjaTraktoraY++;
|
||||
pole[pozycjaTraktoraY][pozycjaTraktoraX][0] = 'T';
|
||||
|
||||
}
|
||||
updatePola();
|
||||
}break;
|
||||
@ -186,10 +225,10 @@ void Move(char kierunek)
|
||||
{
|
||||
if (pole[pozycjaTraktoraY][pozycjaTraktoraX - 1][0] != '#')
|
||||
{
|
||||
correctMovement('W');
|
||||
pole[pozycjaTraktoraY][pozycjaTraktoraX][0] = '.';
|
||||
pozycjaTraktoraX--;
|
||||
pole[pozycjaTraktoraY][pozycjaTraktoraX][0] = 'T';
|
||||
|
||||
}
|
||||
updatePola();
|
||||
}break;
|
||||
@ -198,17 +237,16 @@ void Move(char kierunek)
|
||||
{
|
||||
if (pole[pozycjaTraktoraY][pozycjaTraktoraX + 1][0] != '#')
|
||||
{
|
||||
correctMovement('E');
|
||||
pole[pozycjaTraktoraY][pozycjaTraktoraX][0] = '.';
|
||||
pozycjaTraktoraX++;
|
||||
pole[pozycjaTraktoraY][pozycjaTraktoraX][0] = 'T';
|
||||
|
||||
}
|
||||
updatePola();
|
||||
}break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool isValid(int x, int y)
|
||||
{
|
||||
if (pole[x][y][0] != '#')
|
||||
@ -217,7 +255,6 @@ bool isValid(int x, int y)
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool isDestination(int x, int y,Pair dest)
|
||||
{
|
||||
if (dest.first == x && dest.second == y)
|
||||
@ -226,12 +263,10 @@ bool isDestination(int x, int y,Pair dest)
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
double calculateHValue(int x, int y, Pair dest)
|
||||
{
|
||||
return abs(x - dest.first) + abs(y - dest.second);
|
||||
}
|
||||
|
||||
void tracePath(cell cellDetails[][COL], Pair dest)
|
||||
{
|
||||
//printf("\nThe Path is "); //----start info
|
||||
@ -270,7 +305,6 @@ void tracePath(cell cellDetails[][COL], Pair dest)
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void aStarSearch(int grid[][COL],Pair src, Pair dest)
|
||||
{
|
||||
bool closedList[ROW][COL];
|
||||
@ -283,9 +317,9 @@ void aStarSearch(int grid[][COL],Pair src, Pair dest)
|
||||
{
|
||||
for (j = 0; j < COL; j++)
|
||||
{
|
||||
cellDetails[i][j].f = FLT_MAX;
|
||||
cellDetails[i][j].g = FLT_MAX;
|
||||
cellDetails[i][j].h = FLT_MAX;
|
||||
cellDetails[i][j].f = maxFloat;
|
||||
cellDetails[i][j].g = maxFloat;
|
||||
cellDetails[i][j].h = maxFloat;
|
||||
cellDetails[i][j].parent_i = -1;
|
||||
cellDetails[i][j].parent_j = -1;
|
||||
}
|
||||
@ -331,7 +365,7 @@ void aStarSearch(int grid[][COL],Pair src, Pair dest)
|
||||
hNew = calculateHValue(i - 1, j, dest);
|
||||
fNew = gNew + hNew;
|
||||
|
||||
if (cellDetails[i - 1][j].f == FLT_MAX ||
|
||||
if (cellDetails[i - 1][j].f == maxFloat ||
|
||||
cellDetails[i - 1][j].f > fNew)
|
||||
{
|
||||
openList.insert(make_pair(fNew,
|
||||
@ -364,7 +398,7 @@ void aStarSearch(int grid[][COL],Pair src, Pair dest)
|
||||
gNew = cellDetails[i][j].g + waga;
|
||||
hNew = calculateHValue(i + 1, j, dest);
|
||||
fNew = gNew + hNew;
|
||||
if (cellDetails[i + 1][j].f == FLT_MAX ||
|
||||
if (cellDetails[i + 1][j].f == maxFloat ||
|
||||
cellDetails[i + 1][j].f > fNew)
|
||||
{
|
||||
openList.insert(make_pair(fNew, make_pair(i + 1, j)));
|
||||
@ -394,7 +428,7 @@ void aStarSearch(int grid[][COL],Pair src, Pair dest)
|
||||
gNew = cellDetails[i][j].g + waga;
|
||||
hNew = calculateHValue(i, j + 1, dest);
|
||||
fNew = gNew + hNew;
|
||||
if (cellDetails[i][j + 1].f == FLT_MAX ||
|
||||
if (cellDetails[i][j + 1].f == maxFloat ||
|
||||
cellDetails[i][j + 1].f > fNew)
|
||||
{
|
||||
openList.insert(make_pair(fNew,
|
||||
@ -425,7 +459,7 @@ void aStarSearch(int grid[][COL],Pair src, Pair dest)
|
||||
gNew = cellDetails[i][j].g + waga;
|
||||
hNew = calculateHValue(i, j - 1, dest);
|
||||
fNew = gNew + hNew;
|
||||
if (cellDetails[i][j - 1].f == FLT_MAX ||
|
||||
if (cellDetails[i][j - 1].f == maxFloat ||
|
||||
cellDetails[i][j - 1].f > fNew)
|
||||
{
|
||||
openList.insert(make_pair(fNew,
|
||||
|
Loading…
Reference in New Issue
Block a user