Advertisement
Guest User

Untitled

a guest
Jan 20th, 2020
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.36 KB | None | 0 0
  1.  
  2. #include <iostream>
  3. #include <windows.h>
  4. #include "conio.h"
  5.  
  6.  
  7. using namespace std;
  8.  
  9. void gotoxy(int x, int y);
  10.  
  11. void rysowanie(int x, int y, int rozmiar, char znak);
  12. void przenie(int x, int y, int rozmiar, char znak);
  13. void HideCursor();
  14. void start();
  15. void WindowSize(int Width, int Height);
  16. void wczytywanie(int &rozmiar, char &znak);
  17. int main()
  18. {
  19. int rozmiar = 0; // deklaracja zmiennej rozmaru
  20. char znak; // deklaracja zmiennej znaku ktorym bêdzie rysowana figura
  21. int x = 60; // ustawienie œrodka dla x
  22. int y = 8; // ustawienie œrodka dla y
  23.  
  24. WindowSize(90,35);
  25. start();
  26. wczytywanie(rozmiar,znak);
  27.  
  28. gotoxy(x, y);
  29. HideCursor();
  30. rysowanie(x, y, rozmiar, znak);
  31. przenie(x, y, rozmiar, znak);
  32. }
  33.  
  34. void wczytywanie(int &rozmiar, char &znak) {
  35. system("CLS");
  36.  
  37. cout << "Podaj dlugosc ramienia X-a, z przedzialu 1-9 i zatwierdz enterem \n";
  38. do{
  39. while (!( cin >> rozmiar))
  40. {
  41. cin.clear();
  42. cin.sync();
  43. }
  44. if (rozmiar <= 0 || rozmiar > 10)
  45. {
  46. cout << "Podana dlugosc jest niewlasciwa \n";
  47. cout << "Prosze podac wartosci liczbowe z zakresu 1-9 i zatwierdzic enterem \n";
  48. cin >> rozmiar;
  49. }
  50. }
  51. while (rozmiar <= 0 || rozmiar > 10);
  52. cout << "Wybierz dowolny znak z klawiatury, ktorym ma zostac narysowany X i zatwierdz enterem\n";
  53. cin >> znak;
  54. }
  55.  
  56. void HideCursor(){ //definicja funkcji na ukrycie kursora
  57.  
  58. ::HANDLE hConsoleOut = ::GetStdHandle(STD_OUTPUT_HANDLE);
  59. ::CONSOLE_CURSOR_INFO hCCI;
  60. ::GetConsoleCursorInfo(hConsoleOut, &hCCI);
  61. hCCI.bVisible = FALSE;
  62. ::SetConsoleCursorInfo(hConsoleOut, &hCCI);
  63. }
  64.  
  65. void WindowSize(int Width, int Height){ // definicja funkcji ustawienia rozmiaru okna
  66. _COORD coord;
  67. coord.X = Width;
  68. coord.Y = Height;
  69.  
  70. _SMALL_RECT Rect;
  71. Rect.Top = 1;
  72. Rect.Left = 0;
  73. Rect.Bottom = Height - 1;
  74. Rect.Right = Width - 1;
  75.  
  76. HANDLE Handle = GetStdHandle(STD_OUTPUT_HANDLE); // Hak
  77. SetConsoleScreenBufferSize(Handle, coord); // Ustawienie rozmiaru bufora
  78. SetConsoleWindowInfo(Handle, TRUE, &Rect); // Ustawienie rozmiaru okna
  79. }
  80. void gotoxy(int x, int y) //definicja funkcji ustawiającej kursor
  81. {
  82. COORD c;
  83. c.X = x;
  84. c.Y = y;
  85. SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);
  86. }
  87.  
  88. void przenie(int x, int y, int rozm, char zn) //definicja funkcji odpowiadajacej za zmiane rozmiaru X-a i zmieniajacej jej polozenie
  89. {
  90. int rozm1= rozm;
  91. int x1= x;
  92. int y1= y;
  93. char p;
  94.  
  95. do
  96. {
  97. gotoxy(0, 0); //punkt zaczepienia
  98. rysowanie(x1, y1, rozm1, zn);
  99. int xmax = 123-(2*rozm1);
  100. int xmin = 1;
  101. int ymin = 1+(2*rozm1);
  102. int ymax = 30;
  103. p = _getch();
  104.  
  105. switch(p)
  106. {
  107. case 75: //strzalka w lewo
  108. {
  109. if( x1 >= xmin)
  110. {
  111. x1--;
  112. }
  113. break;
  114. }
  115. case 77: //strzalka w prawo
  116. {
  117. if( x1 < xmax)
  118. {
  119. x1++;
  120. }
  121. break;
  122. }
  123. case 72: //strzalka w gore
  124. {
  125. if( y1 >= ymin)
  126. {
  127. y1--;
  128. }
  129. break;
  130. }
  131. case 80: //strzalka w dól
  132. {
  133. if( ymax >= y1)
  134. {
  135. y1++;
  136. }
  137. break;
  138. }
  139. case '+': //powiekszenie
  140. {
  141. if( rozm1 < 10)
  142. {
  143. rozm1++;
  144. }
  145. break;
  146. }
  147. case '-': //zmiejszenie
  148. {
  149. if( rozm1 > 1)
  150. {
  151. rozm1--;
  152. }
  153. break;
  154. }
  155.  
  156. }
  157.  
  158. }while(p != 27);
  159.  
  160. }
  161. void start(){
  162. cout << " Napisz program rysowania znakiem ASCII poniższej figury chujem." << endl;
  163. cout << "---------------\n";
  164. cout << "| |\n";
  165. cout << "| * * |\n";
  166. cout << "| * * |\n";
  167. cout << "| ** |\n";
  168. cout << "| * * |\n";
  169. cout << "| * * |\n";
  170. cout << "| |\n";
  171. cout << "---------------\n";
  172. cout << " Program powinien umożliwić: "<< endl;
  173. cout << "− wybór znaku kodu ASCII;" << endl;
  174. cout << "− wczytanie początkowych rozmiarów figury;" << endl;
  175. cout << "− przesuwanie figury klawiszami ←, →, ↑, ↓;"<< endl;
  176. cout << "− powiększanie oraz zmniejszanie rozmiaru figury za pomocą klawiszy + i -;"<< endl;
  177. cout << "− ograniczenie przesuwania i rozmiarów figury do obszaru ekranu;"<< endl;
  178. _getch();
  179. }
  180.  
  181. void rysowanie(int x, int y, int rozmiar, char znak){
  182. int x1 = x;
  183. int y1 = y;
  184. int y2=y1;
  185. int rozmiar1 = rozmiar;
  186.  
  187.  
  188. system("cls");
  189. gotoxy(x, y); // Ustawienie punktu zaczepienia
  190.  
  191.  
  192.  
  193. for (int i=0; i<rozmiar; i++) // od lewego gornego
  194. {
  195. gotoxy(x1, y1);
  196. if (i==0) {
  197. cout << "o";}
  198. else {
  199. }
  200. x1++;
  201. y1++;
  202. cout << znak;
  203.  
  204. }
  205.  
  206. for (int i = 0; i<rozmiar; i++){ //rysowanie gornej czeêœci figury
  207. gotoxy(x1, y2);
  208. x1--;
  209. y2++;
  210. cout << znak << endl;
  211. } }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement