Skip to content
Snippets Groups Projects
Select Git revision
  • b5f76afdd5c508813fa35c0b30cc5771f07d691a
  • main default
  • qlearn-4
  • qlearning5
  • qlearn5
  • render
  • qlearn
  • ball
  • fire
  • player
10 results

render.c

Blame
  • render.c 3.16 KiB
    #include "render.h"
    
    SDL_Window *window;
    SDL_Renderer *renderer;
    
    TTF_Font *RobotoFont;
    SDL_DisplayMode ScreenDimension;
    
    SDL_Surface * grassSurface;
    SDL_Texture * grassTexture;
    
    SDL_Surface * treeSurface;
    SDL_Texture * treeTexture;
    
    SDL_Surface * hoverSurface;
    SDL_Texture * hoverTexture;
    
    void CreateWindow(){
    
        if (SDL_Init(SDL_INIT_VIDEO) != 0){
            printf("Couldn't create window.");
            exit(EXIT_FAILURE);
        }
    
        SDL_GetCurrentDisplayMode(0, &ScreenDimension);
    
        window = SDL_CreateWindow("Game Of Life", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, ScreenDimension.w, ScreenDimension.h, SDL_WINDOW_INPUT_GRABBED | SDL_WINDOW_SHOWN | SDL_WINDOW_FULLSCREEN_DESKTOP);
    
        if (window == NULL){
            printf("Couldn't create window");
            exit(EXIT_FAILURE);
        }
    
        renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE | SDL_RENDERER_PRESENTVSYNC);
    
        if (renderer == NULL){
            printf("Couldn't create renderer.");
            exit(EXIT_FAILURE);
        }
    
        if (TTF_Init() == -1)
        {
            exit(EXIT_FAILURE);
        }
    
        RobotoFont = TTF_OpenFont("Res/Roboto-Black.ttf", 50);  
    
    }
    
    void drawMap(){
        int i, j;
        SDL_Rect rect;
        rect.h = CELLSIZE;
        rect.w = CELLSIZE;
        rect.x = (ScreenDimension.w - (MAPSIZE * CELLSIZE)) / 2; // centers the drawing
        rect.y = 0;
        for(i = 0; i < MAPSIZE; i++){
            for(j = 0; j < MAPSIZE; j++){
                SDL_RenderCopy(renderer, grassTexture, NULL, &rect);
                if(map[i][j] == 1){
                    SDL_RenderCopy(renderer, treeTexture, NULL, &rect);
                }
                if (hover[0] == j && hover[1] == i){
                    SDL_RenderCopy(renderer, hoverTexture, NULL, &rect);
                }
                rect.x += CELLSIZE;
            }
            rect.x = (ScreenDimension.w - (MAPSIZE * CELLSIZE)) / 2;
            rect.y += CELLSIZE;
        }
    }
    
    
    void drawGame(){
        SDL_RenderClear(renderer);
        drawMap();
        SDL_RenderPresent(renderer);
    }
    
    void MainLoop(){
        CreateWindow();
    
        grassSurface = IMG_Load("Res/grass.png");
        grassTexture = SDL_CreateTextureFromSurface(renderer, grassSurface);
    
        treeSurface = IMG_Load("Res/tree.png");
        treeTexture = SDL_CreateTextureFromSurface(renderer, treeSurface);
    
        hoverSurface = IMG_Load("Res/hover.png");
        hoverTexture = SDL_CreateTextureFromSurface(renderer, hoverSurface);
    
        SDL_FreeSurface(grassSurface);
        SDL_FreeSurface(treeSurface);
    
        unsigned int a = SDL_GetTicks();
        unsigned int b = SDL_GetTicks();
        double delta = 0;
    
        pthread_t eventThread;
        if (pthread_create(&eventThread, NULL, EventLoop, NULL) != 0){
            printf("Couldn't create thread.");
            exit(EXIT_FAILURE);
        }
    
        while (running){
            a = SDL_GetTicks();
            delta = (a - b) / 1000.0;
            if (delta > 1/FPS_TO_GET){
                b = a;
                switch (game_state){
                    case MENU:
                        //Menu();
                        break;
                    case GAME:
                        drawGame();
                        break;
                }
            }
            else {
                // fait dormir le thread pour garder des ressources
                usleep(1000 * (1/FPS_TO_GET - delta));
            }
    
        }
    }