Advertisement
Guest User

Untitled

a guest
Jan 19th, 2018
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.96 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <conio.h>
  4. #include <Windows.h>
  5.  
  6. #define KEY_UP 72
  7. #define KEY_DOWN 80
  8. #define KEY_LEFT 75
  9. #define KEY_RIGHT 77
  10.  
  11. using namespace std;
  12.  
  13. void gotoxy(int x, int y);
  14. void HideCursor();
  15. void rysowanie(int &ASCII, int &a, int &x, int &y);
  16. void wczyt_dane(int &ASCII, int &a);
  17. void rozmiar_konsoli(int &columns, int &rows);
  18. void przeksztalcenia(int &x, int &y, int &a, int &znak);
  19. void przesuwanie(int &x, int &y);
  20.  
  21.  
  22. int main()
  23. {
  24. setlocale(LC_ALL, "");
  25.  
  26. int x, y;
  27. int znak;
  28. int a;
  29.  
  30. wczyt_dane(znak, a);
  31. rysowanie(znak, a, x , y );
  32. przesuwanie(x, y);
  33. przeksztalcenia(x, y, a, znak);
  34.  
  35.  
  36. _getch();
  37. return 0;
  38. }
  39.  
  40. // Funkcja gotoxy(int x, int y) ustawia kursor w punkcie (x,y) konsoli
  41. void gotoxy(int x, int y)
  42. {
  43. COORD c;
  44. c.X = x;
  45. c.Y = y;
  46. SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);
  47. }
  48.  
  49. //----------------------------------------------------------------------------
  50. void HideCursor()
  51. {
  52. ::HANDLE hConsoleOut = ::GetStdHandle(STD_OUTPUT_HANDLE);
  53. ::CONSOLE_CURSOR_INFO hCCI;
  54. ::GetConsoleCursorInfo(hConsoleOut, &hCCI);
  55. hCCI.bVisible = FALSE;
  56. ::SetConsoleCursorInfo(hConsoleOut, &hCCI);
  57. }
  58.  
  59. //-----------------------------------------------------------------------------
  60. void rysowanie(int &ASCII, int &a, int &x, int &y)
  61. {
  62. const int Esq = 27;
  63. int x1, y1;
  64. x = 0; y = 0;
  65. char klawisz;
  66. int wiersz, kolumna;
  67. x1 = x; y1 = y;
  68.  
  69.  
  70.  
  71.  
  72. do {
  73. system("cls");
  74.  
  75. rozmiar_konsoli(kolumna, wiersz);
  76.  
  77. if (a % 2 == 0)
  78. {
  79. if (x > kolumna - a / 2 - 1)
  80. x = kolumna - a / 2 - 1;
  81. }
  82. else
  83. {
  84. if (x > kolumna - a / 2 - 2)
  85. x = kolumna - a / 2 - 2;
  86. }
  87.  
  88. if (x < 0)
  89. x = 0;
  90.  
  91. if (y > wiersz - a )
  92. y = wiersz - a;
  93.  
  94. if (y < 0)
  95. y = 0;
  96.  
  97.  
  98. for (int i = 1; i <= a; i++)
  99. {
  100. x1 = x + (i <= a / 2 ? i : (a - i + 1));
  101. y1 = y + i - 1;
  102. gotoxy(x1, y1);
  103. cout << (char)ASCII;
  104. }
  105.  
  106.  
  107. HideCursor();
  108. klawisz = _getch();
  109.  
  110.  
  111. switch (klawisz)
  112. {
  113. // powiększenie z ograniczeniem do rozmiaru konsoli.
  114. // przy ograniczeniu do aktualnej szerokości konsoli wielkość figury jest pomniejszona x2 (taką szerokość zajmuje w kosnoli).
  115. // powiększam figurę o 2 dopóki szerekość jest mniejsza od szerokości konsoli.
  116. // 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.
  117. case '+': {
  118. if (a/2 < (a % 2 == 0 ? kolumna - 1 : kolumna - 2) && a < (a % 2 == 0 ? wiersz : wiersz -1)) //
  119. a = a+2;
  120. break; }
  121. // zmniejszenie z ograniczeniem.
  122. case '-': {
  123. if( a > 4 )
  124. a = a - 2;
  125. break; }
  126. case KEY_LEFT : { x--; break; } // przesuniecie w lewo
  127. case KEY_RIGHT : { x++; break; } // przesuniecie w prawo
  128. case KEY_UP : { y--; break; } // przesuniecie do gory
  129. case KEY_DOWN : { y++; break; } // przesuniecie do dolu
  130. case Esq: { break; } // wyjscie
  131. }
  132.  
  133. } while (klawisz != Esq);
  134.  
  135. }
  136.  
  137. //-----------------------------------------------------------------------------
  138. void wczyt_dane(int &ASCII, int &a)
  139. {
  140.  
  141. cout << "Podaj kod znaku ASCII do rysowania (od 33 do 126)" << endl;
  142. cin >> ASCII;
  143.  
  144. while (ASCII < 32 || ASCII > 126)
  145. {
  146. cout << "Podaj wartość ze wskazanego przedziału (od 33 do 126)" << endl;
  147. cin >> ASCII;
  148. system("cls");
  149. }
  150.  
  151. cout << "Podaj początkową wielkość figury: " << endl;
  152. cin >> a;
  153. cout << endl;
  154. system("cls");
  155.  
  156.  
  157. }
  158.  
  159. //-----------------------------------------------------------------------------
  160. void rozmiar_konsoli(int &columns, int &rows)
  161. {
  162. CONSOLE_SCREEN_BUFFER_INFO csbi;
  163.  
  164. GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
  165. columns = csbi.srWindow.Right - csbi.srWindow.Left + 1;
  166. rows = csbi.srWindow.Bottom - csbi.srWindow.Top + 1;
  167.  
  168. printf("columns: %d\n", columns);
  169. printf("rows: %d\n", rows);
  170. }
  171. void przeksztalcenia(int &x, int &y, int &a, int &znak)
  172. {
  173. char klawisz;
  174. int zmiana = 0;
  175. const int Esq = 27;
  176. int wiersz, kolumna;
  177.  
  178. cout << "zmienne x i y w przeksztalcenia(): " << x << ", " << y << endl;
  179. cout << "zmienne a i znak w przeksztalcenia(): " << a << ", " << znak << endl;
  180.  
  181. do {
  182. rozmiar_konsoli(kolumna, wiersz);
  183. rysowanie(znak, a, x, y);
  184. HideCursor();
  185. klawisz = _getch();
  186.  
  187. switch (klawisz)
  188. {
  189. // powiększenie z ograniczeniem do rozmiaru konsoli.
  190. // przy ograniczeniu do aktualnej szerokości konsoli wielkość figury jest pomniejszona x2 (taką szerokość zajmuje w kosnoli).
  191. // powiększam figurę o 2 dopóki szerekość jest mniejsza od szerokości konsoli.
  192. // 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.
  193. case '+': {
  194. if (a / 2 < (a % 2 == 0 ? kolumna - 1 : kolumna - 2) && a < (a % 2 == 0 ? wiersz : wiersz - 1)) //
  195. a = a + 2;
  196. break; }
  197. // zmniejszenie z ograniczeniem.
  198. case '-': {
  199. if (a > 4)
  200. a = a - 2;
  201. break; }
  202. case KEY_LEFT: { x--; break; } // przesuniecie w lewo
  203. case KEY_RIGHT: { x++; break; } // przesuniecie w prawo
  204. case KEY_UP: { y--; break; } // przesuniecie do gory
  205. case KEY_DOWN: { y++; break; } // przesuniecie do dolu
  206. case Esq: { break; } // wyjscie
  207. }
  208.  
  209.  
  210.  
  211.  
  212.  
  213. } while (klawisz != Esq);
  214.  
  215. }
  216. void przesuwanie(int &x, int &y)
  217. {
  218. char klawisz;
  219. const int Esq = 27;
  220.  
  221. cout << "zmienne x i y w przesuwanie(): " << x << ", " << y << endl;
  222.  
  223. do {
  224.  
  225. HideCursor();
  226. klawisz = _getch();
  227.  
  228. switch (klawisz)
  229. {
  230. case KEY_LEFT: { x--; break; } // przesuniecie w lewo
  231. case KEY_RIGHT: { x++; break; } // przesuniecie w prawo
  232. case KEY_UP: { y--; break; } // przesuniecie do gory
  233. case KEY_DOWN: { y++; break; } // przesuniecie do dolu
  234. case Esq: { break; } // wyjscie
  235. }
  236.  
  237.  
  238.  
  239. } while (klawisz != Esq);
  240. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement