• Miércoles 20 de Noviembre de 2024, 14:42

Autor Tema:  trabajo de c++ (hundir la flota)  (Leído 4606 veces)

mikwoc

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
trabajo de c++ (hundir la flota)
« en: Martes 12 de Abril de 2011, 11:44 »
0
hola soy nuevo es este foro

estoy estudiando primero de informatica i este año como trabajo final nos han mandado hacer un juego i yo elegi el hundir la flota lo tengo casi acabado pero me keda unas cuantas cosas la primara i mas inportante de todas es que me coloca los barcos donde yo le digo pero cuando coloco un barco en un sitio donde hay otro barco me lo sobreescribe i me do borra el barco alguien me prodria ayudar con este problema pliss

gracias  aki les dejo el codigo de mi juego


Código: C++
  1. #include <winbgim.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5.  
  6.  
  7.  
  8. /*int aleatorio_pantini ();
  9.     int f;
  10.     A = (rand() % 1001);
  11.     return c;
  12. */
  13. char MAT[16][16] = {'A',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
  14.                     ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
  15.                     ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
  16.                     ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
  17.                     ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
  18.                     ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
  19.                     ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
  20.                     ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
  21.                     ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
  22.                     ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
  23.                     ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
  24.                     ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
  25.                     ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
  26.                     ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
  27.                     ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
  28.                     ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Z'};
  29.                    
  30. int MATEST[16][16] =  {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  31.                        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  32.                        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  33.                        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  34.                        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  35.                        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  36.                        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  37.                        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  38.                        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  39.                        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  40.                        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  41.                        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  42.                        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  43.                        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  44.                        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  45.                        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
  46.                        
  47.  
  48.  
  49.  
  50. int MARGEN_IZQ_B=10,MARGEN_SUP_B=30,TAM_B=20,MARGEN_SUP_X,N,B,BARCO;
  51.  
  52. int URX[11],ULX[11],DRX[11],DLX[11],LRX[11],LLX[11],RRX[11],RLX[11];
  53. int URY[11],ULY[11],DRY[11],DLY[11],LRY[11],LLY[11],RRY[11],RLY[11];
  54.  
  55. int BARCOS[11] = {5,4,4,3,3,3,3,2,2,2,2};
  56. int BARCOT[11] = {0,0,0,0,0,0,0,0,0,0,0};
  57. char DBARCO[11];
  58.  
  59.                  
  60. int XX,YY,FIL,COL,SALIR=0;
  61.  
  62. /*int NUMPAR = 10;*/
  63.  
  64. char CAD[80];
  65.                  
  66. int MARGEN_IZQ=250,MARGEN_SUP=100,TAM=20,FILAS = 16,COLUMNAS=16,TAMLIN=2;
  67.  
  68. void waitForLeftMouseClick();
  69.  
  70. void esperaclick()
  71. {
  72.     clearmouseclick(WM_LBUTTONDOWN);
  73.     const int DELAY = 50;
  74.     int x, y;
  75.     while (!ismouseclick(WM_LBUTTONDOWN))
  76.         delay(DELAY);
  77.      
  78.    
  79. }
  80.  
  81.  
  82. /*void revisar_tablero(){
  83.      NUMPAR = 0;
  84.      for(int F=0;F<=15;F++){
  85.         for(int C=0;C<=15;C++){
  86.            if (MATEST[F][C] == 0) NUMPAR++;
  87.         }
  88.      }
  89. }*/
  90.  
  91. void dibujar_tablero(){
  92.      int F,C;
  93.      for(F=0;F<=15;F++){
  94.         for(C=0;C<=15;C++){
  95.            if (MATEST[F][C] == 1) setfillstyle(1,RED); // aqui no tendria qu eser espacio en blanco si no cuando encuentre dos casillas iguales
  96.            else                 setfillstyle(1,CYAN);
  97.            bar(MARGEN_IZQ + (C * TAM),MARGEN_SUP + (F*TAM),
  98.                MARGEN_IZQ + (C * TAM) + TAM,MARGEN_SUP + (F*TAM) + TAM);
  99.              sprintf(CAD,"%c",MAT[F][C]);
  100.              settextstyle(0,0,2);
  101.              setcolor(4);
  102.              setbkcolor(CYAN);
  103.              outtextxy(MARGEN_IZQ + (C * TAM) + TAM/8, MARGEN_SUP + (F*TAM) + TAM/8,CAD);  
  104.          
  105.         }
  106.       }
  107.       setcolor(YELLOW);
  108.       setlinestyle(1,2,TAMLIN);  // estilo,?,tamaño
  109.       for(F=0;F<=16;F++){
  110.          line(MARGEN_IZQ,MARGEN_SUP+(F * TAM),MARGEN_IZQ + (COLUMNAS * TAM),MARGEN_SUP+(F * TAM));
  111.       }
  112.       for(C=0;C<=16;C++){
  113.          line(MARGEN_IZQ+(C*TAM),MARGEN_SUP,MARGEN_IZQ+(C*TAM),MARGEN_SUP+(FILAS * TAM));
  114.        }
  115.      B = 0;
  116.      N = 2;
  117.      
  118.      MARGEN_SUP_X = MARGEN_SUP_B;
  119.      
  120.      while (B<11){
  121.      
  122.      
  123.      LLX[B] = MARGEN_IZQ_B;
  124.      LLY[B] = MARGEN_SUP_X + TAM_B;
  125.      LRX[B] = MARGEN_IZQ_B + TAM_B;
  126.      LRY[B] = MARGEN_SUP_X + (2 * TAM_B);
  127.      
  128.      ULX[B] = MARGEN_IZQ_B + TAM_B;
  129.      ULY[B] = MARGEN_SUP_X;
  130.      URX[B] = MARGEN_IZQ_B + (2 * TAM_B);
  131.      URY[B] = MARGEN_SUP_X + TAM_B;
  132.      
  133.      RLX[B] = MARGEN_IZQ_B + (2 * TAM_B);
  134.      RLY[B] = MARGEN_SUP_X + TAM_B;
  135.      RRX[B] = MARGEN_IZQ_B + (3 * TAM_B);
  136.      RRY[B] = MARGEN_SUP_X + (2 * TAM_B);
  137.      
  138.      DLX[B] = MARGEN_IZQ_B + (TAM_B);
  139.      DLY[B] = MARGEN_SUP_X + (2 * TAM_B);
  140.      DRX[B] = MARGEN_IZQ_B + (2 * TAM_B);
  141.      DRY[B] = MARGEN_SUP_X + (3 * TAM_B);
  142.      
  143.      if (BARCOT[B]==0){
  144.         setcolor(N);
  145.         setfillstyle(1,N);
  146.      }
  147.      else{
  148.         setcolor(N);
  149.         setfillstyle(2,N);    
  150.      }
  151.      
  152.      bar(LLX[B],LLY[B],LRX[B],LRY[B]);
  153.      bar(ULX[B],ULY[B],URX[B],URY[B]);
  154.      bar(RLX[B],RLY[B],RRX[B],RRY[B]);
  155.      bar(DLX[B],DLY[B],DRX[B],DRY[B]);
  156.      
  157.      settextstyle(0,0,2);
  158.      setcolor(N);
  159.      setbkcolor(BLACK);
  160.      sprintf(CAD,"%i",BARCOS[B]);
  161.      outtextxy(LRX[B] + (TAM_B/8),URY[B] + (TAM_B /8),CAD);
  162.      
  163.     /*
  164.      bar(MARGEN_IZQ_B,MARGEN_SUP_X + TAM_B,MARGEN_IZQ_B + TAM_B,MARGEN_SUP_X + (2 * TAM_B));
  165.      bar(MARGEN_IZQ_B + TAM_B,MARGEN_SUP_X,MARGEN_IZQ_B + (2 * TAM_B),MARGEN_SUP_X + TAM_B);
  166.      bar(MARGEN_IZQ_B + (2 * TAM_B),MARGEN_SUP_X + TAM_B,MARGEN_IZQ_B + (3 * TAM_B),MARGEN_SUP_X + (2 * TAM_B));
  167.      bar(MARGEN_IZQ_B + (TAM_B),MARGEN_SUP_X + (2 * TAM_B),MARGEN_IZQ_B + (2 * TAM_B),MARGEN_SUP_X + (3 * TAM_B));
  168.      
  169.      settextstyle(0,0,2);
  170.      setcolor(N);
  171.      sprintf(CAD,"4");
  172.      outtextxy(MARGEN_IZQ_B + TAM_B + (TAM_B/8),MARGEN_SUP_X + TAM_B + (TAM_B /8),CAD);
  173.      */
  174.      
  175.      MARGEN_SUP_X = MARGEN_SUP_X + (4 * TAM_B);
  176.      N++;
  177.      B++;
  178.      }
  179.      
  180.      setfillstyle(1,RED);
  181.      bar(300,700,400,750);
  182.      sprintf(CAD,"SALIR");
  183.      setbkcolor(RED);
  184.      setcolor(YELLOW);
  185.      outtextxy(310,720,CAD);
  186.      
  187.    
  188.      sprintf(CAD,"SELECCIONADO BARCO %2i  DE  %2i  DIRECCION %c",BARCO,BARCOS[BARCO],DBARCO[BARCO]);
  189.      outtextxy(100,600,CAD);  
  190.    
  191.  
  192.      
  193.      
  194. }
  195.  
  196. void detectar_barco(){
  197.      
  198.      dibujar_tablero();
  199.      sprintf(CAD,"SELECCIONE UN BARCO Y DIRECCION");
  200.      outtextxy(100,50,CAD);
  201.       waitForLeftMouseClick();
  202.      
  203.       if(XX >= 300 and XX <= 400 and
  204.         YY >= 700 and YY <= 750) SALIR = 1;
  205.       else {
  206.      
  207.         for(B=0;B<11;B++){
  208.           if (XX >= LLX[B] and XX <= LRX[B] and
  209.               YY >= LLY[B] and YY <= LRY[B]){
  210.               BARCO = B;
  211.               DBARCO[B] = 'L';
  212.           }
  213.           if (XX >= ULX[B] and XX <= URX[B] and
  214.               YY >= ULY[B] and YY <= URY[B]){
  215.               BARCO = B;
  216.               DBARCO[B] = 'U';
  217.           }
  218.           if (XX >= RLX[B] and XX <= RRX[B] and
  219.               YY >= RLY[B] and YY <= RRY[B]){
  220.               BARCO = B;
  221.               DBARCO[B] = 'R';
  222.           }
  223.           if (XX >= DLX[B] and XX <= DRX[B] and
  224.               YY >= DLY[B] and YY <= DRY[B]){
  225.               BARCO = B;
  226.               DBARCO[B] = 'D';
  227.           }
  228.      }            
  229.      }
  230.          
  231.     sprintf(CAD,"detectar barco BARCO = %i, DIRECCION = %c  XX = %i   YY = %i FIL = %i  COL = %i",BARCO,DBARCO[BARCO],XX,YY,FIL,COL);
  232.     outtextxy(20,700,CAD);
  233.      
  234.  
  235.      
  236.  
  237.  
  238.  
  239. void detectar_cuadro(){
  240.      
  241.      dibujar_tablero();
  242.      sprintf(CAD,"SELECCIONE UNA POSICION PARA SITUAR EL BARCO");
  243.      outtextxy(100,50,CAD);
  244.      
  245.      waitForLeftMouseClick();
  246.      
  247.      if(XX >= 300 and XX <= 400 and
  248.         YY >= 700 and YY <= 750) SALIR = 1;
  249.      else {
  250.      
  251.      COL = ((XX - MARGEN_IZQ) / TAM);
  252.      FIL = ((YY - MARGEN_SUP) / TAM);
  253.      
  254.              
  255.     sprintf(CAD,"detectar cuadroBARCO = %i, DIRECCION = %c  XX = %i   YY = %i FIL = %i  COL = %i",BARCO,DBARCO[BARCO],XX,YY,FIL,COL);
  256.     outtextxy(20,700,CAD);
  257.      
  258.      }
  259. }
  260.  
  261. void situar_barco(){
  262.     int C,FB=FIL,CB=COL;
  263.    
  264.     if ((DBARCO[BARCO]=='U' and FB - BARCOS[BARCO] + 1 >= 0)or
  265.         (DBARCO[BARCO]=='D' and FB + BARCOS[BARCO] - 1 <= 15)or
  266.         (DBARCO[BARCO]=='L' and CB - BARCOS[BARCO] + 1 >= 0)or
  267.         (DBARCO[BARCO]=='R' and CB + BARCOS[BARCO] - 1 <= 15)){
  268.    
  269.     for(C=0;C<BARCOS[BARCO];C++){
  270.        MAT[FB][CB] = BARCO + 48;
  271.        switch(DBARCO[BARCO]){
  272.           case 'U':   FB--;
  273.                       break;
  274.           case 'D':   FB++;
  275.                      break;
  276.           case 'L':   CB--;
  277.                       break;
  278.           case 'R':   CB++;
  279.                       break;
  280.         }
  281.     }
  282.     BARCOT[BARCO] = 1;
  283.     BARCO = -1;
  284. }
  285.  
  286. else{
  287. sprintf(CAD,"SPACE NOT ENOUGH.   PULSA BOTON RATON PARA CONTINUAR");
  288. outtextxy(200,500,CAD);
  289. esperaclick();
  290.  
  291. }
  292.  
  293. if (BARCO != -1 and BARCOT[BARCO] != 0){
  294. sprintf(CAD,"BARCO YA SITUADO. PULSE TECLA");
  295. outtextxy(200,600,CAD);
  296. BARCO = -1;
  297. esperaclick();
  298. }
  299.  
  300.      
  301.      
  302. }
  303.      
  304.  
  305. /*int color_cuadro(){
  306.     int V_RETURN;
  307.     if (MAT[FIL][COL] == ' ') V_RETURN = RED;// aqui no tendria qu eser espacio en blanco si no cuando encuentre dos casillas iguales
  308.     else                      V_RETURN = CYAN;
  309.    return V_RETURN;
  310. }*/
  311.        
  312.  
  313.  
  314.  
  315. int main()
  316. {
  317.    
  318.     int VALOR,TURNO = 1,FIL_ANT,COL_ANT;
  319.    
  320.    
  321.     initwindow(900,600);
  322.  
  323.     BARCO = -1;
  324.     FIL = -1;
  325.     COL = -1;
  326.  
  327.     do{
  328.          
  329.       /*dibujar_tablero();
  330.      
  331.       settextstyle(0,0,2);
  332.       setcolor(2);
  333.       sprintf(CAD,"Estas Jugando a hundir la Flota");
  334.       outtextxy(100,400,CAD);
  335.       sprintf(CAD,"X = %i  Y = %i FIL = %i  COL = %i",XX,YY,FIL,COL);
  336.       outtextxy(100,422,CAD);
  337.       sprintf(CAD,"NUMPAR = %i",NUMPAR);
  338.       outtextxy(100,440,CAD);
  339.      */
  340.      
  341.      
  342.       if (BARCO == -1) detectar_barco();
  343.    
  344.       if (BARCO != -1) detectar_cuadro();
  345.    
  346.     if (BARCO != -1 and FIL >= 0 and COL <= 15 and BARCOT[BARCO] == 0){
  347.               situar_barco();
  348.        
  349.     }
  350.      
  351.      
  352.     /*
  353.     if (FIL >= 0 and FIL <= 9 and
  354.         COL >= 0 and COL <=9 and
  355.         MATEST[FIL][COL] == 0){
  356.        
  357.         dibujar_tablero(1);
  358.       delay(2000);
  359.    
  360.       sprintf(CAD,"FILA = %i  COLUMNA = %i",FIL,COL);
  361.       outtextxy(50,500,CAD);
  362.       if (TURNO == 1) {
  363.          FIL_ANT = FIL;
  364.          COL_ANT = COL;
  365.          MATEST[FIL_ANT][COL_ANT] = 1;
  366.          TURNO++;
  367.       }
  368.       else {
  369.            if (MAT[FIL][COL] == MAT[FIL_ANT] [COL_ANT]) {
  370.               MATEST[FIL][COL] = 1;
  371.            }
  372.            else{
  373.               MATEST[FIL_ANT][COL_ANT] = 0;
  374.            }
  375.            
  376.            TURNO = 1;
  377.       }
  378.      
  379.       //sprintf(CAD,"%c",MAT[FIL][COL]);
  380.       //settextstyle(0,0,3);
  381.       //setbkcolor(color_cuadro()); // Color fondo texto
  382.       //outtextxy(MARGEN_IZQ + (COL * TAM) + (TAM/5),MARGEN_SUP + (FIL * TAM) + TAM/5,CAD);
  383.     }
  384.     revisar_tablero();
  385.    
  386.     */
  387.    }while (!SALIR);
  388.    
  389.    
  390.    
  391.  
  392.     closegraph();        //close graphics window
  393.     return 0;
  394. }
  395.  
  396. void waitForLeftMouseClick()
  397. {
  398.     clearmouseclick(WM_LBUTTONDOWN);
  399.     const int DELAY = 50;
  400.     int x, y;
  401.     while (!ismouseclick(WM_LBUTTONDOWN))
  402.         delay(DELAY);
  403.     getmouseclick(WM_LBUTTONDOWN, XX, YY);
  404.    
  405.  
  406.    
  407.    
  408.    
  409.    
  410. }
  411.  
  412.  
« última modificación: Martes 12 de Abril de 2011, 13:57 por mikwoc »

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: trabajo de c++ (hundir la flota)
« Respuesta #1 en: Martes 12 de Abril de 2011, 13:45 »
0
Hola bienvenido al foro

Deberías usar la etiqueta de código, y no la de negrita, así tu código quedará formateado y más legible.

En cuanto a tu problema, podrías o bien comprobar primero si ya hay un barco o bien crear una matriz que indique si una posición ya está ocupada.

Saludos.

mikwoc

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: trabajo de c++ (hundir la flota)
« Respuesta #2 en: Martes 12 de Abril de 2011, 13:58 »
0
gracias por la ayuda

pero el problema es que no se como empezar para que me coloque los barcos sin sobre escribirlos

alguna idea?

gracias

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: trabajo de c++ (hundir la flota)
« Respuesta #3 en: Martes 12 de Abril de 2011, 14:54 »
0
Cita de: "mikwoc"
alguna idea?
Ejem, ya te lo he dicho en mi post anterior...