Sunteți pe pagina 1din 7

DAME ITALIENE

Suciu Antonia
TI, 233/2

Descrierea jocului:
Este un joc jucat pe o tablă formată din șaizeci și patru de pătrate, treizeci și
două albe și treizeci și două negre. Sunt douăzeci și patru de piese: douăsprezece
albe și douăsprezece negre. Tabla este plasată astfel încât pătratul din dreapta de pe
ambele părți ale tablei să fie negru.
Reguli:
Jucatorii isi misca piesele pe rand, unul dupa celalalt.Piesele(pionii)se misca
pe diagonala atat in stanga cat si in dreapta, in fata.In momentul in care un pion
ajunge in extrema celulaltui jucator, acesta devine rege si se poate misca pe
diagonala in stanga si in dreapta, atat in fata, cat si in spate.Jucatorul care
captureaza toate piesele celulaltui jucator primul castiga jocul.Jocul mai poate fi
castigat si atunci cand un jucator nu mai poate muta nicio piesa(este blocat).
De amintit e ca pionii nu pot lua regii, iar in curentele italiene captura e
obligatorie.
Inteligenta artificiala:
Pentru a face inteligenta artificiala am utilizat niste reguli gandite prin care
inteligenta artificiala trebuie sa isi maximizeze scorul cat mai mult posibil si sa
minimizeze scorul adversarului. Cum face asta? Face mutari destepte prin care
captureaza si isi muta piesele strategic incat acestea sa nu fie luate.
Prioritati:
Daca avem un rege care poate face captura, acesta o face. Daca nu avem
niciun rege, dar putem face captura cu o piesa obisnuita, o sa o facem. Daca nu
putem face captura nici cu regele, dar nici cu o piesa obisnuita si se poate muta sa
faca rege, face rege. Daca nici rege nu poate sa faca, muta extrem stanga sau
extrem dreapta. De ce face asta? Daca muta extrem stanga sau extrem dreapta
adversarul nu poate sa ia piesa. Daca nu poate sa mute nici extrem stanga, dar nici
extrem dreapta, muta o piesa oarecare careia ii verifica cateva proprietati. Daca se
poate muta piesa pe diagonala, fie stanga, fie dreapta, prima data trebuie sa verifice
daca atunci cand muta piesa, aceasta o sa fie luata.Daca aceasta o sa fie luata, alege
o alta piesa pe care sa o mute, pe care o verifica la randul ei.Daca toate piesele pot
fi capturate si avem un rege, muta regele.Daca nu avem un rege si toate piesele pot
sa fie capturate, muta o piesa random.
Interfata:
Atunci cand deschidem proiectul ni se afiseaza fereastra principala in care
avem doua moduri in care putem juca: “JOACA” si “JOACA AI” si un buton,
“EXIT”, care ne inchide pagina.
Daca alegem prima varianta, adica varianta “JOACA”, o sa ni se deschida o
noua pagina( imaginea 3) in care doi jucatori pot juca de pe acelasi dispozitiv.
Daca alegem a doua varianta, “JOACA AI” ,o sa ni se deschida o pagina in
care o sa jucam contra inteligentei artificiale( imaginea 2).
Explicatie cod:
Tabla:
Ca sa intelegem cum merge fiecare functionalitate, sau mai simplu spus
“cum functioneaza lucrurile” trebuie sa pornim de la tabla de joc.Cum am spus si
mai sus, tabla este formata din 64 de patratele unde putem sa punem
piesele.Fiecare patratel este un obiect de tip PictureBox. Ce inseaman asta? Fiecare
obiect are urmatoarele proprietati: nume, locatie, culoare, dimensiune, imagine.
Numele fiecarul patratel este format din prima coordonata, adica x-ul, a doua
coordonata, adica y-ul si o litera in functie de imaginea pe care o sa o aiba, daca
este cazul. Avem “g” pentru pionii albi obisnuiti, “k” pentru regii albi, “r” pentru
pionii negri si “q” pentru regii negri.Ca si dimensiune am decis ca fiecare patratel
sa fie pe 50x50 si imaginea a fost pusa in functie de paritatea data de coordonate.

int MutareStanga = 10, MutareJos = 10;

PictureBox[,] Patratel = new PictureBox[n, n];


Color culoare = new Color();

for (int i = 0; i < n; i++)


{
MutareStanga = 10;

for (int j = 0; j < n; j++)


{
if (i % 2 == 0)
{

if (j % 2 == 0) { culoare = Color.FromArgb(139, 122, 51); }


else { culoare = Color.FromArgb(227, 216, 170); }
}

if (i % 2 != 0)
{

if (j % 2 == 0) { culoare = Color.FromArgb(227, 216, 170); }


else { culoare = Color.FromArgb(139, 122, 51); }
}

Patratel[i, j] = new PictureBox();


Patratel[i, j].BackColor = culoare;
Patratel[i, j].Location = new Point(MutareStanga, MutareJos);
Patratel[i, j].Size = new Size(50, 50);
MutareStanga += 50;
Patratel[i, j].Name = i + " " + j;
if ((i < 3) && (culoare == Color.FromArgb(139, 122, 51))) { Patratel[i, j].Image =
Properties.Resources.negru; Patratel[i, j].Name += " r"; }
if ((i > 4) && (culoare == Color.FromArgb(139, 122, 51))) { Patratel[i, j].Image = Properties.Resources.alb;
Patratel[i, j].Name += " g"; }
Patratel[i, j].SizeMode = PictureBoxSizeMode.CenterImage;

panel1.Controls.Add(Patratel[i, j]);

}
MutareJos += 50;
}
Alegerea prioritatii:
Mai sus am spus ca exista niste prioritati pe care inteligenta artificiala le ia
in calcul inainte sa efectueze o mutare.Dupa cum putem observa, in a doua imagine
de la “interfata”, avem un buton numit “AI” care in momentul in care e apasat o sa
forteze inteligenta sa faca ceva.Inteligenta noastra o sa faca de la o parcurgere pana
la opt parcurgeri a matricii in functie de ce prioritate poate sa efectueze.
Nu o sa explicam aici pentru fiecare prioritate ce o sa se intample, ci doar pentru
cea in care muta regele.
“a0a0” este butonul nostru pentru inteligenta artificiala. Prima data trebuie
sa se verifice daca jucatorul 2 poate face o mutare, apoi daca butonul nostru “AI”
este vizibil. Parcurge matricea, verifica daca “foundPiece” este true.FoundPiece
este adevarata atunci cand s-a gasit deja o alta piesa pe care o poate muta intr-o
prioritate care ii este superioara acesteia. Daca valoare lui “foundPiece” este false
continua parcurgerea matricii. In continuare verifica daca patratelul nostru are
imagine si daca in nume are color4, adica “k”. Mai departe trebuie sa verifice si
daca patratelele din stanga si din dreapta pe diagonala sunt “goale” si daca da,
imaginea si numele patratelului nostru o sa se schimbe si imaginea si numele
patratelului unde am mutat o sa fie cele pe care le avea patratelul mutat.
a0a0.Click += (sender2, e2) =>
{
if (player2 == true)
{
Button p = sender2 as Button;
bool mutare = false;

int x, y;
bool foundPiece = false;
if (p.Visible == true)
{

//muta rege
for (x = 0; x < n; x++)
{
if (foundPiece)
break;

for (y = 0; y < n; y++)


{
if (Patratel[x, y].Image != null)
{
try
{
if (Patratel[x, y].Name.Split(' ')[2] == color4)
{
if (player2 == true)
{

try
{
if (Patratel[x + 1, y + 1].Image == null)
{
if (mutare == false)
{
foundPiece = true;
Patratel[x, y].Image = null;
Patratel[x, y].Name = x + " " + y;
Patratel[x + 1, y + 1].Image = Properties.Resources.regealb;
Patratel[x + 1, y + 1].Name = (x + 1) + " " + (y + 1) + " k";
mutare = true;
}
}
}
catch { }
try
{
if (Patratel[x + 1, y - 1].Image == null)
{
if (mutare == false)
{
foundPiece = true;
Patratel[x, y].Image = null;
Patratel[x, y].Name = x + " " + y;
Patratel[x + 1, y - 1].Image = Properties.Resources.regealb;
Patratel[x + 1, y - 1].Name = (x + 1) + " " + (y - 1) + " k";
mutare = true;
}}}
catch { }
try
{
if (Patratel[x - 1, y - 1].Image == null)
{
if (mutare == false)
{
foundPiece = true;
Patratel[x, y].Image = null;
Patratel[x, y].Name = x + " " + y;
Patratel[x - 1, y - 1].Image = Properties.Resources.regealb;
Patratel[x - 1, y - 1].Name = (x - 1) + " " + (y - 1) + " k";
mutare = true;
}}}
catch { }
try
{
if (Patratel[x - 1, y + 1].Image == null)
{
if (mutare == false)
{
foundPiece = true;
Patratel[x, y].Image = null;
Patratel[x, y].Name = x + " " + y;
Patratel[x - 1, y + 1].Image = Properties.Resources.regealb;
Patratel[x - 1, y + 1].Name = (x - 1) + " " + (y + 1) + " k";
mutare = true;
}}}
catch { }
}}}
catch { }
}
if (foundPiece)
break;
}
}}}}

S-ar putea să vă placă și