Hola a todos, mi pregunta es la siguiente:
Como hago yo (si es posible) en C++ para dibujar gráficos en una ventana o un Frame, como circulos, rectangulos, lineas, etc. La cuestión es que hice un diseño de las Torres de Hanoi, en donde muestro los graficos dibujandolos con asteriscos, pero no solo es más dificil así sino más extenso.
Aquí les dejo dos codigos en en C++, listos para compilar y ejecutar en
Dev C++, para que se hagan una idea de lo que les hablo:
//Torres de Hanoi
//casidiablo
#include<iostream>
using namespace std;
void moverdisco();
int tem,tem2,n,i,j,desde,hacia,con,tam,tamdisco,espacios,k,matriz[100][3];
char cr='±',si,fondo=177;
void linea(int j)
{
for(int i=0;i<j;i++)
cout<<cr;
cout<<endl;
}
void salir()
{
char r='©';
system("cls");
linea(27);
cout<<cr<<cr<<cr<<cr<<cr<<cr<<cr<<" casidiablo "<<r<<" ";
linea(6);
cout<<cr<<cr<<cr<<cr<<cr<<cr<<cr<<cr<<cr<<cr<<cr<<" 2005 ";
linea(10);
linea(27);
cout<<cr<<" Apoya el Software Libre "<<cr<<endl;
cout<<cr<<" y el codigo abierto "<<cr<<endl;
linea(27);
getchar();
}
int main()
{
system("color 0f");
system("cls");
cout<<"Las Torres de Hanoi\n"<<endl<<endl;
cout<<"Digite la cantidad de discos: ";
cin>>n;
while(n>13||n<3)
{
system("cls");
cout<<"Tiene que jugar minimo con tres discos y maximo con 13"<<endl<<"Digite la cantidad de discos:";
cin>>n;
}
tam=n+(n-1);
for(i=1;i<=((tam*3)+3)+1;i++)
cout<<fondo;
cout<<endl<<fondo;
for(i=0;i<n;i++)
{
for(j=0;j<3;j++)
{
if(j==0)
matriz[i][j]=i+1;
else
matriz[i][j]=0;
for(k=1;k<=tam;k++)
{
tamdisco=matriz[i][j]+(matriz[i][j]-1);
espacios=(tam-tamdisco)/2;
if(matriz[i][j]==0)
cout<<fondo;
else
{
if(k<=espacios||k>(tam-espacios))
cout<<fondo;
else
cout<<"*";
}
}
cout<<fondo;
}
cout<<endl<<fondo;
}
for(i=1;i<=((tam*3));i++)
{
if(i==n-1)
cout<<"T1";
else if(i==((n*2)+n)-2)
cout<<"T2";
else if(i==(((n*2)+n)-3)+n*2)
cout<<"T3";
else
cout<<fondo;
}
cout<<endl;
for(i=1;i<=((tam*3)+4);i++)
cout<<fondo;
moverdisco();
}
void moverdisco()
{
while(matriz[0][1]!=1&&matriz[0][2]!=1)
{
cout<<"\n\n\t\t\tLleva "<<con++<<" movimientos\n";
do{
cout<<"Desde cual torre (T) desea mover el disco: ";
cin>>desde;
if(matriz[n-1][desde-1]==0){cout<<"No hay disco en esa torre"<<endl;}
}
while(matriz[n-1][desde-1]==0);
cout<<"Hacia cual torre (T) desea mover el disco: ";
cin>>hacia;
desde--;
hacia--;
for(i=0;i<n;i++)
{
if(matriz[i][desde]!=0)
{
tem=matriz[i][desde];
tem2=i;
i=n;
}
}
for(i=n-1;i>=0;i--)
{
if(matriz[i][hacia]==0)
{
if(matriz[i+1][hacia]>tem||i==(n-1))
{
matriz[i][hacia]=tem;
matriz[tem2][desde]=0;
}
else
{
cout<<"\n\nNo puede colocar un disco grande encima de uno pequeno\nni poner un disco en la misma posicion"<<endl
<<"Cambie los parametros"<<endl;
con--;
moverdisco();
}
i=0;
}
}
system("cls");
for(i=1;i<=((tam*3)+3)+1;i++)
cout<<fondo;
cout<<endl<<fondo;
for(i=0;i<n;i++)
{
for(j=0;j<3;j++)
{
for(k=1;k<=tam;k++)
{
tamdisco=matriz[i][j]+(matriz[i][j]-1);
espacios=(tam-tamdisco)/2;
if(matriz[i][j]==0)
cout<<fondo;
else
{
if(k<=espacios||k>(tam-espacios))
cout<<fondo;
else
cout<<"*";
}
}
cout<<fondo;
}
cout<<endl<<fondo;
}
for(i=1;i<=((tam*3));i++)
{
if(i==n-1)
cout<<"T1";
else if(i==((n*2)+n)-2)
cout<<"T2";
else if(i==(((n*2)+n)-3)+n*2)
cout<<"T3";
else
cout<<fondo;
}
cout<<endl;
for(i=1;i<=((tam*3)+4);i++)
cout<<fondo;
}
system("color f1");
cout<<"\n\nFelicitaciones acaba de ganar en "<<con<<" movimientos\n\nDesea volver a jugar S/N: ";
cin>>si;
con=0;
if(si=='s'||si=='S')
main();
else
salir();
getchar();
}
y este otro:
//Solución a Torres de Hanoi
//casidiablo
#include <iostream>
using namespace std;
void torres(int n, char a, char b, char c);
int main()
{
int n;
char a='1', b='3',c='2';
do
{
cout<<"Cuantos discos tiene la torre principal\n";
cin>>n;
if(n<2)
cout<<"La cantidad de los discos debe ser mayor a uno\n";
}while(n<2);
long nm=pow(2.0,n)-1;
system("cls");
cout<<"La cantidad de movimientos a realizar son "<<nm<<endl<<endl;
torres(n,a,b,c);
system("pause");
}
void torres(int n, char a, char b, char c)
{
if (n==1)
{
cout<<"Mueva el disco "<<n<<" de T"<<a<<" a T"<<c<<"\n";
return;
}
torres(n-1,a,c,b);
cout<<"Mueva el disco "<<n<<" de T"<<a<<" a T"<<c<<"\n";
torres(n-1,b,a,c);
return;
}
La verdad es que no encuentro un manual donde se explique esto, y agradezco de antemano la colaboración que puedan brindarme, y ojala este codigo les sirva a muchos.
Saludos...