Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[C++] Jak zrobić sztuczną inteligencje


Rekomendowane odpowiedzi

Opublikowano

Witam. Mam problem gdyż nie wiem jak mogę zrobić sztuczną inteligencję.
Tworzę aplikację (taką można rzec bardzo bardzo bardzo małą mini grę).

Proszę zobaczyć :
http://www.solidfiles.com/d/7ec648d9b4/
Skan :
https://www.virustotal.com/pl/file/7ccf08d3edfeabce84682b8861c7dec8d4a2921027f77a5997532fc588a0115a/analysis/1369850076/

Przepraszam za jakość aplikacji ale uczę si C++ dopiero od tygodnia.

Jak widać w aplikacji "wrogowie" łażą po planszy bez celu (chciałem by coś się działo :) )
Zastosowałem do tego celu coś takiego :

int a = losuj (1, 4);
if (a == 1) 
    Rusz sie w przód;
if (a == 2) 
    Rusz sie w Tył;
if (a == 3) 
    Rusz sie w lewo;
if (a == 4) 
    Rusz sie w prawo;

// To tylko schemat!!!


Jednak moim celem jest aby "wrogowie" podążali za nami, w sensie chcieli być jak najbliżej nas...
Jednak kompletnie nie wiem jak się za to zabrać.
Próbowałem ifami itp że gdy my idziemy w lewo to i wrogowie ale rezultat był taki że gracz sterował wszystkimi jednostkami na raz.
Proszę o jakiś "trop" lub poradę.


W nagrodę jak mi pomożecie like oraz miejsce w creditsach (jak będę to dalej ulepszał :] )
Prosiłbym również o ocenę samej aplikacji, wygląd itp, co wypadało by zmienić (proszę wziąć pod uwagę to że C++ uczę się dopiero tydzień)

 

I jakim prawem takie gówienko zrzera 20mb ramu i 50% jednego rdzenia mojego procka? 0.0

Opublikowano

Sciagac w tym momencie mi sie nie chce i przegladac kodu. Co do SI moge powiedziec ze w grach implementuje sie roznego rodzaju algorytmy. Zazwyczaj sa to algorytmy grafowe, typu wyszukiwanie najkrotszej sciezki miedzy stanami. Jesli wziac stan wyjsciowy mapy i przekazac do algorytmu np. A* mozliwe stany wyjsciowe, tj. przeciwnik przy graczu, to algorytm wyrzuci nam najkrotsza sciezke przejscia, stany posrednie prowadzace do stanu koncowego i na tej podstawie mozemy ruszac graczy.

 

Mozna rowniez skorzystac z silnika wnioskujacego typu CLIPS ktory sam wnioskuje na podstawie regul i faktow oraz aktualnego stanu planszy. Ogolnie SI jest rzecza dosc skomplikowana i majaca duze podloze matematyczne. Tym bardziej jesli uczysz sie dopiero tydzien, to jedyne wyjscie dla Ciebie to brute force. Sprawdzanie promienia odleglosci np. funkcja odleglosci typu manhattan.

Opublikowano

Sciagac w tym momencie mi sie nie chce i przegladac kodu. Co do SI moge powiedziec ze w grach implementuje sie roznego rodzaju algorytmy. Zazwyczaj sa to algorytmy grafowe, typu wyszukiwanie najkrotszej sciezki miedzy stanami. Jesli wziac stan wyjsciowy mapy i przekazac do algorytmu np. A* mozliwe stany wyjsciowe, tj. przeciwnik przy graczu, to algorytm wyrzuci nam najkrotsza sciezke przejscia, stany posrednie prowadzace do stanu koncowego i na tej podstawie mozemy ruszac graczy.

 

Mozna rowniez skorzystac z silnika wnioskujacego typu CLIPS ktory sam wnioskuje na podstawie regul i faktow oraz aktualnego stanu planszy. Ogolnie SI jest rzecza dosc skomplikowana i majaca duze podloze matematyczne. Tym bardziej jesli uczysz sie dopiero tydzien, to jedyne wyjscie dla Ciebie to brute force. Sprawdzanie promienia odleglosci np. funkcja odleglosci typu manhattan.

 

O jejciu. Nic z tego nie rozumiem... Chyba wypadałoby jeszcze pouczyć się tego C++ ze 2-4 tygodnie.

Nie ma na pewno jakiegoś łatwiejszego sposobu?

Ta inteligencja nie ma być jakoś super zdolna. Ma to po prostu czepić się nas jak rzep psiego ogona czyli latać za nami a gra ma polegać na tym że gdy wróg nas dotknie to przegrywamy a wynikiem gry są przebyte kroki.

Opublikowano

Na Twój poziom możesz zastosować algorytm znajdowania naprostszej drogi (zwrotu) do postaci, a ze strony wroga losowanie liczby np. od 1 do 2, przy czym jeśli jest to 1 to mob rusza się w naszym zwrocie, a jeśli 2 to w losowym.

1373986324-U917591.png

Zapraszam do prezentacji serwera uMetin2:

KLIK

Opublikowano

Proszę:

 

http://code.activestate.com/recipes/577457-a-star-shortest-path-algorithm/

Tutaj masz kod takiego algorytmu A* (A-star, Zobacz funkcję pathFind). Musisz go sobie tylko przeanalizować, co dla początkującego może być problemem.

Ja bym ci radził pobawić się w analizę tekstu np. analizator działań. Algorytmy to nie jest prosta rzecz.

 

O jeju. Samo to AI jest dłuższe od całego mojego programu. Chyba narazie to sobie daruje. Mój poziom w C++ jest jeszcze zbyt niski.

 

Na Twój poziom możesz zastosować algorytm znajdowania naprostszej drogi (zwrotu) do postaci, a ze strony wroga losowanie liczby np. od 1 do 2, przy czym jeśli jest to 1 to mob rusza się w naszym zwrocie, a jeśli 2 to w losowym.

 

A jak ten algorytm wygląda?

 

Chcesz to sobie analizuj moj kod. ;p

 

https://github.com/Krycho/SISE/blob/master/15Puzzle/solver.cpp

 

Sa tutaj implementacje IDFS,DFS,BFS,A* z 2 heurystykami + konstrukcja sciezki. Algorytm jest lekko zmieniony, wg mnie troche prostszy niz oryginalny. Przynajmniej w implementacji, ale dziala identycznie. Pisane na podstawie pseudokodu z wiki. Nauka i zrozumienie grafow to sporo roboty ;)

 

Nic z tego nie rozumiem. Musze jednak więcej się uczyć bo widzę że to ai jest skomplikowane. Pisząc ten temat myślałem że jest to coś mega prostego w rodzaju :

while ( player się ruszył ) { przeciwnik.follow; }

:D

 

Chodzi ci o fokusowanie gracza jak najszybszą drogą ?

 

Nawet nie wiem co to Fokusowanie.

 

 

W takim razie proszę o zamknięcie :P

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...