/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Proyecto: Batalla Naval
Ir a página 1, 2  Siguiente
 
      Índice del Foro elrincondelc.com -> Desarrollo de un proyecto de software libre
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
polly



Registrado: 19 Jul 2007
Mensajes: 618

MensajePublicado: 01/09/2008 3:11 am
Título: Proyecto: Batalla Naval

2º Proyecto

Batalla Naval (Hundir la flota)

Especificaciones

http://es.wikipedia.org/wiki/Batalla_naval_(juego)
Los aspectos que no se detallen en la pagina (numero de tiros, numero de embarcaciones, etc) quedan a criterio de cada uno.

Otros
El juego se realizara en C o C++ utilizando librerias estandar.
No se usaran interfaces graficas, todo a modo de consola
Los ficheros se colgaran aqui como siempre

Fechas
Fecha inicio: Lunes 1 septiembre
Fecha fin : Domingo 7 septiembre

(Las fechas estan dispuestas a cambios si se requiere)

S2
_________________
enrmarc
Volver arriba
v4r3t



Registrado: 06 Mar 2007
Mensajes: 103

MensajePublicado: 01/09/2008 6:50 am
Título:

¿Cada uno por separado?
_________________
-=v4r3t=-
Volver arriba
WaRc3L



Registrado: 12 Jun 2008
Mensajes: 199
Ubicación: en el registro de la CPU

MensajePublicado: 01/09/2008 6:57 am
Título:

v4r3t escribió:
¿Cada uno por separado?


No entiendo.. a que te refieres?
_________________
ToDos PoDeMoS CoMpaRTiR La Luz De La BoMBiTa!
Volver arriba
v4r3t



Registrado: 06 Mar 2007
Mensajes: 103

MensajePublicado: 01/09/2008 7:09 am
Título:

Nada, pensé que voleríamos a hacer un proyecto en conjunto.
_________________
-=v4r3t=-
Volver arriba
polly



Registrado: 19 Jul 2007
Mensajes: 618

MensajePublicado: 01/09/2008 7:25 am
Título:

Este es por separado si.
_________________
enrmarc
Volver arriba
polly



Registrado: 19 Jul 2007
Mensajes: 618

MensajePublicado: 01/09/2008 9:50 am
Título:

Otra cosa, el juego puede ser implementado para 1 o 2 jugadores , es decir, para 1 jugador contra la maquina (por turnos) o un jugador contra otro jugador (por turnos) respecetivamente.

S2
_________________
enrmarc
Volver arriba
WaRc3L



Registrado: 12 Jun 2008
Mensajes: 199
Ubicación: en el registro de la CPU

MensajePublicado: 01/09/2008 10:02 am
Título:

No entiendo, el usuario ( jugador ) tendra que escoger si luchar contra la maquina o contra otro jugador?

Un resumen: El jugador tendra escoger el modo en jugar?

Saludos!
_________________
ToDos PoDeMoS CoMpaRTiR La Luz De La BoMBiTa!
Volver arriba
polly



Registrado: 19 Jul 2007
Mensajes: 618

MensajePublicado: 01/09/2008 2:48 pm
Título:

No, el juego ya estara implementado para 1 solo jugador (humano vs maquina) o para 2 (humano vs humano), como querais.

Yo personalmente voy a hacerlo para un solo jugador

S2
_________________
enrmarc
Volver arriba
eagleoneraptor



Registrado: 20 May 2008
Mensajes: 187
Ubicación: Buenos Aires(Argentina)

MensajePublicado: 04/09/2008 10:25 am
Título:

Si no les molesta, aquí esta mi código, avisen si encuentran errores, es para 2 jugadores:

Código:
//Batalla naval por EagleOneRaptor
//Para MiniProyectos de ElRinconDelC
/*
   Modo: 2 Jugadores
   Lenguaje: C++
   Compilador: Dev-C++ 4.9.9.2
   Plataforma Compatible: Windows y Linux (Espero que funque bien en Linux XD)
*/
//02/04/2008, 15:00 - 02/04/2008, 18:00

#include <iostream>
#include <iomanip>
using namespace std;

#define FLOTA_TOTAL 17
#ifdef WIN32
   #define scrclr() system("cls");
#endif
#ifdef LINUX
   #define scrclr() system("clear");
#endif

//Devuelve el nombre de una barcaza
const char *NombreBarco(int num);
//Devuelve la cantidad de celdas de una barcaza
int Cantidad(int num);
//Devuelve el oponente
int Oponente(int num);
//Obtiene una celda del teclado siempre y cuando este bien escrita
bool SeleccionarCelda(int *x,int *y);
//Selecciona Horizontal(true) o Vertical(false)
bool SeleccionarPosicion();

//Clase para cada jugador
class CJugador{
    private:
        bool CeldaDisponible(int x,int y);
    public:
        int disparos[10][10];
        //Valores:
            //0: no se disparo en ese casillero
            //1: agua
            //2: tocado
        int flota[10][10];
        //Valores:
            //0: no hay nada
            //1: portaviones
            //2: acorazado
            //3: crucero
            //4: submarino
            //5: destructor
        int barcazas[5];
       
        CJugador() { this->Inicializar(); }
        //Inicializa las variables
        void Inicializar();
        //Dibuja el tablero Flota y el de Disparos si ConDisparos==true
        void DibujarTablero(bool ConDisparos);
        void UbicarBarcazas();
        void Disparar(int x,int y,CJugador *oponente);
};

void CJugador::Inicializar()
{
    int i,j;
    //Tableros iguales a cero
    for(i=0;i<10;i++){
        for(j=0;j<10;j++){
            disparos[i][j]=0;
            flota[i][j]=0;
        }
    }
    for(i=0;i<5;i++) barcazas[i]=Cantidad(i);
}

void CJugador::DibujarTablero(bool ConDisparos)
{
    int i;
    char j;
    cout << setiosflags(ios::left) << setw(33) << "Tu flota";
    if(ConDisparos){
        cout << "\t";
        cout << "Tus Disparos";
    }
    resetiosflags(ios::left);
    cout << endl << endl;
    //Dibuja la primera línea de numeros separados con |
    cout << "  |";
    for(i=1;i<=10;i++){
        if(i==10) cout << i << "|";
        else cout << i << " |";
    }
    //Si hay que dibujar el otro tablero se hace lo mismo al lado
    if(ConDisparos){
        cout << "\t";
        cout << "  |";
        for(i=1;i<=10;i++){
            if(i==10) cout << i << "|";
            else cout << i << " |";
        }
    }
    //Se dibuja linea de separación
    cout << endl;
    for(i=1;i<=33;i++) cout << "=";
    //Si hay que dibujar el otro tablero se hace lo mismo al lado
    if(ConDisparos){
        cout << "\t";
        for(i=1;i<=33;i++) cout << "=";
    }
    cout << endl;
    //Se dibujan las celdas del juego
    for(j='A';j<='J';j++){
        //Letra para identificar la fila
        cout << j << " |";
        for(i=0;i<10;i++){
            //Se verifica la celda actual para poner un valor
            switch(flota[((int)j)-65][i]){
                case 0: cout << "  |"; break;
                case 1: cout << "PA|"; break;
                case 2: cout << "AC|"; break;
                case 3: cout << "CR|"; break;
                case 4: cout << "SB|"; break;
                case 5: cout << "DS|"; break;
            }
        }
        //Si hay que dibujar el otro tablero se hace lo mismo al lado
        if(ConDisparos){
            cout << "\t";
            cout << j << " |";
            for(i=0;i<10;i++){
                switch(disparos[((int)j)-65][i]){
                    case 0: cout << "  |"; break;
                    case 1: cout << "AG|"; break;
                    case 2: cout << "TK|"; break;
                }
            }
        }
        //Se dibuja linea de separación
        cout << endl;
        for(i=1;i<=33;i++) cout << "=";
        //Si hay que dibujar el otro tablero se hace lo mismo al lado
        if(ConDisparos){
            cout << "\t";
            for(i=1;i<=33;i++) cout << "=";
        }
        cout << endl;
    }
}

void CJugador::UbicarBarcazas()
{
    bool terminado=false,pos,disponible;
    int actual=0,x,y,xaux,yaux,i;
    while(1){
        fflush(stdin);
        scrclr();
        DibujarTablero(false);
        if(terminado){
            fflush(stdin);
            cin.get();
            break;
        }
        cout << "Indique la celda donde comienza el " << NombreBarco(actual) << " (" << Cantidad(actual) << " celdas): ";
        while(!SeleccionarCelda(&x,&y)){
            cout << "La celda señalada no existe, intente otra vez: ";
        }
        cout << "Indique si el " << NombreBarco(actual) << " se ubica horizontalmente o verticalmente (h/v): ";
        pos=SeleccionarPosicion();
       
        //Verificamos si entra en el tablero
        if((pos&&(x+Cantidad(actual)-1)<=9)||(!pos&&(y+Cantidad(actual)-1)<=9)){
            //Verificamos si son posiciones validas
            for(i=1,xaux=x,yaux=y,disponible=true;i<=Cantidad(actual)&&disponible;i++){
                if(!CeldaDisponible(xaux,yaux)) disponible=false;
                if(pos) xaux++;
                else yaux++;
            }
            //Si esta disponible colocamos las celdas correspondientes a cada barcaza
            if(disponible){
                for(i=1;i<=Cantidad(actual);i++){
                    flota[y][x]=actual+1;
                    if(pos) x++;
                    else y++;
                }
                actual++;
                if(actual>=5) terminado=true;
            }
            else{
                cout << "El espacio seleccionado para el " << NombreBarco(actual) << " no esta disponible";
                cin.get();
            }
        }
        else{
            cout << "El " << NombreBarco(actual) << " no entra en el tablero";
            cin.get();
        }
    }
}

bool CJugador::CeldaDisponible(int x,int y)
{
        //Centro
    if( (flota[y][x]) ||
        //Arriba
        (y>0&&flota[y-1][x]) ||
        //Derecha
        (x<9&&flota[y][x+1]) ||
        //Abajo
        (y<9&&flota[y+1][x]) ||
        //Izquierda
        (x>0&&flota[y][x-1])
    ) return false;
    return true;
}

const char *NombreBarco(int num)
{
    switch(num){
        case 0: return "Portavion";
        case 1: return "Acorazado";
        case 2: return "Crucero";
        case 3: return "Submarino";
        case 4: return "Destructor";
    }
}

int Cantidad(int num)
{
    switch(num){
        case 0: return 5;
        case 1: return 4;
        case 2:
        case 3:
            return 3;
        case 4: return 2;
    }
}

int Oponente(int num)
{
    return (!num?1:0);
}

bool SeleccionarCelda(int *x,int *y)
{
    char c;
    int n;
    scanf("%c%d",&c,&n);
    fflush(stdin);
    if(islower(c)) c=toupper(c);
    if(c<'A'||c>'J'||n<1||n>10) return false;
    *x=n-1;
    *y=((int)c)-65;
    return true;
}

bool SeleccionarPosicion()
{
    char c;
    do{
        c=getchar();
        fflush(stdin);
    }while(c!='h'&&c!='H'&&c!='v'&&c!='V');
    if(c=='h'||c=='H') return true;
    return false;
}

int main()
{
    CJugador jugadores[2];
    bool done=false,gameend,tocado,perdio,valido;
    int i,jugadoractual,x,y;
   
    while(!done){
        jugadoractual=0;
        gameend=false;
        for(i=0;i<2;i++){
            jugadores[i].Inicializar();
            cout << "Turno del jugador " << i+1 << " de colocar su flota";
            cin.get();
            jugadores[i].UbicarBarcazas();
            scrclr();
        }
        while(!gameend){
            valido=false;
            scrclr();
            cout << "Turno del jugador " << jugadoractual+1 << " de disparar";
            cin.get();
            fflush(stdin);
            while(!valido){
                tocado=false;
                perdio=true;
                scrclr();
                cout << "Turno del jugador " << jugadoractual+1 << endl << endl;
                jugadores[jugadoractual].DibujarTablero(true);
                cout << endl;
                cout << "Indique a que celda disparar: ";
                if(!SeleccionarCelda(&x,&y)) cout << "La celda indicada no es valida";
                else{
                    if(jugadores[jugadoractual].disparos[y][x]){
                        cout << "Ya disparaste a esa celda";
                    }
                    else{
                        if(jugadores[Oponente(jugadoractual)].flota[y][x]){
                            tocado=true;
                            jugadores[Oponente(jugadoractual)].barcazas[(jugadores[Oponente(jugadoractual)].flota[y][x])-1]--;
                            jugadores[jugadoractual].disparos[y][x]=2;
                            if(!jugadores[Oponente(jugadoractual)].barcazas[(jugadores[Oponente(jugadoractual)].flota[y][x])-1]){
                                cout << "Undiste el " << NombreBarco(jugadores[Oponente(jugadoractual)].flota[y][x]-1) << " enemigo";
                            }
                            else{
                                cout << "Tocado";
                            }
                            jugadores[Oponente(jugadoractual)].flota[y][x]=0;
                        }
                        else{
                            jugadores[jugadoractual].disparos[y][x]=1;
                            cout << "Agua";
                        }
                        valido=true;
                    }
                }
                for(i=0;i<5;i++){
                    if(jugadores[Oponente(jugadoractual)].barcazas[i]>0){
                        perdio=false;
                        break;
                    }
                }
                if(perdio){
                    scrclr();
                    cout << "El Jugador " << jugadoractual+1 << " ha ganado la batalla";
                    gameend=true;
                    fflush(stdin);
                    cin.get();
                    break;
                }
                fflush(stdin);
                cin.get();
            }
            jugadoractual=Oponente(jugadoractual);
        }
    }
    return 0;
}


Una cosa: edite este mensaje con el código cambiado porque encontre muchos errores, eso pasa por apurado y por no hacer buen control de calidad XD.

Un Saludo!
_________________
"Aquel que hace una bestia de si mismo se libra del dolor de ser un hombre". Dr. Johnson


Ultima edición por eagleoneraptor el 08/09/2008 11:39 am; editado 1 vez
Volver arriba
WaRc3L



Registrado: 12 Jun 2008
Mensajes: 199
Ubicación: en el registro de la CPU

MensajePublicado: 06/09/2008 6:03 am
Título:

Lo siento mucho, no podre entregar el proyecto de la batalla naval, mañana me voy de vacaciones y no se quando estare ahi.

Lo siento mucho de verdad, y aun no lo tengo acabado... Sad

Saludos..
_________________
ToDos PoDeMoS CoMpaRTiR La Luz De La BoMBiTa!
Volver arriba
polly



Registrado: 19 Jul 2007
Mensajes: 618

MensajePublicado: 06/09/2008 2:37 pm
Título:

Ok Warc3l.

Yo lo colgare mañana, aun no he tenido tiempo de acabarlo.

S2
_________________
enrmarc
Volver arriba
v4r3t



Registrado: 06 Mar 2007
Mensajes: 103

MensajePublicado: 07/09/2008 10:47 am
Título:

Aquí está el mío:

Código:
/*
   Proyecto "Batalla naval".
    Autor: v4r3t
*/


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <time.h>

/* Funciones que dependen del SO */
#ifdef WIN32
   #include <windows.h>   
   #define Esperar(x) Sleep(x)
   #define Limpiar_Pantalla system("cls")
#endif

#ifdef LINUX
   #include <unistd.h>
   #define Esperar(x) sleep(x)
   #define Limpiar_Pantalla system("clear")
#endif 

/* Macros */
#define AGUA '^'
#define TOCADO '*'
#define OCULTA 'O'
#define PORTAVIONES 5
#define ACORAZADO 4
#define SUBMARINO 3
#define CRUCERO 3
#define DESTRUCTOR 2

typedef struct
{
   char letra;
   int numero;
}Casilla;

char TableroJ1[10][10],TableroJ2[10][10],Aux[10][10],frase[50]="\0";
int Barcos[5]={PORTAVIONES,ACORAZADO,SUBMARINO,CRUCERO,DESTRUCTOR};
Casilla Lista[100];
int aux=0,contador=0,tocadosJ1=0,tocadosJ2=0;

/* Funciones */
void IniciarTablero(char[10][10],char);
void IniciarTableroJ2();
void DibujarTablero(char[10][10]);
void PedirCasilla(int);
int VerificarCasilla(char[10][10],Casilla,int,char);
void Almacenar(char[10][10],int,Casilla,char);
void TurnoJ1();
void TurnoJ2();
char AtacarCasilla(char[10][10],Casilla);
void GenerarLista();

/* Main */
int main()
{
   IniciarTablero(TableroJ1,AGUA); // Poner todas las casillas con el símbolo de agua (^).
   DibujarTablero(TableroJ1); // Dibujar el tablero.

   /* Colocar los barcos en las posiciones deseadas */
   strcpy(frase,"[Casillas del portaviones (5 casillas)]\n");
   printf("%s",frase);
   PedirCasilla(PORTAVIONES);
   strcpy(frase,"[Casillas del acorazado (4 casillas)]\n\0");
   printf("%s",frase);
   PedirCasilla(ACORAZADO);
   strcpy(frase,"[Casillas del submarino (3 casillas)]\n");
   printf("%s",frase);
   PedirCasilla(SUBMARINO);
   strcpy(frase,"[Casillas del crucero (3 casillas)]\n");
   printf("%s",frase);
   PedirCasilla(CRUCERO);
   strcpy(frase,"[Casillas del destructor (2 casillas)]\n");
   printf("%s",frase);
   PedirCasilla(DESTRUCTOR);
   printf("     TABLERO CREADO\n");
   Esperar(1000);

   Limpiar_Pantalla;
   printf("Generando tablero oponente...");
   IniciarTablero(Aux,OCULTA); // Poner todas las casillas con el símobolo de casilla oculta(O).
   IniciarTableroJ2(); // Generar aleaoriamente el tablero del oponente.
   GenerarLista();
   Limpiar_Pantalla;
   printf("\n\n\n\n\n\n                              EMPIEZA EL JUEGO\n");
   Esperar(2000);

   /* Iniciar la batalla */
   while (1)
   {
      TurnoJ1(); // Turno del jugador
      if (tocadosJ1 == 17) // Si se han destruído todos los barcos
      {                // del oponente se gana y acaba el juego.
         Limpiar_Pantalla;
         printf(" GANASTE\n");
         return 0;
      }

      TurnoJ2(); // Turno del oponente.
      if (tocadosJ1 == 17) // Si se han destruído todos los barcos
      {                // del jugador se pierde y acaba el juego.
         Limpiar_Pantalla;
         printf(" PERDISTE\n");
         return 0;
      }
   }
}

/* Función que inicia el tablero con el símbolo deseado */
void IniciarTablero(char Tablero[10][10],char simbolo)
{
   int i,j;

   for(i=0;i<10;i++)
   {
      for (j=0;j<10;j++)
         Tablero[i][j]=simbolo;
   }
}

/* Función que genera el tablero del oponente aleatoriamente */
void IniciarTableroJ2()
{
   Casilla aleatoria;
   char pos,posicion[2]={'v','h'};
   int i;

   IniciarTablero(TableroJ2,AGUA); // Primero se rellena el tablero con el símoblo de agua (^).
   srand(time(NULL));
   for (i=0;i<5;i++)
   {
      do
      {
         aleatoria.letra=(rand()%10)+65; // Casilla
         aleatoria.numero=(rand()%10)+1; // aleatoria.
         pos=posicion[rand()%2]; // Posición aleatoria.
      }while(!VerificarCasilla(TableroJ2,aleatoria,Barcos[i],pos)); // Verificar si la casilla es válida.
      Almacenar(TableroJ2,Barcos[i],aleatoria,pos); // Se almacena el barco en el tablero.
   }
}

/* Dibujar el tablero */
void DibujarTablero(char Tablero[10][10])
{
   int i,j,letra=65;
   
   Limpiar_Pantalla;
   printf("        1 2 3 4 5 6 7 8 9 10\n\n");
   for (i=0;i<10;i++,letra++)
   {
      printf("     %c  ",letra);
      for (j=0;j<10;j++)
         printf("%c ",Tablero[i][j]);
      printf("\n\n");
   }
   printf("%s",frase);
}

/* Función que pide una casilla a partir de la cual se introduce */
/* un barco determinado en posición vertical u horizontal */
void PedirCasilla(int barco)
{
   Casilla cas;
   char posicion;
   int valida;

   do {
      valida=0;
      fflush(stdin);
      printf("Letra: ");
      scanf("%c",&cas.letra);
      cas.letra=toupper(cas.letra);
      if (cas.letra < 65 || cas.letra > 74) // Verificar si la letra pertenece al rango válido.
         valida++;
      printf("Numero: ");
      scanf("%d",&cas.numero);
      if (cas.numero < 1 || cas.numero > 10) // Verificar si el número pertenece al rango válido.
         valida++;
      printf("Vertical u horizontal (v/h): ");
      fflush(stdin);
      scanf("%c",&posicion);
      if (posicion != 'v' && posicion != 'h') // Verificar si la posición es válida.
         valida++;
      if (!VerificarCasilla(TableroJ1,cas,barco,posicion))   
         valida++;
      if (valida > 0) // Si falla algún parámetro anterior
      {            // se muestra un mensaje de error.
         printf("Casilla no valida o posicion no valida\n");
         Esperar(1000);
      }
      DibujarTablero(TableroJ1);
   }while(valida > 0); // Se vuelven a pedir los parámetros hasta que sean correctos.
   Almacenar(TableroJ1,barco,cas,posicion); // Almacenar el barco en le tablero
   strcpy(frase,"\0");
   DibujarTablero(TableroJ1); // Dibujar el tablero
}

/* Función que verifica si la casilla inroducida es correcta */
int VerificarCasilla(char Tablero[10][10],Casilla cas,int barco,char posicion)
{
   int fila,columna,i,cont=0,tope;

   fila=cas.letra-65;
   columna=cas.numero-1;
   if (Tablero[fila][columna] != AGUA) // Si la casilla está ocupada.
      return 0;
   if (posicion == 'h') // Si la posición es horizontal, se verifica si
   {                // el barco cabe en la fila a partir de esa casilla.
      tope=columna+barco;
      for (i=columna;i<10 && i<tope;i++)
      {
         if (Tablero[fila][i] == AGUA) // Contar las casillas libres que tiene
            cont++;                 // la casilla elegida a partir de esta.
         else
            return 0;
      }
      if (cont < barco) // Si las casillas libres son insuficientes, la casilla no vale.
         return 0;
      return 1;
   }
   else // Mismo método que el anterior pero en vertical.
   {
      tope=fila+barco;
      for (i=fila;i<10 && i<tope;i++)
      {
         if (Tablero[i][columna] == AGUA)
            cont++;
         else
            return 0;
      }
      if (cont < barco)
         return 0;
      return 1;
   }
}

void Almacenar(char Tablero[10][10],int barco,Casilla cas,char posicion)
{
   int i,fila,columna,tope;
   char tipo;

   fila=cas.letra-65;
   columna=cas.numero-1;
   switch(barco) // Colocar una letra según el barco.
   {
      case PORTAVIONES:
         tipo='P';
         break;
      case ACORAZADO:
         tipo='A';
         break;
      case SUBMARINO:
         if (aux == 0)
         {
            tipo='S';
            aux++;
         }
         else
            tipo='C';
         break;
      case DESTRUCTOR:
         tipo='D';
         break;
   }
   
   /* Almacenar el barco según la posición y la casilla */
   if (posicion == 'h')
   {
      tope=columna+barco;
      for (i=columna;i<tope;i++)
         Tablero[fila][i]=tipo;
   }
   else
   {
      tope=fila+barco;
      for (i=fila;i<tope;i++)
         Tablero[i][columna]=tipo;
   }
}

/* Función turno del jugador */
void TurnoJ1()
{
   Casilla cas;
   int valida,fila,columna;

   strcpy(frase,"[Tu turno]\n");
   DibujarTablero(Aux);
   do {
      valida=0;
      fflush(stdin);
      printf("Letra: ");
      scanf("%c",&cas.letra);
      cas.letra=toupper(cas.letra);
      if (cas.letra < 65 || cas.letra > 74) // Verificar si la letra pertenece al rango válido
         valida++;
      printf("Numero: ");
      scanf("%d",&cas.numero);
      if (cas.numero < 1 || cas.numero > 10) // Verificar si el número pertenece al rango válido.
         valida++;
      fila=cas.letra-65;
      columna=cas.numero-1;
      if (Aux[fila][columna] != OCULTA) // Verificar si la casilla ya está "tocada".
         valida++;
      if (valida > 0) // Si falla algún parámetro anterior
      {            // se muestra un mensaje de error.
         printf("Casilla no valida\n");
         Esperar(1000);
      }
      DibujarTablero(Aux); // Se refresca" la pantalla.
   }while(valida > 0);
   Aux[fila][columna]=AtacarCasilla(TableroJ2,cas); // Comprobar la casilla.
   if (Aux[fila][columna] == TOCADO) // Si se ha tocado un barco oponente.
   {
      strcpy(frase,"[Tocado]\n");
      tocadosJ1++;
   }
   else // Si ha caído en agua.
      strcpy(frase,"[Agua]\n");
   DibujarTablero(Aux); // Dibujar el tablero
   system("pause");
}

/* Función turno del oponente */
void TurnoJ2()
{
   Casilla cas;
   int fila,columna;

   strcpy(frase,"[Turno de tu oponente]\n");
   DibujarTablero(TableroJ1);
   cas=Lista[contador++];
   fila=cas.letra-65;
   columna=cas.numero-1;
   TableroJ1[fila][columna]=AtacarCasilla(TableroJ1,cas); // Comprobar la casilla.
   if (TableroJ1[fila][columna] == TOCADO) // Si se ha tocado un barco oponente.
   {
      strcpy(frase,"[Tocado]\n");
      tocadosJ2++;
   }
   else // Si ha caído en agua.
      strcpy(frase,"[Agua]\n");
   DibujarTablero(TableroJ1); // Dibujar el tablero
   system("pause");
}

/* Función que comprueba la casilla a atacar */
char AtacarCasilla(char Tablero[10][10],Casilla cas)
{
   int fila,columna;

   fila=cas.letra-65;
   columna=cas.numero-1;
   if (Tablero[fila][columna] == 'P' || Tablero[fila][columna] == 'A' || Tablero[fila][columna] == 'S' || Tablero[fila][columna] == 'C' || Tablero[fila][columna] == 'D')
      return TOCADO; // Si se acierta.
   return AGUA;
}

/* Función que genera una lista aleatoria de casillas */
/* que usará la máquina para jugar atacar */
void GenerarLista()
{
   int i,j,num;
   Casilla aux;

   for (i=0;i<100;i++)
   {
      for (j=1;j<11;j++)
      {
         Lista[i].letra=j+64; // Almacenar todas las casillas
         Lista[i].numero=j;  // válidas en orden ascendente.
      }
   }
   srand(time(NULL));
   for (i=0;i<100;i++) // Desordenar las casillas.
   {
      num=rand()%100;
      aux=Lista[i];
      Lista[i]=Lista[num];
      Lista[num]=aux;
   }
}


Hay un principal problema que no se me ocurrió como solventar, y es que no he puesto "tocado y hundido"...
_________________
-=v4r3t=-
Volver arriba
eagleoneraptor



Registrado: 20 May 2008
Mensajes: 187
Ubicación: Buenos Aires(Argentina)

MensajePublicado: 08/09/2008 11:58 am
Título:

Solo por curiosidad, que edad tienen ustedes?

Un Saludo!
_________________
"Aquel que hace una bestia de si mismo se libra del dolor de ser un hombre". Dr. Johnson
Volver arriba
eagleoneraptor



Registrado: 20 May 2008
Mensajes: 187
Ubicación: Buenos Aires(Argentina)

MensajePublicado: 09/09/2008 4:15 am
Título:

Me gustaría hacer un proyecto en grupo una vez que revisemos el de la batalla naval.

Un Saludo!
_________________
"Aquel que hace una bestia de si mismo se libra del dolor de ser un hombre". Dr. Johnson
Volver arriba
v4r3t



Registrado: 06 Mar 2007
Mensajes: 103

MensajePublicado: 09/09/2008 1:59 pm
Título:

Pues a ver, porque aquí la peña se ha desvanecido.
_________________
-=v4r3t=-
Volver arriba
      Índice del Foro elrincondelc.com -> Desarrollo de un proyecto de software libre
Página 1 de 2Todas las horas están en GMT - 8 Horas
Ir a página 1, 2  Siguiente

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com