Duda con abstracción para un pequeño programa (OOP)

Iniciado por Saito_25, Mayo 08, 2020, 01:53:31 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Mayo 08, 2020, 01:53:31 PM Ultima modificación: Mayo 08, 2020, 03:26:00 PM por Denisse
Buenas, no sé si este es el mejor sitio para exponer la pregunta, de no ser así perdonen las molestias.

Quería pediros consejo para programar un pequeño juego. Estoy empezando a hacer el diagrama de clases primero, pero tengo una duda. Os pongo un poco de contexto y luego planteo la duda. Gracias por la ayuda.
El juego sería hundir la flota, pero algo más avanzado. Habría diferntes tipos de vehículos y diferentes dimensiones: aire, mar, etc.
Cada dimensión la trato como un tablero de 5x5 casillas
Y cada vehículo ocupa un determinado número de casillas. Además, se mueven de diferentes formas. Por ejemplo, el helicóptero se mueve una casilla a cualquier dirección. Y el submarino puede incluso cambiar de dimensióin/tablero
Mi mayor problema es que no sé distinguir muy bien que es un objeto y que una propiedad del mismo. Y la mayor duda que tengo acausa de ello es si las casilla deberían ser una clase que componga al tablero o si por el contrario no es más que un array o hash atributo de la clase tablero
Gracias

Hola visto desde mi perspectiva tienes 3 tableros de 5 x 5 quizás un poco chicos siendo que al parecer quieres que los objetos se muevan dentro y que además ocupan varias casillas al ser de diferentes tamaños.

pues cada tablero lo veo como una matriz por ejemplo

bool Tablero[5][5];

donde un 1 seria que esta ocupado y un 0 vacio.

La verdad me sigue pareciendo chico y no se si evaluar por ejemplo si le pegas en una parte si esa parte se desprende o sigue ocupando su posición pero averiada, o si pegandole a una las rompes todas.

Yo no lo veo tanto problema a eso, más me cuesta pensar en tu algoritmo de movimiento para que ninguna pieza colisione contra el final y lo sobrepase, o colisione contra otro objeto teniendo en cuenta si tienen formas como X o + pero bueno ya sabrás verlo tu.

Podría cada clase jugador tener sus 3 matrices de posiciones de tablero.
Y todos los objetos avion, camión, etc.
Sus metódos serían por ejemplo su movimiento,
Sus atributos podrían ser cuantas posiciones ocupan, etc
Y de algun modo un atributo indicar el X e Y dónde esta posicionado ese elemento en el tablero.
Marcando esos lugares como ocupados.

De otro modo el tablero podría ser una matriz de objetos.

Si quieres definir eso, basta con que lo hagas que sea una matriz de objetos, con el atributo ocupado o no ocupado, id de objeto en ese lugar, y listo ya tiene más escalabilidad si luego quieres meterle más cosas.

Saludos,





Buenas,

Primero, muchas gracias por la ayuda. Te lo agradezco mucho. Son muy buenos consejos.

Referente al tamaño de los tablero, realmente están bien, dado que no hay demasiados vehículos en cada plano y creo que hacerlos más grande, dificultaría el jueno. No obstante, quiero hacer modificable el tamaño de los mismo en ejecución. Es decir, que el tamaño del tablero lo escoja el propio usuario por niveles de dificultad o algo así.

Cuando golpeas una parte, no desaparece ni deja de moverse, excepto en el caso de los helicóptero, porque solo ocupan 1 casilla. Todos los demás, se pueden sin tener en cuenta que se le haya golpeado, al menos por ahora quiero hacerlo así, quizás luego haga que no se puedan mover.

Voy a pensar sobre lo que me has dicho a ver cómo lo puedo implementar.

Cualquier otro consejo, lo agradecería.

Mayo 09, 2020, 01:53:44 PM #3 Ultima modificación: Mayo 09, 2020, 02:20:56 PM por tr0n
Hola Saito,

Creo que es mucho mejor crear una clase tablero y también una clase Casilla. La clase tablero es una composición de una lista de casillas que puedes inicializar con la cantidad de casillas que quieras. Eso si, cada casilla debería tener una posición que serían las coordenadas en el tablero, que serán campos propios de la casilla y así lo mismo para saber si esa casilla se encuentra ocupada o no.
El tipo de vehículo que ocupa las casillas deberían ser otra clase. Esta clase vehículo tendría como campos el tipo de vehículo y si se encuentra activo o no.
Hace un tiempo hice un juego de ajedrez en Java y lo hice en base a este concepto. Puedes ver el código fuente aquíNo tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Estas son las clases de Tablero, Casilla y Pieza

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Espero que sea de tu ayuda

Saludos...

Gracias por la ayuda!

Una pregunta, si las casillas fueran clases y los barcos ocupan más de una casilla... ¿Cada componente del barco debería ser una clase? Es decir, el crucero, por ejemplo, ocupa 3 casillas, ¿debería componerse de 3 clases? ¿Qué opinas?

Gracias.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Una pregunta, si las casillas fueran clases y los barcos ocupan más de una casilla... ¿Cada componente del barco debería ser una clase? Es decir, el crucero, por ejemplo, ocupa 3 casillas, ¿debería componerse de 3 clases? ¿Qué opinas?

En ese caso yo optaría por que un vehículo tuviera una lista de casillas que ocuparía, en el caso del crucero, este tendría una lista de tres casillas.
Tener una clase que represente una parte de un barco se me hace un poco innecesario, no aporta información adicional.

Saludos ...