Powiększanie figury.

0

Witam. Pojawił się w moim kodzie pewien problem i nie za bardzo potrafię zrozumieć jak go naprawić. Otóż powiększanie figury na całym obszarze konsoli działa bez zarzutów, aczkolwiek kiedy figura dotknie lewej krawędzi, figura się sypie. A dokładniej górna krawędź figury. Dla przykładu mam zwykły prostokąt i widoczny w nim problem. + nie wiem jak ukryć kursor, aby figura nie omijała "czarnej przestrzeni" w postaci 1 znaku w prawym dolnym rogu konsoli... Byłbym na prawdę wdzięczny za wszelką pomoc, najbardziej z tym powiększaniem przy lewej krawędzi...

Temat zamknięty.

1

Pierwszy problem rozwiązuje sprawdzenie poprawności współrzędnych x i y przed ustawieniem kursora. Zatem powinna być następująca kolejność instrukcji:

//...
    do
    { 
        //<--- najpierw sprawdzanie
        if (x > console_size_x - bok) //prawa krawedz konsoli
            x = console_size_x - bok;
       //... (i pozostałe 3 ify)
        
       //<--- dopiero tu ustawiasz kursor
        system("cls");
        x1 = x; y1 = y;
        gotoxy(x1, y1);
       //...

Drugi problem (ukrycie kursora):

CONSOLE_CURSOR_INFO cci;
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleCursorInfo(hConsole, &cci);
cci.bVisible = false;                                           //<---
SetConsoleCursorInfo(hConsole,&cci); 

Umieść ten kod przed wejściem do pętli do..while. Lepszym rozwiązaniem byłoby umieszczenie go w funkcji z parametrem bool.

To tyle odnośnie doraźnej naprawy. Całość... lepiej nie mówić.

0

Wielkie dzięki! Wiem, że kod może wyglądać na chaotyczny, lecz dopiero zaczynam 3 miesiąc programować i wszystko, co potrzebuje do tego projektu nie będzie/nie było na wykładach bądź też ćwiczeniach. Więc szukam w googlach / MSDN odpowiedzi (najbardziej zawiły był dla mnie kursor oraz void z gotoxy) i staram się sklejać to jakoś w całość. Temat zamknięty!

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