Advertisement
Guest User

Untitled

a guest
Nov 28th, 2014
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.53 KB | None | 0 0
  1.  
  2.  
  3. #include <ncurses.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6.  
  7. #define WIDTH 20
  8. #define HEIGHT 23
  9.  
  10. WINDOW *TetrisSCR;
  11. int Points = 0, RozmiarKlocka = 0, PozycjaKlockaKolumna = 0, PozycjaKlockaWiersz = 0;
  12. bool Przegrales = FALSE, KlocekPoziomo = TRUE;
  13.  
  14. void TetrisSCR_init(void)
  15. {
  16. curs_set(0);
  17. noecho();
  18. TetrisSCR = newwin(HEIGHT, WIDTH, 1, 1);
  19. box(TetrisSCR, ACS_VLINE, ACS_HLINE);
  20. nodelay(TetrisSCR, TRUE);
  21. refresh();
  22. wrefresh(TetrisSCR);
  23. }
  24.  
  25. void Wyswietl_Plansze(int (*Plansza)[WIDTH])
  26. {
  27. int i = 0, j = 0;
  28. for(i = 2; i < WIDTH; i++)
  29. {
  30. for(j = 2; j < WIDTH; j++)
  31. {
  32. if(Plansza[i][j] == 0)
  33. mvprintw(i, j, " ");
  34. else if(Plansza[i][j] == 1)
  35. mvprintw(i, j, "*");
  36. refresh();
  37. wrefresh(TetrisSCR);
  38. }
  39. }
  40. }
  41.  
  42.  
  43.  
  44. void NowyKlocek(int (*Plansza)[WIDTH])
  45. {
  46. int i = 0;
  47. RozmiarKlocka = rand() % 5+2;
  48. KlocekPoziomo = rand() % 2;
  49. if(KlocekPoziomo)
  50. PozycjaKlockaKolumna = (WIDTH-RozmiarKlocka+1)/2;
  51. else
  52. PozycjaKlockaKolumna = WIDTH/2;
  53. PozycjaKlockaWiersz = 0;
  54.  
  55. if(Plansza[PozycjaKlockaWiersz][PozycjaKlockaKolumna] == 1)
  56. {
  57. Przegrales = TRUE;
  58. clear();
  59. start_color();
  60. init_pair(1, COLOR_RED, COLOR_BLACK);
  61. attron(COLOR_PAIR(1));
  62. mvprintw(5, 40, "Przegrales! Zebrales %d punktow.\n", Points);
  63. attroff(COLOR_PAIR(1));
  64. return;
  65. }
  66. for(i = 0; i < RozmiarKlocka; i++)
  67. {
  68. if(KlocekPoziomo)
  69. Plansza[PozycjaKlockaWiersz][PozycjaKlockaKolumna+i] = 1;
  70. else
  71. Plansza[PozycjaKlockaWiersz+i][PozycjaKlockaKolumna] = 1;
  72. }
  73. }
  74.  
  75. void RozdajPunkty(int (*Plansza)[WIDTH])
  76. {
  77. int i = 0, j = 0, k = 0;
  78. bool DodacPunkty = TRUE;
  79. for(i = 0; i < HEIGHT; i++)
  80. {
  81. DodacPunkty = TRUE;
  82. for(j = 2; (j < WIDTH) && DodacPunkty ; j++)
  83. {
  84. if(Plansza[i][j] == 0)
  85. DodacPunkty = FALSE;
  86. }
  87. if(DodacPunkty)
  88. {
  89. Points += WIDTH;
  90. for(j = i-1; j >= 0; j--)
  91. {
  92. for(k = 2; k < WIDTH; k++)
  93. {
  94. Plansza[j+1][k] = Plansza[j][k];
  95. Plansza[j][k] = 0;
  96. }
  97. }
  98. }
  99. }
  100. }
  101. void SterujKlockiem(int Klawisz, int (*Plansza)[WIDTH])
  102. {
  103. int i = 0;
  104. bool Dalej = FALSE, WRuchu = TRUE;
  105. if(KlocekPoziomo)
  106. {
  107. if(PozycjaKlockaKolumna + RozmiarKlocka-1 > WIDTH|| PozycjaKlockaWiersz+2 > HEIGHT)
  108. {
  109. PozycjaKlockaKolumna = 0; PozycjaKlockaWiersz = 0;
  110. WRuchu = FALSE;
  111. Dalej = TRUE;
  112. }
  113. for(i = 0; (i < RozmiarKlocka) && !Dalej; i++)
  114. {
  115. if(Plansza[PozycjaKlockaWiersz+1][PozycjaKlockaKolumna+i] == 1)
  116. {
  117. WRuchu = FALSE;
  118. PozycjaKlockaKolumna = 0;
  119. PozycjaKlockaWiersz = 0;
  120. }
  121. }
  122. if(WRuchu)
  123. {
  124. for(i = 0; i < RozmiarKlocka; i++)
  125. {
  126. Plansza[PozycjaKlockaWiersz][PozycjaKlockaKolumna+i] = 0;
  127. Plansza[PozycjaKlockaWiersz+1][PozycjaKlockaKolumna+i] = 1;
  128. }
  129. ++PozycjaKlockaWiersz;
  130. }
  131. }
  132. else
  133. {
  134. if(PozycjaKlockaKolumna - 2 > WIDTH || PozycjaKlockaWiersz + RozmiarKlocka+1 > HEIGHT)
  135. {
  136. PozycjaKlockaKolumna = 0;
  137. PozycjaKlockaWiersz = 0;
  138. Dalej = TRUE;
  139. }
  140. if(Plansza[PozycjaKlockaWiersz+RozmiarKlocka][PozycjaKlockaKolumna] == 0 && !Dalej )
  141. {
  142. Plansza[PozycjaKlockaWiersz+RozmiarKlocka][PozycjaKlockaKolumna] = 1;
  143. Plansza[PozycjaKlockaWiersz][PozycjaKlockaKolumna] = 0;
  144. ++PozycjaKlockaWiersz;
  145. }
  146. else
  147. {
  148. PozycjaKlockaKolumna = 0; PozycjaKlockaWiersz = 0;
  149. }
  150. }
  151. if(Klawisz == KEY_LEFT && KlocekPoziomo )
  152. {
  153. if(PozycjaKlockaKolumna - 1 < 2)return;
  154. if(PozycjaKlockaKolumna + RozmiarKlocka-1 > WIDTH)return;
  155. if(Plansza[PozycjaKlockaWiersz][PozycjaKlockaKolumna-1] == 1)
  156. return;
  157. else
  158. {
  159. Plansza[PozycjaKlockaWiersz][PozycjaKlockaKolumna-1] = 1;
  160. Plansza[PozycjaKlockaWiersz][PozycjaKlockaKolumna+RozmiarKlocka-1] = 0;
  161. --PozycjaKlockaKolumna;
  162. }
  163. }
  164. else if(Klawisz == KEY_RIGHT && KlocekPoziomo)
  165. {
  166. if(PozycjaKlockaKolumna - 1 > WIDTH)return;
  167. if(PozycjaKlockaKolumna + RozmiarKlocka+1 > WIDTH)return;
  168.  
  169. if(Plansza[PozycjaKlockaWiersz][PozycjaKlockaKolumna+RozmiarKlocka] == 1)
  170. return;
  171. else
  172. {
  173. Plansza[PozycjaKlockaWiersz][PozycjaKlockaKolumna] = 0;
  174. Plansza[PozycjaKlockaWiersz][PozycjaKlockaKolumna+RozmiarKlocka] = 1;
  175. ++PozycjaKlockaKolumna;
  176. }
  177. }
  178. else if(Klawisz == KEY_LEFT && !KlocekPoziomo)
  179. {
  180. if(PozycjaKlockaKolumna - 1 < 2)
  181. return;
  182. for(i = 0; i < RozmiarKlocka; i++)
  183. if(Plansza[PozycjaKlockaWiersz+i][PozycjaKlockaKolumna-1] == 1)
  184. return;
  185. for(i = 0; i < RozmiarKlocka; i++)
  186. {
  187. Plansza[PozycjaKlockaWiersz+i][PozycjaKlockaKolumna] = 0;
  188. Plansza[PozycjaKlockaWiersz+i][PozycjaKlockaKolumna-1] = 1;
  189. }
  190. --PozycjaKlockaKolumna;
  191. }
  192.  
  193. else if(Klawisz == KEY_RIGHT && !KlocekPoziomo)
  194. {
  195. if(PozycjaKlockaKolumna+2 > WIDTH)
  196. return;
  197. for(i = 0; i < RozmiarKlocka; i++)
  198. if(Plansza[PozycjaKlockaWiersz+i][PozycjaKlockaKolumna+1] == 1)
  199. return;
  200. for(i = 0; i < RozmiarKlocka; i++)
  201. {
  202. Plansza[PozycjaKlockaWiersz+i][PozycjaKlockaKolumna] = 0;
  203. Plansza[PozycjaKlockaWiersz+i][PozycjaKlockaKolumna+1] = 1;
  204. }
  205. ++PozycjaKlockaKolumna;
  206. }
  207. }
  208. int main()
  209. {
  210. srand(time(NULL)); // Ziarno
  211.  
  212. int Plansza[HEIGHT][WIDTH];
  213. int Klawisz = 1;
  214. initscr();
  215. TetrisSCR_init();
  216. int i = 0, j = 0;
  217. // Wypelniam plansze zerami ( Nowa gra )
  218. for(i = 0; i < HEIGHT; i++)
  219. for(j = 0; j < WIDTH; j++)
  220. Plansza[i][j] = 0;
  221. keypad(TetrisSCR, TRUE);
  222. while(!Przegrales)
  223. {
  224. if(!PozycjaKlockaKolumna && !PozycjaKlockaWiersz)
  225. NowyKlocek(Plansza);
  226. Klawisz = wgetch(TetrisSCR);
  227. SterujKlockiem(Klawisz, Plansza);
  228. RozdajPunkty(Plansza);
  229. Wyswietl_Plansze(Plansza);
  230. box(TetrisSCR, ACS_VLINE, ACS_HLINE);
  231. refresh();
  232. usleep(40000);
  233. }
  234. getch();
  235. endwin();
  236. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement