konto usunięte

Temat: oprogramowanie deski szachowej

http://www.phpclasses.org/browse/file/8351.html to do strawienia jeszcze, ale tak jak twierdzi kolega Staszek Głogowski wolę napisac samodzielnie ;).

konto usunięte

Temat: oprogramowanie deski szachowej

Ważny jest problem powtórzenia posunięć. W szachach turniejowych, a także na kurniku trzykrotne powtórzenie pozycji powoduje remis. Tak więc trzeba jeszcze coś takiego zaimplementować co będzie trudniejsze...

konto usunięte

Temat: oprogramowanie deski szachowej

no az tak hardcorowe to nie...
wystarczy sprawdzac, czy szach/ten sam ruch, ucieczka/ten samruch/zastawa/ten sam ruch, i to zapamietac 3 razy i sprawdzac.

konto usunięte

Temat: oprogramowanie deski szachowej

Zgodnie z regulaminem Polskieo Związku Szachowego i FIDE powtórzenie każdej pozycji trzy razy w dowolnym momencie gry powoduje remis.

konto usunięte

Temat: oprogramowanie deski szachowej

Nie wiem czy rozumiesz, nie chodzi o powtórzenie trzech ostatnich ruchów, tylko POZYCJI.

konto usunięte

Temat: oprogramowanie deski szachowej

wiem o co chodzi.
ale to tez nie stanowi problemu, wystarczy sprawdzac uklad WSZYSTKICH Pionow ktore zostaly na szachownicy. jesli 3 krotnie bedzie taki sam no to mamy remis.
Bartosz Olchówka

Bartosz Olchówka Chief Product
Officer at LiveChat

Temat: oprogramowanie deski szachowej

Co do problemu 3 powtórzonych pozycji, to bardzo prosto jest to zaimplementować. Z każdym ruchem wystarczy generować hasza z obecnej pozycji na szachownicy (jak to zrobić, to już kwestia wyboru). Następnie do jakiejś tablicy asocjacyjnej dodajemy wartość 1 w komórce o kluczu będącym haszem, a jeśli taki klucz już istnieje - inkrementujemy tę wartość. Jeśli w którejkolwiek komórce znajdziemy liczbę > 2, to ogłaszamy remis.

konto usunięte

Temat: oprogramowanie deski szachowej

Policzmy 8*8*50 (przy założeniu że średnia partii to 50 ruchów) daje nam 3200b mniej więcej, czyli 3kb. Hmm to nie tak dużo jak na dzisiejsze komputery. Ale jeśli na serwerze sprawdzamy logikę tzn. czy nas klient nie oszukuje to z 3kb może wyjść tego trochę więcej...
Mimo wszystko podoba się to rozwiązanie, nie potrafię przedstawić na tą chwilę lepszego :-)
Bartosz Olchówka

Bartosz Olchówka Chief Product
Officer at LiveChat

Temat: oprogramowanie deski szachowej

Ale my w tablicy trzymamy tylko hasze (będące jej kluczami), dla każdej pozycji na szachownicy może to być np. wartość funkcji MD5 na zbiorze 64 pól, który zwróci wartość 128-bitową. Także dla 50 ruchów mamy 50 kluczy 128-bitowych. Czy to dużo? Nie wydaje mi się...

Przy okazji warto dodać, że w szachach możliwych jest tak wiele różnych ustawień bierek na szachownicy, że na pewno zdarzy się, że dwa zupełnie różne ustawienia zwrócą taki sam odcisk MD5, co może skutkować informacją o remisie. Mimo, iż prawdopodobieństwo wystąpienia takiej sytuacji jest bardzo, bardzo małe, to można zastanowić się nad zastosowaniem haszów o większej ilości bitów, np. 160-bitowe SHA-1.Bartosz Olchówka edytował(a) ten post dnia 29.01.08 o godzinie 21:00

konto usunięte

Temat: oprogramowanie deski szachowej

nom ja bym bardziej ku sha1 sie pokierowal anizeli md5. Przy md5 istnieje wiele kolizji i nie jest to juz algorytm uznawany za bezpieczny.

konto usunięte

Temat: oprogramowanie deski szachowej

Kwestia bezpieczeństwa - md5 czy sha1 nie jest tu istotna bo używamy tych funkcji skrótu tylko jako odcisk pozycji a nie np. hasła. W założeniu do serwera będzie szło np. samo posunięcie, a serwer będzie sobie dodawał klucze do hasha sam.
Takie hashe można po partii usuwać, co zmniejszy zużycie bazy danych. A nawet w trakcie jej - po stracie jednej figury. Jeśli chodzi o powtarzalność, to niestety jest to poważny problem. Jednak jeśli hashe będę usuwane po każdej stracie figury, to prawdopodobieństwo takiego błędu ograniczamy.

konto usunięte

Temat: oprogramowanie deski szachowej

no wlasnie ja mialem na mysli kwestie powtarzalnosci i kolizji, ktora w przypadku md5 jest niestety bardzo prawdopodobna, a sytuacji na szachownicy jest miliony, ciezko zalozyc, ze hash sie nie powtorzy, anawet nie powtorzy sie 2 razy i bedzie remis z kapelusza.

ja bym bardziej poszedl w kierunku zapisu w jakies miejsce calej sytuacji z szachownicy ( w koncu to tylko 64 bajty), przy zalozeniu ze np. p-pionek, g-goniec, 0-puste pole itp itp
mamy 64 bajty w postaci

wsghkgswpppppppp00000000000000000000000000000000ppppppppwsgkhgsw - i to mamy partie wyjsciowa.
robimy sobie tabelke w bazie o kolumnach: id partii, oraz kombinacja - taka jak powyzej, jako przykladowy varchar 64, no i counter. po kazdej partii czyscimy ta tabele, z odpowiednim id partii. po kazdym posunieciu zwiekszamy wartosc licznika w wierszu, gdzie taka kombinacja sobie istnieje. To mamy na partie srednio 50*64 = 3.125 kb. to jest bardzo malo, przy koszcie dostepu do bazy jakies 2 zapytania na 5-30 sekund (sredni czas oczekiwania na ruch przeciwnika), co wydaje mi sie dobrym rozwiazaniem przy ZEROWYM prawdopodobienstwie przypadkowego remisu.

Takie rozwiazanie ma dodatkowy plus - mozemy zapisac stan gry, gdy jeden z przeciwnikow ma ochote wyjsc odwiedzic ciotke. po powrocie odpala strone www i graja dalej.Jakub Świegot™ edytował(a) ten post dnia 31.01.08 o godzinie 10:26

konto usunięte

Temat: oprogramowanie deski szachowej

Jakub Świegot™:
no wlasnie ja mialem na mysli kwestie powtarzalnosci i kolizji, ktora w przypadku md5 jest niestety bardzo prawdopodobna, a sytuacji na szachownicy jest miliony, ciezko zalozyc, ze hash sie nie powtorzy, anawet nie powtorzy sie 2 razy i bedzie remis z kapelusza.

ja bym bardziej poszedl w kierunku zapisu w jakies miejsce calej sytuacji z szachownicy ( w koncu to tylko 64 bajty), przy zalozeniu ze np. p-pionek, g-goniec, 0-puste pole itp itp
mamy 64 bajty w postaci

wsghkgswpppppppp00000000000000000000000000000000ppppppppwsgkhgsw - i to mamy partie wyjsciowa.

To troszkę bez sensu :)
Nie sądzisz że lepiej by było zapisywać tylko ruchy użytkownika?
robimy sobie tabelke w bazie o kolumnach: id partii, oraz kombinacja - taka jak powyzej, jako przykladowy varchar 64, no i counter. po kazdej partii czyscimy ta tabele, z odpowiednim id partii. po kazdym posunieciu zwiekszamy wartosc licznika w wierszu, gdzie taka kombinacja sobie istnieje. To mamy na partie srednio 50*64 = 3.125 kb. to jest bardzo malo, przy koszcie dostepu do bazy jakies 2 zapytania na 5-30 sekund (sredni czas oczekiwania na ruch przeciwnika), co wydaje mi sie dobrym rozwiazaniem przy ZEROWYM prawdopodobienstwie przypadkowego remisu.

Takie rozwiazanie ma dodatkowy plus - mozemy zapisac stan gry, gdy jeden z przeciwnikow ma ochote wyjsc odwiedzic ciotke.

:)
po powrocie odpala strone www i graja dalej.Jakub Świegot™ edytował(a) ten post dnia 31.01.08 o godzinie 10:26

konto usunięte

Temat: oprogramowanie deski szachowej

Sęk w tym że same ruchy nie wystarczą :-) nie będziesz przecież po każdym posunięciu przeliczał wszystkie pozycje ;-)

konto usunięte

Temat: oprogramowanie deski szachowej

nom, drogi Staszku Głogowski tutaj chodzi o powtorzenie 3 krotne SYTUACJI na cALEJ szachownicy.

konto usunięte

Temat: oprogramowanie deski szachowej

Jakub Świegot™:
chodzi o powtorzenie 3 krotne SYTUACJI na cALEJ szachownicy.

jestes w 100% pewien tego, co piszesz? ;-)

konto usunięte

Temat: oprogramowanie deski szachowej

gram w szachy od wielu lat i mam 3 miejsce w powiecie, musi powtorzyc
sie sytuacja, a nie ruch. poczytaj kodeks szachowy.Jakub Świegot™ edytował(a) ten post dnia 31.01.08 o godzinie 12:21

konto usunięte

Temat: oprogramowanie deski szachowej

Wojtek A.:
Sęk w tym że same ruchy nie wystarczą :-) nie będziesz przecież po każdym posunięciu przeliczał wszystkie pozycje ;-)

A kto mi każe przeliczać :)

konto usunięte

Temat: oprogramowanie deski szachowej

Jakub Świegot™:
nom, drogi Staszku Głogowski tutaj chodzi o powtorzenie 3 krotne SYTUACJI na cALEJ szachownicy.

Tak masz rację tani nie jestem ;)
Wydaje mi się że do wyliczenia powtórzenia 3 krotnej sytuacji na szachownicy w zupełności wystarczy zapisanie postępu partii.Stanisław Głogowski edytował(a) ten post dnia 02.02.08 o godzinie 20:48

konto usunięte

Temat: oprogramowanie deski szachowej

pata?????



Wyślij zaproszenie do