malan |
» 2011-01-10 16:39:24 Tak dla pewności- tej niebieskiej kulki na środku nie musisz rysować? |
|
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:
if( x - szerokosc_figury > 80 ) x = 80 - szerokosc_figury;
if( x < 1 ) x = 1;
Analogicznie postępujesz z osią Y. |
|
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. |
|
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. |
|
pekfos |
» 2011-01-10 19:50:51 jak chcesz mieć niezależne od rozmiarów to rozważ to: #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 |
|
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ć ? |
|
DejaVu |
» 2011-01-10 20:10:33 Uhm... a co Ci podpowiada Twoja intuicja? |
|
killer625 Temat założony przez niniejszego użytkownika |
» 2011-01-10 20:23:43 #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++ ) cout << a; for( int i = 1; i <= bok - 2; i++ ) { y1++; x1 = x + bok - 2; gotoxy( x1, y1 ); cout << a; x1 = x; } y1++; gotoxy( x1, y1 ); for( int i = 1; i <= bok; i++ ) cout << a; _setcursortype( _NOCURSOR ); klawisz = getch(); switch( klawisz ) { case '+': { bok = bok + 2; x--; y--; break; } case '-': { bok = bok - 2; x++; y++; break; } case 75: { x--; break; } case 77: { x++; break; } case 72: { y--; break; } case 80: { y++; break; } case Esq: { break; } } } 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: CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo( GetStdHandle( STD_OUTPUT_HANDLE ), & csbi ); int console_size_x = 80; int console_size_y = 25;
|
|
1 « 2 » 3 4 5 6 7 |