# data[].attributes.headline
Juego con clase Juego V6 - Con velocidad

# data[].attributes.subject
Juego con clase Juego V6 - Con velocidad

# data[].attributes.body
#include 
#include 
#define COL 100
#define FIL 35
using namespace std;
using namespace System; // .NET

// Declaración de la Clase
class Caracter {
private:
	int x;
	int y;
	char c;
	int desp;
	int velocidad; // 1. rápido, 2. media, 3. lenta
	int cont_tiempo;
public:
	Caracter(); // Contructor: Se inicializan los atributos
	Caracter(char car, int vel); // Contructor: Se inicializan los atributos
	~Caracter(); // Destructor: Para eliminar variables creadas dinámicamente
	void setX(int x);
	void setY(int y);
	void desplazar();
private:
	void Borrar();
	void Mover();
	void Mostrar();
};

// Implementación de la Clase
Caracter::Caracter() {
	desp = 1;
	c = '*'; // Valor por defecto
	velocidad = 1; // rápido
	cont_tiempo = 0;
}

Caracter::Caracter(char car, int vel) {
	desp = 1;
	c = car;
	velocidad = vel;
	cont_tiempo = 0;
}

Caracter::~Caracter() {

}

void Caracter::setX(int x) {
	this->x = x;
}

void Caracter::setY(int y) {
	this->y = y;
}

void Caracter::Borrar() {
	Console::SetCursorPosition(x, y);
	cout << " ";
}

void Caracter::Mover() {
	if (x + desp > COL)
		desp = -1;
	else if (x + desp < 0)
		desp = 1;
	x = x + desp;
}

void Caracter::Mostrar() {
	Console::SetCursorPosition(x, y);
	cout << c;
}

void Caracter::desplazar() {
	cont_tiempo++;
	if (velocidad == cont_tiempo) {
		Borrar();
		Mover();
		Mostrar();
		cont_tiempo = 0;
	}
}

// Declaración de la clase
class Juego {
private:
	Caracter** arregloCar;
	int n;
public:
	Juego(int num_car);
	~Juego();
	void ejecutarJuego();
private:
	void mostrarBienvenida();
	void mostrarDespedida();
};

// Implementación de la clase
Juego::Juego(int num_car) {
	Random r;
	int i;
	n = num_car;
	arregloCar = new Caracter * [n];
	// Inicializa ventana
	Console::Title = "Juego de caracter"; // Título de la ventana
	Console::WindowWidth = COL; // Columnas de la ventana
	Console::WindowHeight = FIL; // Filas de la ventana
	Console::CursorVisible = false; // Ocultar el curso
	Console::ForegroundColor = ConsoleColor::Red; // Color del caracter
	// Inicializar o crear los objetos Caracter en el arreglo
	for (i = 0; i < n; i++) // Crear todos los objetos del arreglo e inicializar la posición x, y
	{
		arregloCar[i] = new Caracter((char)r.Next(33, 48), r.Next(1,4));
		arregloCar[i]->setX(0); // Todos empieza en misma columna
		arregloCar[i]->setY(r.Next(0, FIL));
	}
}

Juego::~Juego() {
	delete[] arregloCar;
}

void Juego::mostrarBienvenida() {
	int x, y;
	Console::Clear();
	x = COL / 5;
	y = FIL / 2;
	Console::SetCursorPosition(x, y);
	cout << "  Bienvenido al juego de caracteres";
	y++;
	Console::SetCursorPosition(x, y);
	cout << "  Pulse cualquier tecla para iniciar";
	y = y + 2;
	Console::SetCursorPosition(x, y);
	cout << "Dentro del juego pulse S o s para salir";
	_getch();
}

void Juego::mostrarDespedida() {
	int x, y;
	Console::Clear();
	x = COL / 5;
	y = FIL / 2;
	Console::SetCursorPosition(x, y);
	cout << "      Gracias por jugar";
	y++;
	Console::SetCursorPosition(x, y);
	cout << "Pulse cualquier tecla para salir";
	_getch();
}

void Juego::ejecutarJuego() {
	int i;
	char tecla;
	mostrarBienvenida();
	Console::Clear();
	while (true) {
		for (i = 0; i < n; i++)
			arregloCar[i]->desplazar();
		if (_kbhit())
		{
			tecla = _getch();
			if (tecla == 'S' || tecla == 's') // Salir del juego con la tecla S, s
				break;
		}
		_sleep(300); // Pausa para ver el movimiento en pantalla
	}
	mostrarDespedida();
}

int main()
{
	Juego* j;
	j = new Juego(10); // Le envío el número de caracteres
	j->ejecutarJuego();
	return 0; // Decirle al windows que terminó correctamente
}

# data[].attributes.headline
Juego con clase Juego V5 - Con métodos privados (Bienvenida y Despedida)

# data[].attributes.subject
Juego con clase Juego V5 - Con métodos privados (Bienvenida y Despedida)

# data[].attributes.body
#include 
#include 
#define COL 100
#define FIL 30
using namespace std;
using namespace System; // .NET

// Declaración de la Clase
class Caracter {
private:
	int x;
	int y;
	char c;
	int desp;
public:
	Caracter(); // Contructor: Se inicializan los atributos
	Caracter(char car); // Contructor: Se inicializan los atributos
	~Caracter(); // Destructor: Para eliminar variables creadas dinámicamente
	void setX(int x);
	void setY(int y);
	void Borrar();
	void Mover();
	void Mostrar();
};

// Implementación de la Clase
Caracter::Caracter() {
	desp = 1;
	c = '*'; // Valor por defecto
}

Caracter::Caracter(char car) {
	desp = 1;
	c = car;
}

Caracter::~Caracter() {

}

void Caracter::setX(int x) {
	this->x = x;
}

void Caracter::setY(int y) {
	this->y = y;
}

void Caracter::Borrar() {
	Console::SetCursorPosition(x, y);
	cout << " ";
}

void Caracter::Mover() {
	if (x + desp > COL)
		desp = -1;
	else if (x + desp < 0)
		desp = 1;
	x = x + desp;
}

void Caracter::Mostrar() {
	Console::SetCursorPosition(x, y);
	cout << c;
}

// Declaración de la clase
class Juego {
private:
	Caracter** arregloCar;
	int n;
public:
	Juego(int num_car);
	~Juego();
	void ejecutarJuego();
private:
	void mostrarBienvenida();
	void mostrarDespedida();
};

// Implementación de la clase
Juego::Juego(int num_car) {
	Random r;
	int i;
	n = num_car;
	arregloCar = new Caracter * [n];
	// Inicializa ventana
	Console::Title = "Juego de caracter"; // Título de la ventana
	Console::WindowWidth = COL; // Columnas de la ventana
	Console::WindowHeight = FIL; // Filas de la ventana
	Console::CursorVisible = false; // Ocultar el curso
	Console::ForegroundColor = ConsoleColor::Red; // Color del caracter
	// Inicializar o crear los objetos Caracter en el arreglo
	for (i = 0; i < n; i++) // Crear todos los objetos del arreglo e inicializar la posición x, y
	{
		arregloCar[i] = new Caracter((char)r.Next(33, 48));
		arregloCar[i]->setX(r.Next(0, COL));
		arregloCar[i]->setY(r.Next(0, FIL));
	}
}

Juego::~Juego() {
	delete[] arregloCar;
}

void Juego::mostrarBienvenida() {
	int x, y;
	Console::Clear();
	x = COL / 5;
	y = FIL / 2;
	Console::SetCursorPosition(x, y);
	cout << "  Bienvenido al juego de caracteres";
	y++;
	Console::SetCursorPosition(x, y);
	cout << "  Pulse cualquier tecla para iniciar";
	y = y + 2;
	Console::SetCursorPosition(x, y);
	cout << "Dentro del juego pulse S o s para salir";
	_getch();
}

void Juego::mostrarDespedida() {
	int x, y;
	Console::Clear();
	x = COL / 5;
	y = FIL / 2;
	Console::SetCursorPosition(x, y);
	cout << "      Gracias por jugar";
	y++;
	Console::SetCursorPosition(x, y);
	cout << "Pulse cualquier tecla para salir";
	_getch();
}

void Juego::ejecutarJuego() {
	int i;
	char tecla;
	mostrarBienvenida();
	Console::Clear();
	while (true) {
		for (i = 0; i < n; i++)
		{
			arregloCar[i]->Borrar();
			arregloCar[i]->Mover();
			arregloCar[i]->Mostrar();
		}
		if (_kbhit())
		{
			tecla = _getch();
			if (tecla == 'S' || tecla == 's') // Salir del juego con la tecla S, s
				break;
		}
		_sleep(100); // Pausa para ver el movimiento en pantalla
	}
	mostrarDespedida();
}

int main()
{
	Juego* j;
	j = new Juego(10); // Le envío el número de caracteres
	j->ejecutarJuego();
	return 0; // Decirle al windows que terminó correctamente
}

# data[].attributes.body
#include 
#include 
#define COL 60
#define FIL 20
using namespace std;
using namespace System; // .NET

// Declaración de la Clase
class Caracter {
private:
	int x;
	int y;
	char c;
	int desp;
public:
	Caracter(); // Contructor: Se inicializan los atributos
	Caracter(char car); // Contructor: Se inicializan los atributos
	~Caracter(); // Destructor: Para eliminar variables creadas dinámicamente
	void setX(int x);
	void setY(int y);
	void Borrar();
	void Mover();
	void Mostrar();
};

// Implementación de la Clase
Caracter::Caracter() {
	desp = 1;
	c = '*'; // Valor por defecto
}

Caracter::Caracter(char car) {
	desp = 1;
	c = car;
}

Caracter::~Caracter() {

}

void Caracter::setX(int x) {
	this->x = x;
}

void Caracter::setY(int y) {
	this->y = y;
}

void Caracter::Borrar() {
	Console::SetCursorPosition(x, y);
	cout << " ";
}

void Caracter::Mover() {
	if (x + desp > COL)
		desp = -1;
	else if (x + desp < 0)
		desp = 1;
	x = x + desp;
}

void Caracter::Mostrar() {
	Console::SetCursorPosition(x, y);
	cout << c;
}

// Declaración de la clase
class Juego {
private:
	Caracter** arregloCar;
	int n;
public:
	Juego(int num_car);
	~Juego();
	void mostrarBienvenida();
	void ejecutarJuego();
	void mostrarDespedida();
};

// Implementación de la clase
Juego::Juego(int num_car) {
	Random r;
	int i;
	n = num_car;
	arregloCar = new Caracter * [n];
	// Inicializa ventana
	Console::Title = "Juego de caracter"; // Título de la ventana
	Console::WindowWidth = COL; // Columnas de la ventana
	Console::WindowHeight = FIL; // Filas de la ventana
	Console::CursorVisible = false; // Ocultar el curso
	Console::ForegroundColor = ConsoleColor::Red; // Color del caracter
	// Inicializar o crear los objetos Caracter en el arreglo
	for (i = 0; i < n; i++) // Crear todos los objetos del arreglo e inicializar la posición x, y
	{
		arregloCar[i] = new Caracter((char)r.Next(33, 48));
		arregloCar[i]->setX(r.Next(0, COL));
		arregloCar[i]->setY(r.Next(0, FIL));
	}
}

Juego::~Juego() {
	delete[] arregloCar;
}

void Juego::mostrarBienvenida() {
	int x, y;
	Console::Clear();
	x = COL / 5;
	y = FIL / 2;
	Console::SetCursorPosition(x, y);
	cout << "  Bienvenido al juego de caracteres";
	y++;
	Console::SetCursorPosition(x, y);
	cout << "  Pulse cualquier tecla para iniciar";
	y = y + 2;
	Console::SetCursorPosition(x, y);
	cout << "Dentro del juego pulse S o s para salir";
	_getch();
}

void Juego::mostrarDespedida() {
	int x, y;
	Console::Clear();
	x = COL / 5;
	y = FIL / 2;
	Console::SetCursorPosition(x, y);
	cout << "      Gracias por jugar";
	y++;
	Console::SetCursorPosition(x, y);
	cout << "Pulse cualquier tecla para salir";
	_getch();
}

void Juego::ejecutarJuego() {
	int i;
	char tecla;
	Console::Clear();
	while (true) {
		for (i = 0; i < n; i++)
		{
			arregloCar[i]->Borrar();
			arregloCar[i]->Mover();
			arregloCar[i]->Mostrar();
		}
		if (_kbhit())
		{
			tecla = _getch();
			if (tecla == 'S' || tecla == 's') // Salir del juego con la tecla S, s
				break;
		}
		_sleep(100); // Pausa para ver el movimiento en pantalla
	}
}

int main()
{
	Juego* j;
	j = new Juego(10); // Le envío el número de caracteres
	j->mostrarBienvenida();
	j->ejecutarJuego();
	j->mostrarDespedida();
}

# data[].attributes.body
Jamutaq Ortega

# data[].attributes.body
Jamutaq Ortega