Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private void findPath(int startX, int startY, int endX, int endY)
- {
- pathmatrix = new int[numberOfTilesInHeight,numberOfTilesInWidth];
- for (int i = 0; i < numberOfTilesInHeight; i++)
- for (int j = 0; j < numberOfTilesInWidth; j++)
- {
- if (backMatrix[i, j] != Settings.Default.idWall)
- pathmatrix[i, j] = -2;
- else
- pathmatrix[i, j] = -1;
- }
- pathmatrix[startX, startY] = 0;
- bool changed = true;
- int step = 0;
- while ((changed) && (pathmatrix[endX, endY] == -2))
- {
- changed = false;
- step++;
- for (int i = 0; i < numberOfTilesInHeight; i++)
- {
- for (int j = 0; j < numberOfTilesInWidth; j++)
- {
- if (pathmatrix[i, j] == step - 1)
- {
- if ((i - 1 >= 0) && (pathmatrix[i - 1, j] == -2) && (pathmatrix[i - 1, j] != -1))
- {
- pathmatrix[i - 1, j] = step;
- changed = true;
- }
- if ((i + 1 < numberOfTilesInHeight) && (pathmatrix[i + 1, j] == -2) &&
- (pathmatrix[i + 1, j] != -1))
- {
- pathmatrix[i + 1, j] = step;
- changed = true;
- }
- if ((j - 1 >= 0) && (pathmatrix[i, j - 1] == -2) && (pathmatrix[i, j - 1] != -1))
- {
- pathmatrix[i, j - 1] = step;
- changed = true;
- }
- if ((j + 1 < numberOfTilesInWidth) && (pathmatrix[i, j + 1] == -2) &&
- (pathmatrix[i, j + 1] != -1))
- {
- pathmatrix[i, j + 1] = step;
- changed = true;
- }
- }
- }
- }
- }
- }
- private void makeStep(int x, int y, int pathid)
- {
- if (pathmatrix[x, y] == 0) return;
- int curStep = pathmatrix[x, y];
- if ((x - 1 >= 0) && (pathmatrix[x - 1, y] == curStep - 1))
- {
- frontMatrix[x, y] = pathid;
- x -= 1;
- curStep++;
- makeStep(x, y, pathid);
- path.Add(new Point(x, y));
- return;
- }
- if ((y - 1 >= 0) && (pathmatrix[x, y - 1] == curStep - 1))
- {
- frontMatrix[x, y] = pathid;
- y -= 1;
- curStep++;
- makeStep(x, y, pathid);
- path.Add(new Point(x, y));
- return;
- }
- if ((x + 1 < numberOfTilesInHeight) && (pathmatrix[x + 1, y] == curStep - 1))
- {
- frontMatrix[x, y] = pathid;
- x += 1;
- curStep++;
- makeStep(x, y, pathid);
- path.Add(new Point(x, y));
- return;
- }
- if ((y + 1 < numberOfTilesInWidth) && (pathmatrix[x, y + 1] == curStep - 1))
- {
- frontMatrix[x, y] = pathid;
- y += 1;
- curStep++;
- makeStep(x, y, pathid);
- path.Add(new Point(x, y));
- return;
- }
- }
Add Comment
Please, Sign In to add comment