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