Advertisement
Guest User

Untitled

a guest
Dec 8th, 2016
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 9.68 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. {   int szinresz_egy,szinresz_ketto,szinresz_harom;
  76.     KigyoTest *mozgo =eleje;
  77.     while(mozgo!=NULL)
  78.     {
  79.         int maki1,maki2,maki3;
  80.         maki1=rand()%256;
  81.         maki2=rand()%256;
  82.         maki3=rand()%256;
  83.  
  84.  
  85.         SDL_FillRect(screen, &mozgo->negyzet, SDL_MapRGB(screen->format,maki1,maki2, maki3 ));
  86.         mozgo=mozgo->kov;
  87.  
  88.     }
  89. }
  90.  
  91. bool utkozes(KigyoTest *eleje)
  92. {
  93.     KigyoTest *mozgo;
  94.     for(mozgo=eleje->kov; mozgo!=NULL; mozgo=mozgo->kov)
  95.     {
  96.         if(eleje->negyzet.x==mozgo->negyzet.x && eleje->negyzet.y==mozgo->negyzet.y)
  97.             return true;
  98.     }
  99.     if(eleje->negyzet.x==0 || eleje->negyzet.y==0
  100.             ||eleje->negyzet.x==Szelesseg-negyzetm||eleje->negyzet.y==Magassag-negyzetm)
  101.         return true;
  102.     else
  103.         return false;
  104.  
  105. }
  106.  
  107. bool kaja_utkozes(KigyoTest *eleje, SDL_Rect kaja)
  108. {
  109.     KigyoTest *mozgo;
  110.      for(mozgo=eleje->kov; mozgo!=NULL; mozgo=mozgo->kov)
  111.     {
  112.         if(mozgo->negyzet.x==kaja.x && mozgo->negyzet.y==kaja.y)
  113.             return true;
  114.     }
  115.  
  116.     if(eleje->negyzet.x==kaja.x && eleje->negyzet.y==kaja.y) return true;
  117.  
  118.     else return false;
  119. }
  120.  
  121. bool kaja_uj(SDL_Rect kaja,KigyoTest *eleje)
  122. {    KigyoTest *mozgo;
  123.      for(mozgo=eleje->kov; mozgo!=NULL; mozgo=mozgo->kov)
  124.     {
  125.         if(mozgo->negyzet.x==kaja.x && mozgo->negyzet.y==kaja.y)
  126.             return true;
  127.     }
  128.  
  129.      if(kaja.x==0||kaja.y==0||kaja.x==Szelesseg-fal_sz||kaja.y==Magassag-fal_sz) return true;
  130.      else return false;
  131.  
  132. }
  133. void felszabadit(KigyoTest *eleje){
  134. KigyoTest *mozgo = eleje;
  135. while (mozgo != NULL) {
  136.    KigyoTest *temp = mozgo->kov; /* következő elem */
  137.    free(mozgo);
  138.    mozgo = temp;
  139. }
  140. eleje = NULL;
  141. }
  142.  
  143. int szamol(KigyoTest *eleje){
  144.     KigyoTest *mozgo;
  145.     int pontok=0;
  146.      for(mozgo=eleje; mozgo!=NULL; mozgo=mozgo->kov)
  147.     {
  148.         pontok=pontok+1;
  149.     }
  150.     return pontok;
  151. }
  152.  
  153.  
  154. int main(int argc, char *argv[]) {
  155.     #ifdef __WIN32__
  156.     freopen("CON", "w", stdout);
  157.     freopen("CON", "w", stderr);
  158.     #endif
  159.     SDL_Surface* kepernyo = NULL;
  160.     SDL_Event event;
  161.  
  162.     SDL_Rect Kaja;
  163.     SDL_Rect palya;
  164.     SDL_TimerID id;
  165.  
  166.     Iranyok irany=all;
  167.     KigyoTest *elso=NULL;
  168.     KigyoTest *masodik=NULL;
  169.     KigyoTest *eleje=NULL;
  170.     srand(time(NULL));
  171.  
  172.     unsigned szin;
  173.     int pontok=0;
  174.     int i;
  175.  
  176.     unsigned hatter;
  177.     bool running=true;
  178.     bool ketjatekos=false;
  179.  
  180.     SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER);
  181.  
  182.     id = SDL_AddTimer(75, idozit, NULL);
  183.  
  184.     kepernyo = SDL_SetVideoMode(Szelesseg,Magassag , 32,SDL_ANYFORMAT);
  185.          if (!kepernyo) {
  186.         fprintf(stderr, "Nem sikerult megnyitni az ablakot!\n");
  187.         exit(1);
  188.     }
  189.  
  190.  
  191.     if(ketjatekos){
  192.             elso=elore_beszur(elso,Szelesseg/2,Magassag/2,negyzetm);
  193.             masodik=elore_beszur(masodik,50,50,negyzetm);}
  194.     else{
  195.         for(i=0; i<=5*negyzetm; i=i+negyzetm)
  196.         {
  197.             eleje=elore_beszur(eleje,Szelesseg/2+i,Magassag/2,negyzetm);
  198.         }
  199.     }
  200.  
  201.     Kaja.x=(rand()%(Szelesseg/negyzetm))*negyzetm;
  202.     Kaja.y=(rand()%(Magassag/negyzetm))*negyzetm;
  203.     Kaja.h = negyzetm;
  204.     Kaja.w = negyzetm;
  205.  
  206.  
  207.     /* pálya*/
  208.     palya.w = Szelesseg-2*fal_sz;
  209.     palya.h= Magassag-2*fal_sz;
  210.     palya.x=fal_sz;
  211.     palya.y=fal_sz;
  212.  
  213.     szin = SDL_MapRGB(kepernyo->format,0, 35, 255 );
  214.     hatter = SDL_MapRGB(kepernyo->format, 0, 0, 0);
  215.  
  216.     /* kitöltés*/
  217.    /*egész kéenyő kék*/
  218.     SDL_FillRect(kepernyo, NULL, szin);
  219.  
  220. while(running){
  221.  SDL_WaitEvent(&event);
  222. {
  223.     switch(event.type)
  224.     {
  225.         case SDL_QUIT:
  226.             running = false;
  227.             break;
  228.  
  229.             case SDL_USEREVENT:
  230.                 SDL_FillRect(kepernyo,&palya,hatter);
  231.                 if(running){
  232.  
  233.                 if(ketjatekos)
  234.                 {
  235.                     {
  236.  
  237.                         if(irany==jobb) elso=elore_beszur(elso, elso->negyzet.x+negyzetm, elso->negyzet.y, negyzetm); //jobbra
  238.                         if(irany==fel) elso=elore_beszur(elso, elso->negyzet.x, elso->negyzet.y-negyzetm, negyzetm); //fel
  239.                         if(irany==bal) elso=elore_beszur(elso, elso->negyzet.x-negyzetm, elso->negyzet.y, negyzetm);//balra
  240.                         if(irany==le) elso=elore_beszur(elso, elso->negyzet.x, elso->negyzet.y+negyzetm, negyzetm); //le
  241.                     }
  242.                     if(kaja_uj(Kaja,elso))
  243.                     {
  244.                         Kaja.x=(rand()%(Szelesseg/negyzetm))*negyzetm;
  245.                         Kaja.y=(rand()%(Magassag/negyzetm))*negyzetm;
  246.                         Kaja.h = negyzetm;
  247.                         Kaja.w = negyzetm;
  248.                         SDL_FillRect(kepernyo,&Kaja,szin);
  249.                     }
  250.  
  251.                     if(kaja_utkozes(elso,Kaja))
  252.                     {
  253.                         Kaja.x=(rand()%(Szelesseg/negyzetm))*negyzetm;
  254.                         Kaja.y=(rand()%(Magassag/negyzetm))*negyzetm;
  255.                         Kaja.h = negyzetm;
  256.                         Kaja.w = negyzetm;
  257.                         SDL_FillRect(kepernyo,&Kaja,szin);
  258.                         pontok++;
  259.                     }
  260.  
  261.                     else
  262.                     {
  263.  
  264.                         if(szamol(eleje)>6)
  265.                         {
  266.                             eleje = utolso_torol(eleje);
  267.                         }
  268.                     }
  269.                 }
  270.  
  271.                 else{
  272.                     {
  273.  
  274.                         if(irany==jobb) eleje=elore_beszur(eleje, eleje->negyzet.x+negyzetm, eleje->negyzet.y, negyzetm); //jobbra
  275.                         if(irany==fel) eleje=elore_beszur(eleje, eleje->negyzet.x, eleje->negyzet.y-negyzetm, negyzetm); //fel
  276.                         if(irany==bal) eleje=elore_beszur(eleje, eleje->negyzet.x-negyzetm, eleje->negyzet.y, negyzetm);//balra
  277.                         if(irany==le) eleje=elore_beszur(eleje, eleje->negyzet.x, eleje->negyzet.y+negyzetm, negyzetm); //le
  278.                     }
  279.                     if(kaja_uj(Kaja,eleje))
  280.                     {
  281.                         Kaja.x=(rand()%(Szelesseg/negyzetm))*negyzetm;
  282.                         Kaja.y=(rand()%(Magassag/negyzetm))*negyzetm;
  283.                         Kaja.h = negyzetm;
  284.                         Kaja.w = negyzetm;
  285.                         SDL_FillRect(kepernyo,&Kaja,szin);
  286.                     }
  287.  
  288.                     if(kaja_utkozes(eleje,Kaja))
  289.                     {
  290.                         Kaja.x=(rand()%(Szelesseg/negyzetm))*negyzetm;
  291.                         Kaja.y=(rand()%(Magassag/negyzetm))*negyzetm;
  292.                         Kaja.h = negyzetm;
  293.                         Kaja.w = negyzetm;
  294.                         SDL_FillRect(kepernyo,&Kaja,szin);
  295.                         pontok++;
  296.                     }
  297.  
  298.                     else {
  299.  
  300.                         if(szamol(eleje)>6)
  301.                         {
  302.                             eleje = utolso_torol(eleje);
  303.                         }
  304.                     }
  305.                 }
  306.  
  307.             }
  308.                 SDL_FillRect(kepernyo, &Kaja, SDL_MapRGB(kepernyo->format,0, 35, 255 ));
  309.                 kigyotest_kirajzol(kepernyo, eleje);
  310.                 /*második*/  kigyotest_kirajzol(kepernyo, masodik);
  311.                 SDL_FillRect(kepernyo,&(eleje->negyzet),SDL_MapRGB(kepernyo->format,255, 0, 0 ));
  312.                 SDL_Flip(kepernyo);
  313.                 break;
  314.  
  315.          case SDL_KEYDOWN:
  316.  
  317.             if (event.key.keysym.sym == SDLK_UP &&irany!=le)
  318.             {
  319.                 irany=fel;
  320.             }
  321.             else if (event.key.keysym.sym == SDLK_DOWN&&irany!=fel)
  322.                 {
  323.                     irany=le;
  324.                 }
  325.                 else if (event.key.keysym.sym == SDLK_LEFT&&irany!=jobb&&irany!=all)
  326.                 {
  327.                     irany=bal;
  328.                 }
  329.             else if (event.key.keysym.sym == SDLK_RIGHT&&irany!=bal)
  330.               {
  331.                   irany=jobb;
  332.  
  333.               }
  334.  
  335.                     break;
  336.  
  337.  
  338.     }
  339. }
  340.     if(utkozes(eleje)){
  341.        running=false;}
  342.     SDL_Flip(kepernyo);
  343.     //fprintf(stderr, "%d ", szamol(eleje));
  344.  
  345.  
  346.     if(utkozes(eleje)){
  347.         fprintf(stderr, "VESZTETTEL\n");
  348.         fprintf(stderr, "EREDMENY:");
  349.         fprintf(stderr, "%d PONT", pontok*10);
  350.  
  351.     }
  352.  
  353. }
  354.     felszabadit(eleje);
  355.     SDL_RemoveTimer(id);
  356.     SDL_Quit();
  357.  
  358.     return 0;
  359. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement