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)
- {
- KigyoTest *mozgo =eleje;
- while(mozgo!=NULL)
- {
- SDL_FillRect(screen, &mozgo->negyzet, SDL_MapRGB(screen->format,255,255, 255 ));
- 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)
- {
- 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;
- 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;
- }
- void jatek(SDL_Surface *kepernyo){
- SDL_Event event;
- SDL_Rect Kaja;
- SDL_Rect palya;
- SDL_TimerID id;
- Iranyok irany=all;
- KigyoTest *eleje=NULL;
- srand(time(NULL));
- unsigned szin;
- int pontok=0;
- unsigned hatter;
- bool running=true;
- id = SDL_AddTimer(75, idozit, NULL);
- eleje=elore_beszur(eleje,Szelesseg/2,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*/
- SDL_FillRect(kepernyo, NULL, SDL_MapRGB(kepernyo->format, 0, 35, 255));
- 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(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
- eleje = utolso_torol(eleje);
- }
- SDL_FillRect(kepernyo, &Kaja, szin);
- kigyotest_kirajzol(kepernyo, eleje);
- 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=bal;
- }
- else if (event.key.keysym.sym == SDLK_RIGHT&&irany!=bal)
- {
- irany=jobb;
- }
- break;
- }
- if(utkozes(eleje)){
- running=false;}
- SDL_Flip(kepernyo);
- if(utkozes(eleje)){
- fprintf(stderr, "VESZTETTEL\n");
- fprintf(stderr, "EREDMENY:");
- fprintf(stderr, "%d PONT", pontok*10);
- }
- }
- felszabadit(eleje);
- SDL_RemoveTimer(id);
- }
- void ketjatekos(SDL_Surface *kepernyo){
- SDL_Event event;
- SDL_Rect Kaja;
- SDL_Rect palya;
- SDL_TimerID id;
- Iranyok irany=all;
- Iranyok irany_ketto=all;
- KigyoTest *eleje=NULL;
- KigyoTest *eleje_ketto=NULL;
- srand(time(NULL));
- unsigned szin;
- int pontok=0;
- int pontok_ketto=0;
- unsigned hatter;
- bool running=true;
- id = SDL_AddTimer(100, idozit, NULL);
- eleje=elore_beszur(eleje,Szelesseg/2,Magassag/2,negyzetm);
- eleje_ketto=elore_beszur(eleje_ketto,negyzetm*2,negyzetm*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(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(irany_ketto==jobb) eleje_ketto=elore_beszur(eleje_ketto, eleje_ketto->negyzet.x+negyzetm, eleje_ketto->negyzet.y, negyzetm); //jobbra
- if(irany_ketto==fel) eleje_ketto=elore_beszur(eleje_ketto, eleje_ketto->negyzet.x, eleje_ketto->negyzet.y-negyzetm, negyzetm); //fel
- if(irany_ketto==bal) eleje_ketto=elore_beszur(eleje_ketto, eleje_ketto->negyzet.x-negyzetm, eleje_ketto->negyzet.y, negyzetm);//balra
- if(irany_ketto==le) eleje_ketto=elore_beszur(eleje_ketto, eleje_ketto->negyzet.x, eleje_ketto->negyzet.y+negyzetm, negyzetm); //le
- }
- if(kaja_uj(Kaja,eleje)|| kaja_uj(Kaja,eleje_ketto))
- {
- 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);
- }
- else{
- eleje = utolso_torol(eleje);}
- if(kaja_utkozes(eleje_ketto,Kaja))
- {
- Kaja.x=(rand()%(Szelesseg/negyzetm))*negyzetm;
- Kaja.y=(rand()%(Magassag/negyzetm))*negyzetm;
- Kaja.h = negyzetm;
- Kaja.w = negyzetm;
- SDL_FillRect(kepernyo,&Kaja,szin);
- }
- else{
- eleje_ketto=utolso_torol(eleje_ketto);}
- }
- SDL_FillRect(kepernyo, &Kaja, szin);
- kigyotest_kirajzol(kepernyo, eleje);
- kigyotest_kirajzol(kepernyo,eleje_ketto);
- 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=bal;
- }
- else if (event.key.keysym.sym == SDLK_RIGHT&&irany!=bal)
- {
- irany=jobb;
- }
- /*második cumó irányírása*/
- if (event.key.keysym.sym == SDLK_w &&irany_ketto!=le)
- {
- irany_ketto=fel;
- }
- else if (event.key.keysym.sym == SDLK_s&&irany_ketto!=fel)
- {
- irany_ketto=le;
- }
- else if (event.key.keysym.sym == SDLK_a&&irany_ketto!=jobb)
- {
- irany_ketto=bal;
- }
- else if (event.key.keysym.sym == SDLK_d&&irany_ketto!=bal)
- {
- irany_ketto=jobb;
- }
- break;
- }
- if(utkozes(eleje)){
- running=false;}
- if(utkozes(eleje_ketto)){
- running=false;
- }
- SDL_Flip(kepernyo);
- if(utkozes(eleje)|| utkozes(eleje_ketto)){
- fprintf(stderr, "VESZTETTEL\n");
- fprintf(stderr, "EREDMENY1:");
- fprintf(stderr, "%d PONT", pontok*10);
- fprintf(stderr, "EREDMENY2:");
- fprintf(stderr, "%d PONT", pontok_ketto*10);
- }
- }
- felszabadit(eleje);
- felszabadit(eleje_ketto);
- SDL_RemoveTimer(id);
- }
- int main(int argc, char *argv[]) {
- #ifdef __WIN32__
- freopen("CON", "w", stdout);
- freopen("CON", "w", stderr);
- #endif
- SDL_Surface* kepernyo = NULL;
- SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER);
- kepernyo = SDL_SetVideoMode(Szelesseg,Magassag , 32,SDL_ANYFORMAT);
- if (!kepernyo) {
- fprintf(stderr, "Nem sikerult megnyitni az ablakot!\n");
- exit(1);
- }
- ketjatekos(kepernyo);
- SDL_Quit();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement