Bantumi
(Kalah) derivat dintr-un joc numit "Mancala" avand originea
in Africa, sute de ani inainte. Exista multe varinate ale jocului, de
la numarul de pietre in fiecare casuta la inceputul jocului pana la cum
este castigata fiecare piatra in parte. Obiectivul jocului este de a muta
pietrele dintr-o celula din josul ferestrei in casuta de scor din dreapta
ecranului. |
||||||||||||||||||||||||||||||||||||||||||||||||||
Acest
joc a fost implementat in ideea de a folosi un algoritm de Analiza Algoritmilor.
Dupa cu se va putea vedea daca veti juca acest joc, implementat si pe
telefoanele produse de firma Nokia, acesta are 5 nivele de dificultate
in functie de care calculatorul va analiza ce mutare sa faca. In continuare
vom explica regulile jocului, cum a fost implementat
si explicarea algoritmului folosit pentru mutarea
calculatorului. |
||||||||||||||||||||||||||||||||||||||||||||||||||
Pentru a reaminti despre ce joc este vorba am introdus o imagine a jocului care este pe telefoanele Nokia: |
||||||||||||||||||||||||||||||||||||||||||||||||||
| Sus | ||||||||||||||||||||||||||||||||||||||||||||||||||
| Regulile
jocului (cum se joaca) |
||||||||||||||||||||||||||||||||||||||||||||||||||
Pentru
a intelege ce trebuie sa faci ca sa poti juca Bantumi trebuie mai intai
sa stii cum arata si ce reprezinta fiecare componenta in parte: |
||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
Pentru
inceput vom zice ca in fiecare celula se afla un numar de pietre. Jocul
merge intotdeauna in sensul opus acelor de ceasornic. Se porneste alegand
o celula cu pietre din randul de jos, care este zona ta. Dupa ce ai facut
selectia, fiecare celula incrementeaza numarul de pietre in sensul acelor
de ceasornic pana cand toate pietrele ridicate au fost epuizate. Nu poti
lasa nici o piatra in casuta de scor al oponentului. Daca piatra ta ajunge
in casuta ta cu scor acesta se va incrementa avand dreptul la inca o mutare.
Daca ultima piatra aterizeaza in jumatatea ta sau al calculatorului intr-o
casuta goala, este adaugata la scor si toate pietrele oponentului din
casuta opusa de asemenea. Daca unul din jucatori nu mai are nici o piatra
in jumatatea sa atunci jocul s-a terminat. Pietrele ramase in jumatatea
celuilalt sunt adaugate automat la scorul acestuia. Castigatorul este
cel care are cele mai multe pietre in casuta de scor. |
||||||||||||||||||||||||||||||||||||||||||||||||||
| Sus | ||||||||||||||||||||||||||||||||||||||||||||||||||
Implementarea
jocului este facuta in limbajul C si anume in C++ Builder. Am ales acest
mediu de programare pentru usurinta de a creea si executa programe destinate
mediului Windows in care detaliile conteaza si usurarea muncii utilizatorului
este pe primul loc. |
||||||||||||||||||||||||||||||||||||||||||||||||||
Dupa
cum se va vedea daca jucati acest joc, acesta are cinci nivele de dificultate
de la foarte usor, care este setat implicit la rularea programului, pana
la foarte greu. Aceasta dificultate se poate alege din meniul cu acelasi
nume, Dificultate, sau alegand
una din tastele de "shortcut", de la F5 care reprezinta foarte
usor pana la F9 pentru foarte greu. Nivelul
de dificultate se va vedea pe bara de status. La schimbarea nivelului
utilizatorul este avertizat ca va incepe un joc nou. |
||||||||||||||||||||||||||||||||||||||||||||||||||
| Daca se doreste un joc nou se va alege din meniu optiunea Nou din meniul Joc sau apasand tasta F2. | ||||||||||||||||||||||||||||||||||||||||||||||||||
Jocul
debuteaza cu care 4 pietre, cum le-am numit la prezentarea jocului, in
fiecare casuta si cu 0 pietre in fiecare casuta de scor a fiecariu jucator.
Se poate schimba numarul de pietre cu care se incepe din meniul Numar
Boabe cu 3, 4 sau 5 boabe in fiecare casuta. |
||||||||||||||||||||||||||||||||||||||||||||||||||
Primul
incepe utilizatorul. El trebuie sa aleaga una din casutele de jos, reprezentate
prin 6 elemente Label de culoare rosie. Nu se poate alege
o casuta care nu are nici o piatra. Dupa ce a ales casuta dorita, pietrele
continute in ea sunt distribuite in fiecare casuta de dupa ea, in fiecare
care una singura. Dupa regurile explicate mai devreme se va vedea ca daca
ultima piatra se opreste in casuta de scor al jucatorului, acesta are
dreptul la inca o alegere. Daca ultima piatra ajunge intr-o casuta unde
nu e nici o piatra atunci toate pietrele continute in casuta vecinului
sunt adaugate la scorul jucatorului. |
||||||||||||||||||||||||||||||||||||||||||||||||||
Dupa
mutarea jucatorului urmeaza mutarea calculatorului. In functie de nivelul
de dificultate dorit acesta "alege" casuta de unde sa distribuie
pietrele, regulile urmate fiind aceleasi pe care le urmeaza si jucatorul.
|
||||||||||||||||||||||||||||||||||||||||||||||||||
Toate aceste mutari si alegeri sunt executate dintr-o singura
functie: lbl_Click(int
Index), unde variabila Index reprezinta numarul
casutei in care a apasat utilizatorul. Alte functii care trebuie amintite
sunt: |
||||||||||||||||||||||||||||||||||||||||||||||||||
. Pentru detalii despre celelalte functii declarate si folosite in cadrul programului va rugam sa cititi comentariile din fisierul sursa. |
||||||||||||||||||||||||||||||||||||||||||||||||||
| Sus | ||||||||||||||||||||||||||||||||||||||||||||||||||
In
continuare voi prezenta pentru fiecare nivel in parte cum se alege casuta
din care calculatorul distribuie pietrele. Aceasta alegere se face in
cadrul functiei Alege_Casuta.
In cele ce urmeaza variabila Y reprezinta casuta care
e aleasa. Casutele sunt numerotate de la 0 la 13, 0 fiind casuta din dreapta
sus. Deci calculatorul va avea casutele 0 - 6, iar jucatorul casutele
7-13. |
||||||||||||||||||||||||||||||||||||||||||||||||||
| Nivelul ales: | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
Pentru
acest nivel casuta se va alege la intamplare (aleator) din cele ramase
cu pietre in ele. Daca s-a ales o casuta goala atunci se va alege din
nou pana nimereste una cu pietre in ea. |
||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
Pentru
acest nivel se cauta acea casuta, plecand de la cea mai din dreapta casuta
pana la cea mai din stanga, care daca s-ar lua pietrele din ea atunci
ultima piatra s-ar opri exact in casuta de scor a calculatorului astfel
incat el sa mai poata alege o data. Daca nu exista o astfel de casuta
atunci va lua aleator o casuta ca nu este goala. |
||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
Codul
pentru acest nivel este asemanator cu codul pentru nivelul usor
doar ca aici cautarea se face de la stanga la dreapta. |
||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
Pornind
de la stanga la dreapta se cauta acea casuta a carei ultima piatra ar
ajunge in casuta de scor a calculatorului sub orice conditie, chiar care
face ocolul tablei o data. Daca nu exista nici o casuta cu conditia aceasta
se va alege ultima casuta, binenteles daca aceasta are pietre in ea. Daca
nu are se va lua iar o casuta aleatoare. |
||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
Pornind
de la stanga la dreapta se cauta acea casuta a carei ultima piatra ar
ajunge in casuta de scor a calculatorului sub orice conditie, chiar care
face ocolul tablei o data, sau ajunge intr-o casuta a jucatorului care
nu are nici o piatra in ea, caz in care pietrele din casuta vecina vor
intra in casuta de scor al acestuia. Daca nu exista nici o casuta cu conditia
aceasta se va alege ultima casuta, binenteles daca aceasta are pietre
in ea. Daca nu are se va lua iar o casuta aleatoare. |
||||||||||||||||||||||||||||||||||||||||||||||||||
| Sus | ||||||||||||||||||||||||||||||||||||||||||||||||||
Deoarece
acest program a fost implementat in C++ Builder pentru al putea rula veti
avea nevoie de cateva librarii din acest mediu de programare. De aceea
am creat un kit de instalare cu ajutorul programului Install Shield pentru
C++ Builder cu care veti putea instala jocul si care cuprinde si librariile
folosite de acesta. Daca doriti sa downloadati kitul de instalare
apasati aici. |
||||||||||||||||||||||||||||||||||||||||||||||||||
| Pentru a downloada sursele apasati aici. | ||||||||||||||||||||||||||||||||||||||||||||||||||
| Sus | ||||||||||||||||||||||||||||||||||||||||||||||||||
Program implementat de Ana
Marin (333CB) si Dragos
Dobre (332CB) |
||||||||||||||||||||||||||||||||||||||||||||||||||