Estoy escribiendo un motor de juego en Java para un juego de cartas de dos jugadores para el cual mis alumnos escribirán jugadores de inteligencia artificial.Cómo crear dos interfaces para una clase de Java, una de solo lectura, una de lectura y escritura?
Los jugadores de IA se turnarán para jugar a las cartas en su 'campo' como parte de la 'mesa' delante de ellos. Pueden atacar con una carta de su campo una carta en el campo del otro jugador. Las tarjetas pueden estar boca arriba o boca abajo.
La clase GameEngine le permite a un jugador AI hacer su turno llamando al método GamePlayer.TakeTurn (GameEngine spa). El jugador puede preguntarle al motor del juego por el campo del jugador defensor para que el jugador pueda tomar decisiones basadas en el número de cartas que hay y las que están boca arriba. Digamos que este método es GameEngine.GetDefendingField()
Ahora, quiero asegurarme de que el jugador atacante no puede modificar el campo del jugador defensor o las cartas en el campo del jugador defensor y que el jugador atacante solo puede identificar la cara arriba cartas en el campo de jugadores defensores.
Tengo clases para Card, Field (una ArrayList of Cards), GamePlayer y GameEngine. ¿Hay alguna forma de crear una interfaz para el Campo para que GameEngine pueda devolver el campo del jugador defensor sin que el jugador atacante pueda cambiarlo? y sin que el jugador atacante pueda refundir el campo del jugador defensor en algo que pueda cambiarse.
¿Puedo hacer que GameEngine.GetDefendingField() devuelva una interfaz de solo lectura a un campo que no puede ser refundido a un campo?
tia,
SH-
@shindigo: ¿qué tan lejos quieres ir para "proteger" tu aplicación de tu estudiante? Si me permite ejecutar código en su JVM sin un administrador de seguridad instalado (que es el caso para el 99.9% de las aplicaciones de Java aquí), diablos, incluso puedo cambiar el contenido de inmutable, pero no realmente. objetos inmutables, como, por ejemplo, una Cadena. – SyntaxT3rr0r