/** * * Ce programme montre comment il est possible de dessiner les figures * géométriques suivantes : * * cercle * disque ( cercle plein ) * ellipse * ellipse pleine * rectangle * rectangle plein * ligne * point * Courbe de Bézier * polygone * polygone plein * * Pour cela le programme utilise les fonctions suivantes : * *------------------------------------------------------------------------------ * MLV_draw_circle: Dessine un cercle à une position et un rayon spécifiés en * paramètres. * * void MLV_draw_circle( * int x, Coordonnée en X du centre du cercle * int y, Coordonnée en Y du centre du cercle * int radius, Rayon du cercle * MLV_Color color Couleur du tracé * ); * * ----------------------------------------------------------------------------- * MLV_draw_filled_circle : Dessine un disque plein dont le centre et le rayon * sont passés en parametres. * * void MLV_draw_filled_circle( * int x, Coordonnée en X du centre du cercle * int y, Coordonnée en Y du centre du cercle * int radius, Rayon du cercle * MLV_Color color Couleur du tracé * ); * * ----------------------------------------------------------------------------- * MLV_draw_ellipse : Dessine une ellipse dont la position, les rayons et la * couleur sont passés en paramètres. * * MLV_draw_ellipse( * int x, Coordonnée en X du centre de l'ellipse * int y, Coordonnée en Y du centre de l'ellipse * int radius_x, Rayon en X de l'ellipse * int radius_y, Rayon en Y de l'ellipse * MLV_Color color Couleur du tracé * ); * * ----------------------------------------------------------------------------- * MLV_draw_filled_ellipse : Dessine une ellipse pleine dont la position, les * rayons et la couleur sont passés en paramètres. * * void MLV_draw_filled_ellipse( * int x, Coordonnee en X du centre de l'ellipse * int y, Coordonnee en Y du centre de l'ellipse * int radius_x, Rayon en X de l'ellipse * int radius_y, Rayon en Y de l'ellipse * MLV_Color color Couleur du tracé * ); * * ----------------------------------------------------------------------------- * MLV_draw_rectangle : Dessine un rectangle dont la taille, la couleur et la * position du sommet Nord-Ouest sont données en * paramètres. * * void MLV_draw_rectangle( * int x, Coordonnée en X du sommet Nord-Ouest du rectangle * int y, Coordonnée en Y du sommet Nord-Ouest du rectangle * int width, Largeur du rectangle * int height, Hauteur du rectangle * MLV_Color color Couleur du tracé * ); * * ----------------------------------------------------------------------------- * MLV_draw_filled_rectangle : Dessine un rectangle dont la taille, la couleur * et la position du sommet Nord-Ouest sont données * en paramètres. * void MLV_draw_filled_rectangle( * int x, Coordonnée en X du sommet Nord-Ouest du rectangle * int y, Coordonnée en Y du sommet Nord-Ouest du rectangle * int width, Largeur du rectangle * int height, Hauteur du rectangle * MLV_Color color Couleur du tracé * ); * * ----------------------------------------------------------------------------- * MLV_draw_line : Dessine une ligne dont les coordonnées des deux extrémités * sont passées en paramètres. * void MLV_draw_line( * int x1, Coordonnée en X de la première extrémité de la ligne * int y1, Coordonnée en Y de la première extrémité de la ligne * int x2, Coordonnée en X de la deuxième extrémité de la ligne * int y2, Coordonnée en Y de la deuxième extrémité de la ligne * MLV_Color color Couleur du tracé * ); * * ----------------------------------------------------------------------------- * MLV_draw_point : Dessine un point dont les coordonées sont passées * en paramètres. * * void MLV_draw_point( * int x, Coordonnée en X du point * int y, Coordonnée en Y du point * MLV_Color color Couleur du tracé * ); * * ----------------------------------------------------------------------------- * MLV_draw_bezier_curve: Dessine une courbe de Bézier à partir d'une liste de * sommets. * * void MLV_draw_bezier_curve( * const int* vx, La liste des coordonnées en X des différents * sommets de la courbe. * const int* vy, La liste des coordonnées en Y des différents * sommets de la courbe. * int npoints, Le nombre de sommets de la courbe de Bézier. * MLV_Color color La couleur du tracé * ); * * ----------------------------------------------------------------------------- * MLV_draw_polygon: Dessine un polygone à partir d'une liste de sommets. * * void MLV_draw_polygon( * const int* vx, La liste des coordonnées en X des différents * sommets du polygone. * const int* vy, La liste des coordonnées en Y des différents * sommets du polygone. * int npoints, Le nombre de sommets du polygone. * MLV_Color color La couleur du tracé * ); * * ----------------------------------------------------------------------------- * MLV_draw_polygon: Dessine un polygone plein à partir d'une liste de sommets. * * void MLV_draw_filled_polygon( * const int* vx, La liste des coordonnées en X des différents * sommets du polygone. * const int* vy, La liste des coordonnées en Y des différents * sommets du polygone. * int npoints, Le nombre de sommets du polygone. * MLV_Color color La couleur du tracé * ); * * ----------------------------------------------------------------------------- * * Il existe d'autres fonctions de dessin. Vous les trouverez en consultant * le fichier MLV_shape.h ou en tapant dans le terminal la commande : * * man MLV_shape.h */ #include #include #include #include #include "grid.h" #include "snake.h" void print_help() { printf("Usage: snake2025 [OPTIONS]\n"); printf("Options:\n"); printf(" -h, --help Display this help message\n"); printf("\n"); printf("This is a simple snake game. Use the arrow keys to control the snake.\n"); printf("Press ESC to exit the game.\n"); } int main(int argc, char *argv[]) { int opt; int option_index = 0; MLV_Keyboard_button touche = MLV_KEYBOARD_NONE; int width = 640, height = 480; char grid[NBL][NBC + 1] = { "w w", " ", " f ", " ", " f f ", " ", " ", " f ", " ", " ", " wwwwwwwwww ", " ", " ", " ", " ", " ", " f ", " ", " f f ", " ", " f ", "w w"}; static struct option long_options[] = { {"help", no_argument, 0, 'h'}, {0, 0, 0, 0}}; Snake snake; snake.pos[0].x = 1; snake.pos[0].y = 3; snake.pos[1].x = 1; snake.pos[1].y = 2; snake.pos[2].x = 1; snake.pos[2].y = 1; snake.pos[3].x = 1; snake.pos[3].y = 0; snake.dir = RIGHT; while ((opt = getopt_long(argc, argv, "h", long_options, &option_index)) != -1) { switch (opt) { case 'h': print_help(); return 0; default: fprintf(stderr, "Unknown option. Use -h or --help for usage information.\n"); return 1; } } place_snake(grid, &snake); MLV_create_window("SNAKE", "3R-IN1B", width, height); MLV_change_frame_rate(24); while ( MLV_get_event( &touche, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) == MLV_NONE || touche != MLV_KEYBOARD_ESCAPE) { MLV_clear_window(MLV_COLOR_BROWN); draw_grid(grid); move_snake(&snake, grid); MLV_actualise_window(); touche = MLV_KEYBOARD_NONE; MLV_delay_according_to_frame_rate(); } MLV_free_window(); return 0; }