Programowanie


Boty w grach komputerowych cz. II

"[...]Tematem bardzo popularnym w ostatnich latach są badania i prace prowadzone nad inteligencją przeciwników. Niniejsza praca przedstawia zagadnienie botów w grach komputerowych 3D skupiając się na metodzie ich tworzenia oraz sposobie funkcjonowania.[...]" - ciąg dalszy...

5. Opis poszczególnych modułów architektury bota

AAS - Area Awareness System

System ten zapewnia botowi wszelkie niezbędne informacje na temat obecnego stanu świata gry. Dane te zawierają informacje o terenie oraz innych bytach w grze. Informacja jest pierwotnie przetwarzana by umożliwić szybki późniejszy dostęp do zinterpretowanych już częściowo danych.

Szkieletem ASS jest specjalna reprezentacja świata 3D. Wszystkie informacje dostarczane botowi są w jakiś sposób powiązane z tą reprezentacją. AAS posiada podobną reprezentację jak system punktów kontrolnych - ograniczone strefy. Teren gry podzielony jest na strefy. Zakłada się, że koszt przemieszczenia się wewnątrz strefy jest minimalny (można przemieścić - się iść lub płynąć - w linii prostej).

Aby bot mógł poruszać się po całej strefie w linii prostej, obszar musi być wypukły. Wypukłe obszary nie mają w sobie przeszkód, które utrudniają poruszanie się. Jeśli bot ma przepłynąć przez strefę, wymaganie to jest wystarczające, jeśli jednak ma przez nią przejść, potrzebne są dodatkowe założenia. Obszar taki może bowiem mieć np. szczeliny w podłodze, do których wpaść może bot. Tak wiec każdy obszar wypukły jest nawigowalny lub w łatwy sposób może być podzielony na obszary nawigowalne.

Dostępność strefy A ze strefy B oznacza, że istnieje możliwość bezpośredniego przemieszczenia się ze strefy B do strefy A. Najczęściej strefy są do siebie przyległe i nie ma dużego problemu obliczeniowego dostępności stref.

Dostępność stref jest możliwa poprzez:

  • płyniecie w linii prostej
  • przejście w linii prostej
  • przejście w linii prostej "kucając" (ang. crouching)
  • skakanie
  • wyskakiwanie z wody
  • teleportowanie
  • użycie windy
  • użycie skoczni
  • "skok na rakiecie" (ang. rocketjump)

Oblicza się dostępność pomiędzy strefami, pasujące strefy są następnie odpowiednio łączone - zachowywana jest struktura połączeń pomiędzy strefami, która jest następnie używana przy poruszaniu się i wyszukiwaniu ścieżek przez bota.

Odnajdywanie ścieżek

Posiadając informacje o dostępności stref, można obliczyć ścieżki pomiędzy strefami.

Istnieje możliwość użycia raz obliczonej tablicy wszystkich ścieżek i sprawdzenia w działającym programie jedynie danych w tej tablicy (może to pochłaniać sporo pamięci, jest jednak bardzo szybkie). Teren gry czasem się zmienia i trzeba dokonywać zmian w obliczonych ścieżkach.

Takie rozwiązanie ma właśnie Quake 3. Posiada tymczasowy bufor z przekalkulowanymi ścieżkami, który zmienia się, gdy nastąpi zmiana na planszy (sytuacja taka zachodzi jednak dość rzadko).

Duże mapy mogą zawierać nawet 5000 stref. Algorytmy takie jak Dijkstra czy A* są zbyt czasochłonne do używania w czasie rzeczywistym. W Quake 3 użyty został algorytm wielopoziomowy. Najpierw wyszukiwana jest droga na wyższym poziomie, następnie droga do niższego bloku wewnątrz elementu wyższego poziomu.

Przedmioty

Przedmioty, które mogą być zebrane przez gracza są dzielone na grupy: zbroja lekka, zbroja ciężka itp. Dla każdej z grup może istnieć wiele instancji przedmiotów w świecie gry. Każdy z takich elementów ma przyporządkowaną dla siebie strefę - wewnątrz strefy odnalezienie przedmiotu nie jest już problemem. Łatwo jest np. ustalać ścieżkę taka, by po drodze zebrać jak najwięcej potrzebnych przedmiotów.

rozkład przedmiotów w strefach
Rys. 4. Przykładowy rozkład przedmiotów w strefach
źródło: *[1]

Basic Actions - Podstawowe akcje

Dla człowieka podstawowe akcje kontrolowania bohatera wykonywane są za pomocą klawiatury i myszy. Identycznymi akcjami dysponuje bot. Jednak akcje człowieka są ograniczone naturą fizyczna: wciśniecie klawisza lub poruszenie myszą zajmuje pewną ilość czasu, dla bota brak tego ograniczenia.

Jeśli chcielibyśmy uwzględnić ten element, należałoby funkcjonalność osobno zaimplementować.

Podstawowe akcje obejmują:

  • atak - wystrzelenie z broni, która postać obecnie posiada
  • użycie - postać użyje przedmiotu, który trzyma
  • "zmartwychwstanie" - bot powraca do życia
  • skok
  • kucniecie
  • poruszaj się w górę(pływając)
  • poruszaj się w dół(pływając)
  • poruszaj się w przód
  • poruszaj się w tył
  • idź - postać będzie chodzić zamiast biegać
  • rozmawiaj - pojawia się ikona nad postacią, postać nie może się poruszać
  • gestykuluj - pokazanie gestu postacią bohatera
  • poruszaj się (kierunek, prędkość)
  • rozglądaj się
  • wybierz broń
  • mów - wysłanie komunikatu do wybranego gracza
  • mów do drużyny - wysłanie komunikatu do całej drużyny

Charakter

Aby uczynić grę ciekawszą w Quake III wprowadzono wiele botów - każdy grający na swój sposób. Charakter każdego bota składa się ze starannie dobranych cech charakterystycznych bota.

Do cech charakterystycznych botów zalicza się miedzy innymi:

  • czujność,
  • agresywność,
  • mściwość,
  • ciągły ogień podczas walki,
  • celność(wiele aspektów),
  • czas reakcji,
  • preferencje broni,
  • szybkość pisania(chat),
  • skłonność do skoków/kucania

Większość charakterystyk przyjmuje wartości w zakresie [0,1]. Im wyższa wartość tym silniejsza i lepiej wykształcona cecha. Duża większość cech odnosi się do stylu walki bota - większość czasu gracz obserwuje bota właśnie w trakcie walki. Boty nie zmieniają swojego charakteru w trakcie gry. Każdy z botów ma na stałe przypisane cechy i zawsze zachowuje się zgodnie z nimi.

Fuzzy logic - logika rozmyta

Bot wykorzystuje logikę rozmytą do określania, jak bardzo chce wykonać daną czynność lub zdobyć dany przedmiot. Działanie logiki rozmytej bazuje na danych dostarczonych ze świata zewnętrznego np. jak daleko bot znajduje się od pożądanego przedmiotu, czy też ile ma obecnie energii.

Wartość logiki rozmytej wyliczana jest dla wszystkich broni i przedmiotów. Bot najbardziej pożąda tego przedmiotu, dla którego wyliczona wartość jest największa.

Moduł logiki rozmytej wykorzystywany jest także do wyboru przez bota podczas walki najlepszej w danej sytuacji broni.

Dodatkowo każdy bot ma zależne od charakteru preferencje, co do używanej broni, czy zbieranych przedmiotów. Preferencje te są również wykorzystywane przy obliczaniu wartości rozmytych.

Chat

Bot musi mieć możliwość komunikowania się z innymi graczami w grze (także z botami). Bot musi interpretować otrzymywane wiadomości tekstowe od innych graczy oraz mieć zdolność do tworzenia i wysyłania takich wiadomości.

W Quake 3 interpretacja wiadomości tekstowych polega na odnajdywaniu słów kluczowych w tekście. Wyniki są porównywane z predefiniowanymi wzorcami. Nie zastosowano złożonego mechanizmu parse'owania i głębszej analizy tekstu, gdyż takie rozwiązania są zazwyczaj czasochłonne, a to nie jest dopuszczalne w grze komputerowej. Ponadto w pisanych przez graczy tekstach często zdarzają się błędy, używanie skrótów, czy przypadkowe pominięcia liter.

Silnik przetwarzania tekstu posiada zbiór słów oraz synonimów każdego słowa. Silnik zawiera także zbiór predefiniowanych wypowiedzi, które są używane z różnych sytuacjach, również dla każdej zdefiniowanej sentencji wypowiadanych przez innego gracza posiada zbiór sentencji, które może użyć jako odpowiedź.

Przykładowym zdefiniowanym fragmentem rozmowy może być *[1]:

["hate you", !"not"] = 7
{
"why do you hate me";
"there's no reason for you to hate me";
}

Jeśli bot wyszuka w wiadomości gracza ciąg słów "hate you" oraz nie znajdzie słowa "not", będzie mógł odpowiedzieć na dwa sposoby.

Silnik chatu w grze Quake 3 posiada jeszcze kilka dodatkowych wariancji rozmów, które zostały tutaj pominięte. Dokładniejsze informacje można znaleźć w *[1].

Goals - cele botów

W grze wyodrębniamy dwa typy celów: cele długoterminowe i cele krótkoterminowe. Najważniejszym celem w grze jest oczywiście odniesienie szeroko pojmowanego zwycięstwa. Podczas próby osiągnięcia pewnego długoterminowego celu bot przemieszczając się z jednego miejsca na planszy w drugie, wyznacza sobie cele krótkoterminowe np. zdobycie lepszej broni, które jednak nie przeszkadzają zbytnio w osiąganiu celu długoterminowego.

Często jednym z celów długoterminowych jest zdobycie lepszej broni, czy zbroi, gdyż znacznie podwyższa to szanse bota na zwycięstwo. Po osiągnięciu celu długoterminowego bot decyduje się na kolejny cel (używany jest moduł logiki rozmytej). Bot może zdecydować się na atak na wroga bądź też przykładowo zdobycie lepszych przedmiotów.

Navigation - przemieszczanie się

Opisany wcześniej AAS dostarcza wszelkich informacji dla bota niezbędnych do poruszania się po planszy. Bot używa dwóch sposobów nawigacji: nawigacja w pewnym kierunku oraz nawigacja do określonego celu.

Nawigacja do celu

Jeśli bot znajduje się w strefie, w której znajduje się również cel, wystarczy przemieszczać się w linii prostej do celu. W przeciwnym przypadku, system wyznaczania ścieżek określa następna strefę, do której bot musi się przemieścić, by dotrzeć do celu.

Informacje dostarczone od tego modułu nie są jednak bezwzględnie wykonywane, gdyż bot może zdecydować na ominięcie pewnej przeszkody i "zahaczenie" o przyległą strefę. Dla każdego ze sposobów dostępności stref bot posiada zaimplementowany minimoduł odpowiedzialny za efektywne przemieszczanie się pomiędzy strefami. Tak poruszając się, bot będzie przechodził pomiędzy strefami, aż dotrze do strefy docelowej.

Nawigacja w określonym kierunku

Bot przemieszczając się w określonym kierunku nie używa systemu nawigacji do wyznaczania kolejnych stref, do których powinien się przemieszczać. Bot wykorzystuje natomiast próbkowanie otoczenia. Bot porusza się w danym kierunku, jeśli przykładowo natrafi na podest, spróbuje na niego wskoczyć, jeśli trafi na szczelinę w podłodze, wskoczy w nią pod warunkiem, że nie spadnie w przepaść lub nie wyładuje w lawie.

Misc. AI

Moduł ten jest używany w sytuacjach, gdy oczekuje się inteligentnego zachowania od bota w danym momencie np. podczas walki.

Przykładowo, jeśli to przeciwnik pierwszy spostrzegł bota i strzelił do niego, bot rozejrzy się w koło i sprawdzi skąd dochodzą strzały. Kąt widzenia bota ograniczony jest do 90 stopni, tak by imitować dokładniej zachowanie człowieka. Widoczność bota jest także ograniczana przez mgłę oraz przez artefakty zapewniające przeciwnikom niewidoczność.

Również podczas samej walki moduł ten odpowiedzialny jest za wiele elementów. Bot posiada określoną precyzję celowania (zależną od charakteru), nie byłoby dobrym rozwiązaniem, gdyby bot był perfekcyjnym strzelcem.

Bot nie powinien stać podczas walki w jednej pozycji, poruszając się w odpowiedni sposób uniknie znacznej liczby trafień. Strzelając z broni, której pociski mają większe opóźnienie (np. rakietnice) bot w odpowiedni sposób przewiduje pozycję gracza w momencie, gdy pocisk będzie się do niego zbliżał i wystrzeli go właśnie w tym kierunku.

Wszystkie te zachowania bota zostały odpowiednio zaprogramowane i umieszczone w module Misc. AI. Znacznie trudniej byłoby sprawić, że podczas gry bot sam nauczyłby się odpowiedniego zachowania, lecz takie rozwiązania są także stosowane.

AI network

Moduł ten określany jest jako centralny mózg bota. Sieć ta przypomina maszynę ze skończoną ilością stanów, jest modelowana jako sieć stanów połączonych warunkowymi przejściami. Zawsze istnieje jeden najlepszy stan w danej sytuacji.

sieć AI
Rys. 5. Sieć AI
źródło: *[1]

Sieć składa się z następujących stanów:

  • Respawn - bot wchodzi w ten stan, gdy umiera, w stanie tym bot ma możliwość odrodzenia się,
  • Stand - bot stoi najczęściej, gdy używa modułu chat,
  • Seek long term goal - bot próbuje osiągnąć cel długoterminowy,
  • Seek short term goal - bot próbuje osiągnąć cel krótkoterminowy,
  • Seek active entity - bot próbuje rozwiązać problem podczas dążenia do celu np. strzelenie w przycisk, aby otworzyły się drzwi,
  • Battle fight - bot walczy wrogiem,
  • Battle chase - bot ściga przeciwnika,
  • Battle retreat - bot wycofuje się z walki,
  • Intermission - bot przechodzi do tego stanu po zakończeniu gry,
  • Observer - bot przechodzi do tego stanu, gdy zginie w trybie obserwatora

Commands - komendy wydawane graczom

Moduł komend odpowiedzialny jest za odbieranie i interpretację komend pochodzących od członków drużyny. Komunikacja odbywa się poprzez chat, bot jednak musi być w stanie odpowiednio zareagować.

Przykładowo może otrzymać jedno z poleceń:

  • pomóż innemu graczowi
  • obroń pewną strefę
  • zdobądź flagę przeciwnika
  • wracaj do bazy
  • patroluj

Bot zawsze stara się wypełniać polecenie lidera grupy, chyba że nie pozwala na to bieżąca sytuacja np. bot jest atakowany.

Dostępnych poleceń oczywiście jest znacznie więcej. Moduł komend znacznie usprawnia drużynową grę i pozwala na lepszą interakcję z innymi graczami. Każdy bot umie także odpowiedzieć na zadawane mu pytania, przykładowo:

  • gdzie jesteś?
  • jakie zadanie obecnie wykonujesz?
  • w której drużynie jesteś?
  • co powinienem robić?

Team AI - inteligencja dowódcy drużyny

Moduł komend nie może być w pełni wykorzystany, jeśli brak dowódcy drużyny. Musi istnieć osoba (zwłaszcza w grach bardziej zaawansowanych, np. CTF - ang. Capture The Flag), która będzie decydować o strategii i wydawać polecenia innym członkom drużyny. Moduł inteligencji takiego bota to właśnie Team AI.

Podsumowanie

W niniejszej pracy przedstawiono zagadnienie botów w grach komputerowych 3D skupiając się głównie na metodzie ich tworzenia, architekturze oraz sposobie funkcjonowania. Temat inteligencji botów jest bardzo rozległy i obejmuje wiele dziedzin sztucznej inteligencji. Jest to jednak temat bardzo ciekawy oraz popularny i na pewno warty zainteresowania.

Bibliografia

Dodał: Marcin​Apostoluk
Dział: Programowanie


 

ComputerSun.pl na FaceBooku
Polecamy lekturę:

Windows 7 PL



X

Zapisz się na biuletyn serwisu ComputerSun.pl, aby otrzymać poradnik:

Zabezpieczanie sieci bezprzewodowych. Przydatne wskazówki jak chronić sieć domową przed intruzami

Imię:  
Email:
Tak, akceptuję Politykę Prywatności