C program to draw a moving boat using graphics
In C graphics, the graphics.h functions are used to draw different shapes like circles, rectangles, etc, display text(any message) in a different format (different fonts and colors). By using the functions in the header graphics.h, programs, animations, and different games can also be made. In this article, we will discuss how to draw a moving boat in C using graphics.
Functions Used:
- getmaxx(): The graphics.h header file includes the getmaxx() function, which returns the maximum X coordinate for the current graphics mode and driver.
- setcolor(N): The setcolor() function in the header file graphics.h is used to change the current drawing color to the new color.
- setlinestyle(linestyle, upattern, thickness): The setlinestyle() function in the header file graphics.h sets the style for all lines drawn by using functions like line, lineto, rectangle, drawpoly, and so on.
- rectangle(X1, Y1, X2, Y2): It is employed in the creation of a rectangle. The rectangle must be drawn using the coordinates of the left top and right bottom corners. The X-coordinate and Y-coordinate of the top left corner are X1 and Y1 and the X-coordinate and Y-coordinate of the bottom right corner are X2 and Y2 respectively.
- floodfill(pattern, color): The function is used to fill a confined space. To fill the area, the current fill pattern and color are used.
Approach: Follow the steps below to generate the moving boat:
- Pass three arguments to the initgraph() function to initialize the graphics driver and graphics mode.
- Initialize the boat’s position by considering two variables X and Y.
- Create a river/sea on which the boat will move by drawing a rectangle and fill it with light blue paint to make it look like a river/sea.
- Choose the coordinates so that the boat is just above the river/sea.
- Change the boat’s position using a loop continuously so that it appears to be moving in the river.
Below is the implementation of the above approach:
C
// C program to draw the moving boat // using c graphics #include <conio.h> #include <dos.h> #include <graphics.h> #include <stdio.h> // Driver Code int main() { // Initialize graphic driver int gdriver = DETECT, gmode, err; int i = 0, j, x, y, x1, y1, x2, y2; // Start graphics mode by passing // three arguments to initgraph() // &gdriver is the address of the // gdriver variable. // &gmode is the address of gmode // "C:Turboc3BGI" is the directory // path where BGI files are stored initgraph(&gdriver, &gmode, "C:\\Turboc3\\BGI" ); err = graphresult(); if (err != grOk) { printf ( "Graphics Error: %s\n" , grapherrormsg(err)); return 0; } j = 0; // Initialize position for boat x = 50, y = getmaxy() / 2 + 140; while (x + 60 < getmaxx() && (!kbhit())) { // Set the positions for rain x1 = 10, i = y1 = 0; x2 = 0, y2 = 50; // Clears graphic screen cleardevice(); // Set the color of river/sea setcolor(LIGHTBLUE); setlinestyle(SOLID_LINE, 1, 1); setfillstyle(SOLID_FILL, LIGHTBLUE); // Draw the river/sea rectangle(0, getmaxy() / 2 + 150, getmaxx(), getmaxy()); floodfill(getmaxx() - 10, getmaxy() - 10, LIGHTBLUE); // Rain drops setlinestyle(DASHED_LINE, 1, 2); while (i < 700) { line(x1, y1, x2, y2); x1 = x1 + 20; y2 = y2 + 50; i++; } // Drawing the boat setlinestyle(SOLID_LINE, 1, 2); setcolor(BROWN); setfillstyle(SOLID_FILL, BROWN); sector(x, y, 180, 360, 50, 10); setcolor(DARKGRAY); setlinestyle(SOLID_LINE, 1, 3); // Leg and body of stick man line(x + 40, y - 15, x + 40, y - 40); line(x + 40, y - 15, x + 45, y - 10); line(x + 45, y - 10, x + 45, y); line(x + 40, y - 15, x + 37, y); // Head and hand of stick man circle(x + 40, y - 45, 5); line(x + 40, y - 35, x + 50, y - 30); line(x + 40, y - 35, x + 35, y - 32); line(x + 35, y - 32, x + 45, y - 25); line(x + 60, y - 45, x + 27, y + 10); // Moving the position of // boat and stick man x++; setcolor(LIGHTBLUE); delay(250); // Clears the graphic device cleardevice(); // Drawing sea/river setlinestyle(SOLID_LINE, 1, 1); setfillstyle(SOLID_FILL, LIGHTBLUE); rectangle(0, getmaxy() / 2 + 150, getmaxx(), getmaxy()); floodfill(getmaxx() - 10, getmaxy() - 10, LIGHTBLUE); // Rain drops setlinestyle(DASHED_LINE, 1, 2); x1 = 10, i = y1 = 0; x2 = 0, y2 = 70; while (i < 700) { line(x1, y1, x2, y2); x1 = x1 + 30; y2 = y2 + 60; i++; } // Drawing the boat setlinestyle(SOLID_LINE, 1, 1); setcolor(BROWN); setfillstyle(SOLID_FILL, BROWN); sector(x, y, 180, 360, 50, 10); // Body and leg of stick man setcolor(DARKGRAY); setlinestyle(SOLID_LINE, 1, 3); line(x + 40, y - 15, x + 40, y - 40); line(x + 40, y - 15, x + 45, y - 10); line(x + 45, y - 10, x + 45, y); line(x + 40, y - 15, x + 37, y); // Head hands of stick man circle(x + 40, y - 45, 5); line(x + 40, y - 35, x + 52, y - 30); line(x + 40, y - 35, x + 37, y - 32); line(x + 37, y - 32, x + 49, y - 25); line(x + 60, y - 45, x + 27, y + 10); // Forwarding the position of // the boat x++; // Sleep for 250 milliseconds delay(250); // Clears the graphic device cleardevice(); j++; } getch(); // Deallocate memory allocated // for graphic screen closegraph(); return 0; } |
Output: