Advertisement
Guest User

Untitled

a guest
Dec 4th, 2016
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.69 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <SDL.h>
  3. #include <SDL_gfxPrimitives.h>
  4. #include <SDL_ttf.h>
  5. #include <stdbool.h>
  6. #include <time.h>
  7. #include <math.h>
  8. #include "mentes.h"
  9.  
  10. Uint32 idozit(Uint32 ms, void *param) {
  11. SDL_Event event;
  12. event.type = SDL_USEREVENT;
  13. SDL_PushEvent(&event);
  14. return ms;
  15. }
  16.  
  17.  
  18. typedef enum iranyok {fel, le, jobbra, balra } iranyok;
  19.  
  20. SDL_Event event;
  21. SDL_Surface *screen;
  22. SDL_TimerID id;
  23.  
  24. typedef struct Kigyo {
  25. int x, y;
  26. iranyok irany;
  27.  
  28. struct Kigyo *kov;
  29. struct Kigyo *elozo;
  30. } Kigyo;
  31.  
  32. typedef struct Pont{
  33. int x;
  34. int y;
  35. int r;
  36. } Pont;
  37.  
  38. void menu() {
  39.  
  40. stringRGBA(screen, 130, 10, "Esc kilepes 2, 2. jatekos, 3, pontok mentese", 255, 255, 255, 255);
  41. }
  42.  
  43.  
  44.  
  45. Kigyo *hozzafuz(Kigyo *kigyo) {
  46. Kigyo *uj;
  47. uj = (Kigyo*) malloc(sizeof(Kigyo)); //teruletfoglalas
  48. Kigyo *mozgo;
  49. mozgo=kigyo;
  50. for (mozgo = kigyo; mozgo->kov != NULL; mozgo = mozgo->kov) //elmegy a vegere
  51. ;
  52. if(kigyo->irany==balra) {
  53. uj->x = mozgo->x+10;
  54. uj->kov = NULL; //kov null, mert a vegere illeszt
  55. uj->y=mozgo->y;
  56. uj->elozo=mozgo;} //duplan lancolt lista miatt 2 pointer van
  57. if(kigyo->irany==jobbra) {
  58. uj->x = mozgo->x-10;
  59. uj->kov= NULL;
  60. uj->y=mozgo->y;
  61. uj->elozo=mozgo;}
  62. if(kigyo->irany==fel) {
  63. uj->y=mozgo->y+10;
  64. uj->kov=NULL;
  65. uj->x=mozgo->x;
  66. uj->elozo=mozgo;
  67. }
  68. if(kigyo->irany==le) {
  69. uj->y=mozgo->y-10;
  70. uj->kov=NULL;
  71. uj->x=mozgo->x;
  72. uj->elozo=mozgo;
  73. }
  74. mozgo->kov = uj;
  75.  
  76.  
  77.  
  78. return kigyo; //mivel listaelemmel ter vissza azt el kell tárolni ott ahol a függvényt meghívtuk
  79. // kigyo=hozzafuz(kigyo); itt a kigyo mindkét esetben pointer
  80. }
  81.  
  82.  
  83.  
  84. Pont kaja;
  85. Kigyo kigyo;
  86.  
  87. void sorsol(Pont *kaja) {
  88.  
  89. kaja->x = rand()%600+1;
  90. kaja->y = rand()%600+1;
  91. }
  92.  
  93. void kiir(SDL_Surface* screen, Kigyo *kigyo, Pont *kaja){
  94.  
  95. Kigyo* mozgo;
  96. for(mozgo=kigyo;mozgo!=NULL;mozgo=mozgo->kov)
  97. filledCircleRGBA(screen, mozgo->x, mozgo->y, 5, 0, 0, 155, 255);
  98.  
  99. filledCircleRGBA(screen, kaja->x, kaja->y, kaja->r, 155,155, 155, 255);
  100.  
  101. SDL_Flip(screen);
  102. }
  103.  
  104. void kiir_ketto(SDL_Surface* screen, Kigyo *kigyo, Kigyo *kegyo, Pont *kaja){
  105.  
  106. Kigyo* mozgo;
  107. for(mozgo=kigyo;mozgo!=NULL;mozgo=mozgo->kov)
  108. filledCircleRGBA(screen, mozgo->x, mozgo->y, 5, 0, 0, 155, 255);
  109. Kigyo* mozgok;
  110. for(mozgok=kegyo;mozgok!=NULL;mozgok=mozgok->kov)
  111. filledCircleRGBA(screen, mozgok->x, mozgok->y, 5, 0, 0, 155, 255);
  112. filledCircleRGBA(screen, kaja->x, kaja->y, kaja->r, 155,155, 155, 255);
  113.  
  114. SDL_Flip(screen);
  115. }
  116.  
  117. Kigyo* atad(Kigyo* kigyo) {
  118.  
  119. Kigyo* mozgo, *mozgo2;
  120. for(mozgo=kigyo;mozgo->kov!=NULL;mozgo=mozgo->kov){
  121. if(mozgo->irany==balra){
  122. mozgo->kov->irany=balra;}
  123.  
  124. if(mozgo->irany==jobbra){
  125. mozgo->kov->irany=jobbra;}
  126.  
  127. if(mozgo->irany==fel){
  128. mozgo->kov->irany=fel;}
  129.  
  130. if(mozgo->irany==le){
  131. mozgo->kov->irany=le;}
  132.  
  133. mozgo->kov->irany=mozgo->irany;
  134. }
  135.  
  136. for(mozgo2=mozgo;mozgo2->elozo!=NULL; mozgo2=mozgo2->elozo){
  137. if(mozgo2->irany==balra){
  138.  
  139. mozgo2->x=mozgo2->elozo->x+10;
  140.  
  141. mozgo2->y=mozgo2->elozo->y;}
  142. if(mozgo->irany==jobbra){
  143.  
  144. mozgo2->x=mozgo2->elozo->x-10;
  145.  
  146. mozgo2->y=mozgo2->elozo->y;}
  147. if(mozgo->irany==fel){
  148.  
  149. mozgo2->y=mozgo2->elozo->y+10;
  150.  
  151. mozgo2->x=mozgo2->elozo->x;}
  152. if(mozgo->irany==le){
  153.  
  154. mozgo2->y=mozgo2->elozo->y-10;
  155.  
  156. mozgo2->x=mozgo2->elozo->x;}
  157.  
  158. }
  159.  
  160. return kigyo;
  161. }
  162.  
  163.  
  164.  
  165. Kigyo* iranyit(Kigyo* kigyo){
  166.  
  167. Kigyo *mozgo;
  168. for(mozgo=kigyo;mozgo!=NULL;mozgo=mozgo->kov) {
  169. if(mozgo->irany==balra) {
  170. mozgo->x -=2;
  171.  
  172. }
  173. if(mozgo->irany==jobbra) {
  174. mozgo->x +=2;
  175.  
  176. ;}
  177. if(mozgo->irany==fel) {
  178. mozgo->y-=2;
  179.  
  180. }
  181. if(mozgo->irany==le) {
  182. mozgo->y+=2;
  183.  
  184. } }
  185. return kigyo;
  186. }
  187.  
  188. bool ellenoriz(Kigyo *kigyo, Kigyo *kegyo) {
  189.  
  190. if(abs(kigyo->x-kegyo->x)<5 && abs(kigyo->y-kegyo->y)<5)
  191. return true;
  192. Kigyo *mozgo;
  193. Kigyo *mezgo;
  194. for(mezgo=kegyo;mezgo->kov!=NULL;mezgo=mezgo->kov){
  195. for(mozgo=kegyo;mozgo->kov!=NULL;mozgo=mozgo->kov)
  196. if(abs(kigyo->kov->x-kigyo->x)<5 && abs(kigyo->kov->y-kigyo->y)<5)
  197. return true;
  198. if(abs(kigyo->kov->x-kegyo->kov->x)<5 && abs(kigyo->kov->y-kegyo->kov->y)<5)
  199. return true;
  200. if(abs(kegyo->kov->x-kegyo->x)<5 && abs(kegyo->kov->y-kegyo->y)<5)
  201. return true;
  202.  
  203. }
  204.  
  205.  
  206.  
  207.  
  208.  
  209.  
  210. return false;
  211. }
  212.  
  213.  
  214.  
  215. int main(int argc, char *argv[]) {
  216. srand(time(0));
  217. SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER);
  218.  
  219.  
  220. screen = SDL_SetVideoMode(600, 600, 0, SDL_ANYFORMAT);
  221. if(!screen) {
  222. fprintf(stderr, "Nem sikerult megnyitni az ablakot!\n");
  223. exit(1);
  224. }
  225.  
  226. SDL_WM_SetCaption("SDL NHF", "SDL NHF");
  227.  
  228. Kigyo kegyo;
  229.  
  230. kigyo.x = 100; //kezdőértékek
  231. kigyo.y = 500;
  232. kigyo.kov=NULL;
  233. kigyo.elozo=NULL;
  234. kegyo.x = 500;
  235. kegyo.irany = le;
  236. kegyo.y = 100;
  237. kegyo.kov=NULL;
  238. kegyo.elozo=NULL;
  239. int db=0;
  240. kaja.r=5;
  241. kaja.x=100;
  242. kaja.y=50;
  243. bool ketjatekos=false;
  244. id = SDL_AddTimer(20, idozit, NULL);
  245.  
  246. bool quit = false;
  247.  
  248.  
  249. while(!quit) {
  250. SDL_WaitEvent(&event);
  251.  
  252. switch(event.type) {
  253.  
  254.  
  255. case SDL_KEYDOWN :
  256. menu();
  257. switch (event.key.keysym.sym) {
  258.  
  259. case SDLK_UP:
  260. if(kigyo.irany!=le)
  261. kigyo.irany = fel;
  262. break;
  263.  
  264. case SDLK_DOWN:
  265. if(kigyo.irany!=fel)
  266. kigyo.irany = le;
  267. break;
  268.  
  269. case SDLK_LEFT:
  270. if(kigyo.irany!=jobbra)
  271. kigyo.irany = balra;
  272. break;
  273.  
  274. case SDLK_RIGHT:
  275. if(kigyo.irany!=balra)
  276. kigyo.irany=jobbra;
  277. break;
  278.  
  279. case SDLK_ESCAPE:
  280. mentes(db);
  281. quit=true;
  282. break;
  283.  
  284. case SDLK_2:
  285. ketjatekos=true;
  286. break;
  287.  
  288. case SDLK_3:
  289. mentes(db);
  290. break;
  291.  
  292. case SDLK_w:
  293. if(kegyo.irany!=le)
  294. kegyo.irany=fel;
  295. break;
  296.  
  297. case SDLK_s:
  298. if(kegyo.irany!=fel)
  299. kegyo.irany=le;
  300. break;
  301.  
  302. case SDLK_d:
  303. if(kegyo.irany!=balra)
  304. kegyo.irany=jobbra;
  305. break;
  306.  
  307. case SDLK_a:
  308. if(kegyo.irany!=jobbra)
  309. kegyo.irany=balra;
  310. break;
  311.  
  312.  
  313. break;
  314. case SDL_QUIT:
  315. quit = true;
  316. break; }
  317.  
  318. if( kigyo.x<0 || kigyo.y < 0 || kigyo.x > 600 || kigyo.y > 600){
  319. quit=true;
  320. mentes(db);
  321. }
  322. break;
  323.  
  324.  
  325.  
  326. case SDL_USEREVENT : {
  327. boxColor(screen, 0, 0, 600, 600, 0x000000FF);
  328.  
  329.  
  330. if(ketjatekos==true) {
  331.  
  332. menu();
  333.  
  334. iranyit(&kegyo);
  335. iranyit(&kigyo);
  336.  
  337. atad(&kegyo);
  338. atad(&kigyo);
  339.  
  340. if(abs(kigyo.x-kaja.x)<5 && abs(kigyo.y-kaja.y)<5 ) {
  341. // kaja területét vizsgálom különben elég nehéz lenne a játék
  342.  
  343. ++db;
  344. sorsol(&kaja);
  345. kigyo=*hozzafuz(&kigyo);
  346. kigyo=*atad(&kigyo);
  347. kigyo=*iranyit(&kigyo);
  348. }
  349. if(abs(kegyo.x-kaja.x)<5 && abs(kegyo.y-kaja.y)<5 ) {
  350. // kaja területét vizsgálom különben elég nehéz lenne a játék
  351.  
  352.  
  353. sorsol(&kaja);
  354. kegyo=*hozzafuz(&kegyo);
  355. kegyo=*atad(&kegyo);
  356. kegyo=*iranyit(&kegyo);
  357. }
  358.  
  359. if( kegyo.x<0 || kegyo.y < 0 || kegyo.x > 600 || kegyo.y > 600){
  360. quit=true;
  361. mentes(db);
  362. }
  363.  
  364. if(ellenoriz(&kigyo, &kegyo))
  365. quit=true;
  366.  
  367. kiir_ketto(screen, &kigyo, &kegyo, &kaja);
  368.  
  369.  
  370. }
  371.  
  372.  
  373.  
  374. if (ketjatekos==false) {
  375.  
  376. menu();
  377.  
  378. iranyit(&kigyo);
  379.  
  380. atad(&kigyo);
  381.  
  382. if(abs(kigyo.x-kaja.x)<5 && abs(kigyo.y-kaja.y)<5 ) {
  383. // kaja területét vizsgálom különben elég nehéz lenne a játék
  384.  
  385. ++db;
  386. sorsol(&kaja);
  387. kigyo=*hozzafuz(&kigyo);
  388. kigyo=*atad(&kigyo);
  389. kigyo=*iranyit(&kigyo);
  390. }
  391.  
  392. kiir(screen, &kigyo, &kaja);
  393.  
  394.  
  395. }
  396.  
  397.  
  398.  
  399.  
  400.  
  401. } break; // userevent vége
  402.  
  403.  
  404.  
  405.  
  406.  
  407. } //event.type vege
  408. } //while vége
  409.  
  410. SDL_RemoveTimer(id);
  411.  
  412. SDL_Flip(screen);
  413.  
  414.  
  415.  
  416. SDL_Quit();
  417.  
  418. return 0;
  419. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement