Tengo que hacer un programa que me nuestre en pantalla un mensaje en movimiento que recorra toda la pantalla (arriba abajo, izquierda derecha) y que al presionar una tecla especifica(definida por el programador) se detenga... Yo solo se mover el texto en forma vertical y horizontal pero sin embargo no se como mezclar ambos movimientos...
ESTE ES PARA EL MOVIMIENTO EN VERTICAL(ESTE CODIGO USO YO)
#include <iostream> //usar cout
#include <conio> //usar getch ()
#include <windows> //usar la función sleep
int main ()
{
int i;
for (i==1; i<24; i++) //que inicie en la posición 1(ya sea x,y en este caso en y) y que al llegar a la posición 24 se detenga
{ clrscr();gotoxy(32,i);cout<<"Hola"; //borropantalla y coloco texto sin dejar rastro del texto
Sleep(100);
}getch();
}
Y ESTE CODIGO ES PARA EL MOVIMIENTO EN HORIZONTAL
#include <iostream> //usar cout
#include <conio> //usar getch ()
#include <windows> //usar la función sleep
int main ()
{
int i;
for (i==1; i<75; i++) //que inicie en la posición 1(ya sea x,y en este caso en x) y que al llegar a la posición 75 se detenga
{ clrscr();gotoxy(i,12);cout<<"Hola";
Sleep(100);
}getch();
}
Entonces me darian idea o codigo(si en caso pueden o tengan ganas) para hacer un movimiento que recorra toda la pantalla (arriba abajo, izquierda derecha)
Creo que esto debería funcionar ( no lo he comprobado pues estoy en Ubuntu y no sé como va aquí lo de mover las cosas por la pantalla, supongo que con ncurses EDITADO: funciona solo en Windows ). Bueno te he corregido algunas cosas como las asignaciones de los for's al valor de la variable "i" ya que lo haces usando el operador "==" (comparador lógico, lo cual conlleva error) y tienes que usar este "=" (operador de asignación). Bueno te dejo el código a ver si funciona:
##include <iostream> //usar cout
#include <cstdio>
#include <cstdlib>
#ifdef _WIN32
#include <windows.h>
#define cls system("CLS");
void sleep(unsigned milliseconds)
{
Sleep(milliseconds);
}
void gotoxy( int column, int line )
{
COORD coord;
coord.X = column;
coord.Y = line;
SetConsoleCursorPosition(
GetStdHandle( STD_OUTPUT_HANDLE ),
coord
);
}
#elif defined __unix__
#include <unistd.h>
#define cls system("clear");
void sleep(unsigned milliseconds)
{
usleep(milliseconds * 1000); // takes microseconds
}
void gotoxy(int x, int y)
{
printf("\033[%d;%df", y, x);
fflush(stdout);
}
#endif
using namespace std;
struct pos
{
bool arriba;
bool abajo;
bool izquierda;
bool derecha;
int x;
int y;
} posicion;
void moverHorizontalDerecha ();
void moverHorizontalIzquierda ();
void moverVerticalAbajo ();
void moverVerticalArriba ();
int main (int argc, char * argv[])
{
posicion.arriba = true;
posicion.izquierda = true;
posicion.derecha = false;
posicion.abajo = false;
posicion.x = 0;
posicion.y = 0;
for(;;)
{
if((posicion.arriba == true && posicion.izquierda == true))
{
moverHorizontalDerecha();
posicion.izquierda = false;
posicion.derecha = true;
moverVerticalAbajo();
posicion.arriba = false;
posicion.abajo = true;
}
else if((posicion.abajo == true) && (posicion.derecha == true))
{
moverHorizontalIzquierda();
posicion.izquierda = true;
posicion.derecha = false;
moverVerticalArriba();
posicion.arriba = true;
posicion.abajo = false;
}
}
getchar();
}
void moverVerticalArriba()
{
for (; posicion.y != 0; --posicion.y)
{
cls
gotoxy(posicion.x,posicion.y);
printf("Hola");
sleep(10);
}
}
void moverVerticalAbajo()
{
for (; posicion.y != 20; ++posicion.y)
{
cls
gotoxy(posicion.x,posicion.y);
printf("Hola");
sleep(10);
}
}
void moverHorizontalIzquierda()
{
for(; posicion.x != 0; --posicion.x)
{
cls
gotoxy(posicion.x,posicion.y);
printf("Hola");
sleep(10);
}
}
void moverHorizontalDerecha()
{
for(; posicion.x != 75; ++posicion.x)
{
cls
gotoxy(posicion.x,posicion.y);
printf("Hola");
sleep(10);
}
}