Page 1 of 1

Общая концепция ходилки.

Posted: 01.12.2014 19:11
by MuDaCk
Всем привет. Давно меня тут не было :)

Суть: Помогите с концепцией ходилки для бота. Игра не УО.

Дано: есть точка А(с координатами, например, 10, 25) и точка Б(50, 40). Между ними есть некоторые преграды. Дойти из точки А в точку Б.

Общее решение: Получить все точки(они квадратные и в координатах XY) между пунктами А и Б, проходим ли путь, пробежать по конкретным точкам.

Как получить все точки?
И как проверить проходим ли путь?

Пробежать по конкретным точкам могу и узнать проходима ли конкретная точка, тоже могу.

Допустим у меня есть путь - (1, 3);(2, 4);(3, 5) и в точке (2, 4) у меня преграда. Как мне просчитать снова этот путь, но без этой точке.

Желательно в JAVA стиле или просто натолкните на мысль. :roll:

Разный JAVA код

Code: Select all

public static void go(int a, int b){
	int x = p.getX();
	int y = p.getY();
	for (int i = 0; i<walls.size(); i++){
	
	if(x + a == walls.get(i).getX() && y + b == walls.get(i).getY()){
			canGo = false;
			System.out.println("You shall not pass!");
			break;
			}
		else{
			canGo = true;
		}
	}
	
}

Code: Select all

Map.go(a , b);
	if (Map.isCanGo()){
		super.move(a, b);
		Map.setCanGo(true);
	}

Code: Select all

protected void move(int x, int y) {
		
		if(this.getX()<this.getMaxH()-1 && x >= 0) {
			this.setX(this.getX()+x);
		}
		
		if(this.getX()>0 && x < 0) {
			this.setX(this.getX()+x);
		}
		
		if (this.getY()<this.getMaxV()-1 && y >= 0) {
			this.setY(this.getY()+y);
		}
		
		if (this.getY()>0 && y < 0) {
			this.setY(this.getY()+y);
		}
		
		System.out.println("X = "+ this.getX() + ";Y = "+ this.getY());
	}

Re: Общая концепция ходилки.

Posted: 01.12.2014 19:22
by nah nah

Code: Select all

https://ru.wikipedia.org/wiki/Алгоритм_поиска_A*
прост в реализации

Re: Общая концепция ходилки.

Posted: 01.12.2014 19:27
by MuDaCk
Спасибо. Покопаюсь.

Re: Общая концепция ходилки.

Posted: 02.12.2014 1:24
by Vizit0r
и в точке (2, 4) у меня преграда. Как мне просчитать снова этот путь, но без этой точке.
точка помечается как безусловно непроходимой и поиск пути соответственно ищет обходной маршрут.
Как получить все точки?
И как проверить проходим ли путь?
1)откуда я знаю, как в твоем случае (игре, программе или в чем там) получаются точки?
2) В алгоритме А* получать нужную, проверяемую в текущий момент точку и так до тех пор, пока не будет найден маршрут.
Если точки читаются из файла(ов) и точек МНОГО - обязательно делать кеш в памяти + использовать MMF.

Re: Общая концепция ходилки.

Posted: 04.12.2014 22:03
by MuDaCk
A star подошёл:). Спасибо)

MMF вообще интересная штука. Надо будет попробовать)