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));
}
}