Blog (3)
Komentarze (1.8k)
Recenzje (0)

Po co mi ta Scala? Scalatron!

@FrankfurteriumPo co mi ta Scala? Scalatron!31.05.2012 01:43

Ostatnimi czasy tematyka programowania i języków na blogach Dobrych Programów nieco przycichła, więc pomyślałem, że może pora znów skrobnąć coś o Scali. Dalej nie mam ochoty (a najpewniej i wiedzy) na kurs z prawdziwego zdarzenia, dlatego może krótko o jednej z form wykorzystania języka. Jakaś przydatna aplikacja desktopowa? Nie dziś. Praca z frameworkiem, dzięki której w przyszłości może uda nam się coś zarobić? Też nie. Teraz chodzi tylko i wyłącznie o pure fun!

Terminator - zrób to sam!

Oglądaliście kiedyś, choćby w TV, pojedynki zaprojektowanych specjalnie ku temu robotów? Czytaliście o zawodach na aplikację, która skilluje (od kill, nie skill) procesy wszystkich innych uczestników? A może marzyliście o zaprojektowaniu niszczycielskiej AI? Proszę bardzo, oto Scalatron!

Arena zmagań cybergladiatorów
Arena zmagań cybergladiatorów

Ale o co chodzi?

Plansza u góry to arena. Duża kolorowa kropka to bot – w uproszczeniu zaprojektowany przez użytkownika podprogram, który po wkroczeniu na arenę wraz z pewnym budżetem punktów żyje własnym życiem. Mniejsze kropki to sterowane przez komputer stwory i roślinki. Kontakt z nimi może punkty dodawać lub odbierać. Same mogą trwać w miejscu, uciekać od naszego bota... lub go gonić. Wspomnieć należy, że botów na planszy może przebywać kilka, a ich interakcja nie ogranicza się do podkradania jeden drugiemu jedzenia – mogą sobie nawzajem (i innym żyjątkom) robić krzywdę.

Manewry zaczepno-obronne

Każdy bot może przeznaczyć część swoich punktów na stworzenie jednego bądź kilku minibotów - takich bezzałogowych dronów. Te żyją tak długo, na ile wystarczy im uciekającej z każdym ruchem energii, ale można je zagospodarować na wiele ciekawych sposobów. Np. wysłać na cyber jihad – podprowadzić w pobliże wroga i uaktywnić autodestrukcję. Oczywiście cel może mieć zaprogramowaną swoistą tarczę antyrakietową – po zauważeniu wrażego minibota może przechwycić go własnym tworem. Minibot mógłby też pełnić rolę miny, przynęty w zasadzce, może zbierać pożywienie i transportować je do bota-matki, naganiać jadalne stworzonka, a nawet tworzyć kolejne pokolenia minibotów. Taktyka polegająca na biernym czekaniu i nękaniu wroga eskadrą minibotów nie jest może zbyt racjonalna, jeśli wziąć pod uwagę potrzebne do realizacji ilości energii, ale widok musi być nieziemski, więc właśnie do jej realizacji dążę uparcie ;-)

Niby proste, ale...

Podobnie jak w wielu ponadczasowych grach (szachy, karcianki, snooker) ogólne zasady są nieskomplikowane, ścieżki osiągnięcia sukcesu już niekoniecznie. Takie oprogramowanie bota (i minibotów), by sprawdził się w każdej sytuacji i więcej punktów zyskiwał niż tracił, stanowi nie lada wyzwanie. Ogranicza nas zmysł taktyczny, znajomość języka i, co tu dużo gadać, algorytmika. By nieco nas odciążyć i ułatwić nam zabawę, twórcy stworzyli swego rodzaju IDE. Proste ale funkcjonalne, mieszczące się na lokalnej stronie internetowej (czy jak to się zwie :p). Oczywiście nic nie stoi na przeszkodzie, by własnego bota tuningować w prawdziwym IDE lub dowolnym edytorze tekstu.

Tutaj uczymy zabijania
Tutaj uczymy zabijania

Od zera do Scala-codera

Twórcy obok IDE zamieścili kurs niewymagający znajomości Scali (choć podpórka w postaci C++/Javy/Innego języka jest mocno wskazana). Więcej nawet, jedną z intencji powstania Scalatrona było stworzenie możliwości nauki języka w jak najciekawszej formie. Na około 50 stronach PDF-a przedstawiona została budowa i stopniowe ulepszanie całkiem nieźle radzącego sobie bota. Znaczną część instrukcji wypełniają komentarze, co robi każdy nowy kawałek kodu, stąd pula adresatów tego wpisu nie ogranicza się do Scala-hax0rów. A, jeszcze drobiazg - całość, oczywista oczywistość, po angielsku.

Pomoc naukowa
Pomoc naukowa

Jak to się robi?

A konkretnie - jak to wygląda z technicznego punktu widzenia? W każdym jednym cyklu serwer przesyła botowi łańcuch tekstowy zawierający podstawowe informacje, z których najważniejsze to ilość zgromadzonej energii, a także mapa tego, co bot wokół siebie widzi. Zadaniem napisanych przez nas obiektów i funkcji jest analiza tych danych i wybranie odpowiedniej reakcji. Z reguły jest to ruch lub stworzenie i wysłanie w żądanym kierunku minibota. Czasem wybuch (tego drugiego), zostawienie wiadomości na arenie bądź w polu statusu jednostki. Reakcję odsyłamy serwerowi również w postaci odpowiednio spreparowanego łańcucha tekstowego.

Przykładowy komunikat ze strony serwera gry:

React(generation=0,name=Frank,time=453,view=[tutaj ASCI-artowa mapa widzianego wycinka gry],energy=1350)

Przykładowa odpowiedź:

Move(direction=1:1)  albo  Spawn(direction=1:0,energy=200)

Oczywiście na głowie mamy wielokrotnie dłuższe metody i funkcje pomocnicze odpowiedzialne za czynności tak prozaiczne, jak parsowanie nadchodzących wiadomości, czytanie sytuacji z mapy i wybór odpowiedniej reakcji. Na szczęście część z nich można skopiować z udostępnionego kursu. W końcu parsowanie nadchodzącego Stringa zawsze i w każdej sytuacji wygląda tak samo, a autorzy nie zautomatyzowali tej czynności chyba tylko dlatego, żeby zachować pole do nauki podstaw Scali.

To może jeszcze o...

O czym tylko napomknąłem, a o czym wspomnieć na koniec warto – na planszy botów może być kilka. Każdy jeden twór przechowywany jest w pliku .jar Kiedy już skonstruujemy naszą niesamowitą, zabójczą AI, po kompilacji możemy ją umieścić gdzieś w internecie albo skonfrontować ją z innymi stamtąd pobranymi. Istnieje też system benchmarku oceniający potencjał naszego bota, a nawet oficjalny ranking aplikacji do zabijania (aktualny lider kilkaset razy przewyższa przykładowego bota konstruowanego na potrzeby kursu).

War has never been so much fun

Ja już jestem po kilkunastu (dosyć nieporadnych, trzeba przyznać) próbach stworzenia czegoś z potencjałem. Zabawa jest wymagająca, ale jednak ciekawa i niosąca masę satysfakcji, np. kiedy „No wreszcie zestrzelił to cholerne @#$#%”. Wierzę, że kiedyś wreszcie uda mi się bez podpórek poradnika skonstruować coś, co w ładnym stylu więcej zyskuje niż traci.

Czego i wam życzę ;-)

Szanowna Użytkowniczko! Szanowny Użytkowniku!
×
Aby dalej móc dostarczać coraz lepsze materiały redakcyjne i udostępniać coraz lepsze usługi, potrzebujemy zgody na dopasowanie treści marketingowych do Twojego zachowania. Twoje dane są u nas bezpieczne, a zgodę możesz wycofać w każdej chwili na podstronie polityka prywatności.

Kliknij "PRZECHODZĘ DO SERWISU" lub na symbol "X" w górnym rogu tej planszy, jeżeli zgadzasz się na przetwarzanie przez Wirtualną Polskę i naszych Zaufanych Partnerów Twoich danych osobowych, zbieranych w ramach korzystania przez Ciebie z usług, portali i serwisów internetowych Wirtualnej Polski (w tym danych zapisywanych w plikach cookies) w celach marketingowych realizowanych na zlecenie naszych Zaufanych Partnerów. Jeśli nie zgadzasz się na przetwarzanie Twoich danych osobowych skorzystaj z ustawień w polityce prywatności. Zgoda jest dobrowolna i możesz ją w dowolnym momencie wycofać zmieniając ustawienia w polityce prywatności (w której znajdziesz odpowiedzi na wszystkie pytania związane z przetwarzaniem Twoich danych osobowych).

Od 25 maja 2018 roku obowiązuje Rozporządzenie Parlamentu Europejskiego i Rady (UE) 2016/679 (określane jako "RODO"). W związku z tym chcielibyśmy poinformować o przetwarzaniu Twoich danych oraz zasadach, na jakich odbywa się to po dniu 25 maja 2018 roku.

Kto będzie administratorem Twoich danych?

Administratorami Twoich danych będzie Wirtualna Polska Media Spółka Akcyjna z siedzibą w Warszawie, oraz pozostałe spółki z grupy Wirtualna Polska, jak również nasi Zaufani Partnerzy, z którymi stale współpracujemy. Szczegółowe informacje dotyczące administratorów znajdują się w polityce prywatności.

O jakich danych mówimy?

Chodzi o dane osobowe, które są zbierane w ramach korzystania przez Ciebie z naszych usług, portali i serwisów internetowych udostępnianych przez Wirtualną Polskę, w tym zapisywanych w plikach cookies, które są instalowane na naszych stronach przez Wirtualną Polskę oraz naszych Zaufanych Partnerów.

Dlaczego chcemy przetwarzać Twoje dane?

Przetwarzamy je dostarczać coraz lepsze materiały redakcyjne, dopasować ich tematykę do Twoich zainteresowań, tworzyć portale i serwisy internetowe, z których będziesz korzystać z przyjemnością, zapewniać większe bezpieczeństwo usług, udoskonalać nasze usługi i maksymalnie dopasować je do Twoich zainteresowań, pokazywać reklamy dopasowane do Twoich potrzeb. Szczegółowe informacje dotyczące celów przetwarzania Twoich danych znajdują się w polityce prywatności.

Komu możemy przekazać dane?

Twoje dane możemy przekazywać podmiotom przetwarzającym je na nasze zlecenie oraz podmiotom uprawnionym do uzyskania danych na podstawie obowiązującego prawa – oczywiście tylko, gdy wystąpią z żądaniem w oparciu o stosowną podstawę prawną.

Jakie masz prawa w stosunku do Twoich danych?

Masz prawo żądania dostępu, sprostowania, usunięcia lub ograniczenia przetwarzania danych. Możesz wycofać zgodę na przetwarzanie, zgłosić sprzeciw oraz skorzystać z innych praw wymienionych szczegółowo w polityce prywatności.

Jakie są podstawy prawne przetwarzania Twoich danych?

Podstawą prawną przetwarzania Twoich danych w celu świadczenia usług jest niezbędność do wykonania umów o ich świadczenie (tymi umowami są zazwyczaj regulaminy). Podstawą prawną przetwarzania danych w celu pomiarów statystycznych i marketingu własnego administratorów jest tzw. uzasadniony interes administratora. Przetwarzanie Twoich danych w celach marketingowych realizowanych przez Wirtualną Polskę na zlecenie Zaufanych Partnerów i bezpośrednio przez Zaufanych Partnerów będzie odbywać się na podstawie Twojej dobrowolnej zgody.