display SDL

This commit is contained in:
2024-12-14 13:05:38 +01:00
parent 19a05574ab
commit 54e7f38ff2
14 changed files with 182 additions and 10 deletions

104
display.c
View File

@@ -1,4 +1,11 @@
#include "display.h"
#include "function.h"
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <SDL2/SDL_mutex.h>
#include <SDL2/SDL_rect.h>
#include <SDL2/SDL_render.h>
#include <SDL2/SDL_surface.h>
#include <stdio.h>
void
@@ -15,3 +22,100 @@ screenDisplay (unsigned short int **tab, int size)
puts ("");
}
}
void
screenDisplaySDL (unsigned short int **tab, dis *display_user)
{
int size = display_user->size_window / display_user->size_box;
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, 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 ()
{
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();
return (result - 50); // margin
}
void
initSDL (dis *display_user)
{
SDL_Init (SDL_INIT_VIDEO);
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);
}