Granice konsoli

0

Mam do napisania projekt w którym trzeba narysować figurę (w kształcie litery E) która ma się nie wysypywać kiedy dotknie granicy konsoli. Nie ważne, czy za pomocą przesunięcia, czy powiększenia do maksymalnych rozmiarów; ma się nie wysypać. No i problem polega na tym, że udało mi się taką funkcję stworzyć tylko dla dolnej granicy. Próbowałem analogicznie z pozostałymi granicami, lecz figura działa tak: górna krawędź figury, po dotarciu do górnej krawędzi konsoli zmienia pozycję (cała górna krawędź figury i tylko ta część figury) z aktualnej na początek konsoli (lewy górny róg), prawa krawędź granicy "przepuszcza" połowę figury, po czym figura się zatrzymuje, natomiast lewa krawędź konsoli przetwarza całą figurę (kiedy ta już całkowicie zniknie z konsoli, mimo że powinna poprzestać właśnie na krawędzi konsoli) na poziomą linię długości górnej krawędzi figury i przemieszcza całą figurę na lewy górny róg konsoli (sytuacja wtedy jest taka sama jak z górną krawędzią figury).

Próbowałem metodą prób i błędów, po kolei podstawiać wszędzie te same dane, tzn albo 0 albo console_size_x/console_size_u albo 80 / 25, albo próbowałem dodać ten bok i wszędzie wynik marny. Jedyną dobrze działającą funkcją jest dolna krawędź zatrzymująca figurę.
Byłbym bardzo wdzięczny za wszelką pomoc.
PS. Jestem początkującym programistą i staram się rozumieć co robię, dlaczego tak zmieniam / tak jest, jak sprawić by lepiej działał, lecz w tym przypadku nie potrafię wyobrazić sobie rozwiązania tego problemu po tej metodzie prób i błędów.

Edit:
bok - Dana, którą wprowadza użytkownik
zamienienie komentarza górnej i lewej krawędzi

0

Napisze Ci algorytm co masz zrobic, jezeli nie bedziesz czegos zrozumial to zadaj pytanie do konkretnego punktu (dokladne pytanie a nie a co oznacza ten punkt)

  1. Definiujesz sobie jak ma wygladac litera E. Baa ja bym nawet na sztywno napisal to w tablicy char[][]
    1.1) wiesz dokladnie ile bedzie mial width/dlugosci/x oraz height/wysokosci/y. Zapisujesz to sobie w zmiennych by pozniej z tego korzystac
  2. sprawdzasz wielkosc okna. Sprawdzasz czy zmiesci witdh/height w ogole, jezeli nie to wyswietlasz na konsoli "konsola za mala prosze zwiekszyc konsole". A nawet user friendly powinienes zapytac sie czy sam masz to powiekszyc i podac rozmiar do zmiany. Zapisujesz rozmiar okna. xWindow, yWindow
    2.1) ja sam napisalbym funkcje ktora by zmieniala wilekosc konsoli i bylaby dostepna pod jakims przyciskiem (przycisk i podac parametry x,y)
  3. pytasz uzytkownika gdzie narysowac litere E. i sprawdzasz rownanie
    xWindow - xUser > xE && yWindow - yUser > yE
    jezeli jest true to rysujesz jezeli false to pytasz uzytkownika co zrobic 1) nie rysowac 2) powiekszyc automatycznie konsole zeby sie zmiescilo 3) pozwolic zmienic okno uztykownikowi samemu

chyba o niczym nie zapomnialem ;)

1

Czym jest bok? Czy figura ma rozmiar kwadratowy? Sprawdź też czy na pewno testujesz w konsoli o rozmiarach takich jakie masz w zmiennych. Komentarze masz zamienione dla lewej i górnej krawędzi. Mama nadzieje, że to tylko błąd refactoringu ;).

Jeżeli wszystko jest ok, to pokaż kod rysujący tą figurę.

0

Hm... Stwierdziłem ze ten problem zostawię na później i podejmę się próby podwójnego buforowania, po 3-4 godzinach szukania w internetach nic nie znalazłem co mogłoby mi zrozumieć jak zaimplementować podwójne buforowanie :/. Patrzyłem także na MSDN, lecz ten przykład, co podali w ogóle mi nie przypada do mózgu i ciężko mi to zrozumieć. Byłbym dozgonnie wdzięczny jeżeliby znalazłaby się taka osoba, która z chęcią podała mi najprostrzy przykład, na którym analogicznie mógłbym przetestować jej/jego program, żebym mógł u siebie jakoś to wdrożyć. Również na forum patrzyłem, problemy głównie dotyczyły w językach Java/delphi, a to co do C++ to na przykładach wykraczających poziom wiedzy, jaką mam teraz :(.

EDIT: PROBLEM ROZWIĄZANY! Temat można zamknąć

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