Advertisement
Guest User

Untitled

a guest
Jan 18th, 2020
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.60 KB | None | 0 0
  1.  
  2.  
  3.  
  4.  
  5. #include <iostream>
  6. #include <windows.h>
  7. #include "conio.h"
  8.  
  9. using namespace std;
  10.  
  11. void czytaj_dane(int &rozmiar, char &znak); //funkcja wczytujaca dane od użytkownika
  12. void gotoxy(int x, int y); // funkcja przerunięcia elementu
  13. void rysuj(int x, int y, int rozmiar, char znak); // funkcja rysująca figurę
  14. void przesun(int x, int y, int rozmiar, char znak); //funkcja odczytująca kierunek przesunięcia
  15. void HideCursor(); //ukrycie kursora
  16. void SetWindow(int Width, int Height); // funcka ustawiająca rozmiar okna
  17. void poczatek(); // funkcja wyświetlająca informacje początkowe
  18.  
  19. int main(){
  20. int rozmiar = 0; // deklaracja zmiennej rozmaru
  21. char znak; // deklaracja zmiennej znaku ktorym będzie rysowana figura
  22. int x = 60; // ustawienie środka dla x
  23. int y = 8; // ustawienie środka dla y
  24.  
  25.  
  26. poczatek();
  27. czytaj_dane(rozmiar, znak);
  28. SetWindow(124,35); //ustawienie wielkości okna
  29. gotoxy(x, y);
  30. HideCursor();
  31. rysuj(x, y, rozmiar, znak);
  32. przesun(x, y, rozmiar, znak);
  33. }
  34.  
  35. //================================================================================================//
  36. void czytaj_dane(int &rozmiar, char &znak){
  37.  
  38. system("CLS");
  39.  
  40. cout << "Podaj rozmiar początkowy obiektu (1-14)" << endl;
  41. do {
  42. while(!(cin>>rozmiar)){ //dopóki strumień jest w stanie błędu -> dopóki podawane są błędne dane
  43.  
  44. cout << "Proszę podać wartość liczbową w zakresie 1-14" << endl;
  45. cin.clear(); //kasowanie flagi błędudu strumienia
  46. cin.sync(); //kasowanie zbędnychh znaków z bufora
  47. }
  48. if(rozmiar <= 0 || rozmiar > 14){
  49. cout << "Rozmiar nie moze być mniejszy niz 1, ani większy niz 14" << endl;
  50. }
  51. } while(rozmiar <= 0 || rozmiar > 14);
  52.  
  53. cout << "Podaj znak"<< endl;
  54. cin >> znak;
  55. }
  56.  
  57. void gotoxy(int x, int y){
  58. COORD c;
  59. c.X = x;
  60. c.Y = y;
  61. SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);
  62. }
  63.  
  64. void rysuj(int x, int y, int rozmiar, char znak){
  65. int x1 = x;
  66. int y1 = y;
  67. int rozmiar1 = rozmiar;
  68.  
  69. system("cls");
  70. gotoxy(x, y); // Ustawienie punktu zaczepienia
  71.  
  72. for (int i = 0; i<rozmiar; i++){ //rysowanie gornej czeęści figury
  73. gotoxy(x1, y1);
  74. x1++;
  75. y1++;
  76. cout << znak << endl;
  77. }
  78. for (int i = 0; i<rozmiar + 1; i++){ //rysowanie dolnej części figury
  79. gotoxy(x1, y1);
  80. x1--;
  81. y1++;
  82. cout << znak << endl;
  83. }
  84. }
  85. void przesun(int x, int y, int rozmiar, char znak){ //definicja funkcji odpowiedzialna za ruch figory
  86.  
  87. int rozmiar1 = rozmiar;
  88. int x1 = x;
  89. int y1 = y;
  90.  
  91.  
  92. char klawisz;
  93. do {
  94. gotoxy(0,0);
  95. cout << "Klawisz Esc kokończy pracę programu";
  96.  
  97. rysuj(x1, y1, rozmiar1, znak);
  98.  
  99. //Ograniczenia ekranu
  100. int xmin = rozmiar1 + 1;
  101. int ymin = 1;
  102. int xmax = 123;
  103. int ymax = 33 - (rozmiar1*2);
  104.  
  105.  
  106. klawisz = _getch();
  107. switch (klawisz) {
  108. case '+' :{ //zwiększanie rozmiaru figory
  109. if(rozmiar1 < 14){
  110. rozmiar1++;
  111. }
  112. break;
  113. }
  114. case '-' :{ //zmniejszanie rozmiaru figory
  115. if(rozmiar1 > 1){
  116. rozmiar1--;
  117. }
  118. break;
  119. }
  120. case 77:{ // Przesunięcie w prawo
  121. if(x1 < xmax){
  122. x1++;
  123. }
  124. break;
  125. }
  126. case 75:{ // Przesunięcie w lewo
  127. if(x1 >= xmin){
  128. x1--;
  129. }
  130. break;
  131. }
  132. case 72:{ // Przesunięcie w gore
  133. if(y1 >= ymin){
  134. y1--;
  135. }
  136. break;
  137. }
  138. case 80:{ // Przesunięcie w doĹ‚
  139. if(ymax >= y1){
  140. y1++;
  141. }
  142. break;
  143. }
  144. }
  145.  
  146. } while(klawisz != 27); //zakończenie pracy programu przez klawisz esc
  147. }
  148.  
  149. void HideCursor(){ //definicja funkcji na ukrycie kursora
  150.  
  151. ::HANDLE hConsoleOut = ::GetStdHandle(STD_OUTPUT_HANDLE);
  152. ::CONSOLE_CURSOR_INFO hCCI;
  153. ::GetConsoleCursorInfo(hConsoleOut, &hCCI);
  154. hCCI.bVisible = FALSE;
  155. ::SetConsoleCursorInfo(hConsoleOut, &hCCI);
  156. }
  157.  
  158. void SetWindow(int Width, int Height){ // definicja funkcji ustawienia rozmiaru okna
  159. _COORD coord;
  160. coord.X = Width;
  161. coord.Y = Height;
  162.  
  163. _SMALL_RECT Rect;
  164. Rect.Top = 0;
  165. Rect.Left = 0;
  166. Rect.Bottom = Height - 1;
  167. Rect.Right = Width - 1;
  168.  
  169. HANDLE Handle = GetStdHandle(STD_OUTPUT_HANDLE); // Hak
  170. SetConsoleScreenBufferSize(Handle, coord); // Ustawienie rozmiaru bufora
  171. SetConsoleWindowInfo(Handle, TRUE, &Rect); // Ustawienie rozmiaru okna
  172. }
  173.  
  174. void poczatek(){ // definicja funkcji ekranu poczatkowego
  175.  
  176. cout << endl << endl << endl;
  177. cout << " Napisz program rysowania znakiem ASCII poniższej figury. Program powinien umożliwiał" << endl;
  178. cout << " -wybĂłr znaku kodu ASCII;" << endl;
  179. cout << " -wczytanie początkowych rozmiarów figury;" << endl;
  180. cout << " -zmianą wielkości figury klawiszami +˛ i -" << endl;
  181. cout << " -przesuwanie figury za pomocą kursorów “;" << endl;
  182. cout << " -ograniczenie przesuwania i rozmiarów figury do obszaru ekranu;" << endl;
  183. cout << endl << endl << endl;
  184. cout << " *" << endl;
  185. cout << " *" << endl;
  186. cout << " *" << endl;
  187. cout << " *" << endl;
  188. cout << " *" << endl;
  189. cout << " *" << endl;
  190. cout << " *" << endl;
  191. cout << " *" << endl;
  192. cout << " *" << endl;
  193. cout << endl << endl << "Sławomir Pluciński" << endl;
  194. cout << endl << endl << "Kliknij dowolny klawisz" << endl;
  195.  
  196. _getch();
  197. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement