From fce788547a0c1bfde49db41ddb7547bc19d3b161 Mon Sep 17 00:00:00 2001 From: hugogogo Date: Mon, 19 Jul 2021 08:49:32 +0200 Subject: [PATCH] drawpixel fonctionne pour la limite horizontale mais pas verticale, et implementation macro lettres + mouvements --- :w:w | 238 ------------------------------------------------- builds/fdf.o | Bin 136152 -> 137472 bytes fdf | Bin 117944 -> 122448 bytes includes/fdf.h | 28 ++++++ srcs/fdf.c | 20 ++++- 5 files changed, 46 insertions(+), 240 deletions(-) delete mode 100644 :w:w diff --git a/:w:w b/:w:w deleted file mode 100644 index 6ab6d42..0000000 --- a/:w:w +++ /dev/null @@ -1,238 +0,0 @@ -#include "fdf.h" - -t_fdf *init_fdf(void); -int print_keycode(int keycode); -int shut_down(t_fdf *fdf); -void draw_pixel(t_fdf *fdf, int x, int y, int color); -int keypress(int keycode, t_fdf *fdf); -void rotation_state(t_fdf *fdf); -int **parse_map(t_fdf *fdf); - -// to be exact, use : -// fdf->img_sizel / (fdf->img_bpp / 8) -// instead of : -// fdf->img_size_x -void draw_image(t_fdf *fdf) -{ - int i; - int j; - int x; - int y; - int z; - int new_x; - int new_y; - - j = -1; - while (++j < fdf->map_size_y) - { - i = -1; - while (++i < fdf->map_size_x) - { - - x = i * fdf->offset; - y = j * fdf->offset; - z = fdf->map[j][i]; - new_x = x * cos(fdf->rad_y) + y * sin(fdf->rad_y); - new_y = y * cos(fdf->rad_y) - x * sin(fdf->rad_y); - new_y = new_y * cos(fdf->rad_x) - z * sin(fdf->rad_x); - draw_pixel(fdf, new_x, new_y, 0xfff); - } - } - // put image on screen - mlx_put_image_to_window(fdf->mlx_ptr, fdf->win_ptr, fdf->img_ptr, 0, 0); - // put rotation on screen - rotation_state(fdf); -} - -int main(int ac, char **av) -{ - t_fdf *fdf; - - (void)av; - (void)ac; - - fdf = init_fdf(); - // receive a keypress event - mlx_hook(fdf->win_ptr, 2, 1L << 0, keypress, fdf); - // receive event when clicking the button to close the window - mlx_hook(fdf->win_ptr, 17, 1L << 17, shut_down, fdf); - // run window when no events occurs - mlx_loop(fdf->mlx_ptr); - return (0); -} - -int keypress(int keycode, t_fdf *fdf) -{ - if (keycode == ESCAPE) - shut_down(fdf); - else if (keycode == LEFT) - (fdf->rot_x) -= 1; - else if (keycode == RIGHT) - (fdf->rot_x) += 1; - else if (keycode == UP) - (fdf->rot_y) += 1; - else if (keycode == DOWN) - (fdf->rot_y) -= 1; - else - print_keycode(keycode); - // calculate radians - fdf->rad_x = fdf->rot_x * M_PI / 180; - fdf->rad_y = fdf->rot_y * M_PI / 180; - // draw image - draw_image(fdf); - return (0); -} - -int print_keycode(int keycode) -{ - ft_putnbr(keycode); - ft_putchar(' '); - return(0); -} - -void draw_pixel(t_fdf *fdf, int x, int y, int color) -{ - int position; - - if (x < fdf->map_size_x && y < fdf->map_size_y) - { - position = y * fdf->img_sizel + x * fdf->img_bpp / 8; - *(unsigned int*)(fdf->img_addr + position) = color; - } -} - -void rotation_state(t_fdf *fdf) -{ - char *position; - int x; - int y; - - x = fdf->img_size_x - 10; - y = fdf->img_size_y - 10; - position = ft_strjoin(ft_itoa(fdf->rot_x), " | "); - position = ft_strjoin(position, ft_itoa(fdf->rot_y)); - x -= ft_strlen(position) * 6; - mlx_string_put(fdf->mlx_ptr, fdf->win_ptr, x, y, 0xffffff, position); -} - -t_fdf *init_fdf(void) -{ - t_fdf *fdf; - - fdf = malloc(sizeof(t_fdf)); - // map offset and margin - fdf->offset = 10; - fdf->margin = 50; - // parse map - fdf->map = parse_map(fdf); - // size window - fdf->win_size_x = fdf->map_size_x + 2 * fdf->margin; - fdf->win_size_y = fdf->map_size_y + 2 * fdf->margin; - // size image - fdf->img_size_x = fdf->win_size_x; - fdf->img_size_y = fdf->win_size_y; - // view rotation - fdf->rot_x = 0; - fdf->rot_y = 0; - // init connexion to server - fdf->mlx_ptr = mlx_init(); - // create the window - fdf->win_ptr = mlx_new_window(fdf->mlx_ptr, fdf->win_size_x, fdf->win_size_y, "test"); - // create image - fdf->img_ptr = mlx_new_image(fdf->mlx_ptr, fdf->img_size_x, fdf->img_size_y); - fdf->img_addr = mlx_get_data_addr(fdf->img_ptr, &(fdf->img_bpp), &(fdf->img_sizel), &(fdf->img_endian)); - // draw image - draw_image(fdf); - return (fdf); -} - -int **parse_map(t_fdf *fdf) -{ - int **map; - int i; - int j; - - map = ft_calloc(10, sizeof(map)); - i = -1; - while (++i < 10) - { - map[i] = ft_calloc(15, sizeof(*map)); - j = -1; - while(++j < 15) - map[i][j] = 0; - } - map[3][6] = 10; - // size map - fdf->map_size_x = --j * fdf->offset + 1; - fdf->map_size_y = --i * fdf->offset + 1; - return (map); -} - -int shut_down(t_fdf *fdf) -{ - mlx_destroy_window(fdf->mlx_ptr, fdf->win_ptr); - exit(0); - free(fdf); - return (0); -} - -/* -** w forward 119 -** a left 97 -** s backward 115 -** d right 100 -** < 65361 -** > 65363 -** v 65364 -** ^ 65362 -** esc 65307 -** -** -** -** -** -** -** -** -** -** // x_event | x_mask | action -** // 2 | 1L << 0 | key press -** // 3 | 1L << 1 | key release -** // 4 | | mouse press -** // 5 | | mouse release -** // 6 | | mouse move -** // 12 | | expose event -** // 17 | 1L << 17 | x button press (red button) -** // | | -** -** -** -** FONCTIONS EXTERNES AUTORISEES : -** . open -** . close -** . read -** . write -** . malloc -** . free -** . perror -** . strerror -** . exit -** . math lib : -** -lm // needed at compilation to link the lib : -** gcc foo.c -o foo -lm -** man -** man 3 math -** . minilibx : -** minilibx_opengl.tgz -** minilibx_mms_20200219_beta.tgz -** // to open an archive.tgz : -** gzip -d archive.tgz --> turn it into archive.tar -** tar -xf archive.tar --> un-archive it -** // how to add a man directory to the manual : -** . cp man/man1 /usr/local/share/man/man1 -** (create man1 if necessary) -** . mandb -** // i didn't use any of both library above but the one for linux : -** https://github.com/42Paris/minilibx-linux -** there are pbm with their man pages -*/ diff --git a/builds/fdf.o b/builds/fdf.o index 3230bf8570110e98e8c117201c0a90c9ada48e84..ed2727f64a37ed894744545f0d5529768f847acd 100644 GIT binary patch delta 38097 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

~Uys`&=2yzPwoXsO5 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 W_ewO8j{yz87B}yUn_@qk#r_|ZMeU&g delta 36170 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 BZ7=`; delta 27124 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 diff --git a/includes/fdf.h b/includes/fdf.h index 8aadf9b..5c668d9 100644 --- a/includes/fdf.h +++ b/includes/fdf.h @@ -11,6 +11,32 @@ # define DOWN 65364 # define LEFT 65361 # define RIGHT 65363 +# define A 97 +# define B 98 +# define C 99 +# define D 100 +# define E 101 +# define F 102 +# define G 103 +# define H 104 +# define I 105 +# define J 106 +# define K 107 +# define L 108 +# define M 109 +# define N 110 +# define O 111 +# define P 112 +# define Q 113 +# define R 114 +# define S 115 +# define T 116 +# define U 117 +# define V 118 +# define W 119 +# define X 120 +# define Y 121 +# define Z 122 typedef struct s_fdf { @@ -33,6 +59,8 @@ typedef struct s_fdf int rot_y; double rad_x; double rad_y; + int mov_x; + int mov_y; int img_bpp; int img_sizel; int img_endian; diff --git a/srcs/fdf.c b/srcs/fdf.c index f681212..47178f9 100644 --- a/srcs/fdf.c +++ b/srcs/fdf.c @@ -38,7 +38,8 @@ void draw_image(t_fdf *fdf) new_x = x * cos(fdf->rad_y) + y * sin(fdf->rad_y); new_y = y * cos(fdf->rad_y) - x * sin(fdf->rad_y); new_y = new_y * cos(fdf->rad_x) - z * sin(fdf->rad_x); - new_x += 100; + new_x += fdf->margin + fdf->mov_x; + new_y += fdf->margin + fdf->mov_y; draw_pixel(fdf, new_x, new_y, 0xffffff); } } @@ -77,6 +78,14 @@ int keypress(int keycode, t_fdf *fdf) (fdf->rot_y) += 1; else if (keycode == DOWN) (fdf->rot_y) -= 1; + else if (keycode == Q) + (fdf->mov_x) -= 6; + else if (keycode == D) + (fdf->mov_x) += 6; + else if (keycode == Z) + (fdf->mov_y) += 6; + else if (keycode == S) + (fdf->mov_y) -= 6; else print_keycode(keycode); // calculate radians @@ -97,8 +106,12 @@ int print_keycode(int keycode) void draw_pixel(t_fdf *fdf, int x, int y, int color) { int position; + int xmax; + int ymax; - if (x < 0 || y < 0 || x > fdf->img_sizel || y > fdf->map_size_y) + xmax = fdf->img_sizel / (fdf->img_bpp / 8); + ymax = fdf->map_size_y; + if (x < 0 || y < 0 || x > xmax || y > ymax) return ; position = y * fdf->img_sizel + x * fdf->img_bpp / 8; *(unsigned int*)(fdf->img_addr + position) = color; @@ -137,6 +150,9 @@ t_fdf *init_fdf(void) // view rotation fdf->rot_x = 0; fdf->rot_y = 0; + // x and y deplacements + fdf->mov_x = 0; + fdf->mov_y = 0; // init connexion to server fdf->mlx_ptr = mlx_init(); // create the window