Advertisement
Guest User

Untitled

a guest
Dec 8th, 2016
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 12.79 KB | None | 0 0
  1. #include <SDL.h>
  2. #include <SDL_gfxPrimitives.h>
  3. #include <math.h>
  4. #include <stdbool.h>
  5. #include <time.h>
  6. #include <SDL_ttf.h>
  7.  
  8. static const unsigned Magassag = 600;
  9. static const unsigned Szelesseg = 800;
  10. static const unsigned negyzetm = 20;
  11. static const unsigned fal_sz=20;
  12.  
  13. typedef struct KigyoTest{
  14.     SDL_Rect negyzet;
  15.     struct KigyoTest *kov;
  16. } KigyoTest;
  17.  
  18. typedef enum Iranyok{
  19. jobb=0,
  20. le=1,
  21. bal=2,
  22. fel=3,
  23. all=5
  24. }Iranyok;
  25.  
  26.  
  27. KigyoTest *elore_beszur(KigyoTest *eleje, int x, int y, int meret) {
  28.    KigyoTest *uj;
  29.    uj = (KigyoTest*) malloc(sizeof(KigyoTest));
  30.    uj->negyzet.x = x;
  31.    uj->negyzet.y = y;
  32.    uj->negyzet.h = meret;
  33.    uj->negyzet.w = meret;
  34.    uj->kov = eleje;
  35.    eleje =uj;
  36.    return eleje;
  37. }
  38.  
  39.  
  40. KigyoTest *utolso_torol(KigyoTest *eleje)
  41. {
  42.     KigyoTest *lemarado, *mozgo;
  43.     lemarado = NULL;
  44.     mozgo = eleje;
  45.     if(mozgo == NULL)
  46.     {
  47.         return eleje;
  48.     }
  49.     else if (mozgo->kov == NULL)
  50.     {
  51.         return eleje;
  52.     }
  53.     else
  54.     {
  55.         while(mozgo->kov != NULL)
  56.         {
  57.             lemarado=mozgo;
  58.             mozgo=mozgo->kov;
  59.         }
  60.         free(mozgo);
  61.         lemarado->kov=NULL;
  62.         return eleje;
  63.     }
  64.  
  65. }
  66.  
  67. Uint32 idozit(Uint32 ms, void *param) {
  68.     SDL_Event ev;
  69.     ev.type = SDL_USEREVENT;
  70.     SDL_PushEvent(&ev);
  71.     return ms;
  72. }
  73.  
  74. void kigyotest_kirajzol(SDL_Surface *screen, KigyoTest *eleje)
  75. {
  76.     KigyoTest *mozgo =eleje;
  77.     while(mozgo!=NULL)
  78.     {
  79.         SDL_FillRect(screen, &mozgo->negyzet, SDL_MapRGB(screen->format,255,255, 255  ));
  80.         mozgo=mozgo->kov;
  81.  
  82.     }
  83. }
  84.  
  85. bool utkozes(KigyoTest *eleje)
  86. {
  87.     KigyoTest *mozgo;
  88.     for(mozgo=eleje->kov; mozgo!=NULL; mozgo=mozgo->kov)
  89.     {
  90.         if(eleje->negyzet.x==mozgo->negyzet.x && eleje->negyzet.y==mozgo->negyzet.y)
  91.             return true;
  92.     }
  93.     if(eleje->negyzet.x==0 || eleje->negyzet.y==0
  94.             ||eleje->negyzet.x==Szelesseg-negyzetm||eleje->negyzet.y==Magassag-negyzetm)
  95.         return true;
  96.     else
  97.         return false;
  98.  
  99. }
  100.  
  101. bool kaja_utkozes(KigyoTest *eleje, SDL_Rect kaja)
  102. {
  103.     if(eleje->negyzet.x==kaja.x && eleje->negyzet.y==kaja.y) return true;
  104.  
  105.     else return false;
  106. }
  107.  
  108. bool kaja_uj(SDL_Rect kaja,KigyoTest *eleje)
  109. {
  110.     KigyoTest *mozgo;
  111.      for(mozgo=eleje->kov; mozgo!=NULL; mozgo=mozgo->kov)
  112.     {
  113.         if(mozgo->negyzet.x==kaja.x && mozgo->negyzet.y==kaja.y)
  114.             return true;
  115.     }
  116.  
  117.      if(kaja.x==0||kaja.y==0||kaja.x==Szelesseg-fal_sz||kaja.y==Magassag-fal_sz) return true;
  118.  
  119.      else return false;
  120.  
  121. }
  122.  
  123.  
  124. void felszabadit(KigyoTest *eleje){
  125. KigyoTest *mozgo = eleje;
  126.     while (mozgo != NULL) {
  127.    KigyoTest *temp = mozgo->kov;
  128.    free(mozgo);
  129.    mozgo = temp;
  130. }
  131. eleje = NULL;
  132. }
  133.  
  134.  
  135. int szamol(KigyoTest *eleje){
  136.     KigyoTest *mozgo;
  137.     int pontok=0;
  138.      for(mozgo=eleje; mozgo!=NULL; mozgo=mozgo->kov)
  139.     {
  140.         pontok=pontok+1;
  141.     }
  142.     return pontok;
  143. }
  144.  
  145.  
  146. void jatek(SDL_Surface *kepernyo){
  147.     SDL_Event event;
  148.  
  149.     SDL_Rect Kaja;
  150.     SDL_Rect palya;
  151.     SDL_TimerID id;
  152.  
  153.     Iranyok irany=all;
  154.  
  155.     KigyoTest *eleje=NULL;
  156.  
  157.     srand(time(NULL));
  158.  
  159.     unsigned szin;
  160.     int pontok=0;
  161.  
  162.     unsigned hatter;
  163.     bool running=true;
  164.  
  165.     id = SDL_AddTimer(75, idozit, NULL);
  166.  
  167.     eleje=elore_beszur(eleje,Szelesseg/2,Magassag/2,negyzetm);
  168.  
  169.  
  170.     Kaja.x=(rand()%(Szelesseg/negyzetm))*negyzetm;
  171.     Kaja.y=(rand()%(Magassag/negyzetm))*negyzetm;
  172.     Kaja.h = negyzetm;
  173.     Kaja.w = negyzetm;
  174.  
  175.  
  176.     /* pálya*/
  177.     palya.w = Szelesseg-2*fal_sz;
  178.     palya.h= Magassag-2*fal_sz;
  179.     palya.x=fal_sz;
  180.     palya.y=fal_sz;
  181.  
  182.     szin = SDL_MapRGB(kepernyo->format,0, 35, 255 );
  183.     hatter = SDL_MapRGB(kepernyo->format, 0, 0, 0);
  184.  
  185.     /* kitöltés*/
  186.     SDL_FillRect(kepernyo, NULL, SDL_MapRGB(kepernyo->format, 0, 35, 255));
  187.  
  188.  
  189. while(running){
  190.  SDL_WaitEvent(&event);
  191.  
  192.     switch(event.type)
  193.     {
  194.         case SDL_QUIT:
  195.             running = false;
  196.             break;
  197.  
  198.             case SDL_USEREVENT:
  199.                 SDL_FillRect(kepernyo,&palya,hatter);
  200.                 if(running){
  201.                     {
  202.                         if(irany==jobb) eleje=elore_beszur(eleje, eleje->negyzet.x+negyzetm, eleje->negyzet.y, negyzetm); //jobbra
  203.                         if(irany==fel) eleje=elore_beszur(eleje, eleje->negyzet.x, eleje->negyzet.y-negyzetm, negyzetm); //fel
  204.                         if(irany==bal) eleje=elore_beszur(eleje, eleje->negyzet.x-negyzetm, eleje->negyzet.y, negyzetm);//balra
  205.                         if(irany==le) eleje=elore_beszur(eleje, eleje->negyzet.x, eleje->negyzet.y+negyzetm, negyzetm); //le
  206.                     }
  207.                     if(kaja_uj(Kaja,eleje))
  208.                     {
  209.                         Kaja.x=(rand()%(Szelesseg/negyzetm))*negyzetm;
  210.                         Kaja.y=(rand()%(Magassag/negyzetm))*negyzetm;
  211.                         Kaja.h = negyzetm;
  212.                         Kaja.w = negyzetm;
  213.                         SDL_FillRect(kepernyo,&Kaja,szin);
  214.                     }
  215.  
  216.                     if(kaja_utkozes(eleje,Kaja))
  217.                     {
  218.                         Kaja.x=(rand()%(Szelesseg/negyzetm))*negyzetm;
  219.                         Kaja.y=(rand()%(Magassag/negyzetm))*negyzetm;
  220.                         Kaja.h = negyzetm;
  221.                         Kaja.w = negyzetm;
  222.                         SDL_FillRect(kepernyo,&Kaja,szin);
  223.                         pontok++;
  224.                     }
  225.  
  226.                     else
  227.                         eleje = utolso_torol(eleje);
  228.  
  229.  
  230.  
  231.                 }
  232.                 SDL_FillRect(kepernyo, &Kaja, szin);
  233.                 kigyotest_kirajzol(kepernyo, eleje);
  234.                 SDL_Flip(kepernyo);
  235.                 break;
  236.  
  237.          case SDL_KEYDOWN:
  238.  
  239.             if (event.key.keysym.sym == SDLK_UP &&irany!=le)
  240.             {
  241.                 irany=fel;
  242.             }
  243.             else if (event.key.keysym.sym == SDLK_DOWN&&irany!=fel)
  244.                 {
  245.                     irany=le;
  246.                 }
  247.                 else if (event.key.keysym.sym == SDLK_LEFT&&irany!=jobb)
  248.                 {
  249.                     irany=bal;
  250.                 }
  251.             else if (event.key.keysym.sym == SDLK_RIGHT&&irany!=bal)
  252.               {
  253.                   irany=jobb;
  254.  
  255.               }
  256.  
  257.                     break;
  258.  
  259.  
  260.     }
  261.  
  262.     if(utkozes(eleje)){
  263.        running=false;}
  264.     SDL_Flip(kepernyo);
  265.  
  266.  
  267.     if(utkozes(eleje)){
  268.         fprintf(stderr, "VESZTETTEL\n");
  269.         fprintf(stderr, "EREDMENY:");
  270.         fprintf(stderr, "%d PONT", pontok*10);
  271.  
  272.     }
  273.  
  274. }
  275.     felszabadit(eleje);
  276.     SDL_RemoveTimer(id);
  277. }
  278.  
  279. void ketjatekos(SDL_Surface *kepernyo){
  280.    SDL_Event event;
  281.  
  282.     SDL_Rect Kaja;
  283.     SDL_Rect palya;
  284.     SDL_TimerID id;
  285.  
  286.     Iranyok irany=all;
  287.     Iranyok irany_ketto=all;
  288.  
  289.     KigyoTest *eleje=NULL;
  290.     KigyoTest *eleje_ketto=NULL;
  291.  
  292.     srand(time(NULL));
  293.  
  294.     unsigned szin;
  295.     int pontok=0;
  296.     int pontok_ketto=0;
  297.  
  298.     unsigned hatter;
  299.     bool running=true;
  300.  
  301.     id = SDL_AddTimer(100, idozit, NULL);
  302.  
  303.     eleje=elore_beszur(eleje,Szelesseg/2,Magassag/2,negyzetm);
  304.     eleje_ketto=elore_beszur(eleje_ketto,negyzetm*2,negyzetm*2,negyzetm);
  305.  
  306.  
  307.     Kaja.x=(rand()%(Szelesseg/negyzetm))*negyzetm;
  308.     Kaja.y=(rand()%(Magassag/negyzetm))*negyzetm;
  309.     Kaja.h = negyzetm;
  310.     Kaja.w = negyzetm;
  311.  
  312.  
  313.     /* pálya*/
  314.     palya.w = Szelesseg-2*fal_sz;
  315.     palya.h= Magassag-2*fal_sz;
  316.     palya.x=fal_sz;
  317.     palya.y=fal_sz;
  318.  
  319.     szin = SDL_MapRGB(kepernyo->format,0, 35, 255 );
  320.     hatter = SDL_MapRGB(kepernyo->format, 0, 0, 0);
  321.  
  322.     /* kitöltés*/
  323.    /*egész kéenyő kék*/
  324.     SDL_FillRect(kepernyo, NULL, szin);
  325.  
  326.  
  327. while(running){
  328.  SDL_WaitEvent(&event);
  329.  
  330.     switch(event.type)
  331.     {
  332.         case SDL_QUIT:
  333.             running = false;
  334.             break;
  335.  
  336.             case SDL_USEREVENT:
  337.                 SDL_FillRect(kepernyo,&palya,hatter);
  338.                 if(running){
  339.                     {
  340.                         if(irany==jobb) eleje=elore_beszur(eleje, eleje->negyzet.x+negyzetm, eleje->negyzet.y, negyzetm); //jobbra
  341.                         if(irany==fel) eleje=elore_beszur(eleje, eleje->negyzet.x, eleje->negyzet.y-negyzetm, negyzetm); //fel
  342.                         if(irany==bal) eleje=elore_beszur(eleje, eleje->negyzet.x-negyzetm, eleje->negyzet.y, negyzetm);//balra
  343.                         if(irany==le) eleje=elore_beszur(eleje, eleje->negyzet.x, eleje->negyzet.y+negyzetm, negyzetm); //le
  344.  
  345.                         if(irany_ketto==jobb) eleje_ketto=elore_beszur(eleje_ketto, eleje_ketto->negyzet.x+negyzetm, eleje_ketto->negyzet.y, negyzetm); //jobbra
  346.                         if(irany_ketto==fel) eleje_ketto=elore_beszur(eleje_ketto, eleje_ketto->negyzet.x, eleje_ketto->negyzet.y-negyzetm, negyzetm); //fel
  347.                         if(irany_ketto==bal) eleje_ketto=elore_beszur(eleje_ketto, eleje_ketto->negyzet.x-negyzetm, eleje_ketto->negyzet.y, negyzetm);//balra
  348.                         if(irany_ketto==le) eleje_ketto=elore_beszur(eleje_ketto, eleje_ketto->negyzet.x, eleje_ketto->negyzet.y+negyzetm, negyzetm); //le
  349.                     }
  350.                     if(kaja_uj(Kaja,eleje)|| kaja_uj(Kaja,eleje_ketto))
  351.                     {
  352.                         Kaja.x=(rand()%(Szelesseg/negyzetm))*negyzetm;
  353.                         Kaja.y=(rand()%(Magassag/negyzetm))*negyzetm;
  354.                         Kaja.h = negyzetm;
  355.                         Kaja.w = negyzetm;
  356.                         SDL_FillRect(kepernyo,&Kaja,szin);
  357.                     }
  358.                     if(kaja_utkozes(eleje,Kaja))
  359.                     {
  360.                         Kaja.x=(rand()%(Szelesseg/negyzetm))*negyzetm;
  361.                         Kaja.y=(rand()%(Magassag/negyzetm))*negyzetm;
  362.                         Kaja.h = negyzetm;
  363.                         Kaja.w = negyzetm;
  364.                         SDL_FillRect(kepernyo,&Kaja,szin);
  365.  
  366.                     }
  367.                     else{
  368.                         eleje = utolso_torol(eleje);}
  369.  
  370.                     if(kaja_utkozes(eleje_ketto,Kaja))
  371.                     {
  372.                         Kaja.x=(rand()%(Szelesseg/negyzetm))*negyzetm;
  373.                         Kaja.y=(rand()%(Magassag/negyzetm))*negyzetm;
  374.                         Kaja.h = negyzetm;
  375.                         Kaja.w = negyzetm;
  376.                         SDL_FillRect(kepernyo,&Kaja,szin);
  377.  
  378.                     }
  379.  
  380.                     else{
  381.                         eleje_ketto=utolso_torol(eleje_ketto);}
  382.  
  383.  
  384.  
  385.                 }
  386.                 SDL_FillRect(kepernyo, &Kaja, szin);
  387.                 kigyotest_kirajzol(kepernyo, eleje);
  388.                 kigyotest_kirajzol(kepernyo,eleje_ketto);
  389.                 SDL_Flip(kepernyo);
  390.                 break;
  391.  
  392.          case SDL_KEYDOWN:
  393.  
  394.             if (event.key.keysym.sym == SDLK_UP&&irany!=le)
  395.             {
  396.                 irany=fel;
  397.             }
  398.             else if (event.key.keysym.sym == SDLK_DOWN&&irany!=fel)
  399.                 {
  400.                     irany=le;
  401.                 }
  402.                 else if (event.key.keysym.sym == SDLK_LEFT&&irany!=jobb)
  403.                 {
  404.                     irany=bal;
  405.                 }
  406.             else if (event.key.keysym.sym == SDLK_RIGHT&&irany!=bal)
  407.               {
  408.                   irany=jobb;
  409.  
  410.               }
  411.  
  412. /*második cumó irányírása*/
  413.              if (event.key.keysym.sym == SDLK_w &&irany_ketto!=le)
  414.             {
  415.                 irany_ketto=fel;
  416.             }
  417.             else if (event.key.keysym.sym == SDLK_s&&irany_ketto!=fel)
  418.                 {
  419.                     irany_ketto=le;
  420.                 }
  421.                 else if (event.key.keysym.sym == SDLK_a&&irany_ketto!=jobb)
  422.                 {
  423.                     irany_ketto=bal;
  424.                 }
  425.             else if (event.key.keysym.sym == SDLK_d&&irany_ketto!=bal)
  426.               {
  427.                   irany_ketto=jobb;
  428.  
  429.               }
  430.                     break;
  431.  
  432.  
  433.     }
  434.  
  435.     if(utkozes(eleje)){
  436.        running=false;}
  437.     if(utkozes(eleje_ketto)){
  438.         running=false;
  439.     }
  440.  
  441.     SDL_Flip(kepernyo);
  442.  
  443.  
  444.     if(utkozes(eleje)|| utkozes(eleje_ketto)){
  445.         fprintf(stderr, "VESZTETTEL\n");
  446.         fprintf(stderr, "EREDMENY1:");
  447.         fprintf(stderr, "%d PONT", pontok*10);
  448.         fprintf(stderr, "EREDMENY2:");
  449.         fprintf(stderr, "%d PONT", pontok_ketto*10);
  450.  
  451.  
  452.     }
  453.  
  454. }
  455.     felszabadit(eleje);
  456.     felszabadit(eleje_ketto);
  457.     SDL_RemoveTimer(id);
  458. }
  459.  
  460. int main(int argc, char *argv[]) {
  461.     #ifdef __WIN32__
  462.     freopen("CON", "w", stdout);
  463.     freopen("CON", "w", stderr);
  464.     #endif
  465.  
  466.  
  467.     SDL_Surface* kepernyo = NULL;
  468.     SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER);
  469.  
  470.     kepernyo = SDL_SetVideoMode(Szelesseg,Magassag , 32,SDL_ANYFORMAT);
  471.          if (!kepernyo) {
  472.         fprintf(stderr, "Nem sikerult megnyitni az ablakot!\n");
  473.         exit(1);
  474.     }
  475.  
  476.     ketjatekos(kepernyo);
  477.  
  478.     SDL_Quit();
  479.  
  480.     return 0;
  481. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement