Muchas gracias por la respuesta . Investigaré al respecto
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menú
class PERSONAJE {
private:
int x, y; // Coordenadas
int simbolo;
public:
PERSONAJE(int = 1, int = 1, int = 1);
void setX(int);
void setY(int);
void setSimbolo(int);
int getX();
int getY();
int getSimbolo();
virtual void mover(int);
void pintar();
void borrar();
};
/*
void PERSONAJE::PERSONAJE(int x, int y, char simbolo) {
this->setX(x);
this->setY(y);
this->setSimbolo(simbolo);
}
*/
PERSONAJE::PERSONAJE(int _x, int _y, int _simbolo) : x(_x), y(_y), simbolo(_simbolo) {
this->pintar();
}
void PERSONAJE::setX(int x) {
this->x = (x > 0 ? x : 1);
// x = (x > 0 ? x : 1); // Cuidado con este error logico, alli no estaria modificando al atributo
}
void PERSONAJE::setY(int y) {
this->y = (y > 0 ? y : 1);
}
void PERSONAJE::setSimbolo(int simbolo) {
this->simbolo = simbolo;
}
int PERSONAJE::getX() {
return this->x;
}
int PERSONAJE::getY() {
return this->y;
}
int PERSONAJE::getSimbolo() {
return this->simbolo;
}
void PERSONAJE::mover(int tecla) {
if (tecla == NADA) {
return;
}
else {
this->borrar();
if (tecla == IZQUIERDA) {
if (x > LIMITE_IZQUIERDO + 1) x--;
}
if (tecla == DERECHA) {
if (x < LIMITE_DERECHO - 1) x++;
}
if (tecla == ABAJO) {
if (y < LIMITE_INFERIOR - 1) y++;
}
if (tecla == ARRIBA) {
if (y > LIMITE_SUPERIOR + 1) y--;
}
this->pintar();
}
}
void PERSONAJE::pintar() {
gotoxy(x, y);
cout << (char)getSimbolo();
}
void PERSONAJE::borrar() {
gotoxy(x, y);
cout << " ";
}
class PACMAN : public PERSONAJE {
private:
public:
PACMAN(int = LIMITE_IZQUIERDO + 1, int = LIMITE_SUPERIOR + 1, int = 1);
// No redefinimos el metodo pintar() asi que se llamara al de la superclase
};
PACMAN::PACMAN(int x, int y, int simbolo) : PERSONAJE(x, y, simbolo) {
}
class FANTASMA : public PERSONAJE {
private:
public:
FANTASMA(int = (LIMITE_IZQUIERDO + LIMITE_DERECHO) / 2, int = (LIMITE_SUPERIOR + LIMITE_INFERIOR) / 2, int = 1);
void mover();
};
FANTASMA::FANTASMA(int x, int y, int simbolo) : PERSONAJE(x, y, simbolo) {
}
void FANTASMA::mover() {
int aleatorio = rand() % 4;
this->borrar();
switch (aleatorio) {
case 0:
if (getX() > LIMITE_IZQUIERDO + 1) setX(getX() - 1);
break;
case 1:
if (getX() < LIMITE_DERECHO - 1) setX(getX() + 1);
break;
case 2:
if (getY() < LIMITE_INFERIOR - 1) setY(getY() + 1);
break;
case 3:
if (getY() > LIMITE_SUPERIOR + 1) setY(getY() - 1);
break;
}
gotoxy(getX(), getY());
this->pintar(); // Llama al método heredado pintar
}
// Direccion
#define ARRIBA 105
#define ABAJO 107
#define IZQUIERDA 106
#define DERECHA 'l'
// Limites
#define LIMITE_SUPERIOR 2
#define LIMITE_INFERIOR 23
#define LIMITE_DERECHO 70
#define LIMITE_IZQUIERDO 20
#define NADA 0
CitarPara redefinir una función virtual en una clase derivada, las declaraciones en la clase base y en la derivada deben coincidir en cuanto a número y tipo de los parámetros. Excepcionalmente pueden diferir en el tipo devuelto.
FANTASMA f1;
f1.mover();
f1.mover(IZQUIERDA);
int frecuencia(char *frase[20], char letra)
int frecuencia(char *frase, char letra)