09/01/2004, 17:08
|
| | Fecha de Ingreso: enero-2004
Mensajes: 13
Antigüedad: 20 años, 10 meses Puntos: 0 | |
Hola,
¿Estudiante, eh? jeje
Bueno, yo no lo tengo en Pascal, tengo hecho uno en C++ de mis tiempod de estudiante, pero no es gran cosa, mejor que no te fijes en él.
¿Cuales son los presupuestos a cumplir? ¿Hombre contra hombre? ¿Hombre contra máquina? ¿Máquina contra máquina? ¿Entorno gráfico o de texto?
Yo si quieres te echo una mano con las dudas que te surjan, plantealas y veremos que se puede hacer.
En todo caso, te planteo un poco la base.
Debes crear dos matrices bidimensionales con una anchura y altura correspondientes al tamaño del tablero.
Luego hay que colocar los barquitos.
Si el jugador es humano es simple, él los coloca y tu compruebas si estan bien colocados. Si lo haces en modo texto el usuario deberia entrar las coordenadas donde coloca el barquito y la dirección del mismo. Luego rellenas tu array (te aconsejo de enteros) con un número correspondiente al tamaño del barco, por ejemplo, si el barco ocupa cuantro espacios, se coloca en la coordenada (1,2) y va dirección a la derecha, pones en tu array un cuatro en las posiciones {(1,2), (1,3), (1,4), (1,5)}. Podrias hacerlo en un array booleano, pero hacerlo así simplificará tu tarea a la hora de comprobar si el barco está hundido o solo tocado.
Si el jugador es máquina ya es más complicado. La forma más sencilla es hacerlo aleatoriamente. Buscas dos numero entre 1 y el numero máximo de casillas y un numero entre 1 y 4 para determinar la dirección. Miras si alguna de esas casillas (y las de alrededor, si en tus reglas no se permite que los barcos se toquen) esta ocupada. Si es así repites la operación, si no pasas a colocar el siguiente barco.
Luego, debes implementar el juego.
Haces un while que termine cuando alguien tenga todos los barcos hundidos. Si juega un hombre, solo debes ver si las coordenadas que el entra se corresponden en tu matriz a un numero diferente a cero (cero o el número con el que inicialices la matriz). Si corresponde a cero, es AGUA, si no pones en ese lugar del array un cero y recorres el array en busca del mismo número que habia en esa celda. Si existe en alguna otra celda es TOCADO, si no es TOCADO Y HUNDIDO. Al recorrer el array debes mirar tambien si todos las celdas contienen un cero, en ese caso se ha hundido el ultimo barco, por lo que la partida finaliza.
Si el que juega es la máquina, la forma más simple es aleatoriamente. Buscas un punto aleatorio dentro del array y compruebas lo que hay. Si lo que hay es un cero, AGUA, y vuelves a buscar aleatoriamente en el siguiente turno. Si no haces lo mismo que en el caso del hombre con la diferencia de que si es TOCADO, pero no hundido, debes recordar esa posición para seguir buscando el resto del barco en el siguiente turno. Es decir, pongamos que en la posicion (3,4) la máquina ha tocado. Entonces buscas una dirección aleatoriamente y sumas uno en esa dirección. Si la direccion fuese norte tiras en el (3,3) en busca del barco. Si no hay barco allí busca solo las tres direcciones restantes en el siguiente turno. Si lo hay, sabes que el barco es vertical, así que en el siguiente turno solo barajas dos direcciones. A la que encuentres agua en una de esas dos direcciones, ya sabes que el barco está en la otra, puesto que el TOCADO Y HUNDIDO es cuestion de turnos.
Bueno, ya sabes por donde empezar, cómete el coco un poco.
Saludos |