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? ____________________________