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ść
malan
» 2011-01-10 16:39:24
Tak dla pewności- tej niebieskiej kulki na środku nie musisz rysować?
P-26412
DejaVu
» 2011-01-10 16:43:11
W dużym uproszczeniu: jeżeli rysujesz firurę od współrzędnej załóżmy (1,1), a ekran ma wymiary (80x25), to robisz warunek:
C/C++
if( x - szerokosc_figury > 80 )
     x = 80 - szerokosc_figury;
//oraz:
if( x < 1 )
     x = 1;

Analogicznie postępujesz z osią Y.
P-26413
killer625
Temat założony przez niniejszego użytkownika
» 2011-01-10 18:16:28
malan, ta kropka to po prostu znaczy ze powinno sie to znajdywac na srodku ekranu
Dejavu, problem polega na tym ze w zaleznosci od kompilatora/monitora rozmiar jest różny, nie ma może jakiejś metody aby figura była wyśrodkowana ? Plus ten ksztalt tego boku, naprawde nie wiem jak to zrobic szczegolnie ze zmniejszeniem i zwiekszeniem.
P-26414
DejaVu
» 2011-01-10 18:49:02
Uhm nie rozważaj tych przypadków, że rozmiar konsoli może być zmienny. W tym momencie musiałbyś pobierać szerokość konsoli i jej wysokość i wstawić te wymiary zamiast stałych 80 oraz 25. Poza tym zmiana rozmiaru ekranu = poważne komplikacje techniczne aby program Twój działał prawidłowo, np. co zrobisz gdy rozciągniesz konsolę na 180 kolumn, dojedziesz figurą do prawej krawędzi, a potem zmniejszysz rozmiar okna? Nie poradzisz sobie z takimi sytuacjami, więc lepiej ogranicz się do stałego rozmiaru okienka jeżeli nie chcesz się zakopać na amen ze swoim programem.
P-26415
pekfos
» 2011-01-10 19:50:51
jak chcesz mieć niezależne od rozmiarów to rozważ to:
C/C++
#include <windows.h>

//..

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;
jeżeli masz standardowo skonfigurowaną konsolę to wartości console_size_x i console_size_y to 80 i 25
P-26416
killer625
Temat założony przez niniejszego użytkownika
» 2011-01-10 20:09:06
wygląda to ciekawie. w które miejsce kodu powinienem to wrzucić ?
P-26417
DejaVu
» 2011-01-10 20:10:33
Uhm... a co Ci podpowiada Twoja intuicja?
P-26418
killer625
Temat założony przez niniejszego użytkownika
» 2011-01-10 20:23:43
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 = 8;
   
    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 = 80;
        int console_size_y = 25;
       
       
        _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;
}

zrobiłem to tak, kiedy figura dociera do krawedzi to zaczyna przechodzic na gore okna konsoli w pojedynczej linii.

czyli to samo co bez tego:
C/C++
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo( GetStdHandle( STD_OUTPUT_HANDLE ), & csbi );
int console_size_x = 80;
int console_size_y = 25;
P-26419
1 « 2 » 3 4 5 6 7
Poprzednia strona Strona 2 z 7 Następna strona