Animación de la Torre de Hanoi usando gráficos por computadora en C/C++

La tarea es diseñar la Torre de Hanoi usando gráficos por computadora en C / C++ .

Tower Of Hanoi : Es un problema matemático donde hay tres torres y N números de discos. El problema es mover todos los discos de la primera torre a la tercera torre con las siguientes reglas:

  • Solo se puede mover un disco a la vez y no se pueden mover dos o más de dos discos a la vez.
  • Mientras mueve el disco, el usuario debe recordar que el disco más pequeño siempre estará encima de uno más grande.
  • Eso significa que el más grande estará en la parte inferior de la torre y el más pequeño en la parte superior de la torre.

Función utilizada:

  • rectángulo (l, t, r, b): una función del archivo de encabezado graphics.h que dibuja un rectángulo de izquierda (l) a derecha (r) y de arriba (t) a abajo (b).
  • line(a1, b1, a2, b2):   una función del archivo de encabezado graphics.h que dibuja una línea desde el punto (a1, b1) hasta el punto (a2, b2) .
  • setfillstyle (patrón, color): una función del archivo de encabezado graphics.h mediante la cual podemos dar un patrón de dibujo y también un color específico.
  • floodfill (a, b, c): una función del archivo de encabezado graphics.h mediante la cual podemos colorear un área delimitada específica con (a, b) como el centro y c como el color del borde.
  • outtextxy(int x, int y, char *string): una función del archivo de encabezado graphics.h mediante la cual podemos imprimir cualquier declaración donde, x, y son las coordenadas del punto y el tercer argumento contiene la dirección de la string a se visualizará.
  • settextstyle(int font, int direction, int font_size): una función del archivo de encabezado graphics.h mediante la cual podemos hacer el estilo del texto imprimible donde el argumento de fuente especifica la fuente del texto, la dirección puede ser HORIZ_DIR (de izquierda a derecha) o VERT_DIR (de abajo hacia arriba) .

Acercarse:

  • Aquí hice una animación donde se implementa el Problema de la Torre de Hanoi de 3 discos. El proceso completo se completará en 7 fases.
  • Se definen un total de nueve funciones, start(), p1(), p2(), p3(), p4(), p5(), p6(), p7(), outline().
  • Primero, llame a la función start(). Allí imprime un mensaje ‘Estado inicial’. Luego implemente un total de tres discos usando la función rectángulo(). Luego coloréalo. El inferior más grande está coloreado con rojo, el medio está coloreado con azul y el superior más pequeño está coloreado con verde. Todos los colores se realizan mediante las funciones setfillstyle() y floodfill() . Por último, llame al esquema().
  • En la función de contorno(), implemente las torres usando la función de line() e imprima también el número de torres.
  • Luego llame a la función p1(). La función cleardevice() borrará la pantalla. Aquí, mueve el disco verde más pequeño a la tercera torre. Luego llame a la función de esquema(). Además, imprima el mensaje ‘1ª Fase’ .
  • Luego llame a la función p2(). La función cleardevice() borrará la pantalla. Aquí, mueve el disco azul más pequeño a la segunda torre. Entonces también llamará a la función de esquema(). Además, imprima el mensaje ‘2ª Fase’ .
  • Luego llamará a la función p3(). La función cleardevice() borrará la pantalla. Aquí, mueve el disco verde más pequeño a la segunda torre en la parte superior del disco azul. Entonces también llamará a la función de esquema(). Además, imprima el mensaje ‘3ra Fase’ .
  • Luego llamará a la función p4(). La función cleardevice() borrará la pantalla. Aquí, mueve el disco rojo más grande a la tercera torre. Entonces también llamará a la función de esquema(). Además, imprima el mensaje ‘4ª Fase’ .
  • Luego llamará a la función p5(). La función cleardevice() borrará la pantalla. Aquí, mueve el disco verde más pequeño a la primera torre. Luego también llame a la función de esquema(). Además, imprima el mensaje ‘5ta Fase’ .
  • Luego llame a la función p6(). La función cleardevice() borrará la pantalla. Aquí, mueva el disco azul más pequeño a la tercera torre en la parte superior del disco rojo. Entonces también llamará a la función de esquema(). Además, imprima el mensaje ‘6th Phase’ .
  • Luego llamará a la función p7(). La función cleardevice() borrará la pantalla. Aquí, mueve el disco verde más pequeño a la tercera torre en la parte superior del disco azul. Entonces también llamará a la función de esquema(). Además, imprima el mensaje ‘7th Phase’ . Por lo tanto, la animación está completa. 

A continuación se muestra la implementación del enfoque anterior:

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 Disk
void 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 Disk
void 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 Tower
void 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 Tower
void 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 Disk
void 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 Tower
void 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 Tower
void 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 animations
void 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 animations
void 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 Code
void 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();
}

Producción:

Publicación traducida automáticamente

Artículo escrito por sounetraghosal2000 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *