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]