Witam!
Mój program ilustruje jakby takie plansze:
(W rzeczywistości jest ich trochę więcej). Posługujemy się w nimi nazewnictwem północ, południe, wschód, zachód.
Moje pytanie dotyczy łączeń pomiędzy tymi planszami. Ustalam je z poziomu kodu źródłowego (nie w run-time) i mam 2 pomysły na to.
Załóżmy, że ustalam łączenie dla planszy 4-tej. Mogę to zrobić tak:
plansza[3].ustaw_poln(plansza[0]);plansza[3].ustaw_wsch(plansza[4]); [/code]
lub tak:
[code=php]plansza[3].polacz_z_planszami(na_polnoc | na_wschod);
Jeżeli łączyłbym planszę ze wszystkimi dookoła (używałbym 4 kierunków), to w pierwszym przypadku musiałbym pisać 4 linijki, a w drugim jedną (zawsze jedną). To jest zaleta typu wyliczeniowego i alternatywy bitowej.
Natomiast wada tego rozwiązania to to, że w tej funkcji będę musiał bawić się w odejmowanie i dodawanie numerów plansz. Będę musiał stworzyć nienazwany typ wyliczeniowy i składnik statyczny, który będzie zawierał numer aktualnej planszy i jak np. połączę planszę 4 z planszą z północy to będę musiał zrobić takie odejmowanie:
class Plansza{ Plansza* poln, pold, wsch, zach; enum { na_polnoc = 0x1, na_poludnie = 0x2, na_wschod = 0x4, na_zachod = 0x8 }; //Północ = 0001, Południe = 0010 itd... static int nr_planszy;//... public: Plansza() : poln(0), pold(0), wsch(0), zach(0) { nr_planszy++; } //Chcę żeby numeracja zaczynała się od zera, //więc obiekt nr_planszy zainicjalizuję na początku -1 void polacz_z_planszami(int z_ktorymi) { //... if(z_ktorymi na_polnoc) poln = plansza[nr_planszy - 3]; //O to odejmowanie chodzi } [/code]
W przypadku wschodu czy zachodu będzie to odpowiednio dodanie 1 lub odjęcie 1. Natomiast w przypadku południa będzie to dodanie 3.
---------------------------------------------------------------------------------------
Które rozwiązanie jest bardziej eleganckie, że tak powiem :?: :lol: