poniedziałek, 24 września 2007

Kod do pobrania

Źródła

Kod źródłowy jest dostępny pod adresem:
http://www.mytempdir.com/2026326

Informacje o publikacji
Kod jest rozpowszechniony na licencji GNU General Public License. Właściwie nie modyfikowałem plików z kodem, więc nie należy się spodziewać wielu komentarzy, czy jakichś udogodnień wpierających przejrzystość. W udostępnionym archiwum znajduje się kompletny projekt, który został utworzony w MS Visual Studio 2005 Express Edition. Jednak zważywszy na to, że Szachotron korzysta z zewnętrznych bibliotek, należy się w nie zaopatrzyć przed próbą kompilacji. Mam tutaj głównie na myśli bibliotekę języka skryptowego LUA. Niezbędne także jest posiadanie Luabind, która to biblioteka korzysta z Boost.

Mając przygotowane wszystkie niezbędne biblioteki można skompilować program. Projekt był testowany i kompilacja powinna zakończyć się bez żadnych errorów. Ponadto należy zwrócić uwagę, że nie jest wspierany Unicode.

Aby program zadziałał, konieczny jest silnik szachowy. Należy go skopiować do katalogu 'scripts'. Informacje, z którego silnika szachowego Szachotron ma korzystać, są zapisane w skrypcie inicjujacym 'core init' w linii core:SpawnProcess("Rybkav2.3.w32.exe"). Jako parametr SpawnProcess należy oczywiście podać nazwę odpowiedniego silnika.

Miłej zabawy!
Mam nadzieję, że komuś przyda się ten kod źródłowy. Komuś, kto będzie mógł przeznaczyć więcej czasu na roziwjanie tego projektu, niż ja mogłem mu poświęcić.

"That's all folks!"

środa, 12 września 2007

Kod źródłowy

Matura et caetera

Rok szkolny się zaczął, jestem w klasie maturalnej i już niewiele czasu zostało na naukę. Przez natłok obowiązków na pewno nie będę mógł się zająć Szachotronem. Przemyślałem więc wszystko i postanowiłem, że opublikuję aktualną wersję Szachotrona w postaci kodu źródłowego na licencji GNU General Public License.

Kiedy się będzie można spodziewać publikacji?

Zanim kod źródłowy ujrzy światło dzienne, muszę dodać komentarze i poddać go zabiegom kosmetycznym. Przydałby się jescze jakiś readme.txt, czy też dokumentacja techniczna. Nie chę niczego obiecywać, ale raczej jeszcze we wrześniu będzie miał miejsce pierwszy release.

czwartek, 9 sierpnia 2007

Praca

Komercja
Uah, całe wakacje praktycznie mi zleciały i nic przy Szachotronie nie robiłem. Jak do tej pory mam inne zajęcie - normalna, płatna robota. Po całym dniu siedzenia przy kodzie mam dość komputera. Jako, że Szachotron jest tylko projektem hobbystycznym, siłą rzeczy poszedł w odstawkę.
Najprawdopodobniej przygotuję dotychczasowy kod i opublikuję go. Kto będzie chciał to sobie go będzie mógł ściągnąć i skompilować.

piątek, 8 czerwca 2007

Przerwa

Koniec roku szkolnego
Już niedługo zakończy się rok szkolny, będą wakacje, a co za tym idzie dużo wolnego czasu. Jak tylko nastąpi w szkole klasyfikacja i wszystkie sprawy formalne się uprawomocnią, wtedy wznowie prace nad Szachotronem. Tymczasem wszystkich zainteresowanych proszę o uzbrojenie się w cierpliwość.

ś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.

środa, 25 kwietnia 2007

Nowa wersja na horyzoncie

Szachotron 4
Po dłuższej przerwie znów zacząłem pracować nad Szachotronem. W ostatnim czasie skodziłem framework WinAPI, dzięki któremu napisałem bardzo funkcjonalną konsolę. Teraz, dzięki wszystkim udogodnieniom jakie daje mi język skryptowy LUA, mam interfejs podobny do Basha :) Postanowiłem, że wykorzystam go w kolejnej wersji Szachotrona, gdyż możliwość całkowitej zmiany funkcjonalności programu podczas jego działania jest bardzo kusząca. I tak, teraz będzie można zmieniać wszystkie wcześniej wczytane ustawienia, pisać własne skrypty, a nawet wymienić czy też zrestartować silnik szachowy w runtime'ie. To na razie plany. Teraz spróbuję je zrealizować i mam nadzieje, że wszystko się uda mimo niesamowitego braku czasu.