Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> formularz a "szachy", jak tego dokonać?
dutagamo
post
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 18.06.2009

Ostrzeżenie: (0%)
-----


Witam
Zaczynam się uczyć tego języka i zastanawia mnie pewna sprawa:
Poprzez formularz chciałbym aby wywołało mi tablicę podobną do szachów i na danym polu umieścić punkt lub cokolwiek innego. i zasada jego działania chciałbym aby była podobna do skoczka w szachach. By pokazało miejsca na które on może skoczyć.
Jak to zrobić?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Wyślę, że wygodniejsza byłaby notacja liczbowa (IMG:style_emoticons/default/smile.gif) Definiujemy nie tyle możliwe do użycia pola, ale możliwe ruchy. Każdy ruch pionka to tak naprawdę przesunięcie z pola x na y, co jest równoznaczne z dodaniem lub odjęciem pewnej liczby od obecnie zajmowanej. To najlepsza metoda, co wiem z doświadczenia bo pisałem algorytm mający znaleźć ścieżkę przez wszystkie pola szachownicy skoczkiem (koniem). Taki sposób prezentacji pozwala łatwo określić czy znajduje się on na, czy poza szachownicą w danym ruchu. Interpretujesz planszę jako pole nie 8x8 ale 12x12. Numerujesz więc pola rzędami, rząd 1 - od 1 do 12, rząd 2 - od 13 do 24 itd... (możesz liczyć od zera jak w tablicach). To daje Ci dwa rzędy zapasu z każdej strony, a sama plansza główna to pola 27-34, 39-46, 51-58, czyli od 27+n*12 do 34+n*12 (n z zakresu 0-7). Teraz zdefiniuj ruchy konia. Masz 8 możliwości. Weź przykładowo, że stoisz na polu 78 i popatrz na jakie pola możesz stanąć. To pozwoli Ci określić jakie liczby możesz dodać lub odjąć od aktualnej pozycji by uzyskać określony ruch. Podpowiem, że mogą to być pola 53 i 55, a więc (x-25) i (x-23). Znajdź jeszcze pozostałe 6 sam (IMG:style_emoticons/default/winksmiley.jpg) Skoro masz już je to nie problem sprawdzić czy po operacji dodania lub odjęcia skoczek jest na polu planszy czy na dodatkowych polach (nadmiarowe obrzeże). Teraz jedynie musisz jeszcze sprawdzić, czy gdy jesteś na planszy po dodaniu liczby, jest ono zajęte przez inną figurę. Ja w ten sposób kombinacją liczb 1-3-6-7.... itd. zapisałem przejście przez wszystkie możliwe pola szachownicy, gdzie liczby od 1 do 8 definiowały mi ruch konia, czyli dodawania i odejmowania. Jaki tego plus? Daje Ci to łatwy sposób notacji za pomocą tablicy jedno-, a nie dwuwymiarowej. W ten sposób można szybko napisać algorytm szukający ścieżki przejścia z jednokrotnym stawianiem na każdym z pól. Uwierz, że większość algorytmów iteracyjnych ma z tym problemy, gdyż wszelkie algorytmy optymalizacyjne są jednymi z najtrudniejszych do zaprogramowania i nieraz zdarzają się tutaj próby wprowadzania sztucznej inteligencji. Ja w swoim projekcie używałem algorytmów genetycznych i potrafiłem w ciągu maksymalnie 5-10 sekund znaleźć prawidłowe rozwiązanie. Zaznaczam, że jest pewna pułapka. Istnieje pole na szachownicy (bodajże c3 lub c4), dla którego zwykłe algorytmy iteracyjne nie potrafią znaleźć rozwiązania problemu skoczka. Pokazano nam typowe i uruchomiono przed feriami zimowymi. Po powrocie z ferii one nadal szukały (IMG:style_emoticons/default/biggrin.gif) A to już było ze 2 tygodnie (IMG:style_emoticons/default/winksmiley.jpg)

EDIT: Gwoli ścisłości wyjaśnię dlaczego plansza jest 12x12 a nie 8x8... W sytuacji gdyby była 8x8 operacje "poruszania się" powodowały by "rolowanie się" planszy. Czyli skok z pola na obrzeżu jednym, który normalnie wyszedł by poza planszę sprawiłby pojawienie się piona na przeciwległej krawędzi. Stąd nadmiarowe pola po bokach, które zawsze "złapią" wyjście skoczka poza planszę gry.

Dlatego moja podpowiedzią dla Ciebie jest.... Nie definiuj pól jako takich ale zakoduj ruch i samą szachownicę w sposób przeze mnie opisany lub podobny. A sposób graficznego rzutowania danych (w postaci tablicy jednowymiarowej) na płaszczyznę to już banał w porównaniu do algorytmu i można to na wiele sposobów rozwiązać.

Ten post edytował thek 19.10.2009, 14:46:44
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 8.10.2025 - 15:52