Programación General > C/C++

 trabajo de c++ (hundir la flota)

(1/1)

mikwoc:
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++ ---#include <winbgim.h>#include <stdio.h>#include <stdlib.h>    /*int aleatorio_pantini ();    int f;    A = (rand() % 1001);    return c;*/char MAT[16][16] = {'A',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',                    ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',                    ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',                    ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',                    ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',                    ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',                    ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',                    ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',                    ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',                    ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',                    ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',                    ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',                    ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',                    ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',                    ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',                    ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Z'};                    int MATEST[16][16] =  {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,                       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,                       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,                       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,                       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,                       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,                       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,                       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,                       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,                       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,                       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,                       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,                       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,                       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,                       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,                       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};                          int MARGEN_IZQ_B=10,MARGEN_SUP_B=30,TAM_B=20,MARGEN_SUP_X,N,B,BARCO; int URX[11],ULX[11],DRX[11],DLX[11],LRX[11],LLX[11],RRX[11],RLX[11];int URY[11],ULY[11],DRY[11],DLY[11],LRY[11],LLY[11],RRY[11],RLY[11]; int BARCOS[11] = {5,4,4,3,3,3,3,2,2,2,2};int BARCOT[11] = {0,0,0,0,0,0,0,0,0,0,0};char DBARCO[11];                   int XX,YY,FIL,COL,SALIR=0; /*int NUMPAR = 10;*/ char CAD[80];                  int MARGEN_IZQ=250,MARGEN_SUP=100,TAM=20,FILAS = 16,COLUMNAS=16,TAMLIN=2; void waitForLeftMouseClick(); void esperaclick(){    clearmouseclick(WM_LBUTTONDOWN);    const int DELAY = 50;    int x, y;    while (!ismouseclick(WM_LBUTTONDOWN))        delay(DELAY);         }  /*void revisar_tablero(){     NUMPAR = 0;     for(int F=0;F<=15;F++){        for(int C=0;C<=15;C++){           if (MATEST[F][C] == 0) NUMPAR++;        }     }}*/ void dibujar_tablero(){     int F,C;     for(F=0;F<=15;F++){        for(C=0;C<=15;C++){           if (MATEST[F][C] == 1) setfillstyle(1,RED); // aqui no tendria qu eser espacio en blanco si no cuando encuentre dos casillas iguales           else                 setfillstyle(1,CYAN);           bar(MARGEN_IZQ + (C * TAM),MARGEN_SUP + (F*TAM),               MARGEN_IZQ + (C * TAM) + TAM,MARGEN_SUP + (F*TAM) + TAM);             sprintf(CAD,"%c",MAT[F][C]);             settextstyle(0,0,2);             setcolor(4);             setbkcolor(CYAN);             outtextxy(MARGEN_IZQ + (C * TAM) + TAM/8, MARGEN_SUP + (F*TAM) + TAM/8,CAD);                    }      }      setcolor(YELLOW);      setlinestyle(1,2,TAMLIN);  // estilo,?,tamaño      for(F=0;F<=16;F++){         line(MARGEN_IZQ,MARGEN_SUP+(F * TAM),MARGEN_IZQ + (COLUMNAS * TAM),MARGEN_SUP+(F * TAM));       }      for(C=0;C<=16;C++){         line(MARGEN_IZQ+(C*TAM),MARGEN_SUP,MARGEN_IZQ+(C*TAM),MARGEN_SUP+(FILAS * TAM));        }     B = 0;     N = 2;          MARGEN_SUP_X = MARGEN_SUP_B;          while (B<11){               LLX[B] = MARGEN_IZQ_B;     LLY[B] = MARGEN_SUP_X + TAM_B;     LRX[B] = MARGEN_IZQ_B + TAM_B;     LRY[B] = MARGEN_SUP_X + (2 * TAM_B);          ULX[B] = MARGEN_IZQ_B + TAM_B;     ULY[B] = MARGEN_SUP_X;     URX[B] = MARGEN_IZQ_B + (2 * TAM_B);     URY[B] = MARGEN_SUP_X + TAM_B;          RLX[B] = MARGEN_IZQ_B + (2 * TAM_B);     RLY[B] = MARGEN_SUP_X + TAM_B;     RRX[B] = MARGEN_IZQ_B + (3 * TAM_B);     RRY[B] = MARGEN_SUP_X + (2 * TAM_B);          DLX[B] = MARGEN_IZQ_B + (TAM_B);     DLY[B] = MARGEN_SUP_X + (2 * TAM_B);     DRX[B] = MARGEN_IZQ_B + (2 * TAM_B);     DRY[B] = MARGEN_SUP_X + (3 * TAM_B);          if (BARCOT[B]==0){        setcolor(N);        setfillstyle(1,N);     }     else{        setcolor(N);        setfillstyle(2,N);          }          bar(LLX[B],LLY[B],LRX[B],LRY[B]);     bar(ULX[B],ULY[B],URX[B],URY[B]);     bar(RLX[B],RLY[B],RRX[B],RRY[B]);     bar(DLX[B],DLY[B],DRX[B],DRY[B]);          settextstyle(0,0,2);     setcolor(N);     setbkcolor(BLACK);     sprintf(CAD,"%i",BARCOS[B]);     outtextxy(LRX[B] + (TAM_B/8),URY[B] + (TAM_B /8),CAD);         /*     bar(MARGEN_IZQ_B,MARGEN_SUP_X + TAM_B,MARGEN_IZQ_B + TAM_B,MARGEN_SUP_X + (2 * TAM_B));     bar(MARGEN_IZQ_B + TAM_B,MARGEN_SUP_X,MARGEN_IZQ_B + (2 * TAM_B),MARGEN_SUP_X + TAM_B);     bar(MARGEN_IZQ_B + (2 * TAM_B),MARGEN_SUP_X + TAM_B,MARGEN_IZQ_B + (3 * TAM_B),MARGEN_SUP_X + (2 * TAM_B));     bar(MARGEN_IZQ_B + (TAM_B),MARGEN_SUP_X + (2 * TAM_B),MARGEN_IZQ_B + (2 * TAM_B),MARGEN_SUP_X + (3 * TAM_B));          settextstyle(0,0,2);     setcolor(N);     sprintf(CAD,"4");     outtextxy(MARGEN_IZQ_B + TAM_B + (TAM_B/8),MARGEN_SUP_X + TAM_B + (TAM_B /8),CAD);     */          MARGEN_SUP_X = MARGEN_SUP_X + (4 * TAM_B);     N++;     B++;     }          setfillstyle(1,RED);     bar(300,700,400,750);     sprintf(CAD,"SALIR");     setbkcolor(RED);     setcolor(YELLOW);     outtextxy(310,720,CAD);              sprintf(CAD,"SELECCIONADO BARCO %2i  DE  %2i  DIRECCION %c",BARCO,BARCOS[BARCO],DBARCO[BARCO]);     outtextxy(100,600,CAD);                  } void detectar_barco(){          dibujar_tablero();     sprintf(CAD,"SELECCIONE UN BARCO Y DIRECCION");     outtextxy(100,50,CAD);      waitForLeftMouseClick();            if(XX >= 300 and XX <= 400 and        YY >= 700 and YY <= 750) SALIR = 1;      else {             for(B=0;B<11;B++){          if (XX >= LLX[B] and XX <= LRX[B] and              YY >= LLY[B] and YY <= LRY[B]){              BARCO = B;              DBARCO[B] = 'L';          }          if (XX >= ULX[B] and XX <= URX[B] and              YY >= ULY[B] and YY <= URY[B]){              BARCO = B;              DBARCO[B] = 'U';          }          if (XX >= RLX[B] and XX <= RRX[B] and              YY >= RLY[B] and YY <= RRY[B]){              BARCO = B;              DBARCO[B] = 'R';          }          if (XX >= DLX[B] and XX <= DRX[B] and              YY >= DLY[B] and YY <= DRY[B]){              BARCO = B;              DBARCO[B] = 'D';          }     }                  }              sprintf(CAD,"detectar barco BARCO = %i, DIRECCION = %c  XX = %i   YY = %i FIL = %i  COL = %i",BARCO,DBARCO[BARCO],XX,YY,FIL,COL);    outtextxy(20,700,CAD);              void detectar_cuadro(){          dibujar_tablero();     sprintf(CAD,"SELECCIONE UNA POSICION PARA SITUAR EL BARCO");     outtextxy(100,50,CAD);          waitForLeftMouseClick();          if(XX >= 300 and XX <= 400 and        YY >= 700 and YY <= 750) SALIR = 1;     else {          COL = ((XX - MARGEN_IZQ) / TAM);     FIL = ((YY - MARGEN_SUP) / TAM);                      sprintf(CAD,"detectar cuadroBARCO = %i, DIRECCION = %c  XX = %i   YY = %i FIL = %i  COL = %i",BARCO,DBARCO[BARCO],XX,YY,FIL,COL);    outtextxy(20,700,CAD);          }} void situar_barco(){    int C,FB=FIL,CB=COL;        if ((DBARCO[BARCO]=='U' and FB - BARCOS[BARCO] + 1 >= 0)or        (DBARCO[BARCO]=='D' and FB + BARCOS[BARCO] - 1 <= 15)or        (DBARCO[BARCO]=='L' and CB - BARCOS[BARCO] + 1 >= 0)or        (DBARCO[BARCO]=='R' and CB + BARCOS[BARCO] - 1 <= 15)){        for(C=0;C<BARCOS[BARCO];C++){       MAT[FB][CB] = BARCO + 48;       switch(DBARCO[BARCO]){          case 'U':   FB--;                      break;           case 'D':   FB++;                     break;           case 'L':   CB--;                      break;           case 'R':   CB++;                      break;        }     }    BARCOT[BARCO] = 1;    BARCO = -1;} else{sprintf(CAD,"SPACE NOT ENOUGH.   PULSA BOTON RATON PARA CONTINUAR");outtextxy(200,500,CAD);esperaclick(); } if (BARCO != -1 and BARCOT[BARCO] != 0){sprintf(CAD,"BARCO YA SITUADO. PULSE TECLA");outtextxy(200,600,CAD);BARCO = -1;esperaclick();}           }      /*int color_cuadro(){    int V_RETURN;    if (MAT[FIL][COL] == ' ') V_RETURN = RED;// aqui no tendria qu eser espacio en blanco si no cuando encuentre dos casillas iguales    else                      V_RETURN = CYAN;   return V_RETURN;}*/           int main(){        int VALOR,TURNO = 1,FIL_ANT,COL_ANT;            initwindow(900,600);      BARCO = -1;    FIL = -1;    COL = -1;     do{               /*dibujar_tablero();            settextstyle(0,0,2);      setcolor(2);      sprintf(CAD,"Estas Jugando a hundir la Flota");      outtextxy(100,400,CAD);      sprintf(CAD,"X = %i  Y = %i FIL = %i  COL = %i",XX,YY,FIL,COL);      outtextxy(100,422,CAD);      sprintf(CAD,"NUMPAR = %i",NUMPAR);      outtextxy(100,440,CAD);     */                  if (BARCO == -1) detectar_barco();          if (BARCO != -1) detectar_cuadro();        if (BARCO != -1 and FIL >= 0 and COL <= 15 and BARCOT[BARCO] == 0){              situar_barco();           }               /*    if (FIL >= 0 and FIL <= 9 and        COL >= 0 and COL <=9 and        MATEST[FIL][COL] == 0){                dibujar_tablero(1);      delay(2000);           sprintf(CAD,"FILA = %i  COLUMNA = %i",FIL,COL);      outtextxy(50,500,CAD);      if (TURNO == 1) {         FIL_ANT = FIL;         COL_ANT = COL;         MATEST[FIL_ANT][COL_ANT] = 1;         TURNO++;      }      else {           if (MAT[FIL][COL] == MAT[FIL_ANT] [COL_ANT]) {              MATEST[FIL][COL] = 1;           }           else{              MATEST[FIL_ANT][COL_ANT] = 0;           }                      TURNO = 1;      }            //sprintf(CAD,"%c",MAT[FIL][COL]);      //settextstyle(0,0,3);      //setbkcolor(color_cuadro()); // Color fondo texto      //outtextxy(MARGEN_IZQ + (COL * TAM) + (TAM/5),MARGEN_SUP + (FIL * TAM) + TAM/5,CAD);    }    revisar_tablero();        */   }while (!SALIR);                closegraph();        //close graphics window    return 0;} void waitForLeftMouseClick(){    clearmouseclick(WM_LBUTTONDOWN);    const int DELAY = 50;    int x, y;    while (!ismouseclick(WM_LBUTTONDOWN))        delay(DELAY);    getmouseclick(WM_LBUTTONDOWN, XX, YY);                     }  

m0skit0:
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:
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:

--- Cita de: "mikwoc" ---alguna idea?
--- Fin de la cita ---
Ejem, ya te lo he dicho en mi post anterior...

Navegación

[0] Índice de Mensajes

Ir a la versión completa