Volviendo al tema del post anterior, estoy a punto de terminar el ejercicio planteado (Insaniquarium).
El único problema es el siguiente:
Hay un método llamado Sentido_Pescado que es el que determina el rebote con los bordes y la conformación del cuerpo de los pescados para su posterior dibujo en pantalla. El método recibe un int como parametro que es la orientación (1=mira hacia la izq/2=mira hacia la derecha)
Lo correcto sería tener un método escrito de esta manera:
Pero al implementarlo, no lleva a cabo el cambio de sentido. Desconozco el motivo.
Este es el código completo:
Son mis primeras clases acerca de Clases, Herencia y otros, así que tendré en cuenta cualquier tipo de sugerencias. Gracias!
El único problema es el siguiente:
Hay un método llamado Sentido_Pescado que es el que determina el rebote con los bordes y la conformación del cuerpo de los pescados para su posterior dibujo en pantalla. El método recibe un int como parametro que es la orientación (1=mira hacia la izq/2=mira hacia la derecha)
Lo correcto sería tener un método escrito de esta manera:
Código (cpp) [Seleccionar]
void Pescado::Sentido_Pescado(){
if(sentido==1) sentido=2;
if(sentido==2) sentido=1;
}
Pero al implementarlo, no lleva a cabo el cambio de sentido. Desconozco el motivo.
Este es el código completo:
Código (cpp) [Seleccionar]
#include <iostream>
#include <cstdlib>
#include <conio2.h>
#include <ctime>
using namespace std;
const int bizq=6;
const int bder=75;
const int bsup=6;
const int binf=19;
class Pescado{
protected:
int velocidad;
int color;
int sentido;
int pos_x;
int pos_y;
int prev_x;
int prev_y;
int dir_x;
int dir_y;
int mov_vertical;
clock_t t_inicial;
clock_t t_final;
char array_b[6][12];
char array_s[10][4];
public:
void Mover_Pescado();
void Sentido_Pescado(int x);
};
class Pescado1 : public Pescado{
public:
Pescado1(int x, int y);
void Borrar_Pescado1();
void Cuerpo_Pescado1();
void Dibujar_Pescado1();
};
class Pescado2 : public Pescado{
public:
Pescado2(int x, int y);
void Borrar_Pescado2();
void Cuerpo_Pescado2();
void Dibujar_Pescado2();
void Color_Pescado2();
};
void Pescado::Mover_Pescado(){
prev_x = pos_x;
prev_y = pos_y;
t_final = clock();
if((velocidad + t_inicial) < t_final){
int mov_vertical = rand()%2+1; // 1-arriba 2-abajo
if(sentido==1) pos_x-=dir_x;
if(sentido==2) pos_x+=dir_x;
if(mov_vertical==1) pos_y-=dir_y;
if(mov_vertical==2) pos_y+=dir_y;
if(pos_x < bizq){
Pescado::Sentido_Pescado(2);
dir_x = -dir_x;
pos_x = bizq;
}
if(pos_x > bder-12){
Pescado::Sentido_Pescado(1);
dir_x = -dir_x;
pos_x = bder-12;
}
if(pos_y < bsup){
dir_y = -dir_y;
pos_y = bsup;
}
if(pos_y > binf){
dir_y = -dir_y;
pos_y = binf;
}
t_inicial = t_final;
}
}
void Pescado::Sentido_Pescado(int x){
if(x==1) sentido=1;
if(x==2) sentido=2;
}
Pescado1::Pescado1(int x, int y){
velocidad=x;
color=y;
dir_x=1;
dir_y=1;
pos_x = rand()%61+10;
pos_y = rand()%6+10;
sentido = rand() % 2+1; // mira izq/ mira der
t_inicial = clock();
}
void Pescado1::Borrar_Pescado1(){
for(int k=0;k<6;k++){
for(int p=0;p<12;p++){
putchxy(prev_x+p,prev_y+k,' ');
}
}
}
void Pescado1::Cuerpo_Pescado1(){
if(sentido==1){ //pescado mirando izquierda
array_b[0][0]=32;array_b[0][1]=32;array_b[0][2]=32;array_b[0][3]=32;array_b[0][4]=32;array_b[0][5]=32;array_b[0][6]=95;array_b[0][7]=44;array_b[0][8]=32;array_b[0][9]=32;array_b[0][10]=32;array_b[0][11]=32;
array_b[1][0]=32;array_b[1][1]=32;array_b[1][2]=32;array_b[1][3]=32;array_b[1][4]=95;array_b[1][5]=47;array_b[1][6]=123;array_b[1][7]=95;array_b[1][8]=32;array_b[1][9]=32;array_b[1][10]=32;array_b[1][11]=32;
array_b[2][0]=32;array_b[2][1]=46;array_b[2][2]=39;array_b[2][3]=32;array_b[2][4]=32;array_b[2][5]=32;array_b[2][6]=32;array_b[2][7]=39;array_b[2][8]=46;array_b[2][9]=47;array_b[2][10]=180;array_b[2][11]=62;
array_b[3][0]=47;array_b[3][1]=32;array_b[3][2]=101;array_b[3][3]=32;array_b[3][4]=40;array_b[3][5]=40;array_b[3][6]=32;array_b[3][7]=32;array_b[3][8]=32;array_b[3][9]=61;array_b[3][10]=60;array_b[3][11]=32;
array_b[4][0]=32;array_b[4][1]=39;array_b[4][2]=46;array_b[4][3]=44;array_b[4][4]=95;array_b[4][5]=95;array_b[4][6]=44;array_b[4][7]=46;array_b[4][8]=39;array_b[4][9]=92;array_b[4][10]=95;array_b[4][11]=62;
array_b[5][0]=32;array_b[5][1]=32;array_b[5][2]=32;array_b[5][3]=32;array_b[5][4]=32;array_b[5][5]=32;array_b[5][6]=92;array_b[5][7]=41;array_b[5][8]=32;array_b[5][9]=32;array_b[5][10]=32;array_b[5][11]=32;
}
if(sentido==2){ //pescado mirando derecha
array_b[0][0]=32;array_b[0][1]=32;array_b[0][2]=32;array_b[0][3]=32;array_b[0][4]=44;array_b[0][5]=95;array_b[0][6]=32;array_b[0][7]=32;array_b[0][8]=32;array_b[0][9]=32;array_b[0][10]=32;array_b[0][11]=32;
array_b[1][0]=32;array_b[1][1]=32;array_b[1][2]=32;array_b[1][3]=32;array_b[1][4]=95;array_b[1][5]=125;array_b[1][6]=92;array_b[1][7]=95;array_b[1][8]=32;array_b[1][9]=32;array_b[1][10]=32;array_b[1][11]=32;
array_b[2][0]=60;array_b[2][1]=96;array_b[2][2]=92;array_b[2][3]=46;array_b[2][4]=39;array_b[2][5]=32;array_b[2][6]=32;array_b[2][7]=32;array_b[2][8]=32;array_b[2][9]=39;array_b[2][10]=46;array_b[2][11]=32;
array_b[3][0]=32;array_b[3][1]=62;array_b[3][2]=61;array_b[3][3]=32;array_b[3][4]=32;array_b[3][5]=32;array_b[3][6]=41;array_b[3][7]=41;array_b[3][8]=32;array_b[3][9]=101;array_b[3][10]=32;array_b[3][11]=92;
array_b[4][0]=60;array_b[4][1]=95;array_b[4][2]=47;array_b[4][3]=39;array_b[4][4]=46;array_b[4][5]=44;array_b[4][6]=95;array_b[4][7]=95;array_b[4][8]=44;array_b[4][9]=46;array_b[4][10]=39;array_b[4][11]=32;
array_b[5][0]=32;array_b[5][1]=32;array_b[5][2]=32;array_b[5][3]=32;array_b[5][4]=40;array_b[5][5]=47;array_b[5][6]=32;array_b[5][7]=32;array_b[5][8]=32;array_b[5][9]=32;array_b[5][10]=32;array_b[5][11]=32;
}
}
void Pescado1::Dibujar_Pescado1(){
Pescado1::Borrar_Pescado1();
Pescado1::Cuerpo_Pescado1();
for(int i=0; i<6; i++){
for(int j=0; j<12; j++){
textcolor(color);
putchxy(pos_x+j,pos_y+i,array_b[i][j]);
}
}
}
Pescado2::Pescado2(int x, int y){
velocidad=x;
color=y;
dir_x=1;
dir_y=1;
pos_x = rand()%61+10;
pos_y = rand()%6+10;
sentido = rand() % 2+1; // mira izq/ mira der
t_inicial = clock();
}
void Pescado2::Borrar_Pescado2(){
for(int k=0;k<10;k++){
for(int p=0;p<4;p++){
putchxy(prev_x+k,prev_y+p,' ');
}
}
}
void Pescado2::Cuerpo_Pescado2(){
if(sentido==1){ //pescado mirando izquierda
array_s[0][0]=0;array_s[0][1]=0;array_s[0][2]=47;array_s[0][3]=39;
array_s[1][0]=0;array_s[1][1]=46;array_s[1][2]=111;array_s[1][3]=45;
array_s[2][0]=0;array_s[2][1]=45;array_s[2][2]=0;array_s[2][3]=45;
array_s[3][0]=47;array_s[3][1]=0;array_s[3][2]=41;array_s[3][3]=39;
array_s[4][0]=124;array_s[4][1]=0;array_s[4][2]=41;array_s[4][3]=39;
array_s[5][0]=0;array_s[5][1]=45;array_s[5][2]=0;array_s[5][3]=39;
array_s[6][0]=0;array_s[6][1]=46;array_s[6][2]=0;array_s[6][3]=39;
array_s[7][0]=0;array_s[7][1]=0;array_s[7][2]=92;array_s[7][3]=39;
array_s[8][0]=0;array_s[8][1]=0;array_s[8][2]=47;array_s[8][3]=92;
array_s[9][0]=0;array_s[9][1]=0;array_s[9][2]=40;array_s[9][3]=40;
}
if(sentido==2){ //pescado mirando derecha
array_s[0][0]=0;array_s[0][1]=0;array_s[0][2]=41;array_s[0][3]=41;
array_s[1][0]=0;array_s[1][1]=0;array_s[1][2]=92;array_s[1][3]=47;
array_s[2][0]=0;array_s[2][1]=0;array_s[2][2]=47;array_s[2][3]=39;
array_s[3][0]=0;array_s[3][1]=46;array_s[3][2]=0;array_s[3][3]=39;
array_s[4][0]=0;array_s[4][1]=45;array_s[4][2]=0;array_s[4][3]=39;
array_s[5][0]=124;array_s[5][1]=0;array_s[5][2]=40;array_s[5][3]=39;
array_s[6][0]=92;array_s[6][1]=0;array_s[6][2]=40;array_s[6][3]=39;
array_s[7][0]=0;array_s[7][1]=45;array_s[7][2]=0;array_s[7][3]=45;
array_s[8][0]=0;array_s[8][1]=46;array_s[8][2]=111;array_s[8][3]=45;
array_s[9][0]=0;array_s[9][1]=0;array_s[9][2]=92;array_s[9][3]=39;
}
}
void Pescado2::Dibujar_Pescado2(){
Pescado2::Borrar_Pescado2();
Pescado2::Cuerpo_Pescado2();
for(int i=0; i<10; i++){
for(int j=0; j<4; j++){
textcolor(color);
putchxy(pos_x+i,pos_y+j,array_s[i][j]);
}
}
}
void Pescado2::Color_Pescado2(){
if(color==15) color=1;
else color+=1;
}
int main(int argc, char *argv[]){
_setcursortype(_NOCURSOR);
srand(time(NULL));
Pescado1 Rojo(50,12);
Pescado1 Verde(80,10);
Pescado2 Amarillo(60,14);
Pescado2 Cyan(125,11);
while(true){
if(kbhit()) {
int tecla=getch();
switch(tecla)
{
case 49:
Rojo.Sentido_Pescado(1);
Verde.Sentido_Pescado(1);
break;
case 50:
Rojo.Sentido_Pescado(2);
Verde.Sentido_Pescado(2);
break;
case 51:
Amarillo.Color_Pescado2();
Cyan.Color_Pescado2();
break;
}
}
Rojo.Mover_Pescado();
Rojo.Dibujar_Pescado1();
Verde.Mover_Pescado();
Verde.Dibujar_Pescado1();
Amarillo.Mover_Pescado();
Amarillo.Dibujar_Pescado2();
Cyan.Mover_Pescado();
Cyan.Dibujar_Pescado2();
}
return 0;
}
Son mis primeras clases acerca de Clases, Herencia y otros, así que tendré en cuenta cualquier tipo de sugerencias. Gracias!