Animation of Tower Of Hanoi using computer graphics in C/C++ - GeeksforGeeks

18 Apr, 2022
The task is to design the Tower of Hanoi using computer graphics in C/C++.
Tower Of Hanoi: It is a mathematical problem where there are three towers and N numbers of disks. The problem is to move all the disks from the first tower to the third tower with the following rules:
Only one disk can be moved at a time and cannot move two or more than two disks at a time.
While moving the disk user have to remember that the smaller disk will always be on top of a bigger one.
That means the bigger one will be at the bottom of the tower & the smaller one will be at the top of the tower.
Function Used:
rectangle(l, t, r, b): A function from graphics.h header file which draw a rectangle from left(l) to right(r) & from top(t) to bottom(b).
line(a1, b1, a2, b2):  A function from graphics.h header file which draws a line from the point (a1, b1) to the point (a2, b2).
setfillstyle( pattern, color): A function from graphics.h header file by which we can give a pattern of drawing & also a specific color.
floodfill( a, b, c): A function from graphics.h header file by which we can color in a specific bounded area with (a, b) as the center & c as the border color.
outtextxy(int x, int y, char *string): A function from graphics.h header file by which we can print any statements where, x, y are coordinates of the point and, the third argument contains the address of the string to be displayed.
settextstyle(int font, int direction, int font_size): A function from graphics.h header file by which we can make the style of the printable text where font argument specifies the font of the text, Direction can be HORIZ_DIR (Left to right) or VERT_DIR(Bottom to top).
Approach:
Here made an animation where 3 disk Tower Of Hanoi Problem is implemented. The full process will complete in 7 phases.
Total nine functions are defined , start(), p1(), p2(), p3(), p4(), p5(), p6(), p7(), outline().
First, call start() function. There print a message ‘Beginning State’. Then implement a total of three disks using the rectangle() function. Then color it. The lower bigger one is colored with Red, the middle one is colored with Blue & the smaller top one is colored with Green. All coloring is done by setfillstyle() and floodfill() functions. At last call outline().
In outline() function implement the towers using line() function and print the number of towers also.
Then call p1() function. cleardevice() function will clear the screen. Here, move the smaller Green disk to the third tower. Then call outline() function. Also, print the message ‘1st Phase’.
Then call p2() function. cleardevice() function will clear the screen. Here, move the smaller Blue disk to the second tower. Then will also call the outline() function. Also, print the message ‘2nd Phase’.
Then will call the p3() function. cleardevice() function will clear the screen. Here, move the smaller Green disk to the second tower on the top of the Blue disk. Then will also call the outline() function. Also, print the message ‘3rd Phase’.
Then will call the p4() function. cleardevice() function will clear the screen. Here, move the bigger Red disk to the third tower. Then will also call the outline() function. Also, print the message ‘4th Phase’.
Then will call the p5() function. cleardevice() function will clear the screen. Here, move the smaller Green disk to the first tower. Then also call outline() function. Also, print the message ‘5th Phase’.
Then call p6() function. cleardevice() function will clear the screen. Here, move the smaller Blue disk to the third tower on the top of Red disk. Then will also call the outline() function. Also, print the message ‘6th Phase’.
Then will call the p7() function. cleardevice() function will clear the screen. Here, move the smaller Green disk to the third tower on the top of the Blue disk. Then will also call the outline() function. Also, print the message ‘7th Phase’. Hence animation is completed. 
Below is the implementation of the above approach:
C
// C program for the above approach#include <conio.h>#include <graphics.h>#include <stdio.h> // Function for moving the Green Disk// to Third Tower On Top Of Blue Diskvoid p7(){    getch();    cleardevice();    settextstyle(8, 0, 4);    outtextxy(500, 50, "7th Phase");    setfillstyle(SOLID_FILL, BLUE);    rectangle(850, 500, 950, 550);    floodfill(855, 545, 15);    setfillstyle(SOLID_FILL, GREEN);    rectangle(875, 450, 925, 500);    floodfill(880, 495, 15);    setfillstyle(SOLID_FILL, RED);    rectangle(825, 600, 975, 550);    floodfill(830, 555, 15);     // Calling outline() function    outline();} // Function to find the moving the Blue// Disk To Third Tower On Top Of Red Diskvoid p6(){    getch();    cleardevice();    settextstyle(8, 0, 4);    outtextxy(500, 50, "6th Phase");    setfillstyle(SOLID_FILL, BLUE);    rectangle(850, 500, 950, 550);    floodfill(855, 545, 15);    setfillstyle(SOLID_FILL, GREEN);    rectangle(275, 600, 325, 550);    floodfill(280, 595, 15);    setfillstyle(SOLID_FILL, RED);    rectangle(825, 600, 975, 550);    floodfill(830, 555, 15);     // Calling outline() function    outline();} // Function to find the moving Green Disk// To the First Towervoid p5(){    getch();    cleardevice();    settextstyle(8, 0, 4);    outtextxy(500, 50, "5th Phase");    setfillstyle(SOLID_FILL, BLUE);    rectangle(550, 550, 650, 600);    floodfill(555, 595, 15);    setfillstyle(SOLID_FILL, GREEN);    rectangle(275, 600, 325, 550);    floodfill(280, 595, 15);    setfillstyle(SOLID_FILL, RED);    rectangle(825, 600, 975, 550);    floodfill(830, 555, 15);     // Calling outline() function    outline();} // Moving Red Disk To Third Towervoid p4(){    getch();    cleardevice();    settextstyle(8, 0, 4);    outtextxy(500, 50, "4th Phase");    setfillstyle(SOLID_FILL, BLUE);    rectangle(550, 550, 650, 600);    floodfill(555, 595, 15);    setfillstyle(SOLID_FILL, GREEN);    rectangle(575, 500, 625, 550);    floodfill(580, 545, 15);    setfillstyle(SOLID_FILL, RED);    rectangle(825, 600, 975, 550);    floodfill(830, 555, 15);     // Calling outline() function    outline();} // Function for moving the Green Disk// To Second Tower On Top Of Blue Diskvoid p3(){    getch();    cleardevice();    settextstyle(8, 0, 4);    outtextxy(500, 50, "3rd Phase");    setfillstyle(SOLID_FILL, BLUE);    rectangle(550, 550, 650, 600);    floodfill(555, 595, 15);    setfillstyle(SOLID_FILL, GREEN);    rectangle(575, 500, 625, 550);    floodfill(580, 545, 15);    setfillstyle(SOLID_FILL, RED);    rectangle(225, 550, 375, 600);    floodfill(230, 590, 15);     // Calling outline() function    outline();} // Function for moving the Blue Disk// To Second Towervoid p2(){    getch();    cleardevice();    settextstyle(8, 0, 4);    outtextxy(500, 50, "2nd Phase");    setfillstyle(SOLID_FILL, BLUE);    rectangle(550, 550, 650, 600);    floodfill(555, 595, 15);    setfillstyle(SOLID_FILL, GREEN);    rectangle(875, 600, 925, 550);    floodfill(880, 595, 15);    setfillstyle(SOLID_FILL, RED);    rectangle(225, 550, 375, 600);    floodfill(230, 590, 15);     // Calling outline() function    outline();} // Function for moving the Green Disk// To Third Towervoid p1(){    getch();    cleardevice();    settextstyle(8, 0, 4);    outtextxy(500, 50, "1st Phase");    setfillstyle(SOLID_FILL, GREEN);    rectangle(875, 600, 925, 550);    floodfill(880, 595, 15);    setfillstyle(SOLID_FILL, RED);    rectangle(225, 550, 375, 600);    floodfill(230, 590, 15);    setfillstyle(SOLID_FILL, BLUE);    rectangle(250, 500, 350, 550);    floodfill(255, 545, 15);     // Calling outline() function    outline();} // Function to start the animationsvoid start(){    // Starting Condition    cleardevice();    settextstyle(8, 0, 4);    outtextxy(500, 50, "Beginning State");     // Red Coloring Of Disk    setfillstyle(SOLID_FILL, RED);    rectangle(225, 550, 375, 600);    floodfill(230, 590, 15);     // Blue Coloring Of Disk    setfillstyle(SOLID_FILL, BLUE);    rectangle(250, 500, 350, 550);    floodfill(255, 545, 15);     // Green Coloring Of Disk    setfillstyle(SOLID_FILL, GREEN);    rectangle(275, 450, 325, 500);    floodfill(285, 495, 15);     // calling outline() function    outline();} // Function to print the outlines of// the animationsvoid outline(){    // Main Base    line(100, 600, 1100, 600);     // 1st Line    line(300, 600, 300, 300);     // 2nd Line    line(600, 600, 600, 300);     // 3rd Line    line(900, 600, 900, 300);     // Printing Message    settextstyle(8, 0, 2);    outtextxy(290, 620, "(1)");    outtextxy(590, 620, "(2)");    outtextxy(890, 620, "(3)");}// Driver Codevoid main(){    int gd = DETECT, gm;     // Initialize of gdriver with    // DETECT macros    initgraph(&gd, &gm, "C:\\turboc3\\bgi");     // Calling start() function    start();     // Calling p1() function    p1();     // Calling p2() function    p2();     // Calling p3() function    p3();     // Calling p4() function    p4();     // Calling p5() function    p5();     // Calling p6() function    p6();     // Calling p7() function    p7();     // Holding screen for a while    getch();     // Close the initialized gdriver    closegraph();}
Output:
simranarora5sos
c-graphics
computer-graphics
C Language
C Programs
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
TCP Server-Client implementation in C
Multithreading in C
Exception Handling in C++
Arrow operator -> in C/C++ with Examples
'this' pointer in C++
Strings in C
Arrow operator -> in C/C++ with Examples
UDP Server-Client implementation in C
C Program to read contents of Whole File
Header files in C/C++ and its uses