#include "display.h" #include "function.h" #include #include #include #include #include #include #include #include #include void screenDisplay (unsigned short int **tab, int size) { // puts("0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 "); char element[7] = { ' ', '#', 'S', '.', '*', '@', '+' }; for (int i = 0; i < size; ++i) { for (int j = 0; j < size; ++j) { printf ("%c ", element[tab[i][j]]); } puts (""); } } void screenDisplayGameSDL (unsigned short int **tab, dis *display_user) { unsigned int display_game = display_user->size_window - display_user->size_menu; int size = display_game / display_user->size_box; unsigned int marge = display_user->size_menu / 2; unsigned int i, j; for (i = 0; i < display_user->size_box; ++i) { for (j = 0; j < display_user->size_box; ++j) { SDL_Surface *img; SDL_Texture *texture; vect pos = { i * size + marge, j * size }; switch (tab[j][i]) { case EMPTY: img = IMG_Load ("empty.png"); break; case WALL: img = IMG_Load ("wall.png"); break; case PLAYER: img = IMG_Load ("player.png"); break; case TARGET: img = IMG_Load ("target.png"); break; case BOX: img = IMG_Load ("box.png"); break; case BOX_ON_TARGET: img = IMG_Load ("box_on_target.png"); break; case PLAYER_ON_TARGET: img = IMG_Load ("player_on_target.png"); break; } texture = SDL_CreateTextureFromSurface (display_user->renderer, img); displayImage (display_user->renderer, texture, pos, size); SDL_FreeSurface (img); SDL_DestroyTexture (texture); } } SDL_RenderPresent (display_user->renderer); } int getMaxSize (dis display_user) { SDL_Init (SDL_INIT_VIDEO); // init if error SDL_DisplayMode display; SDL_GetCurrentDisplayMode (0, &display); // get dim display user int result = 0; if (display.w <= display.h) { result = display.w; } else { result = display.h; } SDL_Quit (); int minus_mod = (result - 50) % display_user.size_box; // printf("DIS :%d, size : %d ,mod : %d\n",result, size_box,minus_mod); return (result - 50 - minus_mod); // margin } void initSDL (dis *display_user) { SDL_Init (SDL_INIT_VIDEO); TTF_Init (); display_user->window = SDL_CreateWindow ("Sokoman", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, display_user->size_window, display_user->size_window, SDL_WINDOW_SHOWN); if (!display_user->window) { SDL_Quit (); perror ("Window null"); exit (-1); } display_user->renderer = SDL_CreateRenderer (display_user->window, -1, SDL_RENDERER_SOFTWARE); if (!display_user->renderer) { SDL_Quit (); perror ("Renderer null"); exit (-1); } } void displayImage (SDL_Renderer *renderer, SDL_Texture *texture, vect pos, int size) { SDL_Rect rect = { pos.x, pos.y, size, size }; SDL_RenderCopy (renderer, texture, NULL, &rect); } void displayTextSDL (dis *display_user, char *text, vect coor, vect size, int font_size) { TTF_Font *Sans = TTF_OpenFont ("Roboto-Regular.ttf", font_size); SDL_Color white = { 255, 255, 255, 255 }; int text_width, text_height; SDL_Rect background; SDL_Surface *surface_text = TTF_RenderText_Solid (Sans, text, white); TTF_SizeText (Sans, text, &text_height, &text_width); SDL_Rect message_rect; message_rect.x = coor.x; message_rect.y = coor.y; message_rect.w = text_height; message_rect.h = text_width; background.x = coor.x; background.y = coor.y; background.w = text_height; background.h = text_width; if (message_rect.w > size.y) { message_rect.w = size.y; background.w = size.y; } if (message_rect.h > size.x) { message_rect.h = size.x; background.h = size.x; } SDL_Texture *message = SDL_CreateTextureFromSurface (display_user->renderer, surface_text); SDL_SetRenderDrawColor(display_user->renderer, 0, 0, 0, 255); SDL_RenderFillRect(display_user->renderer, &background); SDL_RenderCopy (display_user->renderer, message, NULL, &message_rect); SDL_RenderPresent (display_user->renderer); SDL_FreeSurface (surface_text); SDL_DestroyTexture (message); }