koot Temat założony przez niniejszego użytkownika |
Symulacja gry w szachy » 2017-12-04 11:21:22 Cześć! Mam do zaimplementowania kilka funkcji, które operowałyby na macierzy 8x8.
1. void drukuj(char t[8][8]) - wypisuje na ekaran aktualny stan szachownicy
2. bool bezpieczne_pole(char t[8][8], int row, int col) - sprawdza, czy pole [row, col] jest bezpieczne, tzn. nie znajduje się pod biciem jakiejś figury (dowolnego koloru)
3. bool ruch(char t[8][8], int row, int col, int row2, int col2) - - sprawdza, czy ruch z pola [row, col] na pole [row2, col2 ] jest dozwolony, tzn. czy a. na polu startowym stoi figura b. dany typ figury może się przesuwać w ten sposób c. na drodze nie stoją inne figury d. jeśli pole docelowe jest zajęte przez figurę tego samego koloru, to ruch jest niemożliwy e. jeśli pole docelowe jest zajęte przez figurę innego koloru, to stojąca tam figura zostaje zbita. Jeśli ruch jest dozwolny, to funkcja powinna wykonać ten ruch i zmodyfikować odpowiednio stan szachownicy. W przeciwnym wypadku funkcja powinna zwrócić false
4. bool mat(char t[8][8], int row, int col) - sprawdza, czy na polu [row,col] byłby mat, gdyby stał tam biały król. Dokładniej, oznacza to, że: a. Pole [row,col] jest wolne i jest atakowane przez co najmniej jedną czarną figurę. b. Każde z sąsiednich pól jest albo zajęte przez białą figurę, albo jest atakowane przez co najmniej jedną czarną figurę Do dyspozycji są figury h,g,g,w,w,H,G,G,W,W (małe litery - czarne pionki, duże - białe).
Poradziłem sobie z funkcją 1 i 3a. Z resztą mam problem. Nie wiem, jak poradzić sobie z tym poruszaniem się po przekątnych itp. Wiem, że jest tego dużo, dlatego może tylko mała podpowiedź?
|
darko202 |
» 2017-12-04 13:20:27 mamy pole(x,y) interesują nas 4 kierunki
pole(x-1,y-1) --------- pole(x+1,y-1) ------------- pole(x,y) pole(x-1,y+1) --------- pole(x+1,y+1)
można spojrzeć na szukane jako pole(x+a,y+b) gdzie :
(a,b) =(-1,-1), (-1, 1),( 1,-1), (1,1) 1. wybieramy (a,b) 4 sprawdzenia 2. sprawdzamy czy pole(x+a,y+b) mieści się w tablicy jeśli tak dodajemy do tablicy pól przekątnej i powtarzamy dla kolejnego pola startując z ostatnio sprawdzanego pola , nie koniec tego sprawdzenia
np. pole (3,4) dla (a,b) =(-1,-1) -> pole(2,3), pole(1,2), pole(0,1) |