Título: Juego Gato
Publicado por: Lain0x en 21 Marzo 2011, 20:30 pm
Hola, quería pedir algunos consejos, estoy tratando de hacer un gato, y aún nose exactamente como hacerlo o que recurso ocupar. La idea que tengo es poner 9 jTextfield dentro de un Jpanel, y con un botón aparecerá el círculo o la x dentro del cuadro, pero me doy cuenta que no es tan sencillo, ubicarse en el cuadro que uno desee a la hora de jugar.
Así me quedó:
(http://s3.subirimagenes.com:81/otros/previo/thump_6145147gato.jpg)
Ojala me puedan brindar ideas sobre como puedo mejorarlo, o que librería usar, etc.
Gracias
Título: Re: Juego Gato
Publicado por: sapito169 en 22 Marzo 2011, 05:35 am
-me pregunto que harás cuando tengas que crear un juego de mesa que tenga 100 cuadriculas o si creas un panel donde se visualicen las mesas de un restaurante y te obliguen a que puedas dibujar de forma arbitraria una cantidad indigerida de mesas -esto es un caso de los que hablo donde el ide estorba y crea más problemas de los que resuelve -mi recomendación que primero estudies como usar el patron observador y que aprendas a crear formularios a mano -otra recomendación es que aprendas a hacer pruebas unitarias -es una mala idea que pongas 9 labels en primer lugar porque los leves no se pueden editar por el usuario y luego tu tendrás que hacer alguna operación rara que le agrega dificultad para editarlo -si empiezas a pensar en componentes swing entonces ya sabes que tienes un problema grave -yo lo resolví con botones y cree un botón genérico heredando y luego lo las instancias con un for otra opción es crear la lógica de los botones en una clase genérica y luego la agrega instancias de esa clase genérica a cada botón
Título: Re: Juego Gato
Publicado por: sapito169 en 22 Marzo 2011, 05:43 am
package com.elhacker.ejemplo;
import java.awt.BorderLayout; import java.awt.Dimension;
import javax.swing.JFrame;
public class ApliacionMichi { public static void main(String arg[]) { JFrame jFrame = new JFrame(); jFrame.setLayout(new BorderLayout()); jFrame.add(new PanelPrincipal(), BorderLayout.CENTER); jFrame.setSize(new Dimension(400, 400)); jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jFrame.setLocationRelativeTo(null); jFrame.setVisible(true);
} }
package com.elhacker.ejemplo;
import javax.swing.JButton;
public class BotonCeldaMichi extends JButton {
private static final long serialVersionUID = 1L; private int fila; private int columna;
public BotonCeldaMichi(int fila, int columna) { super(); this.fila = fila; this.columna = columna; }
public int getFila() { return fila; }
public int getColumna() { return columna; }
}
package com.elhacker.ejemplo;
public interface ObservadorDeVictoria { public void cuandoGano(TableroMichi tableroMichi); }
package com.elhacker.ejemplo;
public enum OpcionMarca {
X("x"), O("o");
private String nombre = "";
private OpcionMarca(String nombre) { this.nombre = nombre; }
public OpcionMarca getOpcionOpuesta() { if (this == OpcionMarca.O) { return OpcionMarca.X; } else { return OpcionMarca.O; } }
@Override public String toString() { return nombre; } }
package com.elhacker.ejemplo;
import java.awt.GridLayout; import java.awt.Label; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
import javax.swing.JOptionPane; import javax.swing.JPanel;
public class PanTablero extends JPanel { private static final long serialVersionUID = 1L; private final GridLayout gridLayout = new GridLayout(3, 3); private final TableroMichi tableroMichi;
public PanTablero() { this(new TableroMichi()); }
public PanTablero(TableroMichi tableroMichi) { super(); this.tableroMichi = tableroMichi; inicialisa(); }
public void inicialisa() { setLayout(gridLayout); agregaBotonesYEventos(); agregaEventosMichi(); }
private void agregaEventosMichi() { tableroMichi.agregarObserVador(new ObservadorDeVictoria() {
@Override public void cuandoGano(TableroMichi tableroMichi) { ganaste();
} }); }
private void ganaste() { JOptionPane.showMessageDialog(null, new Label("felicidades"));
}
private void agregaBotonesYEventos() { for (int fila = 1; fila <= 3; fila++) { for (int columna = 1; columna <= 3; columna++) { BotonCeldaMichi botonCeldaMichi = new BotonCeldaMichi(fila, columna); agreagEventos(botonCeldaMichi); add(botonCeldaMichi); } } }
private void agreagEventos(BotonCeldaMichi botonCeldaMichi) { botonCeldaMichi.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent actionEvent) { presionoAlgunBoton(actionEvent); }
}); }
private void presionoAlgunBoton(ActionEvent actionEvent) { BotonCeldaMichi botonCeldaMichi = (BotonCeldaMichi) actionEvent .getSource(); ponerMarcaAlBoton(botonCeldaMichi); tableroMichi.marcar(botonCeldaMichi.getFila(), botonCeldaMichi.getColumna());
}
private void ponerMarcaAlBoton(BotonCeldaMichi botonCeldaMichi) { botonCeldaMichi.setText(tableroMichi.getUltimaOpcion().toString()); } }
package com.elhacker.ejemplo;
import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel;
public class TableroMichi { private OpcionMarca ultimaOpcion;
private final TableModel tabla = new DefaultTableModel(3, 3); private ObservadorDeVictoria observador;
public TableroMichi() { this(OpcionMarca.X); }
public TableroMichi(OpcionMarca primeraOpcionMarca) { ultimaOpcion = primeraOpcionMarca.getOpcionOpuesta(); }
public void marcar(int fila, int columa) { //no te la dejo tan facil :-)
}
public void agregarObserVador(final ObservadorDeVictoria observador) { //no te la dejo tan facil :-) }
public OpcionMarca getMarcaEnPocision(int fila, int columna) { //no te la dejo tan facil :-) return null; }
public OpcionMarca getUltimaOpcion() { return ultimaOpcion; }
public boolean isVicotoria() { return ganoEnRecta() || ganoEnDiagonal(); }
public boolean ganoEnRecta() { //no te la dejo tan facil :-) return false; }
public boolean ganoEnFila(int fila) { //no te la dejo tan facil :-) return false; }
public boolean ganoEnColumna(int columna) { //no te la dejo tan facil :-) return false; }
public boolean ganoEnDiagonal() { return diagonalDeFilasYColumnasIguales() || diagonalDeFilasYColumnasDiferentes(); }
public boolean diagonalDeFilasYColumnasIguales() { //no te la dejo tan facil :-) return false; }
public boolean diagonalDeFilasYColumnasDiferentes() { return false; }
private boolean sonMismasMarcas(OpcionMarca marca, OpcionMarca otraMarca) { //no te la dejo tan facil :-) return false; }
public void limpiar() { //no te la dejo tan facil :-) }
}
[code]
solo tienes que hacer pruebas unitarias y hacer que todos los metodos pasen correctamente luego todo va a funcionar como por arte de magia [/code]
|