U zadatku ce se resavati problem igranja drustvene igre "Sah". Korisnik ce moci da bira da li ce da igra sa crnim figurama, ili belim figurama, i takodje ce moci da podesi nivo odnosno jacinu igre racunara. U zavisnosti od podesenog nivoa racunar ce da igra razumne (ako je nivo podesen na veci broj) i nerazumne poteze (ako je nivo podesen na manji broj). Svaka figura ima odredjenu heuristiku u zavisnosti od tipa figure, i polja na kojem se ta figura nalazi. Takodje u evaluaciju pozicije se uzima i trenutna pozicija kralja, pozicija pesaka, i pozicija topova.
Algoritam koji ce se koristiti za igru racunara je "MiniMax" algoritam.
Takodje ce se koristiti i optimizacija MinMax algoritma, pod nazivom "Alpha Beta Pruning"
Podaci koji se obradjuju su figure, njihove pozicije i to je vec poznato na pocetku igre.
Validacija resenja ce biti moguca uz igranje partija protiv racunara.
Sahovska tabla se sastoji od 8x8 polja, vrednost svake figure na ovim poljima se ogleda u njenoj poziciji odnosno na kom mestu se ta figura nalazi. Ako uzmemo, za primer, tablu predstavimo kao niz [] a = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0
};
Ispod su primeri heuristike za crnog i belog pesaka.
int[] crniPesak = {
0, 0, 0, 0, 0, 0, 0, 0,
5, 10, 10,-20,-20, 10, 10, 5,
5, -5,-10, 0, 0,-10, -5, 5,
0, 0, 0, 20, 20, 0, 0, 0,
5, 5, 10, 25, 25, 10, 5, 5,
10, 10, 20, 30, 30, 20, 10, 10,
50, 50, 50, 50, 50, 50, 50, 50,
0, 0, 0, 0, 0, 0, 0, 0
};
int[] beliPesak = {
0, 0, 0, 0, 0, 0, 0, 0,
50, 50, 50, 50, 50, 50, 50, 50,
10, 10, 20, 30, 30, 20, 10, 10,
5, 5, 10, 25, 25, 10, 5, 5,
0, 0, 0, 20, 20, 0, 0, 0,
5, -5,-10, 0, 0,-10, -5, 5,
5, 10, 10,-20,-20, 10, 10, 5,
0, 0, 0, 0, 0, 0, 0, 0
};
niz crniPesak nam govori koja je vrednost crnog pesaka u zavisnosti od pozicije na tabli ( crne figure su gore, bele figure su dole). Tako da mozemo da zakljucimo ukoliko se crni pesak nalazi dublje u poziciji protivnika, onda mu dodeljujemo vecu tezinu. Ista prica vazi i za belog pesaka, samo sto je njegova pozicija rotirana po y osi u odnosu na crnog.
Ako korisnik odabere dubinu 1. Onda bi racunar trebao da se ponasa na takav nacin da kada je on na potezu, uvek tezi da pojede korisnikove figure, ne uzimajuci u obzir odgovor protivnika ( koji je na dubini 2). Ako podesimo na dubinu 2 racunar nece praviti lose poteze i dati svoju damu za pesaka npr. jer ce uzeti u obzir i odgovor protivnika i shvatice da mu potez dama za pesaka nije dobar, jer pesaka cuva neka druga figura, pa korisnik moze da pojede nasu damu i da je racunar tu na gubitku. ( pesak vredi 1 poen, skakac i lovac vrede 3 poena, top vredi 5 poena, dama vredi 9 poena, i kralj vredi 200 poena). Naravno kako se nivo povecava, tako racunar uzima sve vise i vise pozicija u obzir, pa ce sam potez biti bolji.
@StefanAndjelic
Tim: Miroslav Kospic SW40/2014 grupa 3
U zadatku ce se resavati problem igranja drustvene igre "Sah". Korisnik ce moci da bira da li ce da igra sa crnim figurama, ili belim figurama, i takodje ce moci da podesi nivo odnosno jacinu igre racunara. U zavisnosti od podesenog nivoa racunar ce da igra razumne (ako je nivo podesen na veci broj) i nerazumne poteze (ako je nivo podesen na manji broj). Svaka figura ima odredjenu heuristiku u zavisnosti od tipa figure, i polja na kojem se ta figura nalazi. Takodje u evaluaciju pozicije se uzima i trenutna pozicija kralja, pozicija pesaka, i pozicija topova. Algoritam koji ce se koristiti za igru racunara je "MiniMax" algoritam. Takodje ce se koristiti i optimizacija MinMax algoritma, pod nazivom "Alpha Beta Pruning" Podaci koji se obradjuju su figure, njihove pozicije i to je vec poznato na pocetku igre. Validacija resenja ce biti moguca uz igranje partija protiv racunara.
Sahovska tabla se sastoji od 8x8 polja, vrednost svake figure na ovim poljima se ogleda u njenoj poziciji odnosno na kom mestu se ta figura nalazi. Ako uzmemo, za primer, tablu predstavimo kao niz [] a = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; Ispod su primeri heuristike za crnog i belog pesaka. int[] crniPesak = { 0, 0, 0, 0, 0, 0, 0, 0, 5, 10, 10,-20,-20, 10, 10, 5, 5, -5,-10, 0, 0,-10, -5, 5, 0, 0, 0, 20, 20, 0, 0, 0, 5, 5, 10, 25, 25, 10, 5, 5, 10, 10, 20, 30, 30, 20, 10, 10, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0 }; int[] beliPesak = { 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 10, 10, 20, 30, 30, 20, 10, 10, 5, 5, 10, 25, 25, 10, 5, 5, 0, 0, 0, 20, 20, 0, 0, 0, 5, -5,-10, 0, 0,-10, -5, 5, 5, 10, 10,-20,-20, 10, 10, 5, 0, 0, 0, 0, 0, 0, 0, 0 }; niz crniPesak nam govori koja je vrednost crnog pesaka u zavisnosti od pozicije na tabli ( crne figure su gore, bele figure su dole). Tako da mozemo da zakljucimo ukoliko se crni pesak nalazi dublje u poziciji protivnika, onda mu dodeljujemo vecu tezinu. Ista prica vazi i za belog pesaka, samo sto je njegova pozicija rotirana po y osi u odnosu na crnog.
Ako korisnik odabere dubinu 1. Onda bi racunar trebao da se ponasa na takav nacin da kada je on na potezu, uvek tezi da pojede korisnikove figure, ne uzimajuci u obzir odgovor protivnika ( koji je na dubini 2). Ako podesimo na dubinu 2 racunar nece praviti lose poteze i dati svoju damu za pesaka npr. jer ce uzeti u obzir i odgovor protivnika i shvatice da mu potez dama za pesaka nije dobar, jer pesaka cuva neka druga figura, pa korisnik moze da pojede nasu damu i da je racunar tu na gubitku. ( pesak vredi 1 poen, skakac i lovac vrede 3 poena, top vredi 5 poena, dama vredi 9 poena, i kralj vredi 200 poena). Naravno kako se nivo povecava, tako racunar uzima sve vise i vise pozicija u obzir, pa ce sam potez biti bolji.
https://github.com/EmulatE42/CHESS