Jakie partie chcemy grać (formuła)
Wprowadzenie
FICS daje możliwość zaawansowanej konfiguracji rodzaju partii, jakie jesteśmy gotowi rozgrywać. Można np. ustalić, że chcemy grać tylko w zwykłe szachy, partie zapewniające co najmniej 5 minut czasu do namysłu, z przeciwnikami o rankingu nie mniejszym niż 1200 i tylko, gdy wygrana zapewnia nam zysk co najmniej 2 punktów rankingowych. Tego typu ustawienie ma następujące konsekwencje:
- jeśli jakiś gracz próbuje nas wyzwać, a jego wyzwanie nie spełnia naszych warunków, zostanie automatycznie odrzucone (wyzywający otrzyma informację o odrzuceniu ze względu na formułę),
- widzimy tylko seek-i spełniające nasze kryteria,
- gdy sami opublikujemy seek, tylko gracze spełniający nasze kryteria będą mogli na niego odpowiedzieć (nasz seek będzie też miał na tablicy ogłoszeń adnotację - zwykle literka f).
Powyższą konfiguracją zawiaduje zmienna formula.
Uwaga: modyfikując zmienną formula należy zachować dużą ostrożność! Łatwo tu o pomyłki - włącznie z przypadkowym ustawieniem odrzucania wszelkich propozycji gry. Dlatego zmiany w formule należy wprowadzać powoli i po każdej zmianie zwracać uwagę, czy wydaje się ona funkcjonować poprawnie. Współpraca znajomego, który wygeneruje kilka testowych wyzwań, też może być przydatna.
Przykładowe proste formuły
Przed szczegółowym omówieniem składni, kilka przykładowych formuł:
set formula registered && !abuser && !computer
Nie gramy z gośćmi (niezarejstrowanymi użytkownikami), nie gramy z osobami umieszczonymi na czarnej liście serwera (trafiają na nią osoby obrzucające przeciwników obelgami, przerywające partie i odmawiające kontynuacji czy w inny sposób naruszające dobre obyczaje), nie gramy też z komputerami.
set formula (standard || blitz)
Gramy tylko w normalne szachy - partie blitz lub standardowe, tj. nie gramy partii lightning (ekstremalnie szybkich), nie gramy też w gry inne niż szachy (wild, crazyhouse itd).
set formula ratingdiff > -200 && ratingdiff < 400
Nie gramy z rywalami o rankingu słabszym niż nasz o 200 lub więcej punktów, nie gramy też z osobami o 400 lub więcej punktów od nas lepszymi.
set formula rated && assesswin > 1
Gramy tylko partie rankingowe i tylko, gdy wygrana zapewnia nam zwiększenie rankingu o co najmniej 2 punkty (to kryterium efektywnie odrzuci oferty gry z graczami dużo słabszymi).
set formula mymaxtime(40) >= 900
Gramy tylko partie, w których na pierwsze 40 ruchów mamy co najmniej 15 minut (900 sekund).
Ważnym źródłem interesujących przykładów mogą być inni gracze - poleceniem var NazwaGracza można sprawdzić wartości zmiennych ustawionych przez tego gracza - w tym zobaczyć, jakiej używa formuły.
Stosowanie zmiennych pomocniczych
Jak widać już z powyższych przykładów, formuła może być całkiem skomplikowana (wyobraźmy sobie choćby formułę ustalającą, że nie gramy z gośćmi ani komputerami, gramy tylko w normalne szachy, rywal ma mieć ranking nie gorszy od naszego i chcemy mieć choć 15 minut czasu do namysłu a partia ma być rankingowa). Aby ułatwić sobie zadanie, można stosować zmienne pomocnicze - f1, f2, ... f9. Mają one dwojakie zastosowanie:
- pozwalają rozbić skomplikowaną formułę na niezależnie modyfikowane części,
- pozwalają zdefiniować kilka formuł i przełączać się łatwo między nimi.
Najpierw przykład pierwszego zastosowania:
set f1 registered && !abuser && !computer set f2 blitz || standard || wild set f3 ratingdiff > -200 && ratingdiff < 400 set f4 rated && assesswin > 4 set f5 mymaxtime(40) >= 900 && inc >= 5 set formula f1 && f2 && f3 && f4 && f5
Jak widać, w zmiennej f1 ustalamy, z kim jesteśmy gotowi grać, w zmiennej f2 jakiego rodzaju partie, w f3 dopuszczalną różnicę rankingu, w f4 oczekiwany wpływ partii na ranking, w f5 oczekiwany czas gry (tu: choć 15 minut na 40 ruchów oraz występowanie choć 5-sekundowego inkrementu), zaś samą formułę definiujemy jako koniunkcję tych warunków (oczywiście nadanie takiego znaczenia zmiennym pomocniczym jest tylko przykładowe, można sobie wyobrazić dowolne inne). Tego typu zapis ułatwia wprowadzanie modyfikacji, np. jeśli zdecydujemy się grać także partie szybsze, możemy wydać polecenie:
set f5 mymaxtime(40) > 300
i od tego momentu wymagamy 5 minut i nie wymagamy już inkrementu. Jak widać poprawkę mogliśmy zrobić wygodnie - nie było potrzeby redefiniowania samej formuły ani też powtarzania definicji innych zmiennych pomocniczych.
Teraz przykład używania zmiennych pomocniczych do przełączania formuł:
set f1 registered && !abuser && !computer set f2 blitz || standard || wild set f3 ratingdiff>-200 && ratingdiff<400 set f4 rated && assesswin > 4 set f5 mymaxtime(40) >= 900 && inc >= 5 set f6 mymaxtime(40) <= 300 set f8 f1 && f2 && f3 && f4 && f5 # gra spokojna set f9 !abuser && f2 && f3 && f6 # gra szybka set formula f8
(przy okazji ilustrujemy tu możliwość używania znaku # do dopisywania sobie komentarzy, tekst następujący po tym znaku jest ignorowany).
Zdefiniowana na razie formuła ma to samo znaczenie, co formuła omawiana wcześniej (czyli chcemy grać spokojną partię z sensownym rywalem i mając perspektywy zysku w rankingu). Ale ... możemy też wydając proste polecenie
set formula f9
przełączyć się na wersję, w której chcemy grać tylko partie szybkie (nie więcej niż 5 minut na 40 ruchów), dopuszczamy także grę z komputerami czy gośćmi i nie oglądamy się na ranking. A gdy znowu mamy ochotę na grę spokojniejszą, wracamy do poprzednich ustawień przez
set formula f8
Szczegółowe omówienie składni
Pełne, formalne omówienie składni formuł jest dostępne w help formula. Niemniej jednak przypomnę tutaj podstawowe informacje (celowo omawiam jedynie bardziej użyteczne zmienne a nie wszystkie).
Formuła jest wyrażeniem logicznym, konstruowanym z stałych (czyli po prostu liczb, np. 200 czy -10), predefiniowanych zmiennych (np. blitz czy assesswin) oraz operatorów arytmetycznych i logicznych (np. && czy >=) a także nawiasów. Dodatkowo znak # rozpoczyna komentarz, wszelki tekst następujący po tym znaku jest ignorowany.
Można wykorzystywać następujące operatory:
+, -, *, /
standardowe operatory arytmetyczne, oczywiście operandy muszą być liczbami,
<, >, <=, >=, = (lub ==), !=
standardowe operatory porówywnywania liczb,
!
negacja logiczna
& (albo &&, albo and), | (albo ||, albo or),
koniunkcja i alternatywa logiczna.
Istnieją dwa rodzaje predefiniowanych zmiennych: zmienne logiczne (zwracające wartość prawda/fałsz) oraz zmienne arytmetyczne (zwracające liczbę).
Najbardziej użyteczne zmienne logiczne:
Informacje o rywalu:
abuser
czy rywal jest na czarnej liście (używane głównie w formie !abuser - odrzucanie takich rywali)computer
czy rywal jest komputeremregistered
czy rywal jest zarejestrowanym użytkownikiem serwera (a nie gościem)noescape
czy rywal ma ustawioną zmienną noescape (rozłączający się przegrywa).Rodzaj partii
lightning
czy ma to być partia super-szybka (normalnych szachów),blitz
czy ma to być partia błyskawiczna (normalnych szachów),standard
czy ma to być partia standardowa (normalnych szachów),chess
czy ma to być partia normalnych szachów (skrótowiec dla lightning || blitz || standard),wild
czy ma to być partia dzikich szachów (wchodzą tu szachy fischerowskie a także inne szachy z zmienionym ustawieniem początkowym),crazyhouse
czy ma to być partia crazyhouse,bughouse
czy ma to być partia bughouse,suicide
czy ma to być partia wybijanki,Charakterystyka wyzwania
nocolor
ustawiane, gdy przeciwnik nie żąda konkretnego koloru (wpisując do formuły nocolor będziemy odrzucać żądania definiujące konkretny kolor),rated
czy partia ma być rankingowa (wpisując rated do formuły gramy tylko partie rankingowe, uboczną konsekwencją jest brak gry z gośćmi)private,
czy partia ma być prywatna (wpisując do formuły !private będziemy odrzucać żądania gier prywatnych),
Najbardziej przydatne zmienne arytmetyczne:
Informacje rankingowe
ratingdiff
różnica rankingów (od rankingu rywala odejmujemy nasz), stosowane w zapisach (ratingdiff > -100 - nie gramy z istotnie słabszymi rywalami, czy ratingdiff < 400 - nie gramy z dużo lepszymi), do obliczeń jest używany ranking odpowiadający rozpoczynanej partii (czyli np. ranking blitz gdy ma być to partia 5 0),assesswin, assessdraw, assessloss
o ile zmieni się nasz ranking przy - odpowiednio - wygranej, remisie i porażce, używane w stylu assesswin > 3 (wygramy choć 3 punkty) czy assessloss > -12 (przegramy nie więcej niż 12 punktów), warto pamiętać że ustawienie iż chcemy wygrać choć 1 punkt implikuje granie tylko partii rankingowych.Czas gry
mymaxtime(n)
Czas - w sekundach - jaki będziemy mieli na podaną ilość ruchów (np. pisząc mymaxtime(40) >= 900 wymagamy byśmy na pierwszych 40 ruchów mieli choć 15 minut czasu, spełnią to wymaganie partie 15 0 czy 10 8).time
Czas bazowy w minutach (np. pisząc time >= 10 wymagamy bazowego czasu choć 10 minut)inc
Inkrement (np. pisząc inc >= 10 wymagamy inkrementu choć 10 sekund)
Używanie formuły w seek-ach
O ile formuła automatycznie obejmuje bezpośrednio składane propozycje gry a także powoduje odpowiednie filtrowanie listy prezentowanych seek-ów innych graczy, o tyle gdy sami ogłaszamy chęć gry domyślnie używana nie jest. Jeśli chcemy, by nasz seek mógł być zaakceptowany tylko przez graczy, którzy spełniają naszą formułę, musimy dodać do niego parametr formula. Na przykład tak:
seek 2 12 formula
Nieco pisania możemy sobie oszczędzić definiując odpowiedni alias.