Fórmula 1

CLASE PRINCIPAL

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package formula1;

import java.io.IOException;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Choice;
import javax.microedition.lcdui.ChoiceGroup;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.ImageItem;
import javax.microedition.lcdui.Item;
import javax.microedition.lcdui.ItemCommandListener;
import javax.microedition.lcdui.List;
import javax.microedition.lcdui.StringItem;
import javax.microedition.midlet.*;



/**
 * @author glop
 */
public class Formula1 extends MIDlet implements CommandListener {
   
    private Display pantalla;
    private Form contenedor;
    private Command salir;
    private Command clasificacion;
    private StringItem correr;
    private Command comando_correr;
    private Command menu;
    private Command volver;
    ClaseF1 f1;
   
    public Formula1() throws IOException {
        pantalla = Display.getDisplay(this);
        f1 = new ClaseF1();
        carreras();
    }

    public void startApp() {
        pantalla.setCurrent(contenedor);
    }
   
    public void pauseApp() {
    }
   
    public void destroyApp(boolean unconditional) {
    }

    public void commandAction(Command c, Displayable d) {
        if (c == salir) {
            destroyApp (true);
            notifyDestroyed ();
        }
        if (c == volver) {
            pantalla.setCurrent(contenedor);
        }
        if (c == clasificacion) {
            clasificacion();
        }
      
    }
   
   
   
   
    private void carreras() throws IOException {
       
        contenedor = new Form("");
        Image imagen = Image.createImage("imagenes/F1.jpg");
        ImageItem elemento = new ImageItem("",  imagen, ImageItem.LAYOUT_CENTER, "");
        contenedor.append(elemento);
       
        String[] pilotos = {"Seleccione piloto","Alonso","Vettel","Hamilton"};
       
        final ChoiceGroup primero = new ChoiceGroup("",Choice.POPUP,pilotos,null);
        final ChoiceGroup segundo = new ChoiceGroup("",Choice.POPUP,pilotos,null);
        final ChoiceGroup tercero = new ChoiceGroup("",Choice.POPUP,pilotos,null);
        primero.setLayout(ChoiceGroup.LAYOUT_CENTER);
        contenedor.append("\n1er clasificado");
        contenedor.append(primero);
        contenedor.append("2do clasificado");
        contenedor.append(segundo);
        contenedor.append("3er clasificado");
        contenedor.append(tercero);
        correr = new StringItem("","Correr",Item.BUTTON);
        comando_correr = new Command("",Command.OK,1);
        correr.setDefaultCommand(comando_correr);
        correr.setItemCommandListener(new ItemCommandListener() {

            public void commandAction(Command c, Item item) {
                int correcto=0;
                if (primero.getSelectedIndex() == segundo.getSelectedIndex() || segundo.getSelectedIndex() == tercero.getSelectedIndex()
                        || primero.getSelectedIndex() == tercero.getSelectedIndex() || primero.getSelectedIndex()==0
                        || segundo.getSelectedIndex()==0 || tercero.getSelectedIndex()==0) {
                    errorCarrera();
                    correcto=0;
                } else {
                    correcto=1;
                }
                if (correcto==1) {
                   
                    f1.addPuntos(primero.getString(primero.getSelectedIndex()), 5);
                    f1.addPuntos(segundo.getString(segundo.getSelectedIndex()), 3);
                    f1.addPuntos(tercero.getString(tercero.getSelectedIndex()), 1);
                    resultadoCarrera();
                    correcto=0;
                }
            }
        });
        contenedor.append(correr);
        salir = new Command("Salir",Command.EXIT,0);
       menu = new Command("Menú",Command.OK,1);
       clasificacion = new Command("Clasificación",Command.OK,2);
       contenedor.addCommand(salir);
       contenedor.addCommand(menu);
       contenedor.addCommand(clasificacion);
       contenedor.setCommandListener(this);
        pantalla.setCurrent(contenedor);
       
    }
   
     // Método que lanza una pantalla de resultados de operaciones.
   public void errorCarrera() {
       Alert alerta = new Alert("Error en la clasificación");
       alerta.setString("Los pilotos deben tener un nombre válido y aparecer en una sola posición");
       volver = new Command("Volver",Command.BACK,0);
       alerta.addCommand(volver);
       alerta.setCommandListener(this);
       pantalla.setCurrent(alerta);
   }
public void resultadoCarrera() {
       Alert alerta = new Alert("Resultado de la carrera",null,null,AlertType.CONFIRMATION);
       alerta.setString("La carrera se corrió sin incidencias. Los puntos se han sumado");
       volver = new Command("Volver",Command.BACK,0);
       alerta.addCommand(volver);
       alerta.setCommandListener(this);
       pantalla.setCurrent(alerta);
   }

public void clasificacion() {
       Alert alerta = new Alert("Clasificación");
       alerta.setString("1er clasificado : " + f1.ObtenerPrimero().get("nombre") + " con " + f1.ObtenerPrimero().get("puntos") + " puntos\n"
               + "2do clasificado : " + f1.ObtenerSegundo().get("nombre") + " con " + f1.ObtenerSegundo().get("puntos") + " puntos\n"
               + "3er clasificado : " + f1.ObtenerTercero().get("nombre") + " con " + f1.ObtenerTercero().get("puntos") + " puntos");
       volver = new Command("Volver",Command.BACK,0);
       alerta.addCommand(volver);
       alerta.setCommandListener(this);
       pantalla.setCurrent(alerta);
   }
   
}

CLASE F1

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package formula1;

import java.util.Hashtable;
import java.util.Vector;

/**
 *
 * @author dcampon
 */
public class ClaseF1 {
   
    private Hashtable clasificacion;
   
   
    public ClaseF1(){
        clasificacion = new Hashtable();
        clasificacion.put("Alonso", new Integer(0));
        clasificacion.put("Vettel", new Integer(0));
        clasificacion.put("Hamilton", new Integer(0));
    }

   
    /**
     *  En los "Obtener" se retorna un HashMap, en el que se tendrá una clave "puntos" y otra clave "nombre"
     *  de modo que para obtener el nombre del primero: retorno.get("nombre"), y los puntos retorno.get("puntos")
     */
    public Hashtable ObtenerPrimero(){
        Hashtable retorno = new Hashtable() ;
        int puntosAlonso = Integer.parseInt(clasificacion.get("Alonso").toString());
        int puntosVettel = Integer.parseInt(clasificacion.get("Vettel").toString());
        int puntosHamilton = Integer.parseInt(clasificacion.get("Hamilton").toString());
        if ( (puntosAlonso>=puntosVettel) && (puntosAlonso>=puntosHamilton) ){
            retorno.put("nombre", "Alonso");
            retorno.put("puntos", String.valueOf(puntosAlonso));
        } else
        if ( (puntosVettel>=puntosAlonso) && (puntosVettel>=puntosHamilton) ){
            retorno.put("nombre", "Vettel");
            retorno.put("puntos", String.valueOf(puntosVettel));
        } else
        if ( (puntosHamilton>=puntosAlonso) && (puntosHamilton>=puntosVettel) ){
            retorno.put("nombre", "Hamilton");
            retorno.put("puntos", String.valueOf(puntosHamilton));
        }
        return retorno;
    }

    public Hashtable ObtenerSegundo(){
        Hashtable  primero = new Hashtable();
        Hashtable  tercero = new Hashtable();
        Hashtable  retorno = new Hashtable();
  
        Vector aux = new Vector();
        aux.addElement(ObtenerPrimero().get("nombre"));
        aux.addElement(ObtenerTercero().get("nombre"));
        if (!aux.contains("Alonso")){
            retorno.put("nombre", "Alonso");
            retorno.put("puntos", String.valueOf(clasificacion.get("Alonso")));      
        }
        if (!aux.contains("Vettel")){
            retorno.put("nombre", "Vettel");
            retorno.put("puntos", String.valueOf(clasificacion.get("Vettel")));      
        }
        if (!aux.contains("Hamilton")){
            retorno.put("nombre", "Hamilton");
            retorno.put("puntos", String.valueOf(clasificacion.get("Hamilton")));      
        }
       
        return retorno;
       
    }

    public Hashtable ObtenerTercero(){
        Hashtable retorno = new Hashtable() ;
        int puntosAlonso = Integer.parseInt(clasificacion.get("Alonso").toString());
        int puntosVettel = Integer.parseInt(clasificacion.get("Vettel").toString());
        int puntosHamilton = Integer.parseInt(clasificacion.get("Hamilton").toString());
       
        if ( (puntosAlonso<=puntosVettel) && (puntosAlonso<=puntosHamilton) ){
            retorno.put("nombre", "Alonso");
            retorno.put("puntos", String.valueOf(puntosAlonso));
        }
        if ( (puntosVettel<=puntosAlonso) && (puntosVettel<=puntosHamilton) ){
            retorno.put("nombre", "Vettel");
            retorno.put("puntos", String.valueOf(puntosVettel));
        }
        if ( (puntosHamilton<=puntosAlonso) && (puntosHamilton<=puntosVettel) ){
            retorno.put("nombre", "Hamilton");
            retorno.put("puntos", String.valueOf(puntosHamilton));
        }
        return retorno;
   
    }

   
    /*
     Suma puntos a la clasificacion del piloto.
     * Parametros: piloto= Nombre del piloto al que le sumamos los puntos (Alonso,Vettel,Hamilton).
     *             puntos = Cuanto añadimos a los puntos que tenga el piloto dado.
     */
    public void addPuntos(String piloto, int puntos){
        int puntosActuales = Integer.parseInt(clasificacion.get(piloto).toString());
        clasificacion.put(piloto, new Integer(puntosActuales + puntos));
    }
   
}