Advertisement
Guest User

Untitled

a guest
Oct 21st, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.07 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <conio.h> //_kbhit(), _getch
  4. #include <ctime> //time()
  5. #include <vector>
  6.  
  7. using namespace std;
  8.  
  9. //felsorolás típus
  10. const int SZELESSEG = 20;
  11. const int MAGASSAG = 20;
  12.  
  13. struct koordinata
  14. {
  15. int X;
  16. int Y;
  17. };
  18. enum Irany {BAL,FEL,JOBB,LE, STOP};
  19. koordinata kigyoFej;
  20. Irany kigyoIrany;
  21. koordinata kaja;
  22. vector<koordinata> kigyoTest;
  23.  
  24. koordinata getKajaKoordinata()
  25. {
  26. koordinata k;
  27.  
  28. do
  29. {
  30. k.X = rand() % SZELESSEG;
  31. k.Y = rand() % MAGASSAG;
  32.  
  33. if(k.X != kigyoFej.X && k.Y != kigyoFej.Y)
  34. break;
  35. }
  36. while(1);
  37.  
  38. return k;
  39. }
  40.  
  41. void szamol()
  42. {
  43. //A kigyoirany tartalma alapján elmozdítom a kígyó fejét a koordináta rendszerben
  44. switch(kigyoIrany)
  45. {
  46. case BAL:
  47. kigyoFej.X--;
  48. break;
  49. case FEL:
  50. kigyoFej.Y--;
  51. break;
  52. case JOBB:
  53. kigyoFej.X++;
  54. break;
  55. case LE:
  56. kigyoFej.Y++;
  57. break;
  58. default:
  59. break;
  60. }
  61. if(kigyoFej.X == kaja.X && kigyoFej.Y == kaja.Y)
  62. {
  63. koordinata k;
  64. k.X = kigyoFej.X;
  65. k.Y = kigyoFej.Y;
  66. kigyoTest.insert(kigyoTest.begin(),k);
  67. kaja = getKajaKoordinata();
  68. }
  69. }
  70.  
  71. void beolvas()
  72. {
  73. //cin-t kell használni?
  74. //nem jó, mivel csak akkor lépek, ha van bill.leütés
  75. //HELYETTE: detektáljuk, van-e bill.leütés, ha van, akkor azzal lépünk tovább
  76. //_kbhit(): detektálja, hogy van-e leütés, int értékkel tér vissza 0: nem volt, bármi más: volt.
  77. if(_kbhit())
  78. {
  79. //biztosan volt leutes, meg kell valtoztatni a mozgas iranyt.
  80. //_getch(): visszakerem a leutott bill.-t
  81. switch(_getch())
  82. {
  83. case 'a':
  84. if(kigyoIrany != JOBB)
  85. kigyoIrany = BAL;
  86. break;
  87. case 'w':
  88. if(kigyoIrany != LE)
  89. kigyoIrany = FEL;
  90. break;
  91. case 'd':
  92. if(kigyoIrany != BAL)
  93. kigyoIrany = JOBB;
  94. break;
  95. case 's':
  96. if(kigyoIrany != FEL)
  97. kigyoIrany = LE;
  98. break;
  99. case 'x':
  100. break;
  101. }
  102. }
  103. }
  104.  
  105.  
  106. void palyaKirajzol()
  107. {
  108. //kerenyo torles: háttérben az operációs rendszer utasítás készletét felhasználva hajtom végre
  109. //Máshogyan törlünk Unix és Windows alatt (unix: clear, windows: cls) windows alapú futtató környezet esetén definiálva lesz egy _WIN32 konstans érték.
  110. #ifdef _WIN32
  111. system("cls");
  112. #else
  113. system("clear");
  114. #endif // _WIN32
  115.  
  116. //Balfelső sarokban áll a kurzor
  117. //A felso szegely kirajzolása
  118. cout << "+";
  119. for(int i=0; i<SZELESSEG; i++)
  120. cout << "-";
  121. cout << "+" << endl;
  122. //palya kirajzolasa
  123. for(int i= 0; i < MAGASSAG; i++)
  124. {
  125. cout << "|";
  126. for(int j=0; j<SZELESSEG; j++)
  127. {
  128. if(kigyoFej.X == j && kigyoFej.Y == i)
  129. cout << "O";
  130. else if(kaja.X == j && kaja.Y == i)
  131. cout << "#";
  132. else
  133. cout << " ";
  134. }
  135. cout << "|" <<endl;
  136. }
  137. //Also szegely kirajzolasa
  138. cout << "+";
  139. for(int i=0; i<SZELESSEG; i++)
  140. cout << "-";
  141. cout << "+" << endl;
  142.  
  143. if(kigyoFej.X <= 0)
  144. kigyoFej.X = SZELESSEG+kigyoFej.X;
  145. else if(kigyoFej.X >= SZELESSEG)
  146. kigyoFej.X = kigyoFej.X - SZELESSEG;
  147.  
  148. if(kigyoFej.Y <= 0)
  149. kigyoFej.Y = MAGASSAG + kigyoFej.Y;
  150. else if(kigyoFej.Y >= MAGASSAG)
  151. kigyoFej.Y = kigyoFej.Y - MAGASSAG;
  152.  
  153.  
  154. }
  155.  
  156.  
  157.  
  158.  
  159. int main()
  160. {
  161. //inicializálom a random számokat
  162. srand(time(NULL));
  163. kaja = getKajaKoordinata();
  164. int lefoglalni = SZELESSEG*MAGASSAG / 2;
  165. kigyoTest.reserve(lefoglalni);
  166.  
  167. kigyoIrany = STOP;
  168. kigyoFej.X = SZELESSEG/2;
  169. kigyoFej.Y = MAGASSAG/2;
  170. while(true)
  171. {
  172. palyaKirajzol();
  173. beolvas();
  174. szamol();
  175. }
  176. return 0;
  177. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement