Ejercicio programación Java

Peti_7

Chapuzas Jr
Registrado
19 Jun 2018
Mensajes
7
Puntos
1
Edad
28
Buenas quería pedir un poco de ayuda para este ejercicio.. no quiero que lo resolváis entero ni nada sino una pequeña ayuda para empezar hacerlo ya que me bloqueado y nose por donde tirar..
quiero hacer un esquema de las clases y funciones que necesito en cada clase y luego unificarlo en el main pero no me sale nada.. aquí va el ejercicio, gracias


 
Última edición:

InfaSysKey

Dig Out Your Soul
Registrado
18 Ene 2017
Mensajes
273
Puntos
28
Buenas quería pedir un poco de ayuda para este ejercicio.. no quiero que lo resolváis entero ni nada sino una pequeña ayuda para empezar hacerlo ya que me bloqueado y nose por donde tirar..
quiero hacer un esquema de las clases y funciones que necesito en cada clase y luego unificarlo en el main pero no me sale nada.. aquí va el ejercicio, gracias


Nosotros lo contruiremos de la siguiente manera:
• Necesitamos un array de 24 posiciones para guardar la información de las 24 casillas del tablero, de forma que las casillas:
o 0àpan (Salida)
o 1,8,17àcarne
o 2,10, 19àlechuga o 4,11,20àtomate o 5, 13, 22àqueso o 7,15,23àhuevo
Si el jugador cae en alguna de las anteriores casillas se le incrementará el contador del correspondiente ingrediente
o 12àapuntaingrediente
Si el jugador cae en la casilla 12 podrá apuntarse el ingrediente que quiera
o 6, 16àdado positivo
Si el jugador cae en la casilla del dado positivo vuelve a lanzar el dado, avanzando en el tablero
o 21àdadonegativo
Si el jugador cae en la casilla del dado negativo vuelve a lanzar el dado, pero retrocede en el tablero
o 3,9,14,18àdadodeingredientes
Si el jugador cae en la casilla Dado de ingrediente tira de nuevo el dado si sale:
1àgana un ingrediente de carne 2àgana un ingrediente lechuga 3àgana un ingrediente tomate 4àgana un ingrediente queso 5àgana un ingrediente huevo 6àElige uno de los 5 ingredientes

• La información que necesitaremos saber de cada jugador será: o Nombre
o Casillaenlaqueseencuentra o Cantidaddepan
o Cantidaddecarne
o Cantidaddelechuga
o Cantidaddetomate
o Cantidaddequeso
o Cantidaddehuevo
o Númerodebocadilloscompletos
• La carta de bocadillos y ensaladas posibles son:
o Vegetal con Polloà pan, lechuga y carne
o JamonyQuesoàpan,carneyqueso
o CarneconTomateàpan,carne,tomate
o EnsaladaMediterraneaàcarne,lechuga,lechuga,tomate o QuesoyTomateàpan,quesoytomate
o Tortillafrancesaàpan,huevoyhuevo
o TortillaconQuesoàpan,huevo,queso
o EnsaladaCompletaàlechuga,tomate,queso,huevo
• Antes de iniciar la partida se elegirá el número de jugadores (entre 1 y 4) y se preguntará el nombre de cada uno de ellos.
• Aleatoriamente se elegirá cual de ellos empieza.
• Iran jugando por turnos de la siguiente manera:
o Podráelegirentrelassiguientesopciones
§ Ver su información a modo resumen
§ Ver la carta de bocadillos
§ Completar algun bocadillo, diciendo cual de ellos.
• Se comprobará si es posible y, si lo es, se incrementará el número de bocadillos completos
§ IniciarTirada
• Se simulará una tirada de un dado (de 1 a 6)
• Se moverá la casilla del jugador en el tablero
• Según la casilla en la que caiga se incrementará el ingrediente
correspondiente o se hará la acción necesaria. o Hastaqueeljugadornoinicielatiradanopodráseguir
• El juego terminará cuando uno de los jugadores haya completado 5 bocadillos
¿Tienes el ejercicios en PDF?
Es que al hacer copia y pega, no me entero de la mitad.
 

josejfernandez

Software Architect
Registrado
1 Ago 2012
Mensajes
488
Puntos
43
Hola. He leído el ejercicio y no he visto que te pidan un diseño de clases y métodos. ¿Por qué quieres hacerlo? Si estás empezando yo creo que eso te resultará más difícil que implementar el problema.

Mi consejo es que empieces por el principio y que vayas paso a paso. Claro, el enunciado no sigue "un orden lógico", por lo que tienes que identificar cuál es "el principio", dentro del flujo del programa. En mi opinión, deberías empezar por aquí:

"Antes de iniciar la partida se elegirá el número de jugadores (entre 1 y 4) y se preguntará el nombre de cada uno de ellos."

Podrías crear el siguiente código:

class Application
// En el main pediremos la configuración de la partida y se la pasaremos a una instancia de la clase Game.
public static void Main(...)

class GameConfigurer
// Aquí pedimos por consola el número de jugadores y los nombres de cada uno. Con ellos creamos una instancia de GameConfiguration.
public static GameConfiguration ObtainConfigurationByConsole()

// He decidido incorporar los valores de configuración como una clase porque podríamos querer mejorar el juego y de este modo sólo necesitaríamos ampliar esta clase sin tener que modificar el resto del programa. Sé que es un ejercicio de clase y quizá quede tal y como está, pero en el software real no tienes esa certeza, y esta adaptación no cuesta nada.
class GameConfiguration
// No incluyo la cantidad de jugadores porque es un dato que podemos deducir a partir del tamaño del array.
public string[] PlayerNames (sólo lectura)
public GameConfiguration(string[] playerNames)


class Game
public Game(GameConfiguration config)
public void Start()


[*] Por cierto, ya que tu profesor valora los comentarios: los nombres de clases y métodos deben ser indicativos de QUÉ están haciendo. Los comentarios deben describir POR QUÉ se hace.

Con ese esquema puedes continuar con el resto de la lógica ya dentro de la clase Game. He llegado a este diseño de la siguiente forma:

1. La inicialización (configuración) no tiene nada que ver con el juego en si.
2. Por ello la pondré fuera del juego, y será lo único que haremos en el Main: configurar la partida e iniciarla.
3. Toda la lógica del juego irá en su propia clase, sin perjuicio de que ésta luego pueda necesitar otras clases.

Pero en definitiva la capacidad de adelantarte a la implementación con un diseño de clases la irás obteniendo con tiempo y experiencia. Si no te lo han pedido, yo te recomendaría que no te centraras en esta parte y que la hicieras a posteriori, como un ejercicio de mejora.
 
Última edición:

migueldeblas

Chapuzas Jr
Registrado
3 Dic 2018
Mensajes
38
Puntos
8
Yo añadiria a los comentario de josefernandez que normalmente los juegos son bucles infinitos de partidas hasta que hay una condición de salida (que el jugador abandone el juego).
Por lo que la clase principal deberia incluir ese bucle, cada vuelta del bucle ejecutaria una "partida", como hay posibilidad de configurar la partida con diversos jugadores, asi que antes de ejecutar el la partida hay que obtener la configuracion de la misma. Ademas una partida consistira en un bucle infinito de turnos de los jugadores hasta que se da la condicion de ganador y finalice dicha partida.

Yo a groso modo propondria las siguientes clases (marcadas en negrita)

Clase Principal (Bucle principal del juego hasta que alguien salga del juego).
Clase Partida (Modeliza la partida. Bucle principal de una partida).
Clase Configuracion Donde se obtiene y almacena la configuración de la partida.
Clase Jugador (Modeliza el jugador. Donde se guardan los datos del jugador).
Clase Turno (Modeliza cada uno de los turnos de una partida). En el turno de un jugador puede hacer varias cosas...
El Tablero tambien podria ser una clase, ya que podria cambiar el tamaño del tablero y el significado de las casillas, etc...
El dado tambien puede ser una clase, donde se implemente el número de caras del dado y el metodo tirada, que da un número aleatoria.
La carta de bocadillos igual. Aqui iria implementada la combinación de ingredientes totales (relacionado con el tablero) y los ingredientes de cada bocadillo. Ademas serviria para mostrarla cuando el jugador lo pida.

Bueno creo que para empezar a pensar ya tienes...
 

Peti_7

Chapuzas Jr
Registrado
19 Jun 2018
Mensajes
7
Puntos
1
Edad
28
gracias a todos al final conseguí que funcionara todo ^^
 

pitynobel81

Nuevo
Registrado
9 Abr 2021
Mensajes
4
Puntos
3
Edad
40
Por si alguien esta en modo "aprender Java" , mi consejito es que cuando crees un objeto en Java, recordad que consumes memoria y recursos del procesador. Dado que la creación de un objeto está incompleta sin asignarle memoria, es mejor mantener las demandas del objeto bajo control y no crear objetos no deseados en su código.

Todo código se puede mejorar y optimizar para que no nos ralentice el programa

Saludos,
 
Arriba