Rozwój
Programowanie SI
- Dokumentacja API
- Wprowadzenie
- plik info.nut
- plik main.nut
- Podstawy
- Poszukiwacz drogi
- Użycie pathfinder`a kolei
- Zapis / Odczyt danych
- Dobrze wiedzieć
- Squirrel
- Listy
- Poradnik na błędy OTTD
- Trams
- Biblioteki SI
- Forum
- Forum FAQ
- Zachowanie SI
- Użycie krótkich nazw
SIy
Wszystko kategorii NoAIZakładamy, że przeczytałeś Introduction , który wyjaśnia, jak dodać AI do OpenTTD. Ta strona wyjaśni, jak dodać kilka prostych rzeczy, aby sztuczna inteligencja mogła coś zrobić. Wynik znajduje się w przykładzie AI.
Contents |
Nazywanie firmy
Oczywiście pierwszą rzeczą, którą chcesz zrobić, to nazwać swoją firmę. Chcesz się promować, prawda? Aby zmienić nazwę firmy, musisz załadować klasę AICompany. W Squirrel`u wszystkie klasy są wstępnie załadowane, więc możesz z nich korzystać bezpośrednio.
Teraz zmieńmy nazwę naszej firmy. Funkcja, aby to zrobić, jak mówi nam interfejs API, to SetName
. Ten parametr jest ciągiem. Więc rozumiemy:
function MyNewAI::Start() { AICompany.SetName("MyNewAI"); }
Teraz, jeśli zwróciłeś trochę uwagi, natychmiast zauważysz, że jest to sprzeczne z regułą, której uczysz się w Introduction: zwraca Start()
, dlatego twoja AI umiera. Ale to tylko dla ilustracji, więc na razie będzie dobrze.
Uruchom OpenTTD, uruchom nową mapę i zobacz, jak twoja SI zmienia firmę nowych narzędzi na MyNewAI .
Nazywanie firmy (zaawansowane)
Ale teraz co się stanie, jeśli twoja AI uruchomi się dwa razy. Nie możesz mieć dwóch AI o tej samej nazwie firmy. Jeśli go uruchomisz, zobaczysz, że drugie imię pozostaje Bez nazwy ('Unnamed'). To jest do bani. Na szczęście możemy sprawdzić wynik działania funkcji, jeśli zadziałała poprawnie. Rozwińmy to trochę i sprawdź wynik. Jeśli to się nie powiedzie, znajdźmy inne imię.
function MyNewAI::Start() { if (!AICompany.SetName("MyNewAI")) { local i = 2; while (!AICompany.SetName("MyNewAI #" + i)) { i = i + 1; } } }
To, co się tutaj dzieje, polega na tym, że jeśli nazywanie AI MyNewAI nie powiedzie się, spróbuje MyNewAI #2 . Jeśli to się nie powiedzie, próbuje MyNewAI #3 etc itd. W pewnym momencie powinno to zadziałać, a raczej taki jest pomysł. Masz więc swoją pierwszą sztuczną inteligencję, która robi coś w grze.
Drukowanie wyników debugowania
Aby wydrukować dane wyjściowe do AI Debug Panel , możesz użyć AILog
. Te komunikaty są również zapisywane w konsoli ( AILog.Info
z ai debugowaniem na poziomie 4 lub wyższym, AILog.Warning
z poziomem 3 lub wyższym i AILog.Error
z poziomem 1 lub wyższym). Zauważ, że te funkcje akceptują tylko ciąg jako parametr. Jeśli chcesz wydrukować cokolwiek innego, najpierw przekonwertuj go na ciąg. Najłatwiej to zrobić, dodając pusty ciąg, na przykład:
AILog.Info (some_integer + "");
System zdarzeń event
System zdarzeń jest prostym systemem ankiet. Będziesz musiał od czasu do czasu sondować kontroler zdarzeń, aby sprawdzić, czy na stosie są jakieś odpowiednie zdarzenia. Jest to względnie łatwe
while (AIEventController.IsEventWaiting()) { local e = AIEventController.GetNextEvent(); switch (e.GetEventType()) { case AIEvent.ET_VEHICLE_CRASHED: local ec = AIEventVehicleCrashed.Convert(e); local v = ec.GetVehicleID(); AILog.Info("We have a crashed vehicle (" + v + ")"); /* Handle the crashed vehicle */ break; } }
Co teraz?
To, jak postępować dalej, zależy w dużej mierze od tego, co chcesz zrobić. Najlepiej jest zacząć przeglądać API . Sugerujemy zacząć od sztucznej inteligencji wyłącznie dla pojazdów drogowych. Wiemy, że to jest naprawdę nudne, ale możesz naprawdę zarobić na nich dużo pieniędzy, jeśli zrobisz to poprawnie. Łatwiej jest też tworzyć i rozumieć niż pociągi. Statki i samoloty są również bardzo wykonalne, ale bardziej nudne niż pojazdy drogowe.
Na przykład, jeśli chcesz zbudować drogę i stacje drogowe, sprawdź dokumentację AIRoad
. Znajdziesz tam odpowiednie funkcje. Aby uzyskać informacje o stacji, sprawdź AIStation
. W przypadku zamówień budowy pojazdów i ustawień sprawdź AIVehicle
i AIOrder
. Brzmi całkiem logicznie, prawda?
Oczywiście jest wiele rzeczy, które ułatwiają ci życie. Jest na przykład fragment kodu, który ustawia wszystkie twoje polecenia w kolejce na dużej liście i od razu zaczyna je wykonywać na żądanie. Teraz, jeśli ktoś zawiedzie, czego wcześniej nie robił, wszystko cofa. Jest to bardzo przydatne od czasu do czasu, ponieważ przy planowaniu trasy zbudowanie jej mogło wydawać się bezproblemowe, ale do czasu umieszczenia fragmentu drogi może się zdarzyć, że inna firma już zabrała płytkę. Takie fragmenty kodu ułatwiają radzenie sobie w takich sytuacjach. Innymi przykładami są identyfikatory ścieżek i wiele innych.