You are on page 1of 12

IVICA ŠAHISTA

Mali Ivica ima samo 10 godina i želi naučiti igrati poznatu igru Šah. Međutim, Ivica samo zna
kako se određene figure pomiču, a sama pravila su mu nepoznata. Sada kada imate dovoljno
znanja o funkcijama, pokazivačima i 2D poljima ponudili ste malom Ivici da ga naučite
pravilima šaha. Dobili ste fantastičnu ideju da napravite program koji će simulirati igru dvoje
ljudi iz koje će Ivica sve naučiti. Za prikaz šahovske ploče koristite 2d char polje dimenzija
8x8, a za prikaz figura koristite slova engleske abecede (mala slova za crne figure, velika za
bijele).
Prikaz figura:
K – king (hrv. kralj)
Q – queen (hrv. kraljica)
R – rook (hrv. kula / top)
N – knight (hrv. skakač / konj)
B – bishop (hrv. lovac)
P – pawn (hrv. pijun)
X – prazno polje
Pocetni prikaz matrice (sa koordinatnim osima):
rnbqkbnr 8
pppppppp 7
XXXXXXXX 6
XXXXXXXX 5
XXXXXXXX 4
XXXXXXXX 3
PPPPPPPP 2
RNBQKBNR 1
abcdefgh
Posebna pravila u šahu koje također morate implementirati:
https://hr.wikipedia.org/wiki/Rokada
https://hr.wikipedia.org/wiki/En_passant
Kao unos učitavate koordinate polja figure koje igrač želi pomaknut i koordinate polja na
koje igrač želi tu figuru pomaknuti (npr. a2a4 -> igrač želi pomaknuti figuru sa polja a2 na
polje a4, te ako je potez validan onda se vrši zamjena elemenata na tim poljima), a također
treba imati na umu ako korisnik učita samo slovo P umjesto bilo koje koordinate znači da
predaje partiju i program završava te ispisuje poruku tko je pobjednik. Ako korisnik ne učita
slovo P onda program završava kada jedan od igrača napravi šah-mat drugom.
U slučaju da je unesen zabranjeni ili nemogući potez potrebno je ispisati na ekranu “Greska!
Ucitaj ponovo“ i ponoviti unos za istog igraca (crni/bijeli).
Sumarno: izlaz mora sadržavati ispis matrice nakon svakog ispravnog unosa poteza, a
naknadno mora ispisati poruku u slučaju neispravnog unosa. Ako se desila predaja ili šah-mat
ispisuje se poruka “Pobjednik je igrac B“ (ako je pobijedio bijeli) ili “Pobjednik je igrac C“ (ako
je pobijedio crni).
Prijedlog za način rješavanja:
- napraviti funkciju koja vraća 1 ili 0 ovisno o tome da li je igrač u šah-mat poziciji
- napraviti funkciju koja vraća 1 ili 0 ovisno o tome da li se kralj nalazi u šahu (za korisnika koji
unosi potez) i prema tome korigirati moguće dozvoljene poteze
- napraviti funkciju koja vraća 1 ili 0 ovisno o tome da li je unesen potez ispravan i prema
tome izvršiti zamjenu figura ili ispisati poruku za grešku
- koristiti naredbu system(“cls“); (iz biblioteke stdlib.h) radi lakšeg snalaženja kroz
provjeravanje u cmd-u (nije obavezno)
- ispisivati slovo B ili C prije novog ispisa ovisno o tome koji je igrač na potezu – bijeli ili crni
(nije obavezno)
- napraviti po jednu funkciju pojedinačno za svaku figuru (kula, pijun, kraljica, kralj itd...) koja
provjerava koja polja (koordinate) su im dozvoljena i koja nisu
Dozvoljeno je koristiti globalne varijable samo za stanje rokade u oba igrača i stanje ovisno o
tome iz koje funkcije u koju skačete.
- int bijeli_Rokada [2] = {1,1}; // [2] jer postoje dva načina rokade (kratka i duga)
- int crni_Rokada [2] = {1,1}; za bolje objašnjenje pogledati na dani link sa Wiki
- int ulazno_Stanje [ ] = { , }; // ovdje ubacujete koliko vam stanja treba
Test case #1:
Unos:
e2e4
e7e5
f1c4
a7a6
d1f3
b8c6
f3f7
Ispis:
rnbqkbnr
pppppppp
XXXXXXXX
XXXXXXXX
XXXXXXXX
XXXXXXXX
PPPPPPPP
RNBQKBNR
rnbqkbnr
pppppppp
XXXXXXXX
XXXXXXXX
XXXXPXXX
XXXXXXXX
PPPPXPPP
RNBQKBNR
rnbqkbnr
ppppXppp
XXXXXXXX
XXXXpXXX
XXXXPXXX
XXXXXXXX
PPPPXPPP
RNBQKBNR
rnbqkbnr
ppppXppp
XXXXXXXX
XXXXpXXX
XXBXPXXX
XXXXXXXX
PPPPXPPP
RNBQKXNR
rnbqkbnr
XpppXppp
pXXXXXXX
XXXXpXXX
XXBXPXXX
XXXXXXXX
PPPPXPPP
RNBQKXNR
rnbqkbnr
XpppXppp
pXXXXXXX
XXXXpXXX
XXBXPXXX
XXXXXQXX
PPPPXPPP
RNBXKXNR
rXbqkbnr
XpppXppp
pXnXXXXX
XXXXpXXX
XXBXPXXX
XXXXXQXX
PPPPXPPP
RNBXKXNR
rXbqkbnr
XpppXQpp
pXnXXXXX
XXXXpXXX
XXBXPXXX
XXXXXXXX
PPPPXPPP
RNBXKXNR
Pobjednik je igrac B
Test case #2:
Unos:
e2e5
b1d2
b1c3
b7b6
e2e3
c8b7
d1h5
b7g2
f1g2
f7f6
d8c7
P
Ispis:
rnbqkbnr
pppppppp
XXXXXXXX
XXXXXXXX
XXXXXXXX
XXXXXXXX
PPPPPPPP
RNBQKBNR
Greska! Ucitaj ponovo
Greska! Ucitaj ponovo
rnbqkbnr
pppppppp
XXXXXXXX
XXXXXXXX
XXXXXXXX
XXNXXXXX
PPPPPPPP
RXBQKBNR
rnbqkbnr
pXpppppp
XpXXXXXX
XXXXXXXX
XXXXXXXX
XXNXXXXX
PPPPPPPP
RXBQKBNR
rnbqkbnr
pXpppppp
XpXXXXXX
XXXXXXXX
XXXXXXXX
XXNXPXXX
PPPPXPPP
RXBQKBNR
rnXqkbnr
pbpppppp
XpXXXXXX
XXXXXXXX
XXXXXXXX
XXNXPXXX
PPPPXPPP
RXBQKBNR
rnXqkbnr
pbpppppp
XpXXXXXX
XXXXXXXQ
XXXXXXXX
XXNXPXXX
PPPPXPPP
RXBXKBNR
rnXqkbnr
pXpppppp
XpXXXXXX
XXXXXXXQ
XXXXXXXX
XXNXPXXX
PPPPXPbP
RXBXKBNR
rnXqkbnr
pXpppppp
XpXXXXXX
XXXXXXXQ
XXXXXXXX
XXNXPXXX
PPPPXPBP
RXBXKXNR
Greska! Ucitaj ponovo
Greska! Ucitaj ponovo
Pobjednik je igrac B
Test case #3:
Unos:
e2e3
d7d5
f1e2
d8d6
g1h3
c8e6
e1g1
b8c6
g2g4
e8c8
g4g5
f7f5
g5f6
e7f6
P
Ispis:
rnbqkbnr
pppppppp
XXXXXXXX
XXXXXXXX
XXXXXXXX
XXXXXXXX
PPPPPPPP
RNBQKBNR
rnbqkbnr
pppppppp
XXXXXXXX
XXXXXXXX
XXXXXXXX
XXXXPXXX
PPPPXPPP
RNBQKBNR
rnbqkbnr
pppXpppp
XXXXXXXX
XXXpXXXX
XXXXXXXX
XXXXPXXX
PPPPXPPP
RNBQKBNR
rnbqkbnr
pppXpppp
XXXXXXXX
XXXpXXXX
XXXXXXXX
XXXXPXXX
PPPPBPPP
RNBQKXNR
rnbXkbnr
pppXpppp
XXXqXXXX
XXXpXXXX
XXXXXXXX
XXXXPXXX
PPPPBPPP
RNBQKXNR
rnbXkbnr
pppXpppp
XXXqXXXX
XXXpXXXX
XXXXXXXX
XXXXPXXN
PPPPBPPP
RNBQKXXR
rnXXkbnr
pppXpppp
XXXqbXXX
XXXpXXXX
XXXXXXXX
XXXXPXXN
PPPPBPPP
RNBQKXXR
rnXXkbnr
pppXpppp
XXXqbXXX
XXXpXXXX
XXXXXXXX
XXXXPXXN
PPPPBPPP
RNBQXRKX
rXXXkbnr
pppXpppp
XXnqbXXX
XXXpXXXX
XXXXXXXX
XXXXPXXN
PPPPBPPP
RNBQXRKX
rXXXkbnr
pppXpppp
XXnqbXXX
XXXpXXXX
XXXXXXPX
XXXXPXXN
PPPPBPXP
RNBQXRKX
XXkrXbnr
pppXpppp
XXnqbXXX
XXXpXXXX
XXXXXXPX
XXXXPXXN
PPPPBPXP
RNBQXRKX
XXkrXbnr
pppXpppp
XXnqbXXX
XXXpXXPX
XXXXXXXX
XXXXPXXN
PPPPBPXP
RNBQXRKX
XXkrXbnr
pppXpXpp
XXnqbXXX
XXXpXpPX
XXXXXXXX
XXXXPXXN
PPPPBPXP
RNBQXRKX
XXkrXbnr
pppXpXpp
XXnqbPXX
XXXpXXXX
XXXXXXXX
XXXXPXXN
PPPPBPXP
RNBQXRKX
XXkrXbnr
pppXXXpp
XXnqbpXX
XXXpXXXX
XXXXXXXX
XXXXPXXN
PPPPBPXP
RNBQXRKX
Pobjednik je igrac C
Test case #4:
Unos:
g2g4
e7e6
f2f3
d8h4
Ispis:
rnbqkbnr
pppppppp
XXXXXXXX
XXXXXXXX
XXXXXXXX
XXXXXXXX
PPPPPPPP
RNBQKBNR
rnbqkbnr
pppppppp
XXXXXXXX
XXXXXXXX
XXXXXXPX
XXXXXXXX
PPPPPPXP
RNBQKBNR
rnbqkbnr
ppppXppp
XXXXpXXX
XXXXXXXX
XXXXXXPX
XXXXXXXX
PPPPPPXP
RNBQKBNR
rnbqkbnr
ppppXppp
XXXXpXXX
XXXXXXXX
XXXXXXPX
XXXXXPXX
PPPPPXXP
RNBQKBNR
rnbXkbnr
ppppXppp
XXXXpXXX
XXXXXXXX
XXXXXXPq
XXXXXPXX
PPPPPXXP
RNBQKBNR
Pobjednik je igrac C

You might also like