-
hundir la flota
Hola a todos espero que alguien pueda ayudarme, no se como puedo hacer para que introduzca el usuario los barcos, esto es con un solo jugador y la funcion que carga los barcos no funciona hace cosas rarisimas. Si alguno puede explicarme como introducirlos estaria muy agradecida.
#include <stdio.h>
#include <stdlib.h>
#define TAM 8
void menu();
void tirada(int i, int j);
void tablero(int i, int j);
void cargabarcos(int f, int c);
main(){
int opcion, salida;
int i,j;
int f, c;
while(salida != 0){
menu();
scanf("%d",&opcion);
switch(opcion)
{
case 1:
cargabarcos(f,c);
break;
case 2:
tirada(i,j);
break;
case 0:
salida=0;
break;
default:
printf("Opcion no valida\n");
break;
}
system("pause");
}
}
void menu()
{
printf(" HUNDIR LA FLOTA \n");
printf("\n");
printf("1.-Cargar el tablero con barcos.\n");
printf("2.-Comenzar a jugar.\n");
printf("0.-Salir.\n");
printf("\n");
return;
}
void tablero(int i, int j)
{
char matriz[TAM][TAM];
for (i=0; i<TAM; i++){
for (j=0; j<TAM; j++){
printf (" #");
}
printf("\n");
}
return ;
}
void tirada(int i, int j)
{
printf("Introduce coordenadas\n");
scanf("%d ,%d" ,&i,&j);
return;
}
void cargabarcos(int f, int c)
{
char matriz1[TAM][TAM];
int orientacion;
int fila,columna;
printf("Cargando barcos...\n");
printf("Portaviones\n");
printf("Indique orientacion:\n");
printf("horizontal = 1 , vertical = 2\n");
scanf("%d",&orientacion);
printf("Introduzca coordenas:\n");
scanf("%d,%d",&f,&c);
for (f=0; f<TAM; f++){
for(c=0; c<TAM; c++){
matriz1[f][c] = '#';
if (orientacion == 1){
if (c>4){
for (c=4; c<8; c++){
matriz1[f][c] = 'x';
}
}else{
for (c=4; c<0; c--){
matriz1[f][c] = 'x';
}
}
}
if (orientacion == 2){
if (f>4){
for (f=4; f<8; f++){
matriz1[f][c] = 'x';
}
}else{
for (f=4; f<0; f--){
matriz1[f][c] = 'x';
}
}
}
}
}
for (f=0; f<TAM; f++){
for(c=0; c<TAM; c++){
printf("%c" ,matriz1[f][c]);
}
printf("\n");
}
return;
}
-
Si pudieses explicar que cosas raras te hace sería más fácil analizar el error.
-
hundir la flota
supuestamente el usuario introduce la orientacion y las coodenadas lo que me hace el un dibujo rarisimo de 8*8 en la uotimas filas me salen x y de la mitad hacia arriba signos muy distintos rarisimos si le digo orintacion vertical me sale algo asi
# xxx
# xxx
# xxx
# xxx
# xxx
# xxx
# xxx
# xxx
y entre medias me salen cimllas simples de todo, y si le introduce horizontal hace lo mismo pero eso en horizontal
-
Yo aun no entiendo que hace tu programa, lo que si podría puntualizar en tu programa son los siguientes "for"
for (c=4; c<0; c--)
for (f=4; f<0; f--)
Supongo que lo que quieres hacer ahi son cuentas regresiva 4,3,2,1, por lo que tus condiciones (f<0 y c<0) estan mal puesta, nunca vas a poder hacer eso ^_^.
-
Primero, sólo carga portaviones (de 4 casillas)?
Segundo, usas las variables sobre las que trabajas para todo, 'c' lo machacas varias veces, con lo que si entra en el bloque if, luego en el for, luego en otro for, y cuando sale ya no sabe 'dónde anda'.
Por ejemplo:
for (f=0; f<TAM; f++){
for(c=0; c<TAM; c++){
matriz1[f][c] = '#'; ---> aki haces un bucle para que TODOS los parámetros de tu matriz sean #.
if (orientacion == 1){ ---> suponemos horizontal
if (c>4){ ---> si en las coordenadas columna hay un 7
for (c=4; c<8; c++){ ---> aki machacas columna por 4 y luego condicionas de 4 a 8 (7 en realidad ya que 8 no es 'extrictamente menor que 8)
...
Entonces, si al principio has puesto un bucle para q sean almohadillas (#) pero en el medio de ese bucle machacas la variable 'referencia' de ese bucle, lo que pasa es que la matriz va a contener residuos de memoria, no lo que tu kieres.
No se si me he explicado pero igual así mejor:
j=0
for (i=1, i<100, i++) {
j++
i=98
}
cuanto crees que valdrá j? Desde luego 100 no!!! jeje }-P
Espero haberme explicado. Un saludo
-
He leido tu código un poco, y no puedo encontrar "exactamente" cual es el error, sin embargo el principal error está en el diseño, la funcion cargabarcos debe, en teoría, recibir dos variables, las cuales, no tienen nngún valor cuando mandas a llamar a dicha función, es decir, declaras int f,c; y luego mandas llamar a la cuncion carcabarcos(f,c) sin haber asignado ningún valor, eso, por supuesto, sólo es un error de diseño, algo que usaste como no se debería, si las variables que usas sólo afectan a esa funcion, debes declararlas adentro de la misma, y no afuera que de nada sirve y sólo desperdicias memoria en la pila (eso no tiene demasiada importancia en tu programa, pero no está de más saberlo)
Además, al salir de la función, todos los datos utilizados en ella, desaparecen, es decir tu "matriz1" deja de existir cuando se acaba la función cargabarcos y no ha servido de nada el haber creado tantos # y x.
Es mejor, al meter las coordenadas, rebibir primero la f, y luego la c en diferentes scanf's, para evitar que la tecla enter quede grabada como un caracter introducido.
Revisaré sólo esa función, a ver que puedo corregir, pero para empezar, deberías declarar a la matriz como variable global.
Saludos
-
Ahora estoy dándome cuenta de que no tienes bastante idea de programación, debes poner especial cuidado en errores tan obvios como el siguiente:
printf("Introduzca coordenas:\n");
scanf("%d,%d",&f,&c);
for (f=0; f<TAM; f++){
for(c=0; c<TAM; c++){...
¿Te das cuenta de lo que eso quiere decir?, le pides al usuario que introduzca los números y los guardas en las variables f y c, y en la siguiente instrucción, BORRAS EL CONTENIDO DE LAS MISMAS VARIABLES Y LAS PONES EN CERO, esto no tiene sentido, es necesario poner otras variables, digamos, "posicionx y posiciony", trata de que los nombres de tus variables sean más explícitos que f, c, así será más facil de leer el código para tí mismo tambien.
-
Esto es lo que he podido hacer por ti, este codigo ya funciona, pero para que el "barco" quede en el lugar exacto tendrás que revisarlo bien y adaptarlo a tu programa, yo ya no tengo tiempo, porque puse al main en vez de cargabarcos (que es lo que deberías hacer para ir probando cada una de tus funciones antes de juntarlas todas en un mismo programa)
saludos
#include <stdio.h>
#include <stdlib.h>
#define TAM 8
int main()
{
char matriz1[TAM][TAM];
int orientacion;
int f, c;
int fila, columna;
printf("Cargando barcos...\n");
printf("Portaviones\n");
printf("Indique orientacion:\n");
printf("horizontal = 1 , vertical = 2\n");
scanf("%d",&orientacion);
printf("Introduzca coordenas:\n");
scanf("%d",&f);
scanf("%d",&c);
for (fila=0; fila<TAM; fila++){
for(columna=0; columna<TAM; columna++)
matriz1[fila][columna] = '#';
}
printf("coordenadas: %d, %d\n",f,c);
if (orientacion == 1){
if (c>4){
for (columna=4; columna<8; columna++){
printf("%d,%d",f,columna);
matriz1[f][columna] = 'x';
}
}
else{
for (columna=4; columna>0; columna--)
matriz1[f][columna] = 'x';
}
}
else{
if (f>4){
for (fila=4; fila<8; fila++)
matriz1[fila][c] = 'x';
}
else{
for (fila=4; fila>0; fila--)
matriz1[fila][c] = 'x';
}
}
for (fila=0; fila<TAM; fila++){
for(columna=0; columna<TAM; columna++)
printf("%c" ,matriz1[fila][columna]);
printf("\n");
}
system("pause");
return 0;
}
-
Eso mismo que Giskard he dicho yo :-P.... MACHACAS todas las variables, usa subrutinas, llamadas con paso de parámetros por referencia, no por valor, con lo que no machacarás nada.