konto usunięte

Temat: oprogramowanie deski szachowej

temat niekoniecznie ściśle związany z językiem php, bardziej ogólnie z programowaniem, ale ja akurat przymierzam się do zrobienia gry w szachy online (już 2 raz, za 1 zrezygnowałem po jakimś czasie) właśnie w php i trzeba jakoś sprawdzac poprawnośc ruchów, i tak dalej.

I tak właśnie sobie myśle gdzie/jak najlepiej zapisywac układ figur na desce, by jaknajłatwiej oprogramowac sobie metodykę sprawdzania poprawnosci ruchu, aktualnej sytuacji króla i tak dalej i tak dalej.

Czy ma ktoś jakieś doświadczenie w tej materii, lub jakieś ciekawe pomysły? Zapraszam do dyskusji.
Michał C.

Michał C. Deputy Head of
Software Development

Temat: oprogramowanie deski szachowej

macierz 2x2

konto usunięte

Temat: oprogramowanie deski szachowej

no wlasnie taki matrixik sobie wczesniej uzywalem, ale pytam, bo moze sa jakies inne ciekawe rozwiazania.
Kacper Oczkoś

Kacper Oczkoś CIO, Data Scientist,
BI Developer

Temat: oprogramowanie deski szachowej

To tak na szybko.

Ja bym użył zwykłej tablicy 8x8 zawierającej obiekty (figury) + info o pozycji króli aby ich nie szukać za każdym razem

Uzasadnienie:
Przy sprawdzaniu poprawności ruchów potrzeba sprawdzić czy dana figura porusza się w odpowiedni sposób (proste na podstawie samego ruchu), trzeba sprawdzić czy pole na które się porusza (i w przypadku figur poruszających się na wprost, sprawdzić czy nie ma figur po drodze), należy sprawdzić jak zmiana pozycji figury ma się do szachowania, któregoś króla (w tym celu należy sprawdzić co króle "widzą" po ruchu), jeśli nie poruszamy się skoczkiem to wystarczy sprawdzić 8 kierunków króla, w przypadku ruchu skoczkiem trzeba sprawdzić jak dany ruch ma się do szachowania króla (sprawdzić co po ruchu skoczek będzie "widział").

Ciekawe czy coś w tej części pominąłem.

Obiekty figur:
Pion powinien mieć możliwość "zapamiętania", że można go bić w przelocie (zmienna zapisywana po odpowiednim ruchu i zerowana po kolejnym) oraz info o promocji (na jaką figurę został promowany)
Wieża - info o możliwości roszady (czy się poruszała).
Król - info o tym czy jest pod szachem i info możliwości roszady (czy się poruszał)
Podczas sprawdzania możliwości roszady (ruch królem o 2 pola) należy sprawdzić co z wieżą (czy jest na swoim miejscu i umożliwia roszadę) oraz czy pole przez które przechodzi król nie jest pod szachem.

Pewnie coś pokręciłem (nie jestem ekspertem w szachach... hehe...) no i oczywiście coś na pewno pominąłem...

Pozdrawiam
Kacper

Temat: oprogramowanie deski szachowej

I do tego algorytm min-max. Jest to możliwie najszybszy sposób uzyskania ograniczonego drzewa ruchów.
Nie daj się podpuścić, żeby przeszukiwać ruchy brute-force'em, bo przy okazji będziesz musiał wynaleźć nowe procesory, które zrobiłyby to w skończonym czasie ;).

Pamiętaj, że musisz mieć podejście heurystyczne, nigdy nie znajdziesz idealnego rozwiązania. Nie powstały jeszcze takie komputery.

Ważny w algorytmie będzie też system oceny gry. Możesz go podzielić na dwie części, ocenę pionków oraz ocenę pozycji. Każdy pion ma odpowiednią wagę zależną od tego czym jest (im ważniejszy pion tym wyższa waga, białe jako liczby dodatnie, czarne jako ujemne, bądź na odwrót), tak oceniasz pionki. Dodatkowo każdy pion ma swoją wagę w zależności na przykład od tego czy jest zablokowany, czy jest w centrum itp. To zależy od inwencji autora. Jednak nie należy stosować tego algorytmu podczas całej rozgrywki, na przykład przy ostrych wymianach, może to zdecydowanie zmylić komputer.

To jest tylko szczypta teorii. Problem partii szachowych na komputerach jest bardzo rozległy i ciężki do ugryzienia.

Możesz tutaj nawet użyć neural network ;).

Poszukaj w sieci, znajdziesz sporo gotowych algorytmów i kilka opisów jak takie algorytmy napisać jak będziesz chciał powalczyć.

konto usunięte

Temat: oprogramowanie deski szachowej

Michale Mańko: Ja nie chcę stworzyc skryptu który gra z człowiekiem, tylko skrypt umożliwiający rozgrywkę 2 osobom, przy zachowaniu kontroli poprawności ruchów i sytuacji na szachownicy.

Temat: oprogramowanie deski szachowej

Jakub Świegot:
Michale Mańko: Ja nie chcę stworzyc skryptu który gra z człowiekiem, tylko skrypt umożliwiający rozgrywkę 2 osobom, przy zachowaniu kontroli poprawności ruchów i sytuacji na szachownicy.

A to zmienia postać rzeczy, to po cholerę ja się tak produkowałem wyżej :)

konto usunięte

Temat: oprogramowanie deski szachowej

Kacper Oczkoś:
To tak na szybko.

Ja bym użył zwykłej tablicy 8x8 zawierającej obiekty (figury) + info o pozycji króli aby ich nie szukać za każdym razem

Uzasadnienie:
Przy sprawdzaniu poprawności ruchów potrzeba sprawdzić czy dana figura porusza się w odpowiedni sposób (proste na podstawie samego ruchu), trzeba sprawdzić czy pole na które się porusza (i w przypadku figur poruszających się na wprost, sprawdzić czy nie ma figur po drodze), należy sprawdzić jak zmiana pozycji figury ma się do szachowania, któregoś króla (w tym celu należy sprawdzić co króle "widzą" po ruchu), jeśli nie poruszamy się skoczkiem to wystarczy sprawdzić 8 kierunków króla, w przypadku ruchu skoczkiem trzeba sprawdzić jak dany ruch ma się do szachowania króla (sprawdzić co po ruchu skoczek będzie "widział").

Ciekawe czy coś w tej części pominąłem.

Obiekty figur:
Pion powinien mieć możliwość "zapamiętania", że można go bić w przelocie (zmienna zapisywana po odpowiednim ruchu i zerowana po kolejnym) oraz info o promocji (na jaką figurę został promowany)
Wieża - info o możliwości roszady (czy się poruszała).
Król - info o tym czy jest pod szachem i info możliwości roszady (czy się poruszał)
Podczas sprawdzania możliwości roszady (ruch królem o 2 pola) należy sprawdzić co z wieżą (czy jest na swoim miejscu i umożliwia roszadę) oraz czy pole przez które przechodzi król nie jest pod szachem.

Pewnie coś pokręciłem (nie jestem ekspertem w szachach... hehe...) no i oczywiście coś na pewno pominąłem...

Pozdrawiam
Kacper

No raczej wszystko co potrzebne opisałeś. Ja mam pomysł taki, żeby:

- matrix 2x2 z figurami.
- osobne metody w klasie do sprawdzenia, czy pionek może się poruszyc na dane docelowe pole (funkcje z 3 parametrami: pole bazowe, pole docelowe, kolor piona, typ piona)
- osobna metoda dla danego typu figury, krol, hetman, goniec, skoczek, wieza, pion.
- przy kazdym ruchu sprawdzamy dla danej bierki po kolei wszystkie metody:

- czy nie odstawiam krola na szach?
- czy bicie? (czy moge?)
- czy szach dla krola przeciwnika?
- czy mat?
- czy mata dostalem?
- czy remis? (czy pat? czy 3-krotny ten sam ruch? czy brak odpowiednich figur do zamatowania? [np. skoczek+krol = za malo]).
- czy roszada krotka? (czy moge?)
- czy roszada dluga? (czy moge?) (czy droga szachowana?) (czy krol sie ruszyl?) (czy wieza ruszyla? która? lewa? prawa?)
- czy bicie w przelocie? (jeśli pion?) (jeśli moge?)
- czy promocja piona? (czy moge?)

puff, narazie tyle przychodzi mi do glowy jak cos jeszcze macie to piszcie.

Generalnie juz raz gryzłem ten projekt, ale jest to bardzo trudna sprawa, czy mi ktos wierzy czy nie. I nadaje sie moim zdaniem nawet na wypasiona prace dyplomowa.Jakub Świegot edytował(a) ten post dnia 28.01.08 o godzinie 21:54
Łukasz Ważny

Łukasz Ważny winning doesn't
really matter as
long as you win

Temat: oprogramowanie deski szachowej

Jakub Świegot:
- osobne metody w klasie do sprawdzenia, czy pionek może się poruszyc na dane docelowe pole (funkcje z 3 parametrami: pole bazowe, pole docelowe, kolor piona, typ piona)
- osobna metoda dla danego typu figury, krol, hetman, goniec, skoczek, wieza, pion.

Ja bym szachownicę, pionki i figury odwzorował na obiektach.
W szachownicy w tablicy 8x8 przechowywał bym referencje do pionkow/figur, sprawdzał i obsługiwał bicia, szach/mat ect.

W pionach zaimplementował, aktualną pozycję, dozwolone ruchy ect.

Resztę jak w życiu.

konto usunięte

Temat: oprogramowanie deski szachowej

Jakub Świegot:
Michale Mańko: Ja nie chcę stworzyc skryptu który gra z człowiekiem, tylko skrypt umożliwiający rozgrywkę 2 osobom, przy zachowaniu kontroli poprawności ruchów i sytuacji na szachownicy.

Po co?

konto usunięte

Temat: oprogramowanie deski szachowej

Dla rozrywki. Dla funu, zeby sie czegos nauczyc, zeby sprawdzic swoje sily.

A po co kontrola? zebys krolem z e1 na d8 nie latal.
Filip Górny

Filip Górny Programista,
webdeveloper.

Temat: oprogramowanie deski szachowej

Jak zrobić ruchy figur to pikuś, pomyśl jak zrobisz szach, mat i pat. ;-)

konto usunięte

Temat: oprogramowanie deski szachowej

po kazdym ruchu jakąś bierką wywołam jakas tam metode is_checkmate() np., ktora sprawdza po kazdym ruchu czy krol

a) jest pod szachem
b) czy moze uciec
c) czy moze sie zasłonic
d) czy moge zbic figure szachujaca

if $a && !$b && !$c && !$d
return 'checkmate' ;D

konto usunięte

Temat: oprogramowanie deski szachowej

Jakub Świegot™:
Dla rozrywki. Dla funu, zeby sie czegos nauczyc, zeby sprawdzic swoje sily.

A po co kontrola? zebys krolem z e1 na d8 nie latal.

Skoro tak to spróbuj zrobić to:

Etap I
Walidacja w PHP:
Dla każdej figury zdefiniuj sobie odpowiednią klasę, klasa powinna posiadać metodę sprawdzającą czy dany ruch użytkownika jest prawidłowy, powinna obliczać wszystkie możliwe ruchy figury na szachownicy,a potem sprawdzać czy wykonany ruch jest z nimi zgodny.

Etap II:
Zaznaczanie możliwych kombinacji na szachownicy (JavaScript):
Korzystając z doświadczeń z etapu pierwszego postaraj się obliczyć pola dla klikniętej figur. I zaznacz je na szachownicy.

Etap III:
Połącz etap I i II, zaimplementuj pozostałe metody (czy jest szach, czy jest mat ... itd) i funkcje roszada mała i duża.

Etap IV:
Korzystająca z podpowiedzi Michał Mańko dodaj namiastkę sztucznej inteligencji.

Więcej nie piszę bo nie chce popsuć Ci zabawy :)Stanisław Głogowski edytował(a) ten post dnia 29.01.08 o godzinie 13:13

konto usunięte

Temat: oprogramowanie deski szachowej

a po co mi sztuczna inteligencja jak to 2 osoby beda graly?

konto usunięte

Temat: oprogramowanie deski szachowej

Jakub Świegot™:
a po co mi sztuczna inteligencja jak to 2 osoby beda graly?

Dla rozrywki. Dla funu, zeby sie czegos nauczyc, zeby sprawdzic swoje sily.

konto usunięte

Temat: oprogramowanie deski szachowej

bez sensu chrzanisz ;).
Filip Górny

Filip Górny Programista,
webdeveloper.

konto usunięte

Temat: oprogramowanie deski szachowej

Jakub Świegot™:
bez sensu chrzanisz ;).

Dziękuję

konto usunięte

Temat: oprogramowanie deski szachowej

Filip Górny:
http://www.google.pl/search?hl=pl&q=php+chess&btnG=Szu...

Nie podpowiadaj koledze rozwiązań bo zabierzesz mu całą frajdę przy pisaniu kodu :)



Wyślij zaproszenie do