Juego Gato

Iniciado por Lain0x, 21 Marzo 2011, 20:30 PM

0 Miembros y 1 Visitante están viendo este tema.

Lain0x

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ó:



Ojala me puedan brindar ideas sobre como puedo mejorarlo, o que librería usar, etc.

Gracias

sapito169

-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

sapito169

#2
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]