Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <SDL.h>
- #include <SDL_gfxPrimitives.h>
- #include <SDL_ttf.h>
- #include <stdbool.h>
- #include <time.h>
- #include <math.h>
- #include "mentes.h"
- Uint32 idozit(Uint32 ms, void *param) {
- SDL_Event event;
- event.type = SDL_USEREVENT;
- SDL_PushEvent(&event);
- return ms;
- }
- typedef enum iranyok {fel, le, jobbra, balra } iranyok;
- SDL_Event event;
- SDL_Surface *screen;
- SDL_TimerID id;
- typedef struct Kigyo {
- int x, y;
- iranyok irany;
- struct Kigyo *kov;
- struct Kigyo *elozo;
- } Kigyo;
- typedef struct Pont{
- int x;
- int y;
- int r;
- } Pont;
- void menu() {
- stringRGBA(screen, 130, 10, "Esc kilepes 2, 2. jatekos, 3, pontok mentese", 255, 255, 255, 255);
- }
- Kigyo *hozzafuz(Kigyo *kigyo) {
- Kigyo *uj;
- uj = (Kigyo*) malloc(sizeof(Kigyo)); //teruletfoglalas
- Kigyo *mozgo;
- mozgo=kigyo;
- for (mozgo = kigyo; mozgo->kov != NULL; mozgo = mozgo->kov) //elmegy a vegere
- ;
- if(kigyo->irany==balra) {
- uj->x = mozgo->x+10;
- uj->kov = NULL; //kov null, mert a vegere illeszt
- uj->y=mozgo->y;
- uj->elozo=mozgo;} //duplan lancolt lista miatt 2 pointer van
- if(kigyo->irany==jobbra) {
- uj->x = mozgo->x-10;
- uj->kov= NULL;
- uj->y=mozgo->y;
- uj->elozo=mozgo;}
- if(kigyo->irany==fel) {
- uj->y=mozgo->y+10;
- uj->kov=NULL;
- uj->x=mozgo->x;
- uj->elozo=mozgo;
- }
- if(kigyo->irany==le) {
- uj->y=mozgo->y-10;
- uj->kov=NULL;
- uj->x=mozgo->x;
- uj->elozo=mozgo;
- }
- mozgo->kov = uj;
- return kigyo; //mivel listaelemmel ter vissza azt el kell tárolni ott ahol a függvényt meghívtuk
- // kigyo=hozzafuz(kigyo); itt a kigyo mindkét esetben pointer
- }
- Pont kaja;
- Kigyo kigyo;
- void sorsol(Pont *kaja) {
- kaja->x = rand()%600+1;
- kaja->y = rand()%600+1;
- }
- void kiir(SDL_Surface* screen, Kigyo *kigyo, Pont *kaja){
- Kigyo* mozgo;
- for(mozgo=kigyo;mozgo!=NULL;mozgo=mozgo->kov)
- filledCircleRGBA(screen, mozgo->x, mozgo->y, 5, 0, 0, 155, 255);
- filledCircleRGBA(screen, kaja->x, kaja->y, kaja->r, 155,155, 155, 255);
- SDL_Flip(screen);
- }
- void kiir_ketto(SDL_Surface* screen, Kigyo *kigyo, Kigyo *kegyo, Pont *kaja){
- Kigyo* mozgo;
- for(mozgo=kigyo;mozgo!=NULL;mozgo=mozgo->kov)
- filledCircleRGBA(screen, mozgo->x, mozgo->y, 5, 0, 0, 155, 255);
- Kigyo* mozgok;
- for(mozgok=kegyo;mozgok!=NULL;mozgok=mozgok->kov)
- filledCircleRGBA(screen, mozgok->x, mozgok->y, 5, 0, 0, 155, 255);
- filledCircleRGBA(screen, kaja->x, kaja->y, kaja->r, 155,155, 155, 255);
- SDL_Flip(screen);
- }
- Kigyo* atad(Kigyo* kigyo) {
- Kigyo* mozgo, *mozgo2;
- for(mozgo=kigyo;mozgo->kov!=NULL;mozgo=mozgo->kov){
- if(mozgo->irany==balra){
- mozgo->kov->irany=balra;}
- if(mozgo->irany==jobbra){
- mozgo->kov->irany=jobbra;}
- if(mozgo->irany==fel){
- mozgo->kov->irany=fel;}
- if(mozgo->irany==le){
- mozgo->kov->irany=le;}
- mozgo->kov->irany=mozgo->irany;
- }
- for(mozgo2=mozgo;mozgo2->elozo!=NULL; mozgo2=mozgo2->elozo){
- if(mozgo2->irany==balra){
- mozgo2->x=mozgo2->elozo->x+10;
- mozgo2->y=mozgo2->elozo->y;}
- if(mozgo->irany==jobbra){
- mozgo2->x=mozgo2->elozo->x-10;
- mozgo2->y=mozgo2->elozo->y;}
- if(mozgo->irany==fel){
- mozgo2->y=mozgo2->elozo->y+10;
- mozgo2->x=mozgo2->elozo->x;}
- if(mozgo->irany==le){
- mozgo2->y=mozgo2->elozo->y-10;
- mozgo2->x=mozgo2->elozo->x;}
- }
- return kigyo;
- }
- Kigyo* iranyit(Kigyo* kigyo){
- Kigyo *mozgo;
- for(mozgo=kigyo;mozgo!=NULL;mozgo=mozgo->kov) {
- if(mozgo->irany==balra) {
- mozgo->x -=2;
- }
- if(mozgo->irany==jobbra) {
- mozgo->x +=2;
- ;}
- if(mozgo->irany==fel) {
- mozgo->y-=2;
- }
- if(mozgo->irany==le) {
- mozgo->y+=2;
- } }
- return kigyo;
- }
- bool ellenoriz(Kigyo *kigyo, Kigyo *kegyo) {
- if(abs(kigyo->x-kegyo->x)<5 && abs(kigyo->y-kegyo->y)<5)
- return true;
- Kigyo *mozgo;
- Kigyo *mezgo;
- for(mezgo=kegyo;mezgo->kov!=NULL;mezgo=mezgo->kov){
- for(mozgo=kegyo;mozgo->kov!=NULL;mozgo=mozgo->kov)
- if(abs(kigyo->kov->x-kigyo->x)<5 && abs(kigyo->kov->y-kigyo->y)<5)
- return true;
- if(abs(kigyo->kov->x-kegyo->kov->x)<5 && abs(kigyo->kov->y-kegyo->kov->y)<5)
- return true;
- if(abs(kegyo->kov->x-kegyo->x)<5 && abs(kegyo->kov->y-kegyo->y)<5)
- return true;
- }
- return false;
- }
- int main(int argc, char *argv[]) {
- srand(time(0));
- SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER);
- screen = SDL_SetVideoMode(600, 600, 0, SDL_ANYFORMAT);
- if(!screen) {
- fprintf(stderr, "Nem sikerult megnyitni az ablakot!\n");
- exit(1);
- }
- SDL_WM_SetCaption("SDL NHF", "SDL NHF");
- Kigyo kegyo;
- kigyo.x = 100; //kezdőértékek
- kigyo.y = 500;
- kigyo.kov=NULL;
- kigyo.elozo=NULL;
- kegyo.x = 500;
- kegyo.irany = le;
- kegyo.y = 100;
- kegyo.kov=NULL;
- kegyo.elozo=NULL;
- int db=0;
- kaja.r=5;
- kaja.x=100;
- kaja.y=50;
- bool ketjatekos=false;
- id = SDL_AddTimer(20, idozit, NULL);
- bool quit = false;
- while(!quit) {
- SDL_WaitEvent(&event);
- switch(event.type) {
- case SDL_KEYDOWN :
- menu();
- switch (event.key.keysym.sym) {
- case SDLK_UP:
- if(kigyo.irany!=le)
- kigyo.irany = fel;
- break;
- case SDLK_DOWN:
- if(kigyo.irany!=fel)
- kigyo.irany = le;
- break;
- case SDLK_LEFT:
- if(kigyo.irany!=jobbra)
- kigyo.irany = balra;
- break;
- case SDLK_RIGHT:
- if(kigyo.irany!=balra)
- kigyo.irany=jobbra;
- break;
- case SDLK_ESCAPE:
- mentes(db);
- quit=true;
- break;
- case SDLK_2:
- ketjatekos=true;
- break;
- case SDLK_3:
- mentes(db);
- break;
- case SDLK_w:
- if(kegyo.irany!=le)
- kegyo.irany=fel;
- break;
- case SDLK_s:
- if(kegyo.irany!=fel)
- kegyo.irany=le;
- break;
- case SDLK_d:
- if(kegyo.irany!=balra)
- kegyo.irany=jobbra;
- break;
- case SDLK_a:
- if(kegyo.irany!=jobbra)
- kegyo.irany=balra;
- break;
- break;
- case SDL_QUIT:
- quit = true;
- break; }
- if( kigyo.x<0 || kigyo.y < 0 || kigyo.x > 600 || kigyo.y > 600){
- quit=true;
- mentes(db);
- }
- break;
- case SDL_USEREVENT : {
- boxColor(screen, 0, 0, 600, 600, 0x000000FF);
- if(ketjatekos==true) {
- menu();
- iranyit(&kegyo);
- iranyit(&kigyo);
- atad(&kegyo);
- atad(&kigyo);
- if(abs(kigyo.x-kaja.x)<5 && abs(kigyo.y-kaja.y)<5 ) {
- // kaja területét vizsgálom különben elég nehéz lenne a játék
- ++db;
- sorsol(&kaja);
- kigyo=*hozzafuz(&kigyo);
- kigyo=*atad(&kigyo);
- kigyo=*iranyit(&kigyo);
- }
- if(abs(kegyo.x-kaja.x)<5 && abs(kegyo.y-kaja.y)<5 ) {
- // kaja területét vizsgálom különben elég nehéz lenne a játék
- sorsol(&kaja);
- kegyo=*hozzafuz(&kegyo);
- kegyo=*atad(&kegyo);
- kegyo=*iranyit(&kegyo);
- }
- if( kegyo.x<0 || kegyo.y < 0 || kegyo.x > 600 || kegyo.y > 600){
- quit=true;
- mentes(db);
- }
- if(ellenoriz(&kigyo, &kegyo))
- quit=true;
- kiir_ketto(screen, &kigyo, &kegyo, &kaja);
- }
- if (ketjatekos==false) {
- menu();
- iranyit(&kigyo);
- atad(&kigyo);
- if(abs(kigyo.x-kaja.x)<5 && abs(kigyo.y-kaja.y)<5 ) {
- // kaja területét vizsgálom különben elég nehéz lenne a játék
- ++db;
- sorsol(&kaja);
- kigyo=*hozzafuz(&kigyo);
- kigyo=*atad(&kigyo);
- kigyo=*iranyit(&kigyo);
- }
- kiir(screen, &kigyo, &kaja);
- }
- } break; // userevent vége
- } //event.type vege
- } //while vége
- SDL_RemoveTimer(id);
- SDL_Flip(screen);
- SDL_Quit();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement