Skip to content

Commit e5f85dd

Browse files
committed
fin du refactoring et testing de rendering
1 parent c3f17f3 commit e5f85dd

2 files changed

Lines changed: 82 additions & 78 deletions

File tree

src/ui/rendering.c

Lines changed: 72 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,16 @@ static void draw_board(SDL_Renderer *renderer)
3737
}
3838
}
3939

40+
static inline GameEnvironement create_game_environment(SDL_Event *event, Chessboard *board, SDL_Renderer *renderer, GenericList *colored_squares)
41+
{
42+
GameEnvironement env;
43+
env.event = event;
44+
env.board = board;
45+
env.renderer = renderer;
46+
env.colored_squares = colored_squares;
47+
return env;
48+
}
49+
4050
/// Renvoie l'index de la case cliquée (0 à 63), ou -1 si aucun clic gauche
4151
static int get_colored_square(SDL_Event *event)
4252
{
@@ -222,23 +232,23 @@ static void render_play_move(Chessboard *board, Move moves[250], int to, int nbm
222232
play_move(board, move);
223233
}
224234

225-
static void ui_refresh_board(SDL_Renderer *renderer, Chessboard *board, GenericList *colored_squares)
235+
static void ui_refresh_board(GameEnvironement env)
226236
{
227237
char *fen = calloc(400, 1);
228238
if (!fen)
229239
return;
230240

231-
return_fen_code(board, fen);
241+
return_fen_code(env.board, fen);
232242

233-
SDL_RenderClear(renderer);
234-
draw_board(renderer);
243+
SDL_RenderClear(env.renderer);
244+
draw_board(env.renderer);
235245

236-
if (colored_squares->size != 0)
237-
swap_color_squares(colored_squares, renderer);
246+
if (env.colored_squares->size != 0)
247+
swap_color_squares(env.colored_squares, env.renderer);
238248

239-
render_fen(renderer, fen);
249+
render_fen(env.renderer, fen);
240250

241-
SDL_RenderPresent(renderer);
251+
SDL_RenderPresent(env.renderer);
242252
free(fen);
243253
}
244254

@@ -262,35 +272,48 @@ static void reset_colored_squares(GenericList *colored_squares)
262272
}
263273

264274
// Gère les mouvements et cliks du joueur
265-
static void handle_player_event(SDL_Event *event, SDL_Renderer *renderer, Chessboard *board,
266-
GenericList *colored_squares, int *clicked_square, int *nbmoves)
275+
static void handle_player_event(GameEnvironement env, int *clicked_square)
267276
{
268-
int square = get_colored_square(event);
269-
if (invalid_event(event, square))
277+
int square = get_colored_square(env.event);
278+
if (invalid_event(env.event, square))
270279
return;
271280

272281
Move list_moves[250];
273282

274-
SDL_RenderClear(renderer);
275-
draw_board(renderer);
283+
SDL_RenderClear(env.renderer);
284+
draw_board(env.renderer);
276285

277-
if (colored_squares->size == 0)
286+
if (env.colored_squares->size == 0)
278287
{
279-
*nbmoves = set_moves(board, list_moves, square, colored_squares);
288+
set_moves(env.board, list_moves, square, env.colored_squares);
280289
*clicked_square = square;
281290
}
282291
else
283292
{
284-
if (is_in_list(colored_squares, &square))
293+
if (is_in_list(env.colored_squares, &square))
285294
{
286-
*nbmoves = getlegalmoves(*clicked_square, board, list_moves);
287-
render_play_move(board, list_moves, square, *nbmoves);
295+
int nbmoves = getlegalmoves(*clicked_square, env.board, list_moves);
296+
render_play_move(env.board, list_moves, square, nbmoves);
288297
}
289-
reset_colored_squares(colored_squares);
290-
*nbmoves = 0;
298+
reset_colored_squares(env.colored_squares);
291299
}
292300
}
293301

302+
static GameEnvironement init_game_environment(char *startpos, SDL_Renderer *renderer)
303+
{
304+
GenericList *colored_squares = malloc(sizeof(GenericList));
305+
list_init(colored_squares, sizeof(int));
306+
307+
Chessboard *board = malloc(sizeof(Chessboard));
308+
init_chessboard_from_fen(board, startpos);
309+
310+
SDL_Event *event = malloc(sizeof(SDL_Event));
311+
312+
GameEnvironement env = create_game_environment(event, board, renderer, colored_squares);
313+
return env;
314+
}
315+
316+
294317
// Libère toutes les ressources SDL + internes
295318
static void cleanup_ui(SDL_Renderer *renderer, SDL_Window *window, GenericList *colored_squares, Chessboard *board)
296319
{
@@ -353,72 +376,53 @@ static bool is_ai_turn(int color_ai, int color)
353376
return (color_ai == 2 || color == color_ai);
354377
}
355378

356-
int handle_SDL_events(SDL_Event *event,
357-
Chessboard *board,
358-
int color_ai,
359-
SDL_Renderer *renderer,
360-
GenericList *colored_squares,
361-
int *clicked_square,
362-
int *nbmoves)
379+
static bool handle_SDL_events(int color_ai, int *clicked_square, GameEnvironement env)
363380
{
364-
if (event->type == SDL_QUIT)
365-
return 0;
381+
if (env.event->type == SDL_QUIT)
382+
return false;
366383

367-
int color = board->white_to_play ? WHITE : BLACK;
384+
int color = env.board->white_to_play ? WHITE : BLACK;
368385

369386
if (is_human_turn(color_ai, color))
370387
{
371-
handle_player_event(event, renderer, board, colored_squares, clicked_square, nbmoves);
372-
ui_refresh_board(renderer, board, colored_squares);
388+
handle_player_event(env, clicked_square);
389+
ui_refresh_board(env);
373390
}
374-
printf("About to return, board->white_to_play = %d\n", board->white_to_play);
375-
fflush(stdout);
376-
return 1;
391+
return true;
377392
}
378393

379-
static void game_loop(char *startpos, SDL_Renderer *renderer, int color_ai, SDL_Window *window)
394+
static void handle_ai_turn(int color_ai, GameEnvironement env)
380395
{
381-
GenericList colored_squares;
382-
list_init(&colored_squares, sizeof(int));
396+
int color = env.board->white_to_play ? WHITE : BLACK;
383397

384-
Chessboard *board = malloc(sizeof(Chessboard));
385-
init_chessboard_from_fen(board, startpos);
398+
if (is_ai_turn(color_ai, color))
399+
{
400+
Move move = get_best_move(*env.board);
401+
play_move(env.board, move);
402+
ui_refresh_board(env);
403+
SDL_Delay(50);
404+
}
386405

387-
int nbmoves = 0, clicked_square = -1;
388-
bool running = true;
389-
SDL_Event event;
406+
SDL_Delay(10);
407+
}
390408

391-
ui_refresh_board(renderer, board, &colored_squares);
409+
static void game_loop(char *startpos, SDL_Renderer *renderer, int color_ai, SDL_Window *window)
410+
{
411+
GameEnvironement env = init_game_environment(startpos, renderer);
412+
int clicked_square = -1;
413+
bool running = true;
414+
ui_refresh_board(env);
392415

393416
while (running)
394417
{
395-
while (SDL_PollEvent(&event))
418+
while (SDL_PollEvent(env.event))
396419
{
397-
if (!handle_SDL_events(&event, board, color_ai, renderer, &colored_squares, &clicked_square, &nbmoves))
398-
{
420+
if (!handle_SDL_events(color_ai, &clicked_square, env))
399421
running = false;
400-
break;
401-
}
402-
printf("Has return, board->white_to_play = %d\n", board->white_to_play);
403-
fflush(stdout);
404-
}
405-
406-
if (!running)
407-
break;
408-
409-
int color = board->white_to_play ? WHITE : BLACK;
410-
411-
if (is_ai_turn(color_ai, color))
412-
{
413-
Move move = get_best_move(*board);
414-
play_move(board, move);
415-
ui_refresh_board(renderer, board, &colored_squares);
416-
SDL_Delay(50);
417422
}
418-
419-
SDL_Delay(10);
423+
handle_ai_turn(color_ai, env);
420424
}
421-
cleanup_ui(renderer, window, &colored_squares, board);
425+
cleanup_ui(renderer, window, env.colored_squares, env.board);
422426
}
423427

424428
// --- Boucle principale du jeu ---

src/ui/rendering.h

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,16 @@ enum
1313
{
1414
HvH = -1,
1515
AvA = 2,
16-
}; // pour l'attribut ia_color
16+
}; // pour l'attribut ia_color
1717

18-
#pragma once
18+
typedef struct
19+
{
20+
SDL_Event *event;
21+
Chessboard *board;
22+
SDL_Renderer *renderer;
23+
GenericList *colored_squares;
24+
} GameEnvironement;
1925

20-
int ui_main_loop(char *startpos, int color_ai);
26+
#pragma once
2127

22-
int handle_SDL_events(SDL_Event *event,
23-
Chessboard *board,
24-
int color_ai,
25-
SDL_Renderer *renderer,
26-
GenericList *colored_squares,
27-
int *clicked_square,
28-
int *nbmoves);
28+
int ui_main_loop(char *startpos, int color_ai);

0 commit comments

Comments
 (0)