// C program to implement
// the above approach
#include <conio.h>
#include <graphics.h>
#include <stdio.h>
#define ScreenWidth getmaxx()
#define ScreenHeight getmaxy()
#define GroundY ScreenHeight * 0.75
int ldisp = 0;
// Creating a hut
void hut()
    setcolor(WHITE);
    rectangle(150, 180, 250, 300);
    rectangle(250, 180, 420, 300);
    rectangle(180, 250, 220, 300);
    line(200, 100, 150, 180);
    line(200, 100, 250, 180);
    line(200, 100, 370, 100);
    line(370, 100, 420, 180);
    setfillstyle(SOLID_FILL, BROWN);
    floodfill(152, 182, WHITE);
    floodfill(252, 182, WHITE);
    setfillstyle(SLASH_FILL, BLUE);
    floodfill(182, 252, WHITE);
    setfillstyle(HATCH_FILL, GREEN);
    floodfill(200, 105, WHITE);
    floodfill(210, 105, WHITE);
// Drawing a Man with
// an umbrella
void DrawManAndUmbrella(int x,
               int ldisp)
    circle(x, GroundY - 90, 10);
    line(x, GroundY - 80, x,
      GroundY - 30);
    line(x, GroundY - 70,
      x + 10, GroundY - 60);
    line(x, GroundY - 65, x + 10,
      GroundY - 55);
    line(x + 10, GroundY - 60,
      x + 20, GroundY - 70);
    line(x + 10, GroundY - 55,
      x + 20, GroundY - 70);
    line(x, GroundY - 30,
        x + ldisp, GroundY);
    line(x, GroundY - 30,
        x - ldisp, GroundY);
    pieslice(x + 20, GroundY - 120,
            0, 180, 40);
    line(x + 20, GroundY - 120,
        x + 20, GroundY - 70);
// Creating the Rainfall
void Rain(int x)
    int i, rx, ry;
    for (i = 0; i < 400; i++)
        rx = rand() % ScreenWidth;
        ry = rand() % ScreenHeight;
        if (ry < GroundY - 4)
            if (ry < GroundY - 120 ||
             (ry > GroundY - 120 &&
             (rx < x - 20 ||
              rx > x + 60)))
              line(rx, ry,
                   rx + 0.5, ry + 4);
// Creating the rainbow
void rainbow()
    int x, y, i;
    circle(ScreenWidth - 100,
            50, 30);
    setfillstyle(SOLID_FILL,
               YELLOW);
    floodfill(ScreenWidth - 100,
             50, WHITE);
    ldisp = (ldisp + 2) % 20;
    DrawManAndUmbrella(x, ldisp);
    hut();
    x = getmaxx() / 5;
    y = getmaxy() / 5;
    for (i = 30; i < 100; i++)
    {
        // for animation
        delay(50);
        setcolor(i / 10);
        arc(x, y, 0, 180, i - 10);
    getch();
// Driver code
void main()
    int gd = DETECT, gm, x = 0;
    initgraph(&gd, &gm,
           "C:\\TurboC3\\BGI");
    // executes till any key
    // is pressed
    while (!kbhit())
        hut();
        circle(ScreenWidth - 100,
            50, 30);
        setfillstyle(SOLID_FILL,
                YELLOW);
        floodfill(ScreenWidth - 100,
               50, WHITE);
        line(0, GroundY, ScreenWidth,
           GroundY);
        Rain(x);
        ldisp = (ldisp + 2) % 20;
        DrawManAndUmbrella(x, ldisp);
        delay(20);
        cleardevice();
        x = (x + 2) % ScreenWidth;
    // if the key is pressed the
    // rain stops, rainbow appears
    ldisp = (ldisp + 2) % 20;
    DrawManAndUmbrella(x, ldisp);
    rainbow();
    getch();