Pomoc przy projekcie.

0

Witam wszystkich. Pisze do Was poniewaz dostałem do wykonania projekt i potrzebuje pomocy zeby go zrobic. A oto tresc:
Zaprojektowac interfejs dla klas reprezentujacych figure: domino, tromino, tetramino itd. ... Interfes powinny implementować klasy przechowujące figury.
Wykorzystujac ten interfejs zaimplementowac algorytm pokrywajacy danym zbiorem figur plansze o wymiarach n x m. Algorytmem ustawiania figur moze byc np. rekurencja z nawrotami. Prosze zwrocic uwage by algorytm wykorzystywał jedynie metofy z interfejsu figury. Wynikiem powinna byc informacja czy ustawienie jest mozliwe dla danych parametrow orac jezeli tak - jedno z roziwazan.
Interfejs powinien byc tak zaprojektowany aby mozliwe bylo utworzenie figury o dowolnej liczbie jednostkowych kwadratow.

No wiec jak widac zadanie jest dosyc ciekawe. I problem mam juz na etapie koncepcyjnym. Po pierwsze co ma byc interfejsem ? czy posłuzyc sie klasa abstrakcyjna czy tez juz szblonem. W kontescie "aby mozliwe bylo utworzenie figury o dowolnej liczbie jednostkowych" oraz "Interfes powinny implementować klasy przechowujące figury. " pierwszy pomysl bym odrzucil z miejsca. teraz kwestia szablonu. Myle ze parametrem powinna byc informacja o liczbie jednostkowych kwadracikow w danej figurze, ktore z kolei traktowalbym jako zbiory punktow.Z tym ze tu mam kolejny problem. Bo jesli juz utworze sobie klase wedlug szablonu - figura z 10 elementarnych kwadracikow to potrzbuje jakos przechowac 10 par wspolrzednych, tu posluzyl bym sie konstruktorem ktorego parametrem bylaby ilosc par punktow do wygenerowania. Czy dobrze mysle ? No i teraz jeden z najwiekszych problemow jak z danych np 10 punktow wygenerowac WSZYSTKIE mozliwe ustawienia ich zeby otrzymac rozne obiekty tej klasy (caly czas bedace rodzajem domina ) jak ma dzialac taki konstruktor lub moze jakas dodatkowa funkcja ? Wiem ze niektore dla niektorych moje pytania moga wydawac sie zalosne... ale wierze w Was! :) wielokrotnie na 4programmers.net znajdowalem pomoc (niekoniecznie piszac posta) dlatego licze ze i tym razem pomozecie. Zeby bylo jase- oczekuje rad wskazowek i waszych pomyslow na rozwiazanie powyzszych problemow :) nic wiecej :) z gory dzieki za pomoc.

0

klasa czysto abstrakcyjna jako interfejs i potem szablon template<size_t rozmiar> Klocek : public IKlocek

0

a czy masz jakis pomysl jak rozwiazac problem budowania wszystkich mozliwych kombinacji roznych figur zbudowanych np z 8 klockow ?

0
dacio napisał(a):

a czy masz jakis pomysl jak rozwiazac problem budowania wszystkich mozliwych kombinacji roznych figur zbudowanych np z 8 klockow ?

Nad optymalnym rozwiązaniem można by myśleć długo. Pierwsze co przychodzi do głowy to po prostu prostokąty. Plansza to prostokąt pól.

Pole {
int id_klocka;
int wartosc; // np. gdy -1 to puste
}

Pole plansza[N][M];

// maksymalny rozmiar klocka
#define KLOCEK_N (4)
#define KLOCEK_M (5)

Klocek {
Pole pola[KLOCEK_N][KLOCEK_M];
bool uzyty;
}

//Klocek możemy postawić, jeśli żaden inny nie zawadza i wszystkie wartości są dopasowane:
bool isFit( const Pole plansza[N][M] , const Klocek klocek , const int x , const int y } {

// test czy nie nakłada się
for( int i=x ; i<x+KLOCEK_N ; i++ )
for( int j=y ; j<y+KLOCEK_N ; J++ )
if( plansza[i][j].wartosc != -1 && kolcek[i-x][j-y].wartosc != -1 )
return false; // konflikt

// test czy pasuje
for( int i=x ; i<x+KLOCEK_N ; i++ )
for( int j=y ; j<y+KLOCEK_N ; J++ )
if( bardziej skomplikowany warunek ) return false;

return true;

}

Solve {
int x;
int y;
int klocek;
}

// Szukanie z nawrotami
bool search( Pole plansza[N][M] , Klocek klocki[ilosc] , Solve solve[] , depth ) {

if( wszystkiePostawione( klocki ) )
return true;

for( int i=0 ; i<ilosc ; i++ ) {
if( klocki[i].uzyty )
continue;

for( int x=0 ; x<N-KLOCEK_X+1 ; x++ )
for( int y=0 ; y<M-KLOCEK_Y+1 ; y++ ) {
  if( isFit( plansza , klocki+i , x , y ) {
      postaw( plansza , klocki+i , x , y );
      bool res = search( plansza , klocki , solve , depht + 1 );
      zdejmij( plansza , klocki+i , x , y );
      if( res ){
         solve[depth].x = x;
         solve[depth].y = y;
         solve[depth].klocek = i;
         zdejmij( plansza , klocki+i , x , y );
         return true;
      }
  }
}

}

return false;
}

Gdzies jeszcze trzeba zapamiętać depth dla rozwiązania i potem odtworzyć to co
procedura search wpisała do tablicy solve.

0

mariotti Dzieki za zainteresowanie :) Tylko ze wiesz, ten program musi uwzgledniac wszystkie mozliwe ksztalty danej figury. Np mamy tetramino - czyli figure zlozona z 4 malych kwadracikow i ta figura ma 7 róznych rodzajów (tak jak w niezapomnianej grze Tetris) i teraz mam taki problem: uzytkownik wymysla sobie ze chce miec figure zlozona z 8 takich malych kwadracikow (nazwijmy "eightmino") jak napisac funkcje ktrora wygeneruje wszystkie mozliwe ulozenia tych 8 kwadracikow tak, by powstaly wszystkie mozliwe do ulozenia, rozne ksztalty... Masz jakis pomysl ? Glowie sie nad tym od kilku dni

0
dacio napisał(a):

mariotti Dzieki za zainteresowanie :) Tylko ze wiesz, ten program musi uwzgledniac wszystkie mozliwe ksztalty danej figury. Np mamy tetramino - czyli figure zlozona z 4 malych kwadracikow i ta figura ma 7 róznych rodzajów (tak jak w niezapomnianej grze Tetris) i teraz mam taki problem: uzytkownik wymysla sobie ze chce miec figure zlozona z 8 takich malych kwadracikow (nazwijmy "eightmino") jak napisac funkcje ktrora wygeneruje wszystkie mozliwe ulozenia tych 8 kwadracikow tak, by powstaly wszystkie mozliwe do ulozenia, rozne ksztalty... Masz jakis pomysl ? Glowie sie nad tym od kilku dni

Czyli to nie ma nic wspólnego z domino w którym trzeba dopasować kwadraciki z wartościami, ale trzeba ułożyć je na planszy byle jak, wystarczy żeby
nie nachodził jeden na drugi?

A co do generacji wszystkich... nie wiem co to są wszystkie. Kwadraty muszą się łączyć po krawędziach czy po narożnikach też?
Jeśli obrócimy to jest ta sama figura czy inna? Tak czy inaczej, łatwo napisać procedurę naiwną. Napisanie optymalnej może
zająć pół życia :D

Na początek bym wziął kwadrat o boku NxN, gdzie N jest ilością kwadracików. Następnie siłowo bym
generował wszystkie kształty. Złożoność ( N nad NxN ), dla 7 mamy 7 nad 49 = 85mln. Potem
robimy wszystkie transformacje po których figura jest tą samą figurą, czyli obroty i przesunięcia.
Jakaś hash-table by się przydała do spamiętania wyników.

Lepszy algorytm to przeszukiwanie grafu w głąb. Też bierzemy kwadrat NxN. Wychodzimy z dowolnego
pola i rekurencyjnie doklejamy kwadraciki (jak się domyślam doklejamy tylko te które przystają
bokami do siebie). Gdy osiągniemy głębokość N, to zapamiętujemy kształt w hash-table i jego
wszystkie transformacje. Ten algorytm powinien być całkiem szybki.

0

Wlasnie z gra domino to nie ma zupelnie nic wspolnego. Domino, tromino, tertamiono itd.. to po prostu nazwy kolejnych figur zlozonych z 2,3,4... elementow podstawowych - czyli takich kwadracikow 1x1. Tak jak juz pisalem dla 2 kwadracikow - czyli domina mamy 1 mozliwy ksztal (po obrocie mamy ten sam). dalej, tromnio moze byc proste lub w ksztalcie litery L tetramino mamy w terisie tam juz jest 7 kombinacji ulozenia roznych ksztaltow z 4 malych kwadracikow. i teraz caly sens programu polega na tym ze mamy rozne klasy figur klase domina - z jednym mozliwym obiektem klase tromina z 2 mozliwymi obiektami klase tetramina z 7 mozliwymi obiektami itd... i teraz uzytkownik definiuje sobie plansze n x m kilka figur (kazda figura ma byc oddzielna klasa) np klasa "sevenmino" "tenmino" "fivemino"i w ramach tych klas mamy odpowiednio po kilka(nasie/dziesiat) obiektow i zadaniem programu jest przedstawienie odpowiedzi czy dla zadanej planszy i figur istnieje rozwiazanie zapelniajace plansze. jesli tak - to program ma przedstawic rozwiazanie
i teraz ja to widze tak tworze sobie szablon z parametrem calkowitym template <int number="number"> class pattern gdzie number oznacza ilosc tych elementarnych kwadracikow jak teraz wygenerowac wszystkie mozliwe, rozne ksztalty z zadanej ilosci kwadracikow ?

1
dacio napisał(a):

Wlasnie z gra domino to nie ma zupelnie nic wspolnego....zadaniem programu jest przedstawienie odpowiedzi czy dla zadanej planszy i figur istnieje rozwiazanie zapelniajace plansze. jesli tak - to program ma przedstawic rozwiazanie

Ok, chyba rozumiem o co chodzi.

dacio napisał(a):

i teraz ja to widze tak tworze sobie szablon z parametrem calkowitym template <int number="number"> class pattern gdzie number oznacza ilosc tych elementarnych kwadracikow

Nie mam pojęcia po co taki template.

dacio napisał(a):

jak teraz wygenerowac wszystkie mozliwe, rozne ksztalty z zadanej ilosci kwadracikow ?

Przestawiłem wyżej dwa algorytmy, jeden szybki, drugi wolny :) Ten szybki to przeszukiwanie
grafu w głąb i spamiętywanie wyników w hash-table - po wykonaniu transformacji.

0

szablon jest niepotrzebny ? ? to jak w takim razie zrobic tak by : "Interfejs powinny implementowac klasy przechowujace konkretne figury" - tego wymaga polecenie. .

0

te zdanie jest jak najbardziej zrozumiale napisane. nie sugeruje użycia szablonu, ale użycia interfejsu i co najmniej kilku klas implementujących ten interfejs

O klasie nie można poprawie powiedzieć że coś przechowuje, czyli zdanie już z tego powodu jest bez sensu.

Poza tym można tylko zgadywać co ktoś miał na myśli pisząc "konkretna figura". Konkretna to każda jedna? Czy każda o tej samej ilości kwadracików? A więc kolejna dwuznaczność. Skąd wiesz co się komu śniło gdy pisał "konkretna figura"? Oczywiście że zdanie jest niezrozumiałe.

Do tego w C/C++ nie ma pojęcia "interfejs". Powinno być napisane coś w rodzaju:
"Program powinien zawierać hierarchię klas do reprezentacji figur. Z klasy bazowej powinny być wyprowadzone osobne klasy dla figur o różnej ilości kwadracików. Wyprowadzone klasy powinny być klasami szablonowymi. Klasa bazowa powinna udostępniać interfejs do manipulacji na figurach w postaci zestawu metod (wirtualnych bądź nie)."

Dodam jeszcze, że takie rozwiązanie gdzie dla każdej figury o różnej ilości kwadracików wyprowadza się klasę i to szablonową, nie wydaje się ułatwiać zadania, jestem prawie pewny że je utrudni.

0

konkretna figura to kazda klasa ktora dziedziczy po interfejsie i zawiera N klockow

0

Panowie wielkie dzieki za zainteresowanie tematem. Naprawde pod tym wgledem forum wymiata - obawialem sie kazdy oleje moj problem a tu prosze - sa uzytkownicy, ktorym naprawde zalezy zeby podyskutowac i dzielic sie spostrzezeniami :) to naprawde budujace :)
Ale teraz do rzeczy: mam teraz ogromny metlik i juz sam nie wiem jak sie do tego zabrac. wiec moze od poczatku. Rozwazam dwie opcje - klase abstrakcyjna np. "shape" z ktorej dziedziczyłbym metody dla klas pozostalych i konstruktor z parameterem "number" jako ilosc tych kwadracikow - takie rozwiazanie jednak kloci sie z "Interfejs powinny implementowac klasy przechowujace
konkretne figury." pomijam juz rozwodzenie sie nad sensem tego zdania, interpretuje je tak ze program musi byc przygotowny na n klas. No bo przeciez w momencie pisania programu nie jestem w stanie wymyslec ilez to klas mi potrzeba - figure z jakiej ilosci kwadracikow wymysli sobie uzytkownik. Dlatego tez dla mnie najbardizej naturalnym rozwiazaniem jest szablon. Dalej. Uzytkownik wprawadza sobie ze chce miec klase "sevenmino" czyli figure z 7 kwadracikow. Ale takich figur moze byc bardzo duzo zatem konstruktor musi (w jakis ? - nieznany mi sposob) wygenerowac wszystkie rodzaje tego "sevenmina". mariotti pisales o rekurencji - i ten pomysl wydaje mi sie byc najfajnieszy, skoro uzytkownik chce figury zlozone z 7 kwadracikow to tworze sobie tablice 7x7 i teraz wychodze ze srodkowego kwadracika. to srodkowe pole to moja pierwsza para wspolrzednych -druga moge "przylepic" gdziekolwiek obok, na trzecia mam juz dwie mozliwosci itd... tutaj mi ewidentnie wyglada na rekurencje z nawrotami z tym ze nie za bardzo wiem jak to zakodzic... kolejna sprawa to przechowywanie tych rozwiazan... hash table ? - jakos tego nie czuje moze po prostu nie zrozumialem... mi sie wydaje ze tu moznaby zastosowac liste struktur, ktrore przechowywałyby wspolrzedne - co o tym myslicie ? No i teraz gwozdz programu. Zalozmy ze mam juz wszystkie te rodzaje "sevenmina" - teraz uzytkownik wymysla sobie tablice 4 x 8 i teraz jak spradzac czy te wyszukane przeze mnie rodzaje danej figury (przechowywane jako jakies pary wspolrzednych) da sie ulozyc w nowej - innej tablicy ? Pomozcie! od kilku dni ten problem spedza mi sen z oczu :(

0
dacio napisał(a):

Panowie wielkie dzieki za zainteresowanie tematem. Naprawde pod tym wgledem forum wymiata - obawialem sie kazdy oleje moj problem a tu prosze - sa uzytkownicy, ktorym naprawde zalezy zeby podyskutowac i dzielic sie spostrzezeniami :) to naprawde budujace :)

Takie zadania są fajne. W pracy zawodowej klepię i klepię w kółko zadania z tej samej dziedziny, monotonia uwstecznia. Miło chociaż pomyśleć o czymś zupełnie innym niż się robi na co dzień, albo przypomnieć sobie jak to było w szkole :)

dacio napisał(a):

Ale teraz do rzeczy: mam teraz ogromny metlik i juz sam nie wiem jak sie do tego zabrac. wiec moze od poczatku. Rozwazam dwie opcje - klase abstrakcyjna np. "shape" z ktorej dziedziczyłbym metody dla klas pozostalych i konstruktor z parameterem "number" jako ilosc tych kwadracikow - takie rozwiazanie jednak kloci sie z "Interfejs powinny implementowac klasy przechowujace konkretne figury."

Prowadzący chciał żebyś wykazał się umiejętnością tworzenia hierarchii klas i (być może) szablonów. A to zadanie akurat można zrobić prościej bez takich zaawansowanych mechanizmów języka. Nie wiem co powiedzieć...

dacio napisał(a):

pomijam juz rozwodzenie sie nad sensem tego zdania, interpretuje je tak ze program musi byc przygotowny na n klas. No bo przeciez w momencie pisania programu nie jestem w stanie wymyslec ilez to klas mi potrzeba - figure z jakiej ilosci kwadracikow wymysli sobie uzytkownik.

Chwila. W momencie pisania musisz wiedzieć ile Ci potrzeba klas. Jakbyś nie wiedział, to byś nie mógł napisać programu z klas. Klasy są po to, że w
początkowym etapie projektu rzadko wiadomo jak będzie wyglądał projekt pod koniec. Np. w połowie realizacji projektu klient powie że poza takimi
figurami, potrzeba jeszcze figur w których kwadraciki łączą się narożnikami. Gdy napiszesz program z użyciem klas, to jest większe prawdopodobieństwo
że uda się go łatwo dostosować do nowych wymagań klienta. Jednak gdy piszesz program, gdy realizujesz jakiś konkretny projekt, to musisz wiedzieć ile
jakich klas potrzebujesz.

dacio napisał(a):

Dlatego tez dla mnie najbardizej naturalnym rozwiazaniem jest szablon.

Nie. Szablon naturalnym rozwiązaniem jest wtedy, gdy:

  1. ten sam kod ma działać na różnych typach
  2. ważna jest ultra wydajność i ten sam kod ma działać na różnych stałych - w tym przypadku kompilator wygeneruje
    kilka wersji kodu, każda wersja optymalna dla każdej stałej.
    Czyli w tym programie uzyskasz dzięki szablonom odwrotny efekt. W trakcie pisania byś musiał przewidzieć wszystkie
    rozmiary figur jakie użytkownik sobie zażyczy i wygenerować wszystkie w trakcie kompilacji. Jeśli użytkownik będzie
    chciał nową figurę, to program nie zaoferuje mu takiej możliwości. Ale na tych które wygenerujesz w trakcie kompilacji
    przy pomocy szablonów, program będzie działał efektywniej, szybciej i mniej pamięci zajmie.

Mechanizmem który wychodzi na przeciw temu że nie wiesz co sobie zażyczy użytkownik jest PARAMETRYZACJA. I w
tym projekcie naturalnym rozwiązaniem jest napisanie procedury która utworzy na podstawie parametru wprowadzonego
przez użytkownika dowolne figury. Szablony dadzą efekt odwrotny.

dacio napisał(a):

Dalej. Uzytkownik wprawadza sobie ze chce miec klase "sevenmino" czyli figure z 7 kwadracikow. Ale takich figur moze byc bardzo duzo zatem konstruktor musi (w jakis ? - nieznany mi sposob) wygenerowac wszystkie rodzaje tego "sevenmina".

Ja bym chyba zrobił wektor wektorów. W każdym wektorze bym trzymał figury jednego rozmiaru. Do tego bym zrobił procedurę która
generuje wszystkie figury danego rozmiaru na podstawie parametry. Coś mniej/więcej tak:

void build( &vector , board, start_x, start_y, size , depth ) {
if( depth == size ) {
appendIfNotExists( vector , board );
return;
}
for( i=-1 ; i<2 ; i++ ) {
for( j=-1 ; j<2 ; j++ ) {
if( board[start_x+i][start_y+j] == exists )
continue;
board[start_x+i][start_y+j] = exists;
build( vector , board , start_x+i, start_y+j, size , depth+1 );
board[start_x+i][start_y+j] = not_exists;
}}
}

board[0][0] = exists;
build( vector , board , 0 , 0 , 7 , 1 );

dacio napisał(a):

mariotti pisales o rekurencji - i ten pomysl wydaje mi sie byc najfajnieszy, skoro uzytkownik chce figury zlozone z 7 kwadracikow to tworze sobie tablice 7x7 i teraz wychodze ze srodkowego kwadracika. to srodkowe pole to moja pierwsza para wspolrzednych -druga moge "przylepic" gdziekolwiek obok, na trzecia mam juz dwie mozliwosci itd... tutaj mi ewidentnie wyglada na rekurencje z nawrotami z tym ze nie za bardzo wiem jak to zakodzic... kolejna sprawa to przechowywanie tych rozwiazan... hash table ?

Będziesz miał masę powtarzających się figur, różniących się tylko offsete, albo obrotem. Trzeba napisać funkcję hash, która z dużym
prawdopodobieństwem przypisze inną liczbę innym figurom. Dzięki temu bardzo szybko wyszukasz powtarzające się figury i nie
dodasz dwa razy tej samej.

dacio napisał(a):
  • jakos tego nie czuje moze po prostu nie zrozumialem... mi sie wydaje ze tu moznaby zastosowac liste struktur, ktrore przechowywałyby wspolrzedne - co o tym myslicie ? No i teraz gwozdz programu. Zalozmy ze mam juz wszystkie te rodzaje "sevenmina" - teraz uzytkownik wymysla sobie tablice 4 x 8 i teraz jak spradzac czy te wyszukane przeze mnie rodzaje danej figury (przechowywane jako jakies pary wspolrzednych) da sie ulozyc w nowej - innej tablicy ? Pomozcie! od kilku dni ten problem spedza mi sen z oczu :(

Tak jak pisałem kilka postów wyżej. Też rekurencja z nawrotami.

0

Mam takie pytanie jeszcze. Czy w konstruktorze danej klasy np. Domino ktory moglby wygladac mniej wiecej tak
Domino:: Domino (int quantity ,string inscripion,char sign )
{
number=quantity;
name=inscripion;
fulfilment=sign;
Cooridantes.resize(number);
for(int i = 0; i < Cooridantes.size(); i++)
Cooridantes[i].resize(number);
int i;
for (i=0;i<number;i++)
{
Cooridantes[number/2][i]=sign;
}

}
jest mozliwosc wywolania jakies funkcji na rzecz tego obiektu ?
Chodzi mi o to czy zadziala cos takiego ze w konstruktor wrzuce funkcje build (this) cos takiego mi sie nie chce skompilowac bo przypuszczam ze to jest nielegalne ale moze jakos mozna ? ? ?
i drugie pytanie
mam vector wszystkich obiektow z programu czy moge w konstruktorze zrobic cos w stylu Resources.push_back(this) ? podobnie jak wyzej nie kompiluje sie cos takiego przypuszczam ze jest to nielegalne bo probuje zrobic cos z obiektem ktory doppiero powstaje no... ale nie wiem.... - dlatego pytam Was drodzy koledzy :) moze sa na to jakies chwyty ?

0

Problem polega wyłacznie na tym że nie wiesz co i gdzie deklarujesz.
http://ideone.com/gXLRGD

0

no własnie chyba w tym rzecz ale nadal nie bardzo widze jak rozwiazac swoj problem.. wydaje mi sie ze wszystko mam tak jak mi podales. program jest w 3 plikach. w pierwszym naglowkowym mam definicje klasy abstrakcyjnej i jej pochodnych min wspomnine domino w drugim pliku definition.cpp mam definicje wszystkich funkcji konstruktorow destruktora itp... a w trzecim main.cpp mam wlasnie zadeklarowany wektor. dodam ze build jest metoda klasy abstrakcyjnej...

0

witam Was ponownie. Dzieki Wam sporo udalo mi sie "popchnąć temat". :) dzieki! Teraz przede mna najtrudniejszy etap. Mianowicie napisanie funkcji ustawiajacej klocki na danej planszy. Wiem ze ma to byc rekurencja z powrotami ale zupelnie nie mam pomyslu jak to zakodzic. Przejde do rzeczy mam sobie dowolna plansze n x m (załóżmy 10 x 15) i teraz mam kilka roznych klockow np takich jak w klasycznym Tetrisie. Klocki sa zaimplementowane jako dwuwymiarowe vectory charow 4 x 4 i tylko w niektorych komorkach vectora mam jakis znak np ' * '. Moim problemem jest to ze pierwszy klocek do zadanej planszy ustawiam bez problemu jednak z kolejnymi mam problemy poniewaz kazdy ma wspolrzedne w planszy 4 x 4 np klasyczny kwadracik ma wspolrzedne: 0,0;1,0;0,1;1,1;
jak je jakos sprytnie przesuwac w prawo czy w dol ? No bo ok zalozmy ze chce gdzies wstawic ten kwadracik ale w tych wspolrzednych ->0,0;1,0;0,1;1,1; w zadanej planszy cos juz jest ... jak w ogole identyfikowac pola gdzie wstawic kolejna figure zeby pasowalo..
zakladam ze chce uzupelniac plansze idac od lewego gornego rogu czyli tak jak rosna wspolrzedne w vectorze. musze jeszcze uwzglednac obrot danej figury. obrot zaimplementowalem jako po prostu zamiane wierszy z kolumnami ale to chyba nie jest najbardziej eleganckie... ma ktos jakies pomysly ? Bede bardzo wdzieczny za uwagi i sposrzezenia :)

0

kwadracik 0,0;1,0;0,1;1,1; po przesunięciu o x,y będzie miał współrzędne: x,y;x+1,y;x,y+1;x+1,y+1;

1 użytkowników online, w tym zalogowanych: 0, gości: 1