Posts tagged: Chess Engine

Joaca Sah pe Yahoo Games cu Chess engine

O scurta descriere tehnica

In ultimii ani au fost dezvoltate o multitudine de engine-uri pentur sah, unele cu versiuni gratuite dar cele mai complexe cu versiuni ce pot fi cumparate( sau gasite). Un engine de sah este o aplicatie care poate analiza o anumita pozitie pe tabla de sah si poate indica cea mai buna mutare. Exista o interfata de comunicare care este de obicei CLI (cu input pe STDIN siĀ  output pe STDOUT) si ca protocol sunt doua optiuni principale, Xboard si UCI, majoritatea engine-urilor importante suportandu-le pe ambele.

Cel de-al doilea protocol, “Universal Chess Interface” fiind dezvoltat mai recent, are suport mai bun pentru multithreading, setarea memoriei alocate si altele si pe el il vom alege mai departe pentru implementare.

Ca engine vom alege Rybka considerat cel mai bun sau printre cele mai bune in diferite clasamente. Versiunea curenta este 3 si se asteapta sa apara versiunea 4 dar are si o versiune gratuita, mai veche care poate fi descarcata de pe site-ul rybka: Rybka 2.2n2. Aceasta este evident mai slaba dar prezinta functionalitatile de baza similare cu toate celelalte versiuni. Din nou, va reamintesc ca versiune 3 poate fi “gasita”.

Ce ne-am propus sa facem

Ne-am hotarat sa creem un programel care sa ne ajute sa trisam la jocul de sah de pe games.yahoo.com. De ce games.yahoo.com? Pentru ca este mare, stabil si cu multi utilizatori. In plus cu 1-2 ani in urma si-au schimbat interfata de joc si folosesc in momentul asta Flash. Pachetele se pot intercepta si in cazul flash-ului dupa decodarea swf-urilor ne putem da seama ce se foloseste si unde. Astfel descoperim ca foloseste un anumit limbaj de comunicare si printr-un modul de decriptare putem intelege cand se efectuaza mutari si putem folosi engine-ul de sah pentru calculul viitoarelor mutari posible. Termenul “a trisa” este corect deoarece in 15 secunde se pot prevede 7-10 mutari in avans, iar acest numar de mutari poate ajunge pana la 12-14 in cazul folosirii unui procesor quad core puternic dar si cu un engine performant care are mutithreading.

Sa trecem la treaba:

Pentru aplicatia principala – Visual Basic .NET. Pentru capturarea pachetelor – WinPcap. Pentru integrarea WinPcap cu VB – SharpPcap.

Este nevoie de crearea catorva clase pe care le vezi putea gasi mai jos in codul sursa:

  • “sah.vb” – pentru lucrul cu Engine.exe
  • “TcpManage.vb” pentru reordonarea pachetelor TCP. Pachetele sunt capturate cu WinPcap care lucreaza la Layer 2 – Link Layer si pachetele TCP au un sistem de verificare (de exemplu pachete sunt retrimise daca nu ajung cu bine la destinatie) si nu ajung intotdeauna in ordinea in care au fost trimise.
  • “comunicatie.vb” pentru decodarea informatiilor din pachete in instructiuni de joc cum ar fi mutarile.

Dupa o analiza amanuntita a protocolului de comunicatie cu serverul de joc s-a dezvoltat versiunea 1.0: YahooChessHelper.v1.0.0.0. Cu aceasta se pot detecta mutarile noi. Fiecare mutare este transmisa engine-ului care are la dispozitie 15 secunde sa gasesca cea mai buna mutare pe care o afiseaza pe ecran in mod text si grafic.

Cerintele sunt .NET Framework 2.0 si WinPcap. Fisierele SharpPcap.dll si Engine.exe sunt incluse in arhiva. Engine.exe este de fapt Rybka versiunea gratuita 2.2n2. Daca doriti sa folositi alte engine-uri inlocuiti acest fisier. Momentan functioneaza doar daca jucati cu piesele albe.

Utilizare:

Dupa pornire se selecteaza din lista placa de retea pe care se afla conexiunea la internet, se intra la Yahoo Games Chess pe o camera, se face un joc la o masa si se da Start inainte de a incepe un jocul. Daca doriti sa incepeti alt joc dati Stop si din nou Start.

Codul sursa poate fi downloadat aici: YahooChessHelper.proj cu scuze de rigoare daca va fi indescifrabil pe alocuri.

Dansette