Proyecto: Batalla Naval

Mensaje
Autor
polly
Mensajes: 619
Registrado: 19/07/2007 3:42 pm
Ubicación: Valladolid (Spain)
Contactar:

Proyecto: Batalla Naval

#1 Mensaje por polly » 01/09/2008 3:11 am

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

Avatar de Usuario
v4r3t
Mensajes: 103
Registrado: 06/03/2007 12:00 am

#2 Mensaje por v4r3t » 01/09/2008 6:50 am

¿Cada uno por separado?
-=v4r3t=-

WaRc3L
Mensajes: 199
Registrado: 12/06/2008 12:27 pm
Ubicación: en el registro de la CPU

#3 Mensaje por WaRc3L » 01/09/2008 6:57 am

v4r3t escribió:¿Cada uno por separado?
No entiendo.. a que te refieres?
ToDos PoDeMoS CoMpaRTiR La Luz De La BoMBiTa!

Avatar de Usuario
v4r3t
Mensajes: 103
Registrado: 06/03/2007 12:00 am

#4 Mensaje por v4r3t » 01/09/2008 7:09 am

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

polly
Mensajes: 619
Registrado: 19/07/2007 3:42 pm
Ubicación: Valladolid (Spain)
Contactar:

#5 Mensaje por polly » 01/09/2008 7:25 am

Este es por separado si.
enrmarc

polly
Mensajes: 619
Registrado: 19/07/2007 3:42 pm
Ubicación: Valladolid (Spain)
Contactar:

#6 Mensaje por polly » 01/09/2008 9:50 am

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

WaRc3L
Mensajes: 199
Registrado: 12/06/2008 12:27 pm
Ubicación: en el registro de la CPU

#7 Mensaje por WaRc3L » 01/09/2008 10:02 am

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!

polly
Mensajes: 619
Registrado: 19/07/2007 3:42 pm
Ubicación: Valladolid (Spain)
Contactar:

#8 Mensaje por polly » 01/09/2008 2:48 pm

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

Avatar de Usuario
eagleoneraptor
Mensajes: 187
Registrado: 20/05/2008 10:24 am
Ubicación: Buenos Aires(Argentina)

#9 Mensaje por eagleoneraptor » 04/09/2008 10:25 am

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

Código: Seleccionar todo

//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!
Última edición por eagleoneraptor el 08/09/2008 11:39 am, editado 1 vez en total.
"Aquel que hace una bestia de si mismo se libra del dolor de ser un hombre". Dr. Johnson

WaRc3L
Mensajes: 199
Registrado: 12/06/2008 12:27 pm
Ubicación: en el registro de la CPU

#10 Mensaje por WaRc3L » 06/09/2008 6:03 am

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... :(

Saludos..
ToDos PoDeMoS CoMpaRTiR La Luz De La BoMBiTa!

polly
Mensajes: 619
Registrado: 19/07/2007 3:42 pm
Ubicación: Valladolid (Spain)
Contactar:

#11 Mensaje por polly » 06/09/2008 2:37 pm

Ok Warc3l.

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

S2
enrmarc

Avatar de Usuario
v4r3t
Mensajes: 103
Registrado: 06/03/2007 12:00 am

#12 Mensaje por v4r3t » 07/09/2008 10:47 am

Aquí está el mío:

Código: Seleccionar todo

/* 
	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=-

Avatar de Usuario
eagleoneraptor
Mensajes: 187
Registrado: 20/05/2008 10:24 am
Ubicación: Buenos Aires(Argentina)

#13 Mensaje por eagleoneraptor » 08/09/2008 11:58 am

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

Avatar de Usuario
eagleoneraptor
Mensajes: 187
Registrado: 20/05/2008 10:24 am
Ubicación: Buenos Aires(Argentina)

#14 Mensaje por eagleoneraptor » 09/09/2008 4:15 am

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

Avatar de Usuario
v4r3t
Mensajes: 103
Registrado: 06/03/2007 12:00 am

#15 Mensaje por v4r3t » 09/09/2008 1:59 pm

Pues a ver, porque aquí la peña se ha desvanecido.
-=v4r3t=-

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado