Kółko i krzyżyk


  • Autor, Copyright:
    Zbigniew Lisiecki, zbyszek.evot.org, June 2003, GNU Public Licence: copy, zmieniaj i używaj, lecz nie sprzedawaj i pozostaw tą informację.

  • Jak grać:
    Zacznij x File.New Game. Kładź czarne kółka aby uzyskać pięć w jednej linii. File.Save jest wyłączone w wersji internetowej (brak zezwolenia na zapis).

  • Menu Edit:
    Przy pomocy "Edit" można położyć dowolną bierkę na planszy, lub zmazać ją przy pomocy "Edit.empty". Następnie użytj ""Edit.Play" aby rozpocząć grę w utworzonej pozycji. Przycisk: "<" to to samo co "Take back", a ">" to samo co "Move forward".

  • Menu Options:
    "Evaluate" oblicza wartość aktualnej pozycji. W algorytmie gry ta wartość jest używana do obliczanie wartość poszczególnych "liści" na drzewie możliwych pozycji. "Accounted for" pokazuje pola brane pod uwagę podczas aktualnego obliczania odpowiedzi. "TTab on/off" włącza lub wyłącza tabelę transpozycji. Tabela transpozycji jest używana do zapamiętania już wyliczonych pozycji do ich następnego użycia. "show TTab %" pokazuje procent tabeli transpozycji użyty częściej niż raz. Obecnie ta wartość pokazuje, że użycie TTab ma mały wpływ na wynik. "show presorted %" pokazuje ilość przepiczonych pozycji jako procent wszystkich możliwych pozycji branych pod uwagę. To ogranicznie jest możliwe dzięki wstępnemu sortowaniu. "show depth %" pokazuje ilu pozycji zostało przeliczonych na każdej głębokości 1...7. "hqueue debug" drukuje na stdout jak działa hash queue użyta w TTab. "compute debug" drukuje pracę głównej pętli. "newmoves debug" drukuje pracę procedury wyliczającej nowy ruch. "m3/4 debug" drukuje pracę procedur znajdujących trzy lub cztery bierki w jednej linii.

  • Parametry:
    "max width" to maksymalna ilość ruchów, która jest brana pod uwagę na każdej gałęzi drzewa możliwych pozycji.
    "max depth" to największa ilość pięter w drzewie możliwości.
    "mmax depth" to to samo co "max depth" w przypadku trzech bierek w jednych rzędzie.
    "debug depth" ogranicza lila bierki co do liczby pięter w drzewie transpozycji.
    "shown depth" ogranicza wydruki debagowe do tej liczby pięter.
    "max ram" to maksymalna ilość pamięci RAM użyta do tabeli transpozycji
    "hash size" Tabela transpozycji jest skonstruowana przy pomocy kolejki hash. Hash size to ilość nagłówków tej kolejki.
    alfa i beta ti początkowe wartości w głwnym algorytmie tzw. Alpha-Beta-Search.
    "add3" to parametr dodany, gdy trzy bierki stoją w jednym rzędzie.

  • Źródła:
    Źródła składają się z GUI w ox.java, głównego silnika w game.java oraz kolejki hash w hqueue.java. Użyty jest prosty algorytm alpha-beta-search znany z programów szachowych. Na początku sprawdzamy czy już pięć bierek stoi w jednych rzędzie lub czy cztery lub trzy są wolne. To uwalnia bezpośrednią odpowiedź. Potem wyliczamy możliwe nowe ruchy z konturu wokół dotychczasowej gry. Funkcja Evaluate() wylicza ilość możliwych piątek.

    Źródła:
    ox.java
    game.java
    hqueue.java
    ox.php


    Copyright © 2005 Z.Lisiecki