Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SDL.h>
- #include <SDL_gfxPrimitives.h>
- #include <math.h>
- #include <stdbool.h>
- #include <time.h>
- #include <SDL_ttf.h>
- static const unsigned Magassag = 600;
- static const unsigned Szelesseg = 800;
- static const unsigned negyzetm = 20;
- static const unsigned fal_sz=20;
- typedef struct KigyoTest{
- SDL_Rect negyzet;
- struct KigyoTest *kov;
- } KigyoTest;
- typedef enum Iranyok{
- jobb=0,
- le=1,
- bal=2,
- fel=3,
- all=5
- }Iranyok;
- KigyoTest *elore_beszur(KigyoTest *eleje, int x, int y, int meret) {
- KigyoTest *uj;
- uj = (KigyoTest*) malloc(sizeof(KigyoTest));
- uj->negyzet.x = x;
- uj->negyzet.y = y;
- uj->negyzet.h = meret;
- uj->negyzet.w = meret;
- uj->kov = eleje;
- eleje =uj;
- return eleje;
- }
- KigyoTest *utolso_torol(KigyoTest *eleje)
- {
- KigyoTest *lemarado, *mozgo;
- lemarado = NULL;
- mozgo = eleje;
- if(mozgo == NULL)
- {
- return eleje;
- }
- else if (mozgo->kov == NULL)
- {
- return eleje;
- }
- else
- {
- while(mozgo->kov != NULL)
- {
- lemarado=mozgo;
- mozgo=mozgo->kov;
- }
- free(mozgo);
- lemarado->kov=NULL;
- return eleje;
- }
- }
- Uint32 idozit(Uint32 ms, void *param) {
- SDL_Event ev;
- ev.type = SDL_USEREVENT;
- SDL_PushEvent(&ev);
- return ms;
- }
- void kigyotest_kirajzol(SDL_Surface *screen, KigyoTest *eleje)
- { int szinresz_egy,szinresz_ketto,szinresz_harom;
- KigyoTest *mozgo =eleje;
- while(mozgo!=NULL)
- {
- int maki1,maki2,maki3;
- maki1=rand()%256;
- maki2=rand()%256;
- maki3=rand()%256;
- SDL_FillRect(screen, &mozgo->negyzet, SDL_MapRGB(screen->format,maki1,maki2, maki3 ));
- mozgo=mozgo->kov;
- }
- }
- bool utkozes(KigyoTest *eleje)
- {
- KigyoTest *mozgo;
- for(mozgo=eleje->kov; mozgo!=NULL; mozgo=mozgo->kov)
- {
- if(eleje->negyzet.x==mozgo->negyzet.x && eleje->negyzet.y==mozgo->negyzet.y)
- return true;
- }
- if(eleje->negyzet.x==0 || eleje->negyzet.y==0
- ||eleje->negyzet.x==Szelesseg-negyzetm||eleje->negyzet.y==Magassag-negyzetm)
- return true;
- else
- return false;
- }
- bool kaja_utkozes(KigyoTest *eleje, SDL_Rect kaja)
- {
- KigyoTest *mozgo;
- for(mozgo=eleje->kov; mozgo!=NULL; mozgo=mozgo->kov)
- {
- if(mozgo->negyzet.x==kaja.x && mozgo->negyzet.y==kaja.y)
- return true;
- }
- if(eleje->negyzet.x==kaja.x && eleje->negyzet.y==kaja.y) return true;
- else return false;
- }
- bool kaja_uj(SDL_Rect kaja,KigyoTest *eleje)
- { KigyoTest *mozgo;
- for(mozgo=eleje->kov; mozgo!=NULL; mozgo=mozgo->kov)
- {
- if(mozgo->negyzet.x==kaja.x && mozgo->negyzet.y==kaja.y)
- return true;
- }
- if(kaja.x==0||kaja.y==0||kaja.x==Szelesseg-fal_sz||kaja.y==Magassag-fal_sz) return true;
- else return false;
- }
- void felszabadit(KigyoTest *eleje){
- KigyoTest *mozgo = eleje;
- while (mozgo != NULL) {
- KigyoTest *temp = mozgo->kov; /* következő elem */
- free(mozgo);
- mozgo = temp;
- }
- eleje = NULL;
- }
- int szamol(KigyoTest *eleje){
- KigyoTest *mozgo;
- int pontok=0;
- for(mozgo=eleje; mozgo!=NULL; mozgo=mozgo->kov)
- {
- pontok=pontok+1;
- }
- return pontok;
- }
- int main(int argc, char *argv[]) {
- #ifdef __WIN32__
- freopen("CON", "w", stdout);
- freopen("CON", "w", stderr);
- #endif
- SDL_Surface* kepernyo = NULL;
- SDL_Event event;
- SDL_Rect Kaja;
- SDL_Rect palya;
- SDL_TimerID id;
- Iranyok irany=all;
- KigyoTest *elso=NULL;
- KigyoTest *masodik=NULL;
- KigyoTest *eleje=NULL;
- srand(time(NULL));
- unsigned szin;
- int pontok=0;
- int i;
- unsigned hatter;
- bool running=true;
- bool ketjatekos=false;
- SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER);
- id = SDL_AddTimer(75, idozit, NULL);
- kepernyo = SDL_SetVideoMode(Szelesseg,Magassag , 32,SDL_ANYFORMAT);
- if (!kepernyo) {
- fprintf(stderr, "Nem sikerult megnyitni az ablakot!\n");
- exit(1);
- }
- if(ketjatekos){
- elso=elore_beszur(elso,Szelesseg/2,Magassag/2,negyzetm);
- masodik=elore_beszur(masodik,50,50,negyzetm);}
- else{
- for(i=0; i<=5*negyzetm; i=i+negyzetm)
- {
- eleje=elore_beszur(eleje,Szelesseg/2+i,Magassag/2,negyzetm);
- }
- }
- Kaja.x=(rand()%(Szelesseg/negyzetm))*negyzetm;
- Kaja.y=(rand()%(Magassag/negyzetm))*negyzetm;
- Kaja.h = negyzetm;
- Kaja.w = negyzetm;
- /* pálya*/
- palya.w = Szelesseg-2*fal_sz;
- palya.h= Magassag-2*fal_sz;
- palya.x=fal_sz;
- palya.y=fal_sz;
- szin = SDL_MapRGB(kepernyo->format,0, 35, 255 );
- hatter = SDL_MapRGB(kepernyo->format, 0, 0, 0);
- /* kitöltés*/
- /*egész kéenyő kék*/
- SDL_FillRect(kepernyo, NULL, szin);
- while(running){
- SDL_WaitEvent(&event);
- {
- switch(event.type)
- {
- case SDL_QUIT:
- running = false;
- break;
- case SDL_USEREVENT:
- SDL_FillRect(kepernyo,&palya,hatter);
- if(running){
- if(ketjatekos)
- {
- {
- if(irany==jobb) elso=elore_beszur(elso, elso->negyzet.x+negyzetm, elso->negyzet.y, negyzetm); //jobbra
- if(irany==fel) elso=elore_beszur(elso, elso->negyzet.x, elso->negyzet.y-negyzetm, negyzetm); //fel
- if(irany==bal) elso=elore_beszur(elso, elso->negyzet.x-negyzetm, elso->negyzet.y, negyzetm);//balra
- if(irany==le) elso=elore_beszur(elso, elso->negyzet.x, elso->negyzet.y+negyzetm, negyzetm); //le
- }
- if(kaja_uj(Kaja,elso))
- {
- Kaja.x=(rand()%(Szelesseg/negyzetm))*negyzetm;
- Kaja.y=(rand()%(Magassag/negyzetm))*negyzetm;
- Kaja.h = negyzetm;
- Kaja.w = negyzetm;
- SDL_FillRect(kepernyo,&Kaja,szin);
- }
- if(kaja_utkozes(elso,Kaja))
- {
- Kaja.x=(rand()%(Szelesseg/negyzetm))*negyzetm;
- Kaja.y=(rand()%(Magassag/negyzetm))*negyzetm;
- Kaja.h = negyzetm;
- Kaja.w = negyzetm;
- SDL_FillRect(kepernyo,&Kaja,szin);
- pontok++;
- }
- else
- {
- if(szamol(eleje)>6)
- {
- eleje = utolso_torol(eleje);
- }
- }
- }
- else{
- {
- if(irany==jobb) eleje=elore_beszur(eleje, eleje->negyzet.x+negyzetm, eleje->negyzet.y, negyzetm); //jobbra
- if(irany==fel) eleje=elore_beszur(eleje, eleje->negyzet.x, eleje->negyzet.y-negyzetm, negyzetm); //fel
- if(irany==bal) eleje=elore_beszur(eleje, eleje->negyzet.x-negyzetm, eleje->negyzet.y, negyzetm);//balra
- if(irany==le) eleje=elore_beszur(eleje, eleje->negyzet.x, eleje->negyzet.y+negyzetm, negyzetm); //le
- }
- if(kaja_uj(Kaja,eleje))
- {
- Kaja.x=(rand()%(Szelesseg/negyzetm))*negyzetm;
- Kaja.y=(rand()%(Magassag/negyzetm))*negyzetm;
- Kaja.h = negyzetm;
- Kaja.w = negyzetm;
- SDL_FillRect(kepernyo,&Kaja,szin);
- }
- if(kaja_utkozes(eleje,Kaja))
- {
- Kaja.x=(rand()%(Szelesseg/negyzetm))*negyzetm;
- Kaja.y=(rand()%(Magassag/negyzetm))*negyzetm;
- Kaja.h = negyzetm;
- Kaja.w = negyzetm;
- SDL_FillRect(kepernyo,&Kaja,szin);
- pontok++;
- }
- else {
- if(szamol(eleje)>6)
- {
- eleje = utolso_torol(eleje);
- }
- }
- }
- }
- SDL_FillRect(kepernyo, &Kaja, SDL_MapRGB(kepernyo->format,0, 35, 255 ));
- kigyotest_kirajzol(kepernyo, eleje);
- /*második*/ kigyotest_kirajzol(kepernyo, masodik);
- SDL_FillRect(kepernyo,&(eleje->negyzet),SDL_MapRGB(kepernyo->format,255, 0, 0 ));
- SDL_Flip(kepernyo);
- break;
- case SDL_KEYDOWN:
- if (event.key.keysym.sym == SDLK_UP &&irany!=le)
- {
- irany=fel;
- }
- else if (event.key.keysym.sym == SDLK_DOWN&&irany!=fel)
- {
- irany=le;
- }
- else if (event.key.keysym.sym == SDLK_LEFT&&irany!=jobb&&irany!=all)
- {
- irany=bal;
- }
- else if (event.key.keysym.sym == SDLK_RIGHT&&irany!=bal)
- {
- irany=jobb;
- }
- break;
- }
- }
- if(utkozes(eleje)){
- running=false;}
- SDL_Flip(kepernyo);
- //fprintf(stderr, "%d ", szamol(eleje));
- if(utkozes(eleje)){
- fprintf(stderr, "VESZTETTEL\n");
- fprintf(stderr, "EREDMENY:");
- fprintf(stderr, "%d PONT", pontok*10);
- }
- }
- felszabadit(eleje);
- SDL_RemoveTimer(id);
- SDL_Quit();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement