Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

rysowanie figury za pomocą znaków

Ostatnio zmodyfikowano 2011-01-14 17:02
Autor Wiadomość
DejaVu
» 2011-01-11 13:17:23
Więc popraw te warunki o których mówiłem.
P-26435
killer625
Temat założony przez niniejszego użytkownika
» 2011-01-11 14:06:19
hmm teraz lewo i góra jest ok a prawo i dół gdy dochodzą dokładnie do krawędzi to cała figura cofa się do mniej więcej połowy okna i leci do tego samego punktu od połowy.

C/C++
#include <iostream>
#include <conio2.h>
#include <windows.h>
using namespace std;
const int Esq = 27;
int main()

{
    int x, y, x1, y1, bok;
    char klawisz, a;
    x = 40; y = 12;
   
    cout << "Podaj rozmiar boku: ";
    cin >> bok;
   
    cout << "Podaj znak z ktorego ma byc zbudowana figura: ";
    cin >> a;
   
    do
    {
        CONSOLE_SCREEN_BUFFER_INFO csbi;
        GetConsoleScreenBufferInfo( GetStdHandle( STD_OUTPUT_HANDLE ), & csbi );
        int console_size_x = csbi.srWindow.Right - csbi.srWindow.Left + 1;
        int console_size_y = csbi.srWindow.Bottom - csbi.srWindow.Top + 1;
       
        if( x - bok > 71 )
             x = 71 - bok;
       
        if( x < 1 )
             x = 1;
       
        if( y - bok > 16 )
             y = 16 - bok;
       
        if( y < 1 )
             y = 1;
       
       
        _setcursortype( _NORMALCURSOR );
        clrscr();
       
        x1 = x; y1 = y;
        gotoxy( x1, y1 );
        for( int i = 1; i <= bok; i++ ) // górna krawedz
             cout << a;
       
        for( int i = 1; i <= bok - 2; i++ ) // boki
        {
            y1++;
            x1 = x + bok - 2;
            gotoxy( x1, y1 );
            cout << a;
            x1 = x;
        }
        y1++;
        gotoxy( x1, y1 );
        for( int i = 1; i <= bok; i++ ) // dolna krawedz
             cout << a;
       
        _setcursortype( _NOCURSOR ); // wylaczenie kursora
        klawisz = getch();
        switch( klawisz )
        {
        case '+': { bok = bok + 2; // powiekszenie
                x--; y--;
                break; }
        case '-': { bok = bok - 2; // zmniejszenie
                x++; y++;
                break; }
        case 75: { x--; break; } // przesuniecie w lewo
        case 77: { x++; break; } // przesuniecie w prawo
        case 72: { y--; break; } // przesuniecie do gory
        case 80: { y++; break; } // przesuniecie do dolu
        case Esq: { break; } // wyjscie 
        }
    }
    while( klawisz != Esq );
   
    return 0;
}

myśle że to przesuwanie jest teraz ok. Problem jest teraz ze zwiększaniem figury. Plus jak uzyskać ten strzałkowaty kształt boku ?
P-26436
pekfos
» 2011-01-11 18:26:55
no wspaniale po prostu.. (sarkazm..) tylko co to do diabła jest?!
C/C++
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo( GetStdHandle( STD_OUTPUT_HANDLE ), & csbi );
int console_size_x = 71;
int console_size_y = 16;

ten temat już traci poziom po prostu. zaczynam odnosić wrażenie ze próbujemy pomóc komuś kto nie ma zbytnio pojęcia o programowaniu. pozdrów nauczyciela, jakbym miał takiego to bym interweniował aby przywrócić porządek w takim cyrku. szkoda gadać po prostu..
P-26449
killer625
Temat założony przez niniejszego użytkownika
» 2011-01-11 18:38:12
Nie wiem o co Ci chodzi, aczkolwiek byłbym wdzięczny za pomoc, zamiast pisania sarkastycznych postów, zgadzam się, to co póki co się nauczyliśmy to za mało aby zrobić ten program, jakby nie było dlatego zrobiłem topic na tym forum, aby poprosić ludzi którzy siedzą w tym dłużej o pomoc.
P-26450
pekfos
» 2011-01-11 19:14:02
ale sam pomyśl co tu wklejasz jako to co już zrobiłeś. wyciągasz od systemu informacje o rozmiarach okna konsoli by zaraz użyć stałych numerycznych. Podałem ci kod realizujący to co chciałeś, czyli uniezależnienie od rozmiarów konsoli.
to w sumie żadna filozofia z zaprojektowaniem tego. największy problem to rysowanie.
napisze ci w punktach co ma robić program w pętli:
1. pobrać rozmiary okna
2. za pomocą zmiennych double (bądź float) określasz jakie rozmiary ma obraz względem rozmiarów okna
3. rysujesz uwzględniając wyśrodkowanie

co do rysowania to cię nakieruję: rysuj od punktu do punktu. tak zrobisz skosy. do rysowania linii użyj algorytmu Bresenhama. już nie raz go adaptowałem do konsoli i powinieneś sobie poradzić z implementacją.
P-26452
killer625
Temat założony przez niniejszego użytkownika
» 2011-01-12 11:05:54
będę szczery, nie mam zielonego pojęcia jak zaimplementować rzeczy o których napisałeś ;/ odkąd to napisałeś siedziałem na google, szukałem tutoriali itd, i nic z tego, teraz wkoncu musze się położyć spać bo nie wytrzymuje już. jest jakiś sposób żeby z góry ustalić rozmiar okna konsoli. po prostu np. zrobić go 100x100 i niech taki bedzie nie wiekszy nie mniejszy  ? m.in. czegoś takiego szukałem, ogólnie dzięki wielkie za pomoc, niestety moja obecna wiedza to za mało żeby skorzystać z tych wskazówek.
P-26463
DejaVu
» 2011-01-12 11:07:42
Dostałeś gotowy kod, który wystaczyło wkleić...
P-26464
killer625
Temat założony przez niniejszego użytkownika
» 2011-01-12 14:38:52
hmm przecież wszystko dodałem, a jak coś w złe miejsce dodałem to co i gdzie ? Naprawde wielkie dzięki za pomoc.
P-26465
1 2 3 « 4 » 5 6 7
Poprzednia strona Strona 4 z 7 Następna strona