konto usunięte
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
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
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 powtorzycsie 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?????Następna dyskusja: