Jakie partie chcemy grać (formuła)

Logo FICS

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 komputerem

registered

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.

komentarze obsługiwane przez Disqus