From 4150e9537802a64c4c1722867d32519e87d30a8b Mon Sep 17 00:00:00 2001 From: David GAILLETON Date: Sat, 28 Mar 2026 21:44:36 +0100 Subject: [PATCH] refactor of files for norminette --- Makefile | 3 +- alum1 | Bin 28160 -> 28832 bytes inc/alcu.h | 17 ++++---- src/game.c | 116 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main.c | 100 +++++---------------------------------------- 5 files changed, 136 insertions(+), 100 deletions(-) create mode 100644 src/game.c diff --git a/Makefile b/Makefile index f21d0e9..3b762f1 100644 --- a/Makefile +++ b/Makefile @@ -27,7 +27,8 @@ SRC = main.c \ fill_array.c \ check_input.c \ print_board.c \ - ai.c + ai.c \ + game.c SRCS = $(addprefix $(P_SRC), $(SRC)) OBJS = $(patsubst $(P_SRC)%.c,$(P_OBJ)%.o,$(SRCS)) diff --git a/alum1 b/alum1 index a7b58202515be5c9837c12a4ce253776731b33cc..8cddbd2ffba93d8af18221be0f7e41f8c2c58008 100755 GIT binary patch delta 7144 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 mu+JF9Dh+9XFmTaSCX0l? +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2026/03/28 13:27:29 by lud-adam #+# #+# */ -/* Updated: 2026/03/28 15:26:01 by lud-adam ### ########.fr */ +/* Updated: 2026/03/28 21:41:55 by dgaillet ### ########lyon.fr */ /* */ /* ************************************************************************** */ #ifndef ALCU_H -#define ALCU_H +# define ALCU_H -#include +# include -char *read_file(int fd); -int check_input(int fd); -void print_board(int *game_state, size_t nb_line); -int *fill_array(int fd, int size); -int ai(int *gamestate, int nb_line); +char *read_file(int fd); +int check_input(int fd); +void print_board(int *game_state, size_t nb_line); +int *fill_array(int fd, int size); +int ai(int *gamestate, int nb_line); +void game(int *lines, int size); #endif diff --git a/src/game.c b/src/game.c new file mode 100644 index 0000000..9ef9f52 --- /dev/null +++ b/src/game.c @@ -0,0 +1,116 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* game.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2026/03/28 21:14:00 by dgaillet #+# #+# */ +/* Updated: 2026/03/28 21:41:04 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft/libft.h" +#include "alcu.h" +#include "get_next_line.h" + +static int check_char_int(char *str) +{ + int i; + + i = -1; + while (str[++i] && i < 100) + if (!(str[i] >= '0' && str[i] <= '9') && str[i] != '\n') + return (0); + return (1); +} + +static int play_choice(int *line, int choice) +{ + if (choice > 0 && choice < 4) + { + if (choice > *line) + { + ft_putstr_fd("-\nInvalid choice\n", 1); + return (0); + } + *line -= choice; + return (1); + } + else + { + ft_putstr_fd("-\nInvalid choice\n", 1); + return (0); + } +} + +static void player_turn(int *line) +{ + char *temp; + int choice; + + while (1) + { + ft_putstr_fd("\nPlease choose between 1 and 3 items\n", 1); + temp = get_next_line(0); + if (temp && ft_strlen(temp) > 0) + { + if (!check_char_int(temp)) + { + free(temp); + continue ; + } + choice = ft_atoi(temp); + if (play_choice(line, choice)) + break ; + } + else + ft_putstr_fd("-\nInvalid choice\n", 1); + if (temp) + free(temp); + } +} + +static void play_turns(int *lines, int i, int *ai_turn, int size) +{ + int choice; + + while (lines[i] != 0) + { + ft_putstr_fd("\n------------------------------\n", 1); + if (!*ai_turn) + { + print_board(lines, size); + player_turn(&lines[i]); + } + else + { + print_board(lines, size); + ft_putstr_fd("\n", 1); + choice = ai(lines, size); + ft_putstr_fd("AI play ", 1); + ft_putnbr_fd(choice, 1); + ft_putstr_fd("\n", 1); + lines[i] -= choice; + } + *ai_turn = *ai_turn == 0; + } +} + +void game(int *lines, int size) +{ + int ai_turn; + int i; + + ai_turn = 1; + i = size - 1; + while (i >= 0) + { + play_turns(lines, i, &ai_turn, size); + i--; + } + if (!ai_turn) + ft_putstr_fd("AI win ! It will replace you\n", 1); + else + ft_putstr_fd("You win ! Well done\n", 1); +} diff --git a/src/main.c b/src/main.c index b1bbf9a..fc17d34 100644 --- a/src/main.c +++ b/src/main.c @@ -6,98 +6,26 @@ /* By: lud-adam +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2026/03/28 12:30:29 by lud-adam #+# #+# */ -/* Updated: 2026/03/28 20:54:09 by dgaillet ### ########lyon.fr */ +/* Updated: 2026/03/28 21:41:29 by dgaillet ### ########lyon.fr */ /* */ /* ************************************************************************** */ #include "../libft/libft.h" #include "alcu.h" -#include "get_next_line.h" #include #include #include -int check_char_int(char *str) +static int get_fd(int argc, char **argv) { - int i; - - i = -1; - while (str[++i] && i < 100) - if (!(str[i] >= '0' && str[i] <= '9') && str[i] != '\n') - return (0); - return (1); -} - -void player_turn(int *line) -{ - char *temp; - int choice; - - while (1) + if (argc == 2) { - ft_putstr_fd("\nPlease choose between 1 and 3 items\n", 1); - temp = get_next_line(0); - if (temp && ft_strlen(temp) > 0) - { - if (!check_char_int(temp)) - { - free(temp); - continue ; - } - choice = ft_atoi(temp); - free(temp); - if (choice > 0 && choice < 4) - { - if (choice > *line) - { - ft_putstr_fd("-\nInvalid choice\n", 1); - continue ; - } - *line -= choice; - break ; - } - else - { - ft_putstr_fd("-\nInvalid choice\n", 1); - continue ; - } - } + return (open(argv[1], O_RDONLY)); } -} - -void game(int *lines, int size) -{ - int ai_turn; - int choice; - - ai_turn = 1; - for (int i = size - 1; i >= 0; i--) - { - while (lines[i] != 0) - { - ft_putstr_fd("\n------------------------------\n", 1); - if (!ai_turn) - { - print_board(lines, size); - player_turn(&lines[i]); - } - else - { - print_board(lines, size); - ft_putstr_fd("\n", 1); - choice = ai(lines, size); - ft_putstr_fd("AI play ", 1); - ft_putnbr_fd(choice, 1); - ft_putstr_fd("\n", 1); - lines[i] -= choice; - } - ai_turn = ai_turn == 0; - } - } - if (!ai_turn) - ft_putstr_fd("AI win ! It will replace you\n", 1); + else if (argc == 1) + return (0); else - ft_putstr_fd("You win ! Well done\n", 1); + return (-1); } int main(int argc, char *argv[]) @@ -106,13 +34,8 @@ int main(int argc, char *argv[]) int size; int *lines; - if (argc != 2) - { - ft_putstr_fd("ERROR", 2); - return (1); - } - fd = open(argv[1], O_RDONLY); - if (fd == -1) + fd = get_fd(argc, argv); + if (fd < 0) { ft_putstr_fd("ERROR", 2); return (1); @@ -128,11 +51,6 @@ int main(int argc, char *argv[]) lines = fill_array(fd, size); if (!lines) return (1); - // for (int i = 0; i < size; i++) - // { - // printf("lines[i] : %d\n", lines[i]); - // } - // int player = 1; game(lines, size); close(fd); free(lines);