Revane Temat założony przez niniejszego użytkownika |
Poruszanie strzalkami ascii » 2017-01-07 18:16:10 Witam, mam do napisania program który rysuje konkretny wzorek ASCII wybranym znakiem oraz żeby móc go przesuwać strzałkami i powiększać oraz pomniejszać do rozmiaru okna. Program działa, ale niestety nie tak jakbym chciał, ponieważ przesuwa tylko górną część wzorku oraz z niewiadomego mi powodu wgl nie działa opcja powiększania i pomniejszania. Niżej załączam cały kod w razie gdyby błąd znajdował się w innym miejscu. Są to moje początki więc proszę o wyrozumiałość oraz z góry dziękuje za pomoc :) #include "stdafx.h" #include <iostream> #include <cstdlib> #include <conio.h> #include "windows.h"
using namespace std;
const int GORA = 72, DOL = 80, LEWO = 75, PRAWO = 77, PLUS = 10, MINUS = 25;
void gotoxy( int x, int y ) { COORD c; c.X = x; c.Y = y; SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), c ); }
int wherex() { CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo( GetStdHandle( STD_OUTPUT_HANDLE ), & csbi ); return csbi.dwCursorPosition.X; }
int wherey() { CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo( GetStdHandle( STD_OUTPUT_HANDLE ), & csbi ); return csbi.dwCursorPosition.Y; }
void Wczytaj( size_t & wysokosc, size_t & szerokosc, char & znak ) { system( "cls" ); std::cout << "ZNAK : "; std::cin >> znak; std::cout << "SZEROKOSC = "; std::cin >> szerokosc; std::cout << "WYSOKOSC = "; std::cin >> wysokosc; std::cout << std::endl; }
void Rysuj( int x, int y, size_t & wysokosc, size_t & szerokosc, char & znak, float value ) { system( "cls" ); float scale =( float ) szerokosc /( float ) wysokosc; value += scale; for( x = 0; x < szerokosc; x++ ) std::cout << znak; std::cout << std::endl; for( gotoxy( x, y ), x = 1; x < wysokosc; x++ ) { for( y = 0; y < value - 1; y++ ) std::cout << " "; std::cout << znak << std::endl; value += scale; } for( x = 0; x < szerokosc; x++ ) std::cout << znak; std::cout << std::endl; gotoxy( 10, 25 ), cout << "+/-"; }
void Przesuwanie( size_t & wysokosc, size_t & szerokosc, float x, float y, char znak ) { int zmiana = 0, max = 23; char klawisz; float size =( float ) wysokosc &&( float ) szerokosc; do { klawisz = _getch(); switch( klawisz ) { case GORA: { y--; zmiana = 1; if( y < 1 ) { y++; zmiana = 0; } break; } case DOL: { y++; zmiana = 1; if( y > max -( size - 2 ) ) { y--; zmiana = 0; } break; } case LEWO: { x--; zmiana = 1; if( x < 1 ) { x++; zmiana = 0; } break; } case PRAWO: { x++; zmiana = 1; if( x > 80 - size ) { x--; zmiana = 0; } break; } case PLUS: { size++; zmiana = 1; if( size < 5 || size > max ) { size--; y--; zmiana = 0; } break; } case MINUS: { size--; zmiana = 1; if( size < 5 || size > max ) { size++; zmiana = 0; } break; } } if( zmiana ) { float value = 0.0f; Rysuj( x, y, wysokosc, szerokosc, znak, value ); zmiana = 0; } } while( klawisz != 27 ); }
int main() { int x = 1, y = 1; size_t wysokosc, szerokosc; char znak; float value = 0.0f; Wczytaj( wysokosc, szerokosc, znak ); Rysuj( x, y, wysokosc, szerokosc, znak, value ); _getch(); Przesuwanie( wysokosc, szerokosc, x, y, znak ); return 0; }
|
|
Revane Temat założony przez niniejszego użytkownika |
» 2017-01-08 20:02:59 To może w taki sposób będzie prościej. Jak zrobić żeby poruszać/pomniejszać/powiększać tą figurę :? void Wczytaj( size_t & wysokosc, size_t & szerokosc, char & znak ) { std::cout << "ZNAK : "; std::cin >> znak; std::cout << "SZEROKOSC = "; std::cin >> szerokosc; std::cout << "WYSOKOSC = "; std::cin >> wysokosc; std::cout << std::endl; }
void Rysuj( int x, int y, size_t & wysokosc, size_t & szerokosc, char & znak, float value ) { float scale =( float ) szerokosc /( float ) wysokosc; value += scale; for( int x = 0; x < szerokosc; x++ ) std::cout << znak; std::cout << std::endl; for( int x = 1; x < wysokosc; x++ ) { for( int y = 0; y < value - 1; y++ ) std::cout << " "; std::cout << znak << std::endl; value += scale; } for( int x = 0; x < szerokosc; x++ ) std::cout << znak; std::cout << std::endl; system( "PAUSE" ); }
int main() { int x = 1, y = 1; size_t wysokosc, szerokosc; char znak; float value = 0.0f; Wczytaj( wysokosc, szerokosc, znak ); Rysuj( x, y, wysokosc, szerokosc, znak, value ); _getch(); return 0; }
|
|
darko202 |
» 2017-01-09 13:03:38 1. zapoznaj się z techniką debugowania programu 2. nie modyfikuje się zmiennych wejściowych używając ich jako zmiennych do pętli for int main() { int x = 1, y = 1; ... Rysuj( x, y, wysokosc, szerokosc, znak, value ); ... }
void Rysuj( int x, int y, size_t & wysokosc, size_t & szerokosc, char & znak, float value ) { ... for( x = 0; x < szerokosc; x++ ) ... for( y = 0; y < value - 1; y++ ) ... for( gotoxy( x, y ), x = 1; x < wysokosc; x++ ) ...
3. w drugiej propozycji kodu jest podobnie, poza tym że utworzyłeś jeszcze lokalne x i y |
|
« 1 » |