Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.85 KB | None | 0 0
  1. // projekt.cpp : Defines the entry point for the console application.
  2. //Napisz program rysowania znakiem ASCII figury o kształcie "Z"
  3. //Program powinien umożliwić:
  4. //-wybór znaku kodu ASCII
  5. //-wczytanie początkowych danych figury
  6. //-przesuwanie figury oraz jej pomniejszanie
  7. //-ograniczenie przesuwania i rozmiarów figury do obszaru ekranu
  8.  
  9. #include "stdafx.h"
  10. #include <cstdlib>
  11. #include <iostream>
  12. #include <conio.h>
  13. #include <cstdlib>
  14. #include <Windows.h>
  15.  
  16. using namespace std;
  17.  
  18. //deklaracje funkcji
  19. void gotoxy(int, int);                  //funkcja badajaca polozenie kursora
  20. int wherex();
  21. int wherey();
  22. void Intro();                           //Wstep
  23. void WysSzerKonsoli(int, int);          //Funkcja ustawiajaca poczatkowy rozmiar okna konsoli
  24. void PobierzDane(int &, char &, int &); //Funkcja pobierajaca rozmiar figury, kod znaku ASCII w jakim bedzie rysowana
  25. void Rysuj(int &, char &, int, int);
  26. void przesun();
  27. void rozmiar(int &, int &, int &, int);
  28.  
  29.  
  30. int _tmain(int argc, _TCHAR* argv[])
  31. {
  32.     WysSzerKonsoli(100, 50);
  33.     Intro();
  34.     int wysokoscfigury = 50;
  35.     int szerokoscfigury = 25;
  36.     int szerokosc_okna = 100;
  37.     int wysokosc_okna = 50;
  38.     const int Esq = 27;
  39.     int ascii, size=50, x = size, y = size;
  40.     char znak, wybor;
  41.     PobierzDane(ascii, znak, size);
  42.     Rysuj(size, znak, wysokoscfigury, szerokoscfigury);
  43.     rozmiar(x, y, size, wybor);
  44.     _getch();
  45.     return 0;
  46. }
  47. void gotoxy(int x, int y)
  48. {
  49.     COORD c;
  50.     c.X = x;
  51.     c.Y = y;
  52.     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);
  53. }
  54. int wherex()
  55. {
  56.  
  57.     CONSOLE_SCREEN_BUFFER_INFO csbi;
  58.     GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
  59.     return csbi.dwCursorPosition.X;
  60. }
  61. int wherey()
  62. {
  63.     CONSOLE_SCREEN_BUFFER_INFO csbi;
  64.     GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
  65.     return csbi.dwCursorPosition.Y;
  66. }
  67. void Intro()
  68. {
  69.     cout << "Program umozliwia rysowanie figury 'Z' przy pomocy podanego znaku ASCII\no wybranym rozmiarze." << endl << endl;
  70.     cout << "Dodatkowo figura moze byc przesuwana za pomoca strzalek na klawiaturze\noraz zmniejszana i powiekszana znakami - i +." << endl << endl;
  71.     cout << "Klawisz ESC konczy dzialanie programu." << endl << endl;
  72. }
  73. void WysSzerKonsoli(int szerokosc_okna, int wysokosc_okna) //funkcja ustawiajaca poczatkowa szerokosc i wysokosc okna konsoli
  74. {
  75.     _COORD coord;
  76.     coord.X = szerokosc_okna;
  77.     coord.Y = wysokosc_okna;
  78.  
  79.     _SMALL_RECT Rect;
  80.     Rect.Top = 0;
  81.     Rect.Left = 0;
  82.     Rect.Bottom = wysokosc_okna - 1;
  83.     Rect.Right = szerokosc_okna - 1;
  84.  
  85.     HANDLE Handle = GetStdHandle(STD_OUTPUT_HANDLE);      
  86.     SetConsoleScreenBufferSize(Handle, coord);            
  87.     SetConsoleWindowInfo(Handle, TRUE, &Rect);            
  88. }
  89. void PobierzDane(int &ascii, char &znak, int &size)
  90. {
  91.     do
  92.     {
  93.         cout << "Podaj kod znaku ASCII (33-127): ";
  94.         cin >> ascii;
  95.         if (ascii<33 || ascii>127)
  96.         {
  97.             cout << "Liczba nie znajduje sie w zadanym zakresie.\nNacisnij dowolny klawisz aby wpisac ponownie";
  98.             _getch();
  99.         }
  100.     } while (ascii<33 || ascii>127);
  101.  
  102.     znak = (char)ascii;//petla odpowiedzialna za ustawienie rozmiaru poczatkowego z ograniczeniem do wielkosci ekranu
  103.  
  104.     do
  105.     {
  106.         cout << "Podaj rozmiar poczatkowy z zakresu 2-20: ";
  107.         cin >> size;
  108.         if (size<2 || size>20)
  109.         {
  110.             cout << "Liczba nie znajduje sie w zadanym zakresie.\nNacisnij dowolny klawisz aby wpisac ponownie";
  111.             _getch();
  112.             system("cls");
  113.         }
  114.     } while (size<2 || size>20);
  115.  
  116.     system("cls");
  117. }
  118.  
  119. void Rysuj(int & size, char & znakascii, int wysokoscfigury, int szerokoscfigury)
  120. {
  121.     system("cls");
  122.     int i, x, y;
  123.     int skos = size;
  124.     for (i = 0, x = wysokoscfigury - skos / 2, y = szerokoscfigury + skos / 2; i <= size; i++, x++)//rysowanie poziomego ramienia
  125.     {
  126.         gotoxy(x, y);
  127.         cout << znakascii;
  128.     }
  129.     for (i = 0, x = wysokoscfigury, y = szerokoscfigury; i <= skos/2; i++, x++, y--)//rysowanie skosnego ramienia
  130.     {
  131.         gotoxy(x, y);
  132.         cout << znakascii;
  133.     }
  134.     for (i = 0, x = wysokoscfigury, y = szerokoscfigury; i <= skos/2; i++, x--, y++)//rysowanie skosnego ramienia
  135.     {
  136.         gotoxy(x, y);
  137.         cout << znakascii;
  138.     }
  139.  
  140.     for (i = 0, x = wysokoscfigury + skos/2, y = szerokoscfigury - skos/2; i<=size; i++, x--)//rysowanie poziomego ramienia
  141.     {
  142.         gotoxy(x, y);
  143.         cout << znakascii;
  144.     }
  145.  
  146.  
  147. }/*void przesun()
  148. {
  149.     int wysokoscfigury = 50;
  150.     int szerokoscfigury = 25;
  151.     int size = 50;
  152.     int szerokosc=size, wiersz=25, kolumna=100;
  153.    
  154.     char znak;
  155.  
  156.     Rysuj(size, znak, wysokoscfigury, szerokoscfigury);
  157.     while ((znak = _getch()) != 27)     //do momentu wcisniecia ESC (27 w ASCII) dziala petla, ESC konczy program
  158.     {
  159.         switch (znak)
  160.         {
  161.         /*case 77: //przesuwanie w prawo
  162.             wysokoscfigury++;
  163.             if (wysokoscfigury >wiersz)
  164.             {
  165.                 wysokoscfigury = wiersz;
  166.  
  167.             }
  168.             break;
  169.         case 75: // przesuwanie w lewo
  170.             wysokoscfigury--;
  171.             if (wysokoscfigury <szerokosc / 2)
  172.             {
  173.                 wysokoscfigury = szerokosc / 2;
  174.             }
  175.             break;
  176.         case 72:  //przesuwa w gore
  177.             szerokoscfigury--;
  178.             if (szerokoscfigury < szerokosc + szerokosc / 2)
  179.             {
  180.                 szerokoscfigury = szerokosc + szerokosc / 2;
  181.             }
  182.             break;
  183.         case 80:  //przesuwanie w dol
  184.             szerokoscfigury++;
  185.             if (szerokoscfigury > kolumna)
  186.             {
  187.                 szerokoscfigury = kolumna;
  188.             }
  189.             break;
  190.         case 43:szerokosc++;    //powoduje powiekszenie figury za pomoca +
  191.             if (wysokoscfigury - (szerokosc + szerokosc / 2) <= 0 || wysokoscfigury - (szerokosc + szerokosc / 2) >= wiersze)//ograniczenie powiekszania figury
  192.             {
  193.                 szerokosc--;
  194.             }
  195.             break;
  196.         case 45:szerokosc--;    //powoduje zmniejszenie figury za pomoca -
  197.             if (szerokosc <= 1)
  198.             {
  199.                 szerokosc = 1;  //do wielkosci szerokosc =1
  200.             }
  201.             break;
  202.         }
  203.         Rysuj(size, znak, wysokoscfigury, szerokoscfigury);
  204.  
  205.     }
  206.     system("pause");
  207. }*/
  208. void rozmiar(int &x, int &y, int &size, int wybor)
  209. {
  210.     int wybor = 0;
  211.     if (wybor == 43 && size<20) // ASCII 43 = znak "+"
  212.         size++; // Zwiekszamy rozmiar o 1
  213.     else if (wybor == 45 && size>2) // ASCII 45 = znak "-"
  214.         size--; // Zmniejszamy rozmiar o 1
  215. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement