public class juego

Transcripción

public class juego
Juego
de la Diana
___________________________
Estructuras de Datos y de la
Información
Enunciado
______________
Una serie de personas juegan a los dardos en una diana con 10
círculos concéntricos numerados del 1 al 10.
Cada jugador va tirando, por riguroso orden, 3 dardos por tirada y se
anota los puntos conseguidos.
Cuando un jugador alcanza los 100 puntos se retira del juego, que
acabará cuando ya no queden jugadores.
a) Diseñad las ED para representar el problema (5 puntos).
b) Implementad un algoritmo que simule una partida donde, además,
queremos saber el orden en el que ha acabado cada jugador y la tirada,
con su autor, de mayor puntuación (5 puntos).
Antes de nada...
_____________________
LEER EL ENUNCIADO
n VECES
¿Y después...?
____________________
VOLVER A LEER EL
ENUNCIADO
¿Por qué?
______________
NOS AYUDA A
PLANTEAR MEJOR LA
SOLUCIÓN A NUESTRO
PROBLEMA
Enunciado
______________
Una serie de personas juegan a los
dardos en una diana con 10 círculos
concéntricos numerados del 1 al 10.
"Serie de personas"
¿Quizá una lista?
¿Quizá una cola?
...
"Diana con 10
círculos..."
¿Funcionalidad de
lanzar dardos?
Enunciado
______________
Cuando un jugador alcanza los
100 puntos se retira del juego,
que acabará cuando ya no queden
jugadores.
"Alcanzar 100 puntos..."
¿Jugador que deja de
jugar?
¿Fin de juego?
Varios jugadores...
¿Posible ordenación
para la clasificación?
Enunciado
______________
b) Implementad un algoritmo que simule
una partida donde, además, queremos
saber el orden en el que ha acabado
Me hago una idea de la
cada jugador y la tirada, con su autor,
simulación a partir del
de mayor puntuación.
orden de los
jugadores...
Necesito un registro de
tiradas para obtener la
mejor...
Planteamiento de la solución
_____________________________________
Identificar, en una solución OO, las potenciales
clases...
Persona/Jugador.
Dardo.
Diana.
Tirada.
Punto.
Juego.
¿Clase Diana?
___________________
¿Estado?
números (1 a 10)
???
¿Funcionalidad?
dar puntuación
Clase Diana
________________
Estado
números (1 a 10)
parametrizar de 1 a n
Funcionalidad
dar puntuación
aleatoriedad
¿Clase Punto?
___________________
¿Estado?
valor
¿Funcionalidad?
???
¿Clase Punto?
___________________
¿Estado?
valor
¿Funcionalidad?
???
NO ES RELEVANTE PARA NUESTRO DISEÑO
¿Clase Dardo?
____________________
¿Estado?
lanzado
puntuación
¿Funcionalidad?
lanzar
¿Clase Dardo?
____________________
¿Estado?
lanzado
puntuación
¿Funcionalidad?
lanzar
NO ES RELEVANTE PARA NUESTRO DISEÑO
¿Clase Tirada?
____________________
¿Estado?
puntuación
a nivel de dardo
¿Funcionalidad?
guardar puntos
obtener mejor tirada
Clase Tirada
_________________
Estado
puntuación
a nivel de dardo
3 dardos por tirada
Funcionalidad
guardar puntos
a nivel de dardo
obtener mejor tirada
aquélla con mayor nº puntos
¿Clase Jugador?
______________________
¿Estado?
nombre
tiradas
¿Funcionalidad?
lanzar dardos
ver tiradas
contar puntos
obtener mejor tirada
Clase Jugador
___________________
Estado
nombre
para distinguir jugadores
tiradas
para registrar la trayectoria
de cada jugador
Funcionalidad
lanzar dardos
una tirada por turno
ver tiradas
mostrar secuencia de
tiradas
contar puntos
sumar los puntos de todas
las tiradas
obtener mejor tirada
recorrer las tiradas y obtener
la mejor (más puntos)
¿Clase Juego?
___________________
¿Estado?
diana
jugadores
reglas
¿Funcionalidad?
añadir jugador
jugar
mostrar clasificación
obtener mejor tirada
Clase Juego
________________
Estado
diana
jugadores
orden de tiradas
clasificación
reglas
dardos por tirada
puntos por partida
Funcionalidad
añadir jugador
jugar
orden de lanzamientos
registrar tirada en jugador
comprobar fin
siguiente lanzador
mostrar clasificación
obtener mejor tirada
a partir de los jugadores
Definición de las clases
______________________________
atributos (variables de clase)
funcionalidad (métodos)
Implementación de las clases
______________________________________
package diana;
import java.util.Random;
public class Diana {
private int maximo;
public Diana() {
maximo=10;
}
public Diana(int n){
maximo=n;
}
public int puntos(){
return new Random().nextInt(maximo+1);
}
public String toString(){
return " "+maximo;
}
}
Implementación de las clases
______________________________________
public class tirada {
private int[] puntos;
public tirada() {
this(3);
}
public tirada(int t){
puntos=new int[t];
}
public void lanzar(Diana d){
for (int t=0;t<puntos.length;t++) puntos[t]=d.puntos();
}
public int suma(){
int p=0;
for (int t=0;t<puntos.length;t++) p=p+puntos[t];
return p;
}
// toString ()
}
Implementación de las clases
______________________________________
public class jugador {
private String nombre;
private Lista <tirada>tiradas;
int dardos;
jugador(String n,int d){
nombre=n;
tiradas=new Lista<tirada>();
dardos=d;
}
public void lanzar(Diana d){
tirada t=new tirada(dardos);
t.lanzar(d);
tiradas.insertarFinal(t);
}
public Lista<tirada> tiradas(){
return tiradas;
}
Implementación de las clases
______________________________________
public class jugador {
public int puntos(){
int p=0;
Lista<tirada> aux=tiradas;
while(!aux.esVacia()){
p = p + aux.primero().suma();
aux = aux.resto();
}
return p;
}
// ...
}
Implementación de las clases
______________________________________
public class jugador {
public tirada mejorTirada() {
int p=0;
tirada t=null;
Lista<tirada> aux=tiradas;
while(!aux.esVacia()){
if(aux.primero().suma()>p) {
p=aux.primero().suma();
t=aux.primero();
}
aux=aux.resto();
}
return t;
}
// ...
}
Implementación de las clases
______________________________________
public class juego {
Diana d;
colaDinamica<jugador> jugadores;
Lista<jugador> clasificacion;
int dardos;
int fin;//puntos para acabar la partida
public juego(int n,int h,int ndardos) {
d=new Diana(n);
jugadores=new colaDinamica<jugador>();
clasificacion=new Lista<jugador>();
dardos=ndardos;
fin=h;
}
public juego(){
this(10,100,3);
}
public juego(int h){
this(10,h,3);
}
Implementación de las clases
______________________________________
public class juego {
public void jugar() {
jugador j;
while(!jugadores.esVacia()){
j=jugadores.primero();
jugadores.quitar();
j.lanzar(d);
if(j.puntos()<fin) jugadores.añadir(j);
else clasificacion.insertarFinal(j);
}
}
}
Implementación de las clases
______________________________________
public class juego {
public jugador mejorTirador(){
jugador j=null;
Lista<jugador> aux=clasificacion();
int t=0;
while(!aux.esVacia()){
if(aux.primero().mejorTirada().suma()>t){
j=aux.primero();
t=aux.primero().mejorTirada().suma();
}
aux=aux.resto();
}
return j;
}
}
Implementación de las clases
______________________________________
public class juego {
public tirada mejorTirada(){
tirada t = null;
jugador j = mejorTirador();
if(j != null)
t = j.mejorTirada();
return t;
}
}
¿Preguntas?
____________________________

Documentos relacionados