Ver Mensaje Individual
  #5 (permalink)  
Antiguo 02/09/2008, 17:38
yackcae
 
Fecha de Ingreso: junio-2008
Mensajes: 63
Antigüedad: 15 años, 11 meses
Puntos: 2
Respuesta: Solo entra una ves en la funcion, ayuda

lo que pasa es que la llamada a srand( time(NULL) ) inicializa el sistema generador de números aleatorios según el tiempo, pero la función time(NULL) retorna el tiempo en segundos, así que al llamarlo dentro del do{}while las llamadas se hacen antes de que transcurra un segundo por lo que la función time siempre retorna el mismo número lo que causa que la función srand siempre se inicialize igual, lo correcto es solo hacer una llamada a srand( time(NULL) ) en la función main cuando el programa está empezando.

Cita:
aveces m imprime solo un barco...porque pasa esio=?
Hay algunos errores en las funciones que colocan los barcos, específicamente al comprobar la colisión de los barcos, yo he probado la función barco_cuatro y esto es lo que he cambiado para que funcione bien:

Primero cambié el do{}while para comprobar las colisiones de los barcos por lo siguiente:
Código:
bool continuar;
for(;;) {
numero = rand() % 7;
num = rand()%9;
hor = rand()%7;
vert = rand()%2;
continuar=true;
for(int i=0; i<4; i++) { // For de comprobación de colisiones
	if(vert<=0 && matriz1[numero+i][num]==cad[0]) { // Comprobación para el caso de las verticales
		continuar=false; // No se debe continuar, hay que lanzar números aleatorios de nuevo
		break; // Salir del for de comprobación
	}
	if(vert>0 && matriz1[num][hor+i]==cad[0]) { // Comprobación para el caso de las horizontales
		continuar=false; // No se debe continuar, hay que lanzar números aleatorios de nuevo
		break; // Salir del for de comprobación
	}
}
if(continuar) break; // La comprobación de colisiones pasó, se debe continuar
}
y en los if para colocar los barcos comenté la comprobación de colisión:

Código:
if (/* matriz1[numero][num-1]!=cad[0] && matriz1[numero][num+1]!=cad[0] && matriz1[numero-1][num]!=cad[0] && matriz1[numero][num]!=cad[0] && matriz1[numero+1][num]!=cad[0] && matriz1[numero+1][num+1]!=cad[0] && matriz1[numero+1][num-1]!=cad[0] && matriz1[numero+2][num]!=cad[0] && matriz1[numero+2][num-1]!=cad[0] && matriz1[numero+2][num+1]!=cad[0] && matriz1[numero+3][num]!=cad[0] && matriz1[numero+3][num-1]!=cad[0] && matriz1[numero+3][num+1]!=cad[0] && matriz1[numero+4][num]!=cad[0] && */vert<=0){
matriz1[numero][num]=cad[0];
matriz1[numero+1][num]=cad[0];
matriz1[numero+2][num]=cad[0];
matriz1[numero+3][num]=cad[0];
}
else if (/* matriz1[num][hor]!=cad[0] && matriz1[num][hor-1]!=cad[0] && matriz1[num-1][hor]!=cad[0] && matriz1[num+1][hor]!=cad[0] && matriz1[num][hor+1]!=cad[0] && matriz1[num+1][hor+1]!=cad[0] && matriz1[num-1][hor+1]!=cad[0] && matriz1[num][hor+2]!=cad[0] && matriz1[num+1][hor+2]!=cad[0] && matriz1[num-1][hor-2]!=cad[0] && matriz1[num][hor+3]!=cad[0] && matriz1[num-1][hor+3]!=cad[0] && matriz1[num+1][hor+3]!=cad[0] && matriz1[num][hor+4]!=cad[0] &&*/ vert>0){
matriz1[num][hor]=cad[0];
matriz1[num][hor+1]=cad[0];
matriz1[num][hor+2]=cad[0];
matriz1[num][hor+3]=cad[0];
}