Pinball en pascal.

Tengo que hacer otro programa en Turbo Pascal:

Un videojuego de pinball tiene una bola que se mueve por una matriz de N por M casillas, numeradas
de 1.. N filas por 1.. M columnas. La matriz está formada por casillas en blanco (representada por una
carácter blanco, ' ') ¿Por las que se puede mover la pelota y casillas obstáculo (representada por una
carácter? ) En las que rebota la bola, los extremos de la matriz también hacen rebotar la bola.
El movimiento de la bola sólo se realiza según alguna de las 8 direcciones cardinales, N, ES, E, O,
NE, NO, SE, SO, manteniendo dicha dirección de movimiento hasta encontrar un obstáculo o el
borde de la matriz.
¿Cuándo el movimiento de la bola se ve interrumpido por un obstáculo (?) O el borde de la matriz,
ésta rebota aleatoriamente en cualquiera de las 8 direcciones cardinales indicadas anteriormente,
siempre y cuando pueda hacerlo.
Se pide implementar un programa que simule el movimiento de la bola en un pinball de 8 filas y 5
columnas. La bola sale aleatoriamente por la parte superior del pinball (la dirección que trae la bola
puede ser SE, SO, S).. El programa mostrará por pantalla todo el recorrido de la bola por la tabla.
El juego finaliza cuando la bola sale por una de las casillas centrales de la fila inferior. El usuario
puede seleccionar el número de obstáculos que se colocarán aleatoriamente.
Para calcular aleatoriamente una nueva dirección cardinal de movimiento en caso de encontrar un
obstáculo se calculará una dirección aleatoria correcta en la que se podrá continuar moviendo la
bola. Es importante que la situación refleje la dirección que trae la bola, para seguirla en caso de
que no haya rebote.
Funciones y procedimientos de Turbo Pascal: en esta práctica pueden utilizarse, entre otros, los
siguientes subprogramas estándar de Turbo Pascal: clrscr, gotoXY, delay, keyPressed y readKey,
todos ellos de la unidad CRT.

Como en el otro programa, me gustaría que me dieras unas pistas para saber por dónde empezar.

1 respuesta

Respuesta
1
Bueno este programa esta un poco extenso... una de las partes que lo integran es la parte de manejo de la pantalla y del programa mediante las funciones predefinidas que mencionaste (clrscr, gotoXY, delay, keyPressed y readKey) y algunas otras para darle vida (textcolor, textbackground...).
Yo tengo un par de proyectos que he desarrollado que quizá te puedan servir de algo. Uno de ellos es el de simular los movimientos de un caballo y una reina en un tablero de ajedrez, en el cual los movimientos de ambos, estaban limitados por la matriz en la que se movilizaban. Bueno, están a la orden. Nada más dame tu correo y yo te los hago llegar...
Puedes comenzar por definir todas las estructuras a utilizar, en este caso la matriz de 8x5, y si hiciera falta otra más.
Ahora tienes que resolver el problema de como colocar un número de obstáculos de forma aleatoria a través de la tabla. Debes diseñar una función para llevar a cabo ese proceso. Te recomiendo que emplees la función random(), que lo que hace es devolverte un número aleatorio menor que el numero que le indiques y mayor o igual que 0 (random(5), puede arrojar 0,1,2,3,4 como resultado). Esta te puede ayudar a fijar aleatoriamente las posiciones ocupadas en la tabla por los obstáculos, y para otros problemas que necesiten la aleatoriedad.
Debes definir el procedimiento que permita que la bola pueda recorrer todos los sentidos. Eso lo logras trabajando sobre las posiciones de la matriz. Debes hacer que se mueva en el sentido iniciado (N, ES, E, O, NE, NO, SE, SO). En mi proyecto de ajedrez hice algo parecido para fijar los movimientos que podía tener la reina y el cabello en el tablero.
Una vez solucionado esto, puedes comenzar a realizar pruebas. Combinando los movimientos y haciéndolos de manera aleatoria. Más tarde podrás irte fijando en las restricciones de estos movimientos (dadas precisamente por los obstáculos definidos).
La mezcla de todo esto, dará como resultado, que logres resolver el problema que se te plantea.
Esto es a grades rasgos mi recomendación para que inicies tu programa. Recuerda que puedes irme consultando las dudas e inclusive, mostrándome lo que has hecho si llegara a presentarsete algún problema.
Si estas interesado en los proyectos de los que te hable, me mandas tu dirección de correo y yo te los hago llegar con gusto.
NOTA: Valora mi esfuerzo dando puntuación a mi respuesta.
Me parece que podré hacerlo con lo que me has dicho y con algunas otras ideas que dio el profesor. De momento creo que no me harán falta tus programas, pero quizás sí más adelante. Muchas gracias por tu tiempo y esfuerzo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas