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
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
#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!