elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / Acceso método de clase base/madre en: 25 Agosto 2014, 23:16 pm
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:


Código
  1. void Pescado::Sentido_Pescado(){
  2.  
  3. if(sentido==1) sentido=2;
  4. if(sentido==2) sentido=1;
  5.  
  6. }

Pero al implementarlo, no lleva a cabo el cambio de sentido. Desconozco el motivo.

Este es el código completo:


Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <conio2.h>
  4. #include <ctime>
  5.  
  6. using namespace std;
  7.  
  8. const int bizq=6;
  9. const int bder=75;
  10. const int bsup=6;
  11. const int binf=19;
  12.  
  13. class Pescado{
  14.  
  15. protected:
  16. int velocidad;
  17. int color;
  18. int sentido;
  19.  
  20. int pos_x;
  21. int pos_y;
  22.  
  23. int prev_x;
  24. int prev_y;
  25.  
  26. int dir_x;
  27. int dir_y;
  28.  
  29. int mov_vertical;
  30.  
  31. clock_t t_inicial;              
  32. clock_t t_final;
  33.  
  34. char array_b[6][12];
  35. char array_s[10][4];
  36.  
  37. public:
  38.  
  39. void Mover_Pescado();
  40. void Sentido_Pescado(int x);
  41.  
  42. };
  43. class Pescado1 : public Pescado{
  44.  
  45. public:
  46.  
  47. Pescado1(int x, int y);
  48. void Borrar_Pescado1();
  49. void Cuerpo_Pescado1();
  50. void Dibujar_Pescado1();
  51.  
  52. };
  53.  
  54. class Pescado2 : public Pescado{
  55.  
  56. public:
  57.  
  58. Pescado2(int x, int y);
  59. void Borrar_Pescado2();
  60. void Cuerpo_Pescado2();
  61. void Dibujar_Pescado2();
  62. void Color_Pescado2();
  63.  
  64. };
  65.  
  66. void Pescado::Mover_Pescado(){
  67.  
  68. prev_x = pos_x;
  69. prev_y = pos_y;
  70.  
  71. t_final = clock();
  72.  
  73. if((velocidad + t_inicial) < t_final){
  74.  
  75. int mov_vertical = rand()%2+1;  // 1-arriba 2-abajo
  76.  
  77. if(sentido==1) pos_x-=dir_x;
  78. if(sentido==2) pos_x+=dir_x;
  79. if(mov_vertical==1) pos_y-=dir_y;
  80. if(mov_vertical==2) pos_y+=dir_y;
  81.  
  82. if(pos_x < bizq){
  83. Pescado::Sentido_Pescado(2);
  84. dir_x = -dir_x;
  85. pos_x = bizq;
  86.  
  87. }
  88. if(pos_x > bder-12){
  89. Pescado::Sentido_Pescado(1);
  90. dir_x = -dir_x;
  91. pos_x = bder-12;
  92. }
  93. if(pos_y < bsup){
  94. dir_y = -dir_y;
  95. pos_y = bsup;
  96. }
  97. if(pos_y > binf){
  98. dir_y = -dir_y;
  99. pos_y = binf;
  100. }
  101.  
  102. t_inicial = t_final;
  103.  
  104. }
  105. }
  106.  
  107. void Pescado::Sentido_Pescado(int x){
  108.  
  109. if(x==1) sentido=1;
  110. if(x==2) sentido=2;
  111.  
  112. }
  113.  
  114. Pescado1::Pescado1(int x, int y){
  115.  
  116. velocidad=x;
  117. color=y;
  118.  
  119. dir_x=1;
  120. dir_y=1;
  121.  
  122. pos_x = rand()%61+10;
  123. pos_y = rand()%6+10;
  124.  
  125. sentido = rand() % 2+1;  //  mira izq/ mira der  
  126.  
  127. t_inicial = clock();
  128.  
  129. }
  130.  
  131. void Pescado1::Borrar_Pescado1(){
  132.  
  133. for(int k=0;k<6;k++){
  134. for(int p=0;p<12;p++){
  135. putchxy(prev_x+p,prev_y+k,' ');
  136. }
  137. }
  138.  
  139. }
  140.  
  141. void Pescado1::Cuerpo_Pescado1(){
  142.  
  143. if(sentido==1){  //pescado mirando izquierda
  144.  
  145. 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;
  146. 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;
  147. 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;
  148. 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;
  149. 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;
  150. 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;
  151.  
  152. }
  153. if(sentido==2){  //pescado mirando derecha
  154.  
  155. 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;
  156. 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;
  157. 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;
  158. 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;
  159. 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;
  160. 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;
  161.  
  162. }
  163.  
  164. }
  165.  
  166. void Pescado1::Dibujar_Pescado1(){
  167.  
  168. Pescado1::Borrar_Pescado1();
  169. Pescado1::Cuerpo_Pescado1();
  170.  
  171. for(int i=0; i<6; i++){
  172. for(int j=0; j<12; j++){
  173. textcolor(color);
  174. putchxy(pos_x+j,pos_y+i,array_b[i][j]);
  175. }
  176. }
  177.  
  178. }
  179.  
  180. Pescado2::Pescado2(int x, int y){
  181.  
  182. velocidad=x;
  183. color=y;
  184.  
  185. dir_x=1;
  186. dir_y=1;
  187.  
  188. pos_x = rand()%61+10;
  189. pos_y = rand()%6+10;
  190.  
  191. sentido = rand() % 2+1;  //  mira izq/ mira der  
  192.  
  193. t_inicial = clock();
  194.  
  195. }
  196.  
  197. void Pescado2::Borrar_Pescado2(){
  198.  
  199. for(int k=0;k<10;k++){
  200. for(int p=0;p<4;p++){
  201. putchxy(prev_x+k,prev_y+p,' ');
  202. }
  203. }
  204.  
  205. }
  206.  
  207. void Pescado2::Cuerpo_Pescado2(){
  208.  
  209. if(sentido==1){  //pescado mirando izquierda
  210.  
  211. array_s[0][0]=0;array_s[0][1]=0;array_s[0][2]=47;array_s[0][3]=39;
  212. array_s[1][0]=0;array_s[1][1]=46;array_s[1][2]=111;array_s[1][3]=45;
  213. array_s[2][0]=0;array_s[2][1]=45;array_s[2][2]=0;array_s[2][3]=45;
  214. array_s[3][0]=47;array_s[3][1]=0;array_s[3][2]=41;array_s[3][3]=39;
  215. array_s[4][0]=124;array_s[4][1]=0;array_s[4][2]=41;array_s[4][3]=39;
  216. array_s[5][0]=0;array_s[5][1]=45;array_s[5][2]=0;array_s[5][3]=39;
  217. array_s[6][0]=0;array_s[6][1]=46;array_s[6][2]=0;array_s[6][3]=39;
  218. array_s[7][0]=0;array_s[7][1]=0;array_s[7][2]=92;array_s[7][3]=39;
  219. array_s[8][0]=0;array_s[8][1]=0;array_s[8][2]=47;array_s[8][3]=92;
  220. array_s[9][0]=0;array_s[9][1]=0;array_s[9][2]=40;array_s[9][3]=40;
  221.  
  222. }
  223. if(sentido==2){  //pescado mirando derecha
  224.  
  225. array_s[0][0]=0;array_s[0][1]=0;array_s[0][2]=41;array_s[0][3]=41;
  226. array_s[1][0]=0;array_s[1][1]=0;array_s[1][2]=92;array_s[1][3]=47;
  227. array_s[2][0]=0;array_s[2][1]=0;array_s[2][2]=47;array_s[2][3]=39;
  228. array_s[3][0]=0;array_s[3][1]=46;array_s[3][2]=0;array_s[3][3]=39;
  229. array_s[4][0]=0;array_s[4][1]=45;array_s[4][2]=0;array_s[4][3]=39;
  230. array_s[5][0]=124;array_s[5][1]=0;array_s[5][2]=40;array_s[5][3]=39;
  231. array_s[6][0]=92;array_s[6][1]=0;array_s[6][2]=40;array_s[6][3]=39;
  232. array_s[7][0]=0;array_s[7][1]=45;array_s[7][2]=0;array_s[7][3]=45;
  233. array_s[8][0]=0;array_s[8][1]=46;array_s[8][2]=111;array_s[8][3]=45;
  234. array_s[9][0]=0;array_s[9][1]=0;array_s[9][2]=92;array_s[9][3]=39;
  235.  
  236. }
  237.  
  238.  
  239.  
  240. }
  241.  
  242. void Pescado2::Dibujar_Pescado2(){
  243.  
  244. Pescado2::Borrar_Pescado2();
  245. Pescado2::Cuerpo_Pescado2();
  246.  
  247. for(int i=0; i<10; i++){
  248. for(int j=0; j<4; j++){
  249. textcolor(color);
  250. putchxy(pos_x+i,pos_y+j,array_s[i][j]);
  251. }
  252. }
  253.  
  254.  
  255. }
  256.  
  257. void Pescado2::Color_Pescado2(){
  258.  
  259. if(color==15) color=1;
  260. else color+=1;
  261.  
  262. }
  263.  
  264. int main(int argc, char *argv[]){
  265.  
  266. _setcursortype(_NOCURSOR);
  267.  
  268. srand(time(NULL));
  269.  
  270. Pescado1 Rojo(50,12);
  271. Pescado1 Verde(80,10);
  272.  
  273. Pescado2 Amarillo(60,14);
  274. Pescado2 Cyan(125,11);
  275.  
  276. while(true){
  277.  
  278. if(kbhit()) {
  279. int tecla=getch();
  280. switch(tecla)
  281. {
  282.  
  283. case 49:
  284. Rojo.Sentido_Pescado(1);
  285. Verde.Sentido_Pescado(1);
  286. break;
  287. case 50:
  288. Rojo.Sentido_Pescado(2);
  289. Verde.Sentido_Pescado(2);
  290. break;
  291. case 51:
  292. Amarillo.Color_Pescado2();
  293. Cyan.Color_Pescado2();
  294. break;
  295.  
  296.  
  297. }
  298. }
  299.  
  300. Rojo.Mover_Pescado();
  301. Rojo.Dibujar_Pescado1();
  302. Verde.Mover_Pescado();
  303. Verde.Dibujar_Pescado1();
  304. Amarillo.Mover_Pescado();
  305. Amarillo.Dibujar_Pescado2();
  306. Cyan.Mover_Pescado();
  307. Cyan.Dibujar_Pescado2();
  308.  
  309. }
  310.  
  311. return 0;
  312.  
  313. }
  314.  

Son mis primeras clases acerca de Clases, Herencia y otros, así que tendré en cuenta cualquier tipo de sugerencias. Gracias!
2  Programación / Programación C/C++ / Dibujar con putchxy en: 23 Agosto 2014, 23:26 pm
Hola gente. Vengo con 2 dudas que surgieron en un ejercicio.
Tenía que hacer algo parecido al insaniquarium (solo las animaciones de los pescaditos)

Ya tengo el código correspondiente al movimiento, pero a la hora de mostrarlo en pantalla, obtengo un resultado extraño.

Este es el cuerpo del pescado mirando hacia la izquierda: (por mostar un caso)


Código
  1. 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]=13;array_b[0][9]=10;array_b[0][10]=32;array_b[0][11]=32;
  2. array_b[1][0]=32;array_b[1][1]=32;array_b[1][2]=95;array_b[1][3]=47;array_b[1][4]=123;array_b[1][5]=95;array_b[1][6]=32;array_b[1][7]=32;array_b[1][8]=13;array_b[1][9]=10;array_b[1][10]=32;array_b[1][11]=46;
  3. array_b[2][0]=96;array_b[2][1]=32;array_b[2][2]=32;array_b[2][3]=32;array_b[2][4]=32;array_b[2][5]=96;array_b[2][6]=46;array_b[2][7]=47;array_b[2][8]=39;array_b[2][9]=62;array_b[2][10]=32;array_b[2][11]=32;
  4. array_b[3][0]=32;array_b[3][1]=13;array_b[3][2]=10;array_b[3][3]=47;array_b[3][4]=32;array_b[3][5]=101;array_b[3][6]=32;array_b[3][7]=40;array_b[3][8]=40;array_b[3][9]=32;array_b[3][10]=32;array_b[3][11]=32;
  5. array_b[4][0]=61;array_b[4][1]=60;array_b[4][2]=32;array_b[4][3]=13;array_b[4][4]=10;array_b[4][5]=32;array_b[4][6]=96;array_b[4][7]=46;array_b[4][8]=44;array_b[4][9]=95;array_b[4][10]=95;array_b[4][11]=44;
  6. array_b[5][0]=46;array_b[5][1]=39;array_b[5][2]=92;array_b[5][3]=95;array_b[5][4]=62;array_b[5][5]=32;array_b[5][6]=32;array_b[5][7]=13;array_b[5][8]=10;array_b[5][9]=32;array_b[5][10]=32;array_b[5][11]=32;
  7. array_b[6][0]=32;array_b[6][1]=32;array_b[6][2]=32;array_b[6][3]=92;array_b[6][4]=41;array_b[6][5]=32;array_b[6][6]=32;array_b[6][7]=32;array_b[6][8]=32;array_b[6][9]=32;array_b[6][10]=32;array_b[6][11]=32;
  8. array_b[7][0]=32;array_b[7][1]=32;array_b[7][2]=32;array_b[7][3]=32;array_b[7][4]=32;array_b[7][5]=32;array_b[7][6]=32;array_b[7][7]=32;array_b[7][8]=32;array_b[7][9]=32;array_b[7][10]=32;array_b[7][11]=32;
  9.  

Y lo dibujo de esta manera:

Código
  1. void Pescado1::Dibujar_Pescado1(){
  2.  
  3. Pescado1::Borrar_Pescado1();
  4. Pescado1::Cuerpo_Pescado1();
  5.  
  6. for(int i=0; i<8; i++){
  7. for(int j=0; j<12; j++){
  8. putchxy(pos_x+j,pos_y+i,array_b[i][j]);
  9. }
  10. }
  11.  
  12. }
  13.  

Creo que el código está bien, pero el pescado sale desfigurado. Pareciera como que se corren algunos elementos o no se imprime la cantidad correcta de espacios.

La otra pregunta que tenía era si existía alguna manera de evitar tanto parpadeo al borrar y dibujar el pescado en la nueva posición.

Este es el método que utilizo para borrar:

Código
  1. void Pescado1::Borrar_Pescado1(){
  2.  
  3. for(int k=0;k<8;k++){
  4. for(int p=0;p<12;p++){
  5. putchxy(prev_x+p,prev_y+k,' ');
  6. }
  7. }
  8.  
  9. }

Se agradece de antemano. Saludos!
3  Programación / Programación C/C++ / Problema guardando 2d arrays en binarios en: 5 Agosto 2014, 05:08 am
Hola a todos. Nuevamente con un problema. Me pidieron que realice una sopa de letras que brinde la posibilidad de guardar la partida para retomar en otro momento. Es aquí donde fallo. No estoy muy seguro del código correspondiente a write y read (líneas 203 y 251 respectivamente)

Código
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string.h>
  4. #include <stdio.h>
  5. #include <conio2.h>
  6. #include <ctime>
  7. #include <stdlib.h>
  8. #include <windows.h>
  9. #include <ctype.h>
  10.  
  11. using namespace std;
  12.  
  13. void imprimir_sopa(char x[20][20]);
  14. void imprimir_indices();
  15. void imprimir_encontradas(int x[5][4], char y[5][21]);
  16. void marcar_palabra(int x[5][4], char y[5][21]);
  17. void victoria(char w[20][20], int x[5][4], char y[5][21]);
  18.  
  19. int main(int argc, char *argv[]) {
  20.  
  21.   int cont=0;  
  22.   char c;
  23.  
  24.   int lista_found=0;
  25.   char lista[5][21];
  26.   bool s;
  27.  
  28.   char sopa[20][20];  //declaración e inicialización los elementos de la sopa con '?'
  29.  
  30.   int sopa_found=0, posx, posy, dir1, registro[5][3];  //contador de palabras encontradas, posiciones X e Y de las iniciales, dir1=hor/ver/diag,  
  31.   bool t;                                      //registro de TODAS las palabras de la lista
  32.  
  33.   char alphabet[27]={"ABCDEFGHIJKLMNOPQRSTUVWXYZ"};
  34.  
  35.   int found[5][4];  //declaración e inicialización del registro de las palabras que son encontradas (posx, posy, dir1, strlen)
  36.  
  37.   int d, dir2, palabras_found=0;
  38.   int posx2, posy2;
  39.  
  40.   char g;  
  41.  
  42.   while(g!='3'){
  43.  
  44.      textcolor(LIGHTRED);
  45.      cout<<"BIENVENIDO A LA SOPA DE LETRAS"<<endl<<endl;
  46.      textcolor(WHITE);
  47.      cout<<"Elija una opci\242n"<<endl<<endl;
  48.      cout<<"1) Partida nueva"<<endl;
  49.      cout<<"2) Continuar con la \243ltima partida guardada"<<endl;
  50.      cout<<"3) Salir"<<endl<<endl;
  51.  
  52.      g=getch();
  53.  
  54.      if(g=='1'){        
  55.  
  56.         ifstream entrada("listado de palabras.txt", ios::in);
  57.  
  58.         while (entrada.good()){  //leer cantidad de veces que aparece '\n' en el txt      
  59.            c = entrada.get();
  60.            if (c=='\n')cont++;
  61.         }      
  62.         entrada.close(); //si se accede manualmente al archivo .txt se debe ingresar la última palabra de la lista acompañado de \n.
  63.         //caso contrario el código detectará una palabra de menos
  64.         char** q=new char*[cont];
  65.  
  66.         for(int f=0; f<cont; f++){
  67.            q[f]=new char[21];      
  68.         }
  69.  
  70.         entrada.open("listado de palabras.txt", ios::in);
  71.  
  72.         for(int g=0; g<cont; g++){
  73.            entrada.getline(q[g], 20);
  74.            strupr(q[g]);
  75.         }
  76.  
  77.         entrada.close();        
  78.  
  79.         srand(time(NULL));
  80.  
  81.         while(lista_found<5){  //asignación de las palabras aleatorias (5)
  82.            s=true;
  83.            int a=rand()%cont;
  84.            for(int j=0; j<5; j++){
  85.               if(strcmp(q[a],lista[j])==0){
  86.                  s=false;
  87.                  break;
  88.               }
  89.            }      
  90.            if(s==true){
  91.               strcpy(lista[lista_found],q[a]);
  92.               lista_found++;
  93.            }
  94.            Sleep(1000);
  95.         }
  96.  
  97.         for(int r=0; r<cont; r++){
  98.            delete[] q[r];  
  99.         }
  100.  
  101.         delete[] q;        
  102.  
  103.         for(int k=0; k<20; k++){
  104.            for(int l=0; l<20; l++){
  105.               sopa[k][l]='?';
  106.            }  
  107.         }        
  108.  
  109.         while(sopa_found<5){  //inserción de palabras
  110.  
  111.            posx=rand()%20;
  112.            posy=rand()%20;
  113.            dir1=rand()%3+1;
  114.  
  115.            if(dir1==1){  //horizontal
  116.               if(posy+strlen(lista[sopa_found])<=20){
  117.                  t=true;
  118.                  for(int m=posy; m<posy+strlen(lista[sopa_found]); m++){
  119.                     if(sopa[posx][m]!='?'){
  120.                        t=false;
  121.                        break;
  122.                     }              
  123.                  }
  124.                  if(t==true){
  125.                     registro[sopa_found][0]=posy+1;
  126.                     registro[sopa_found][1]=posx+1;
  127.                     registro[sopa_found][2]=dir1;
  128.                     for(int n=0; n<strlen(lista[sopa_found]); n++){
  129.                        sopa[posx][posy]=lista[sopa_found][n];
  130.                        posy++;
  131.                     }            
  132.                     sopa_found++;
  133.                  }
  134.               }
  135.            }
  136.            if(dir1==2){  //vertical
  137.               if(posx+strlen(lista[sopa_found])<=20){
  138.                  t=true;
  139.                  for(int o=posx; o<posx+strlen(lista[sopa_found]); o++){
  140.                     if(sopa
  141.  
  142.    [posy]!='?'){
  143.  
  144.                        t=false;
  145.                        break;
  146.                     }              
  147.                  }
  148.                  if(t==true){
  149.                     registro[sopa_found][0]=posy+1;
  150.                     registro[sopa_found][1]=posx+1;
  151.                     registro[sopa_found][2]=dir1;
  152.                     for(int p=0; p<strlen(lista[sopa_found]); p++){
  153.                        sopa[posx][posy]=lista[sopa_found][p];
  154.                        posx++;
  155.                     }
  156.                     sopa_found++;
  157.                  }
  158.               }        
  159.            }
  160.            if(dir1==3){  //diagonal
  161.               if(posx+strlen(lista[sopa_found])<=20&&posy+strlen(lista[sopa_found])<=20){
  162.                  t=true;
  163.                  for(int q=posx, r=posy; q<posx+strlen(lista[sopa_found]); q++, r++){
  164.                     if(sopa[q][r]!='?'){
  165.                        t=false;
  166.                        break;
  167.                     }              
  168.                  }
  169.                  if(t==true){
  170.                     registro[sopa_found][0]=posy+1;
  171.                     registro[sopa_found][1]=posx+1;
  172.                     registro[sopa_found][2]=dir1;
  173.                     for(int s=posx, t=posy, u=0; s<posx+strlen(lista[sopa_found]); s++, t++, u++){
  174.                        sopa[t]=lista[sopa_found];
  175.                     }
  176.                     sopa_found++;
  177.                  }
  178.               }
  179.            }
  180.         }        
  181.  
  182.         for(int v=0; v<20; v++){  //relleno de los elementos restantes
  183.            for(int w=0; w<20; w++){
  184.               if(sopa[v][w]=='?'){
  185.                  int a=rand()%26;
  186.                  sopa[v][w] = alphabet[a];
  187.               }
  188.            }
  189.         }      
  190.  
  191.         for(int x=0; x<5; x++){
  192.            for(int y=0; y<4; y++){
  193.               if(y!=3)found
  194.  
  195.    [y]=100;
  196.  
  197.               else found
  198.  
  199.    [y]=strlen(lista
  200.    );
  201.  
  202.            }
  203.         }
  204.  
  205.      }
  206.  
  207.      if(g=='1'||g=='2'){
  208.  
  209.         fstream arch;
  210.  
  211.         if(g=='2'){
  212.  
  213.            arch.open("sopa saved.dat", ios::binary);
  214.  
  215.            arch.read(sopa[0], 20*20*sizeof(sopa));
  216.  
  217.            arch.read((char *)found[0], 5*4*sizeof(found));
  218.  
  219.            arch.read(lista[0], 5*21*sizeof(lista));
  220.  
  221.            arch.read((char *)palabras_found,sizeof(palabras_found));
  222.  
  223.            arch.close();
  224.  
  225.         }
  226.  
  227.         clrscr();  
  228.  
  229.         while(palabras_found<5){
  230.  
  231.            int w;
  232.  
  233.            clrscr();
  234.  
  235.            textcolor(LIGHTRED);
  236.            gotoxy(6,1);
  237.            cout<<"BIENVENIDO A LA SOPA DE LETRAS"<<endl<<endl;
  238.  
  239.            imprimir_sopa(sopa);
  240.            imprimir_indices();
  241.            imprimir_encontradas(found, lista);
  242.            marcar_palabra(found, lista);
  243.  
  244.            gotoxy(1,26);
  245.            cout<<"Tienes que encontrar las siguientes palabras:"<<endl<<endl;
  246.  
  247.            for(int i=0; i<5; i++){
  248.               cout<<i+1<<" - ";
  249.               puts(lista);
  250.            }
  251.  
  252.            cout<<"\n(Nota: Las dimensiones de la sopa son 20x20)"<<endl<<endl;      
  253.            cout<<"Buscar palabra No.: ";
  254.            textcolor(YELLOW);
  255.            cout<<"(Save
  256.  
  257.    Exit [6]) ";
  258.  
  259.            textcolor(WHITE);
  260.            cin>>d;
  261.  
  262.            if(d==0){
  263.  
  264.               arch.open("sopa saved.dat", ios::binary);
  265.  
  266.               arch.write(sopa[0], 20*20*sizeof(sopa));
  267.  
  268.               arch.write((char *)found[0], 5*4*sizeof(found));
  269.  
  270.               arch.write(lista[0], 5*21*sizeof(lista));
  271.  
  272.               arch.write((char *)palabras_found,sizeof(palabras_found));
  273.  
  274.               arch.close();
  275.  
  276.               gotoxy(1,36);
  277.               textcolor(LIGHTMAGENTA);
  278.               cout<<"(Partida guardada)                       ";
  279.               //textcolor(WHITE);
  280.               Sleep(2000);
  281.               clrscr();      
  282.  
  283.            }  
  284.            if(d!=0){
  285.  
  286.               if(d==6){
  287.                  clrscr();
  288.                  break;
  289.               }
  290.  
  291.               else{
  292.                  cout<<endl;
  293.                  cout<<"Coordenada 'X' de la inicial: ";
  294.                  cin>>posx2;;
  295.                  cout<<"Coordenada 'Y' de la inicial: ";
  296.                  cin>>posy2;
  297.                  cout<<"Horizontal [1] Vertical [2] Diagonal [3] ? ";
  298.                  cin>>dir2;
  299.  
  300.                  w=d-1;      
  301.  
  302.                  if(posx2==registro[w][0]&&posy2==registro[w][1]&&dir2==registro[w][2]){
  303.                     textcolor(LIGHTGREEN);
  304.                     cout<<"\nExcelente! La has adivinado";
  305.                     for(int i=0; i<3; i++){
  306.                        found[w]=registro[w];
  307.                     }
  308.                     Sleep(2000);
  309.                     marcar_palabra(found, lista);
  310.                     palabras_found++;
  311.                     textcolor(WHITE);
  312.                  }
  313.                  else {
  314.                     textcolor(LIGHTRED);
  315.                     cout<<"\nIncorrecto... Intenta otra vez!";
  316.                     Sleep(2000);
  317.                     textcolor(WHITE);
  318.                  }
  319.  
  320.               }
  321.            }
  322.         }
  323.  
  324.         if(palabras_found==4) victoria(sopa, found, lista);            
  325.  
  326.      }      
  327.  
  328.   }
  329.  
  330.   clrscr();
  331.   cout<<"FIN";
  332.  
  333.   return 0;
  334.  
  335.  
  336. }
  337.  
  338. void imprimir_sopa(char x[20][20]){
  339.  
  340.   textcolor(WHITE);
  341.  
  342.   for(int i=0; i<20; i++){
  343.      for(int j=0; j<20; j++){
  344.         cout<<" ";
  345.         cout<<x[j];
  346.         if(j==19) cout<<endl;
  347.      }  
  348.   }
  349. }
  350.  
  351. void imprimir_indices(){
  352.  
  353.   textcolor(YELLOW);
  354.  
  355.   gotoxy(2,24);  //eje X
  356.   for(int i=0; i<20; i++){
  357.      cout<<i+1;
  358.      if(i<9) cout<<" ";
  359.   }
  360.   gotoxy(43,3);  //eje Y (puede omitirse)
  361.   int h=0;
  362.   for(int j=0; j<20; j++){
  363.      gotoxy(43,3+h);
  364.      cout<<j+1;
  365.      cout<<endl;      
  366.      h++;
  367.   }
  368.  
  369.   textcolor(WHITE);
  370.  
  371. }
  372.  
  373. void imprimir_encontradas(int x[5][4], char y[5][21]){
  374.  
  375.   textcolor(LIGHTMAGENTA);
  376.  
  377.   for(int i=0; i<5; i++){
  378.  
  379.      if(x
  380.  
  381.    !=100){
  382.  
  383.  
  384.         gotoxy((x
  385.  
  386.    )*2,x[1]+2);
  387.  
  388.  
  389.         if(x[2]==1){  //horizontal
  390.            for(int t=0; t<x[3]; t++){
  391.               cout<<y[t];
  392.               cout<<" ";
  393.            }      
  394.         }
  395.         if(x[2]==2){  //vertical
  396.            int h=1;
  397.            for(int t=0; t<x[3]; t++){
  398.               cout<<y[t];
  399.               gotoxy((x
  400.  
  401.    )*2,x[1]+2+h);
  402.  
  403.               h++;
  404.            }      
  405.         }
  406.         if(x[2]==3){  //diagonal
  407.            int h=1, k=2;
  408.            for(int t=0; t<x[3]; t++){
  409.               cout<<y[t];
  410.               gotoxy((x
  411.  
  412.    )*2+k,x[1]+2+h);
  413.  
  414.               h++; k+=2;
  415.  
  416.            }      
  417.         }
  418.  
  419.      }
  420.   }
  421.  
  422.   textcolor(WHITE);
  423. }
  424.  
  425. void marcar_palabra(int x[5][4], char y[5][21]){  
  426.  
  427.   textcolor(LIGHTMAGENTA);
  428.  
  429.   for(int i=0; i<5; i++){
  430.      if(x
  431.  
  432.    !=100){
  433.  
  434.         gotoxy(6+x[3],28+i);
  435.         cout<<"X";
  436.      }
  437.   }
  438.  
  439.   textcolor(WHITE);
  440. }
  441.  
  442. void victoria(char w[20][20], int x[5][4], char y[5][21]){
  443.  
  444.   clrscr();
  445.  
  446.   gotoxy(6,1);
  447.   textcolor(LIGHTRED);
  448.   cout<<"BIENVENIDO A LA SOPA DE LETRAS"<<endl<<endl;
  449.  
  450.   imprimir_sopa(w);
  451.   imprimir_encontradas(x, y);
  452.  
  453.   gotoxy(3,24);
  454.   textcolor(LIGHTGREEN);
  455.   cout<<"Felicitaciones! Has adivinado todas!"<<endl;
  456.   textcolor(WHITE);
  457.  
  458. }

No entiendo por qué aparecen lineas horizontales dentro del código... Qué debo hacer para hacerlo visible? Gracias de antemano. Saludos!



Ahora si :)
4  Programación / Programación C/C++ / Teoría + Problema Propuesto en: 17 Julio 2014, 00:34 am
Buenas! Acabo de encontrar este foro y pienso que seguro podrán ayudarme con mi problema:

Tengo que resolver los sig ejercicios...

A) Realice un programa para leer un arreglo lineal de N elementos conteniendo palabras de hasta 12 caracteres. Luego el programa deberá informar separadamente: a) El primero de la lista de acuerdo a un orden alfabético. b) Los elementos del arreglo que ocupan las posiciones pares. c) Las palabras que comienzan con la sílaba ‘mar’ .

B) Ejercicio 6.5. Escriba un programa que permita ingresar una lista de apellidos y nombres
de N personas (apellido y nombre se asignan a una sola variable). El programa debe mostrar las direcciones de correo electrónicos (emails) de ellos. El dominio asignado para ellos para el email
es: gmail.com, y el nombre de usuario se forma con la inicial del nombre y el apellido. Ejemplo: Si el dato es Gomez Nicolas, debe obtenerse: ngomez@gmail.com

...pero no cuento con ningún tipo de teoría acerca de punteros y memoria dinámica. La verdad estoy algo perdido. Me gustaría que me recomienden material para aprender de cero estos conceptos.

Desde ya, muchas gracias. Saludos!

Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines