Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <iostream>
- #include <conio.h>
- #include <Windows.h>
- #define KEY_UP 72
- #define KEY_DOWN 80
- #define KEY_LEFT 75
- #define KEY_RIGHT 77
- using namespace std;
- void gotoxy(int x, int y);
- void HideCursor();
- void rysowanie(int &ASCII, int &a, int &x, int &y);
- void wczyt_dane(int &ASCII, int &a);
- void rozmiar_konsoli(int &columns, int &rows);
- void przeksztalcenia(int &x, int &y, int &a, int &znak);
- void przesuwanie(int &x, int &y);
- int main()
- {
- setlocale(LC_ALL, "");
- int x, y;
- int znak;
- int a;
- wczyt_dane(znak, a);
- rysowanie(znak, a, x , y );
- przesuwanie(x, y);
- przeksztalcenia(x, y, a, znak);
- _getch();
- return 0;
- }
- // Funkcja gotoxy(int x, int y) ustawia kursor w punkcie (x,y) konsoli
- void gotoxy(int x, int y)
- {
- COORD c;
- c.X = x;
- c.Y = y;
- SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);
- }
- //----------------------------------------------------------------------------
- void HideCursor()
- {
- ::HANDLE hConsoleOut = ::GetStdHandle(STD_OUTPUT_HANDLE);
- ::CONSOLE_CURSOR_INFO hCCI;
- ::GetConsoleCursorInfo(hConsoleOut, &hCCI);
- hCCI.bVisible = FALSE;
- ::SetConsoleCursorInfo(hConsoleOut, &hCCI);
- }
- //-----------------------------------------------------------------------------
- void rysowanie(int &ASCII, int &a, int &x, int &y)
- {
- const int Esq = 27;
- int x1, y1;
- x = 0; y = 0;
- char klawisz;
- int wiersz, kolumna;
- x1 = x; y1 = y;
- do {
- system("cls");
- rozmiar_konsoli(kolumna, wiersz);
- if (a % 2 == 0)
- {
- if (x > kolumna - a / 2 - 1)
- x = kolumna - a / 2 - 1;
- }
- else
- {
- if (x > kolumna - a / 2 - 2)
- x = kolumna - a / 2 - 2;
- }
- if (x < 0)
- x = 0;
- if (y > wiersz - a )
- y = wiersz - a;
- if (y < 0)
- y = 0;
- for (int i = 1; i <= a; i++)
- {
- x1 = x + (i <= a / 2 ? i : (a - i + 1));
- y1 = y + i - 1;
- gotoxy(x1, y1);
- cout << (char)ASCII;
- }
- HideCursor();
- klawisz = _getch();
- switch (klawisz)
- {
- // powiększenie z ograniczeniem do rozmiaru konsoli.
- // przy ograniczeniu do aktualnej szerokości konsoli wielkość figury jest pomniejszona x2 (taką szerokość zajmuje w kosnoli).
- // powiększam figurę o 2 dopóki szerekość jest mniejsza od szerokości konsoli.
- // w zależności czy zadana wielkość figury jest parzysta, czy nie zmniejszam pobraną wielkość z konsoli (szerokość lub wysokość) o 1 lub 2, żeby figura nie "znikała" po zmianie rozmiarów konsoli.
- case '+': {
- if (a/2 < (a % 2 == 0 ? kolumna - 1 : kolumna - 2) && a < (a % 2 == 0 ? wiersz : wiersz -1)) //
- a = a+2;
- break; }
- // zmniejszenie z ograniczeniem.
- case '-': {
- if( a > 4 )
- a = a - 2;
- break; }
- case KEY_LEFT : { x--; break; } // przesuniecie w lewo
- case KEY_RIGHT : { x++; break; } // przesuniecie w prawo
- case KEY_UP : { y--; break; } // przesuniecie do gory
- case KEY_DOWN : { y++; break; } // przesuniecie do dolu
- case Esq: { break; } // wyjscie
- }
- } while (klawisz != Esq);
- }
- //-----------------------------------------------------------------------------
- void wczyt_dane(int &ASCII, int &a)
- {
- cout << "Podaj kod znaku ASCII do rysowania (od 33 do 126)" << endl;
- cin >> ASCII;
- while (ASCII < 32 || ASCII > 126)
- {
- cout << "Podaj wartość ze wskazanego przedziału (od 33 do 126)" << endl;
- cin >> ASCII;
- system("cls");
- }
- cout << "Podaj początkową wielkość figury: " << endl;
- cin >> a;
- cout << endl;
- system("cls");
- }
- //-----------------------------------------------------------------------------
- void rozmiar_konsoli(int &columns, int &rows)
- {
- CONSOLE_SCREEN_BUFFER_INFO csbi;
- GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
- columns = csbi.srWindow.Right - csbi.srWindow.Left + 1;
- rows = csbi.srWindow.Bottom - csbi.srWindow.Top + 1;
- printf("columns: %d\n", columns);
- printf("rows: %d\n", rows);
- }
- void przeksztalcenia(int &x, int &y, int &a, int &znak)
- {
- char klawisz;
- int zmiana = 0;
- const int Esq = 27;
- int wiersz, kolumna;
- cout << "zmienne x i y w przeksztalcenia(): " << x << ", " << y << endl;
- cout << "zmienne a i znak w przeksztalcenia(): " << a << ", " << znak << endl;
- do {
- rozmiar_konsoli(kolumna, wiersz);
- rysowanie(znak, a, x, y);
- HideCursor();
- klawisz = _getch();
- switch (klawisz)
- {
- // powiększenie z ograniczeniem do rozmiaru konsoli.
- // przy ograniczeniu do aktualnej szerokości konsoli wielkość figury jest pomniejszona x2 (taką szerokość zajmuje w kosnoli).
- // powiększam figurę o 2 dopóki szerekość jest mniejsza od szerokości konsoli.
- // w zależności czy zadana wielkość figury jest parzysta, czy nie zmniejszam pobraną wielkość z konsoli (szerokość lub wysokość) o 1 lub 2, żeby figura nie "znikała" po zmianie rozmiarów konsoli.
- case '+': {
- if (a / 2 < (a % 2 == 0 ? kolumna - 1 : kolumna - 2) && a < (a % 2 == 0 ? wiersz : wiersz - 1)) //
- a = a + 2;
- break; }
- // zmniejszenie z ograniczeniem.
- case '-': {
- if (a > 4)
- a = a - 2;
- break; }
- case KEY_LEFT: { x--; break; } // przesuniecie w lewo
- case KEY_RIGHT: { x++; break; } // przesuniecie w prawo
- case KEY_UP: { y--; break; } // przesuniecie do gory
- case KEY_DOWN: { y++; break; } // przesuniecie do dolu
- case Esq: { break; } // wyjscie
- }
- } while (klawisz != Esq);
- }
- void przesuwanie(int &x, int &y)
- {
- char klawisz;
- const int Esq = 27;
- cout << "zmienne x i y w przesuwanie(): " << x << ", " << y << endl;
- do {
- HideCursor();
- klawisz = _getch();
- switch (klawisz)
- {
- case KEY_LEFT: { x--; break; } // przesuniecie w lewo
- case KEY_RIGHT: { x++; break; } // przesuniecie w prawo
- case KEY_UP: { y--; break; } // przesuniecie do gory
- case KEY_DOWN: { y++; break; } // przesuniecie do dolu
- case Esq: { break; } // wyjscie
- }
- } while (klawisz != Esq);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement