środa, 9 maja 2007

Problemy techniczne

Telekomunikacja Polska
Ten wspaniały monopolista pozbawił mnie łącza internetowego na sześć dni. Nie miałem możliwości zalogowania się na Kurnik, a co za tym idzie testować Szachotrona. Efektem tego wszystkiego są poważne opóźnienia w pracach nad wersją demonstracyjną. Skończył się długi weekend i najprawdopodobniej prace będą musiały poczekać jakiś czas.

czwartek, 3 maja 2007

3000 lines and counting

70KB kodu

Wczoraj pękła bariera trzech tysięcy linii kodu. Wiele się zmieniło od ostatniej wersji. Opiszę te zmiany w dwóch etapach: w pierwszym przedstwię to co widzi użytkownik, a w drugim to jak działa sam program.

Interfejs
Od strony użytkownika największą zmianą jest chyba rezygnacja ze skrótów klawiszowych. Zrobiłem to dla zwiększenie intuicyjności obsługi. Został tylko jeden skrót, ale o nim za chwilkę.




Powyżej można zobaczyć panel sterujący Szachotrona - moduł, który zastąpił niewygodne skróty klawiszowe. Do dyspozycji jest szesnaście przycisków. Nie byłoby w nich nic nadzwyczajnego, ot zwykłe buttony, gdyby nie to, że są całkowicie konfigurowalne. Można zmienić ich położenie, rozmiar, czy też tekst. Jednak najważniejszą funkcją jest możliwość zdefiniowania ich działania według własnych upodobań. Daje to praktycznie nieograniczone możliwości. Jeśli jednak komuś by tego było mało, to istnieje pewien myk. Jako, że po naciśnięciu przycisku jest wywoływana wcześniej zdefiniowana przez użytkownika komenda, to nic nie stoi na przeszkodzie, by pod jednym z przycisków było podpięte wywołanie jakiegoś skryptu. Co nam to daje? Ano to, że możemy w tymże skrypcie zmienić funkcjonalność już istniejących przycisków. Takie profile przycisków ;)
Panel ładuje się jedynym skrótem klawiszowym jaki został z poprzedniej wersji. Standardowo przewidziałem alt+A, ale oczywiście można sobie to zmienić w skrypcie inicjującym. Po udanym załadowaniu można przejść do sedna sprawy - rozgrywania partii. Klikamy na kurnikowy przycisk start, a następnie na przycisk 'Nowa Gra'. Uaktywnią się przyciski ruchów i można wybierać odpowiedni ruch z wcześniej przygotowanego arsenału. W taki sposób doprowadzamy do klęski przeciwnika i cieszymy się z rosnącego rankingu ;)

Jak to wszystko działa
Na pierwszy ogień idzie konsola.




Jest to serce Szachotrona. Za jej pomocą można zmieniać dosłownie wszystkie ustawienia programu. Począwszy od uruchamiania silnika szachowego poprzez ręczne ładowanie panelu, aż po takie pierdoły jak zmiana koloru tła samej konsoli ;) Wszystko dzięki zaimplementowaniu języka LUA z wykorzystaniem wrappera LuaBind.
Podstawowa składnia poleceń wygląda następująco:
Uruchomienie skryptu:
nazwa_skryptu

Wywołanie wewnętrznego polecenia:
exe obiekt:funkcja

Przykładowo, aby zmienić kolor tła konsoli, należy wpisać:
exe WinAPI:SetConsoleBackgroundColor(WinAPI:RGB(157,206,107))

Otrzymamy dzięki temu zielonkawe tło.

Jak działa panel sterujący? Panel jest oknem tworzonym przez Szachotrona, które jest oknem potomnym aplikacji kurnikowej. Funkcja ładująca troszczy się nie tylko o jego stworzenie. Pobiera wszystkie niezbędne do działania programu informacje:

  • uchwyt głównego okna stołu
  • uchwyt okna szachownicy
  • uchwyt okna rodzica panelu sterowania
  • pozycję szachownicy
  • oraz inne, mniej ważne

Przed stworzeniem okna panelu odbywa się szukanie okna ze stołem do gry. Jeśli takowe nie zostaje znalezione to cała procedura zostaje przerwana. Oczywiście po udanym załadowaniu tworzone są przyciski na podstawie wcześniej wczytanych ze skryptów danych. Jeśli wszystko zostało poprawnie załadowane, wtedy aktywowane są przyciski 'Nowa Gra' i 'Wyjście'. Pierwszy przycisk został już opisany wcześniej, natomiast drugi zasługuje na chwilkę uwagi. Mianowicie odpowiedzialny jest za odłączenie panelu sterowania. Dzięki temu wszystkie wcześniej przydzielone zasoby pamięci zostają zwolnione. Istnieje jednak możliwość, że okno ze stołem zostanie zamknięte zanim użytkownik wciśnie przycisk 'Wyjście'. Ma to miejsce, gdy wciskamy 'X', operator stołu nas wyprasza [ po tym jak za dużo razy z nami przegrał :P ], albo zostaje zamknięta przeglądarka. Wtedy zostaje uruchomiona funkcja automatycznego zwalniania panelu. Wszystko dzięki temu, że panel jest oknem potomnym, więc podczas niszczenia stołu i on jest niszczony.
Po wciśnięciu przycisku 'Nowa Gra' jest on deaktywowany, aby zostać aktywowanym ponownie po wciśnięciu przycisku 'Koniec Gry'. Ten przycisk odpowiedzialny jest za poinformowanie silnika szachowego, że skończyliśmy grać oraz wyłącza przyciski odpowiedzialne za ruchy.
Jak można zauważyć, na panelu jest jeszcze sześć małych przycisków. Standardowo nie robią nic. Są to przyciski przeznaczone do podpięcia własnych skryptów.
Oprócz tych podstawowych funkcji pracuje jeszcze cały sztab innych, pomniejszych funkcji. Nie będę ich tu opisywał, przecież ten blog to nie dokumentacja techniczna ;) Powiem tylko, że oprócz tego co opisałem, zmieniło się sporo w samym module odpowiedzialnym za komunikację z silnikiem szachowym. Cała aplikacja została przystosowana do obsługi skryptów oraz uległ przeprojektowaniu cały szkielet. Szachotron jest teraz całkowicie modularny.

Demo
Teraz pracuję nad wersją demonstracyjną Szachotrona. Przygotowuję go do publicznego pokazu, tak więc każdy będzie mógł sobie zobaczyć jak działa mój program.

wtorek, 1 maja 2007

Filmik demonstracyjny

Demo
Mówią, że jeden obraz jest wart tysiąca słów. A jak jest w przypadku dziesięciu obrazów na sekundę? Otóż wpadłem na pomysł, żeby sklecić jakieś małe demko Szachotrona. Poniżej można obejrzeć jak łatwo wygrywa się na kurniku ;)




Filmik nie jest może w super jakości, no ale jest i to się liczy :P Jak miną problemy z moim łączem, to postaram się zamieścić filmik w wyższej rozdzielczości na jakimś serwerze.