Pagina 1 din 1

Turnul din Hanoi, un joculet programat in BGT

Scris: 02 Iul 2011, 18:07
de Manu
De amuzament am facut un joculet in BGT:
Turnul din Hanoi sau Turnurile din Hanoi este un joc matematic sau puzzle.
Este format din trei tije si un numar variabil de discuri, de diferite marimi, care pot fi pozitionate pe oricare din cele 3 tije. Jocul incepe avand discurile asezate in stiva pe prima tija, in ordinea marimii lor, astfel incat sa formeze un turn. Scopul jocului este acela de a muta intreaga stiva de pe o tija pe alta, respectand urmatoarele reguli:
1. Doar un singur disc poate fi mutat, la un moment dat.
2. Fiecare mutare consta in luarea celui mai de sus disc de pe o tija si glisarea lui pe o alta tija, chiar si deasupra altor discuri care sunt deja prezente pe acea tija.
3. Un disc mai mare nu poate fi pozitionat deasupra unui disc mai mic.

Cititi mai multe precum tastele utilizate, in Ajutorul Online.

Daca alegeti varianta in limba romana, ar fi bine sa setati la SApi5 din Control Panel o voce precum Simona, Carmen sau Ioana.
Este nevoie ca JAWS sa fie inchis sau pus pe Sleep ca sa mearga sagetile in acest joc.

Descarcati varianta in limba romana

Descarcati varianta in limba engleza

Voi pune in topicul despre programarea in BGT si sursa, de fapt acesta era motivul initial pentru care m-am apucat de programat Turnurile din Hanoi... pentru un exemplu de cod in BGT.

Scris: 04 Iul 2011, 12:46
de Stefan_Ilioaica
salut.
m-am jucat si eu acest joculet, si chiar iti pune mintea la incercare, nu gluma.
am reusit pana la 4 discuri, de la 5 deja incepe greul.
intrebarea este: e posibil sa faci de la 7 discuri in sus?
stateam si ma gandeam, cum e posibil sa aranjezi discurile astea pe atatea tije.
in schimb, jocul mi se pare ok.

Scris: 05 Iul 2011, 02:06
de Manu
Se poate muta un turn din oricate discuri, nu doar pana la 10. Am pus aceasta limita pentru ca m-am gandit ca sigur nu va avea nimeni rabdare sa apese ca nebunul sageti si spatiu la nesfarsit. Dupa cum am mentionat, numarul minim de mutari posibil este 2 la puterea n minus 1, unde n este numarul de discuri. Asadar, pentru 7 discuri sunt necesare cel putin 127 mutari.

Acum sa dau si o smecherie sau doua pentru a merge sistematic:
- intotdeauna trebuie ca mutarile sa fie in succesiune discul 1 cu alt disc mai mare.
- daca numarul discurilor este fara sot, discul 1 trebuie sa mearga tot timpul spre stanga, iar daca numarul discurilor este cu sot, 1 trebuie sa mearga tot spre dreapta.
Pe scurt, din doua in doua mutari trebuie miscat discul 1, iar directia de deplasare a acestuia trebuie sa nu se schimbe.
Succes!

Scris: 07 Iul 2011, 05:47
de I Tichir
Mie mi-a placut foarte mult acest joc. E bine structurat si sunetul de fundal adecvat. Defapt, e singurul joc la care nu dezactivez fondul sonor. Desi am aranjat doar pana la 7 discuri, mi-ar placea sa stiu ca are mai multe. Desi, deobicei nu rezolv jocurile pana la capat, imi place sa stiu ca mai sunt multe de facut in acel joc.

Scris: 07 Iul 2011, 14:05
de Manu
Multumesc pentru aprecieri.

M-am gandit ca mai mult de 10 nu se apuca nimeni de facut...
Am scris acest joc pentru un exemplu de cod in BGT, apoi m-am gandit sa fie si disponibil pentru instalare ca pentru nevazatori nu am vazut Turnul din Hanoi.
In ideea sa nu fie foarte complicat si prea lung codul care oricum are deja 600 de linii, nu am facut o ultima optiune care sa permita scrierea manuala a unui numar de discuri; daca puneam pana la nu stiu cate devenea acel, sa-i zicem meniu de inceput, prea lung.
E foarte usor de modificat, la inceput exista o constanta pe care am numit-o max_disks, acesteia i-am dat valoarea 10. Doar acel numar sa il schimb si se modifica si numarul de discuri de ales.
Eventual, pentru simplificare as putea face repede un mic fisier TXT care sa contina numarul maxim de discuri posibil, iar atunci valoarea constantei max_disks sa fie luata din acel fisier. Fiecare ar putea in felul acesta modifica numarul maxim; practic max_disks sa nu mai fie o constanta, ci o variabila careia sa i se atribuie valoarea dintr-un fisier txt modificabil de catre utilizator.