Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Symulacja gry w szachy

Ostatnio zmodyfikowano 2017-12-04 19:38
Autor Wiadomość
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ź?



P-167514
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)
P-167517
koot
Temat założony przez niniejszego użytkownika
» 2017-12-04 15:06:49
Chyba jestem jakiś głupi, bo i tak nie wiem, jak miałbym to zaimplementować.. :/
P-167521
michal11
» 2017-12-04 19:38:07
Może spróbuj rozrysować sobie na kartce każdy krok po kolei?
P-167537
« 1 »
  Strona 1 z 1