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.

|
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.

|
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