Что нового

[Джаггернаут / Легенда] Перемещение по локациям в Flasch играх

Korisch24

Новичок
Сообщения
2
Репутация
0
Всем привет. Может кто помочь или направить на правильный путь?
Есть игра Джаггернаут, переходы по локациям в виде строчек.
Картинка:

Все локации по сути одинаковые ( два , три где и четыре перехода).
Как это можно реализовать в код с помощью "_ImageSearch" или PixelSearch
Вот кусочек кода по определению локаии:
Код:
;код ищет все файлы находящиеся в папке "lokazii"
;и если находит выдает сообщение

Func tekuchlokazi()
$hSearch = FileFindFirstFile(@ScriptDir &'\lokazii\*.bmp');филтр поиска
     While 2
       $sFile = FileFindNextFile($hSearch) ; возвращает имя следующего файла, начиная от первого до последнего
        If @error Then ExitLoop
	   $result= _ImageSearch("lokazii/" & $sFile,1,$x1,$y1,0);поиск
        If $result = 1 Then
		   $iAnswer = MsgBox(1, 'Текущая локаця', $sFile);сообщение для проверки находит ли
           If $iAnswer = 2 Then ExitLoop
		EndIf
	 WEnd
 EndFunc


Суть вопроса в том чтобы код прокладывал маршрут и кликал на переход.
Как я это вижу: определяем локацию, сравниваем с целью, прокладываем маршрут, переход, и т. д. до цели.


Тему про волновой алгоритм смотрел , ничего не понял.
 

Вложения

  • Screenshot_1.jpg
    Screenshot_1.jpg
    193.5 КБ · Просмотры: 31

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Для каждой локации прописываешь свойства, например "Имя локации и в какую локацию из неё можно попасть", таким методом сможешь в итоге расчитывать маршрут. Читай алгоритм Дийкстры
 

_ToBe_

Осваивающий
Сообщения
142
Репутация
35
Или для каждой локации выбираешь 3 уникальные пикселя, записываешь их в базу и даёшь название
Например: (кр, син, зел) = Ponyland * (кр, кр, кр) = BantmaCave * (син, бел, чрн) = WC
Ну а дальше уже шагаешь... Например тебе нужна локация Batman Cave и ты знаешь что она идёт после Ponyland, значит кликаешь в правом меню "След. Локация" ... Как-то так ;D
 
Автор
K

Korisch24

Новичок
Сообщения
2
Репутация
0
Вот набросал кое что:
Код:
Func putichest()
     While 3
	    put()
	     If $sFile = $loka Then
		   ExitLoop
	    EndIf
	  WEnd
   EndFunc



Func put()
$hSearch = FileFindFirstFile(@ScriptDir &'\lokazii\*.bmp');филтр поиска
     While 2
       $sFile = FileFindNextFile($hSearch) ; возвращает имя следующего файла, начиная от первого до последнего
        If @error Then ExitLoop
	   $result= _ImageSearch("lokazii/" & $sFile,1,$x1,$y1,0);поиск
        If $result = 1 Then
		  MsgBox(1, "1",$sFile & @CRLF& $loka)
		   If $sFile = $loka Then
			  MsgBox(1, "Цель достигнута","УРАААА Цель достигнута")
			  ExitLoop
		   EndIf
			perehod()
		EndIf
	 WEnd
  EndFunc
  
  
  Func perehod()
	 $Arr = IniReadSection("Perehodi.ini",$loka )
     $string = ""
     For $i = 1 To $Arr[0][0]
        $string =$Arr[$i][1]
		$perehod = $Arr[$i][0]
		;MsgBox(1, "1",$Arr[$i][0]&$string)
		           prower()
		$Arr1 = IniReadSection("Perehodi.ini",$string )
		For $a=1 To $Arr1[0][0]
		  $string =$Arr1[$a][1]
		  $perehod = $Arr1[$a][0]
		  ;MsgBox(1, "2",$Arr1[$a][0]&$string)
		           prower()
		  $Arr2 = IniReadSection("Perehodi.ini",$string)
		  For $b=1 To $Arr2[0][0]
			 $string =$Arr2[$b][1]
		     $perehod = $Arr2[$b][0]
			 ;MsgBox(1, "3",$Arr2[$b][0]&$string)
		           prower()
		     $Arr3 = IniReadSection("Perehodi.ini",$string )
		     For $c=1 To $Arr3[0][0]
		        $string =$Arr3[$c][1]
		        $perehod = $Arr3[$c][0]
		           prower()
				;MsgBox(1, "4",$string)
		        $Arr4 = IniReadSection("Perehodi.ini",$string )
		        For $d=1 To $Arr4[0][0]
		           $string =$Arr4[$d][1]
		           $perehod = $Arr4[$d][0]
		           prower()
				   ;MsgBox(1, "5",$string)
		        Next
		     Next
		  Next
		Next
     Next

EndFunc


Func prower()
    If $string = $sFile Then
	   $perehod = _ImageSearch("perehodi/"&$perehod ,1,$kul1x,$kul1y,10)
	   if $perehod = 1 Then
		  MouseClick('LEFT',$kul1x,$kul1y,1,Random(10,16))
		  Sleep(500)
		  MouseMove($kul1x,$kul1y+100,Random(10,16))
		  Sleep(1000)
		  put()
	   EndIf
    EndIf
 EndFunc



В файле "Perehodi.ini" :
[Локация.bmp]
переход в право.bmp=из локации.bmp
переход в лево.bmp=из локации.bmp

код вычисляет маршрут от финиша к старту
пробывал наоборот ходит туда сюда в двух лакациях

Вопрос к специалистам : можно ли код упростить? я типо начинающий еще не все знаю.
код только максимум пять переходов если делать 10 или 15 очень длинный код получится.
 

_ToBe_

Осваивающий
Сообщения
142
Репутация
35
Прикрепил файлик
Это прототип, который движется по заданному курсу от точки А в точку Б... в оба направления. Т.е. если А больше Б, то путь прокладывается в обратном направлении :scratch:

205795f32d.png


Если сможешь понять логику и умеешь пользоваться массивами, тогда успех твоему боту обеспече. Если нет - обращайся, будем дальше разбираться :D
 

Вложения

  • Test.au3
    2.1 КБ · Просмотры: 27
Верх