2014-04-06 12 views
5

Od pewnego czasu robię grę w sprite kit. Dodałem wrogów i zastanawiam się, jak mogę kontrolować ich na mapie za pomocą sztucznej inteligencji (tak jak w każdej innej grze).AI dla wroga w SpriteKit

Chcę, aby nieprzyjaciel zastanawiał się nad mapą TMX, skręcając w rogu w zależności od liczby losowej. Próbowałem to zrobić, ale mam wiele problemów. Czy ktoś wie o jakichkolwiek artykułach, które mogłyby mi w tym pomóc? Zrobiłem trochę badań. Pojawiają się "PathFinding" i "A *", ale dzięki znanemu wyjaśnieniu lub przykładowemu kodowi, jak to zrobić. Każda pomoc będzie wielce ceniona.

Odpowiedz

2

Strona Wikipedia dla algorytmu wyszukiwania * here zawiera przykład psuedokodu. Wszystko, czego naprawdę potrzebujesz, to zrozumienie działania algorytmu, więc powinieneś być w stanie go wdrożyć. Googling na iOS i A * przedstawia kilka samouczków.

Masz mapę płytek, więc powinno być stosunkowo łatwo zrobić, co chcesz, bez A * jak ten kawałek psuedokodu.

// An Update function for your Enemy 
function Update 
    paths = GetAllPathways() 
    if paths.length == 0 
     TurnAround() 
    else 
     randomPath = paths.Random() 
     TurnTowards(randomPath) 
    endif 
    MoveForward() 
end function 

function GetAllPathways() 
    paths = new Array() 
    if CanGoForward() 
     paths.push(forward) 
    end if 
    if CanGoLeft() 
     paths.push(left) 
    end 
    if CanGoRight() 
     paths.push(right) 
    end 
    return paths 
end function 

Algorytm jak A * jest naprawdę dla bardziej złożonych rzeczy (nie losowo decyzyjny), gdzie można mają złożoną lub dynamiczną mapę i chcą swoich wrogów kierować coś lub odtwarzacza dynamicznie czyli tam, gdzie A * wchodzi w grę, określając drogę przez świat, aby znaleźć drogę do celu.

+1

Dziękuję bardzo Iv, że to działa teraz! – user3038404

6

Witamy w SO. Zacznę od stwierdzenia, że ​​ja również obecnie szukam dokładnie tego samego. Niestety, zbieranie okazało się słabe, przynajmniej to, co do tej pory znalazłem.

znalazłem kilka bardzo ciekawy brzmi:

  1. artykuł o ghosts behavior Pacman. Prosty, ale bardzo skuteczny.

  2. Amit’s Game Programming Information. Bardziej ogólna dyskusja na temat tworzenia gier.

  3. Gamasutra. Doskonałe zasoby do projektowania wszystkich rzeczy.

  4. Designing AI Algorithms For Turn-Based Strategy Games. Artykuł Gamasutry, który jest niezwykle przydatny w wyjaśnianiu AI opartej na turach w prostym języku angielskim.

Wszystkie one są bardzo przydatne na swój własny sposób i sprawiają, że myślisz. Jednak nic, z czym się zetknąłem, nie zawiera jednoznacznego wyjaśnienia na temat logiki złego faceta (artykuł PacMana był bliski). Wyszukiwanie książek o grach AI w Amazon daje wiele książek, które są niezwykle kosztowne i przypominają bardziej zaawansowaną teorię kwantową.

Skończyło się na podjęciu decyzji o prostym podejściu do mojej gry. Mój zły człowiek decyduje między dwoma możliwymi stanami. Tryb patrolowy i tryb ataku.

W trybie Patrol siedzi bezczynnie przez kilka sekund, idzie w lewo lub w prawo, dopóki nie trafi w ścianę lub inny obiekt, biegnie (te same zasady, co chodzenie), wspina się po drabinach i wykonuje sporadyczne skoki. Używam arc4random(), aby zdecydować, co robi dalej, gdy jego obecna akcja zostanie zakończona. Zapewnia to prawdziwie przypadkowe zachowanie i sprawia, że ​​zły człowiek jest całkowicie nieprzewidywalny.

Tryb ataku ma miejsce, gdy gracz znajduje się w odległości X od złego faceta. Zły gość ma teraz inny zestaw czynności do wyboru.Biegnij w stronę gracza, wymachuj mieczem gracza, podskakuj i tak dalej. Ponownie używam funkcji losowej, aby zły facet był nieprzewidywalny. Dotychczasowe wyniki były naprawdę doskonałe. Mój zły facet zachowuje się jak jeden z tych trudnych do pokonania 12-letnich dzieci bawiących się w Halo.

Zły człowiek będzie kontynuował bitwę, dopóki nie umrze, gracz zginie lub gracz ucieknie i nie znajduje się już w odległości X wymaganej do trybu ataku. Możesz oczywiście precyzyjnie dostroić zachowanie złego faceta, ograniczając skoki, czas pomiędzy atakami i tak dalej.

Mam nadzieję, że to pomoże i sprawi, że Twoje kreatywne soki będą płynąć.