Advertisement
Guest User

Untitled

a guest
Feb 20th, 2020
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.91 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <mlx.h>
  5.  
  6. #define X 0
  7. #define Y 1
  8.  
  9. typedef struct      s_data
  10.  {
  11.      void           *mlx_ptr;
  12.      void           *mlx_win;
  13. }                   t_data;
  14.  
  15. typedef struct      s_point
  16. {
  17.     int         x;
  18.     int         y;
  19. }                   t_point;
  20.  
  21. void    swap(t_point *p1, t_point *p2)
  22. {
  23.     t_point     temp;
  24.  
  25.     temp = *p1;
  26.     *p1 = *p2;
  27.     *p2 = temp;
  28. }
  29.  
  30. int     ft_abs(int num)
  31. {
  32.     return (num < 0 ? -num : num);
  33. }
  34.  
  35. int    draw_line(t_data *data, int p0[2], int p1[2])
  36. {
  37.     int     dx;
  38.     int     dy;
  39.     int     err[2];
  40.     int     sx;
  41.     int     sy;
  42.  
  43.     dx = ft_abs(p1[X] - p0[X]);
  44.     dy = -ft_abs(p1[Y] - p0[Y]);
  45.     err[0] = dx + dy;
  46.     sx = p0[X] < p1[X] ? 1 : -1;
  47.     sy = p0[Y] < p1[Y] ? 1 : -1;
  48.     while(1)
  49.     {
  50.         mlx_pixel_put(data->mlx_ptr, data->mlx_win, p0[X], p0[Y], 0xffffff);
  51.         if (p0[X] == p1[X] && p0[Y] == p1[Y])
  52.             break;
  53.         err[1] = 2 * err[0];
  54.         if (err[1] >= dy && (err[0] += dy))
  55.             p0[X] += sx;
  56.         if (err[1] <= dx && (err[0] += dx))
  57.             p0[Y] += sy;
  58.     }
  59.     return (0);
  60. }
  61.  
  62. void    draw_field(t_data *data, int size_x, int size_y, int zoom)
  63. {
  64.     int     current_x;
  65.     int     current_y;
  66.  
  67.     current_y = 0;
  68.  
  69.     size_x *= zoom;
  70.     size_y *= zoom;
  71.  
  72.     while (current_y < size_y)
  73.     {
  74.         current_x = 0;
  75.         while (current_x < size_x)
  76.         {
  77.             (current_x + zoom != size_x) &&
  78.                 draw_line(data, (int[2]){current_x, current_y}, (int[2]){current_x + zoom, current_y});
  79.             (current_y + zoom != size_y) &&
  80.                 draw_line(data, (int[2]){current_x, current_y}, (int[2]){current_x, current_y + zoom});
  81.             current_x += zoom;
  82.         }
  83.         current_y += zoom;
  84.     }
  85. }
  86.  
  87. int     main(void)
  88. {
  89.     t_data      data;
  90.  
  91.     if ((data.mlx_ptr = mlx_init()) == NULL)
  92.         return (EXIT_FAILURE);
  93.     if ((data.mlx_win = mlx_new_window(data.mlx_ptr, 640, 480, "Hello world")) == NULL)
  94.         return (EXIT_FAILURE);
  95.     draw_field(&data, 10, 10, 30);
  96.     mlx_loop(data.mlx_ptr);
  97.     return (EXIT_SUCCESS);
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement