Re: ChessB oard
In article <uoWdnekkkfNgBVDVnZ2dnUVZ_r3inZ2d@comcast.com>,
Zelda Rottencrotch <beelzibub2@comcast.net> wrote:
[I] was working on the below code when [I] ran
into some [immense] social problems and had had to
put it aside. [N]ow [I] must restart. [A]ny tips?
[...]
Separate the view (a grid possibly having screen coordinates) from the
model (a data structure having row and column coordinates corresponding
to a chess board). It may help to factor out the conversions to and from
the two coordinate systems.
In the example below, the coordinate systems are conformal. The view is
a 8x8 grid of JButtons. The model is an empty 8x8 grid of Strings; your
model would contain actual chess piece names. The animation is
superfluous.
A more elaborate example of a grid based game may be found here:
<http://robotchase.sourceforge.net/>
<code>
import java.awt.*;
import java.awt.event.*;
import java.util.Random;
import javax.swing.*;
/**
* Make some buttons!
* @author John B. Matthews
*/
public class Buttons extends JFrame
implements ActionListener, ItemListener {
public static final int ROWS = 8;
public static final int COLS = ROWS;
private static final int RATE = 1000 / 20;
private static final Random random = new Random();
private static MyButton[][] buttons = new MyButton[ROWS][COLS];
public static void main(String args[]) {
new Buttons();
}
public Buttons() {
JFrame frame = new JFrame();
frame.setContentPane(getButtonPanel());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 600);
frame.setVisible(true);
Timer timer = new Timer(RATE, this);
timer.start();
}
private JPanel getButtonPanel() {
JPanel panel = new JPanel(new GridLayout(ROWS, COLS));
for (int r = 0 ; r < ROWS; r++)
for (int c = 0 ; c < COLS; c++)
panel.add(getButton(r, c));
return panel;
}
private MyButton getButton(int row, int col) {
MyButton b = new MyButton(row, col);
buttons[row][col] = b;
b.setBackground(Color.CYAN);
b.setSelected(random.nextBoolean());
b.addItemListener(this);
return b;
}
public void actionPerformed(ActionEvent e) {
int row = Math.abs(random.nextInt()) % ROWS;
int col = Math.abs(random.nextInt()) % COLS;
MyButton b = buttons[row][col];
b.setSelected(!b.isSelected());
}
public void itemStateChanged(ItemEvent e) {}
}
class MyButton extends JToggleButton {
private int row;
private int col;
public MyButton(int row, int col) {
super();
this.row = row;
this.col= col;
this.setText(MyModel.getName(row, col));
}
}
class MyModel extends Object {
private static final String[][] chessBoard =
new String[Buttons.ROWS][Buttons.COLS];
public static String getName(int row, int col) {
return "R" + row + "C" + col;
}
}
</code>
--
John B. Matthews
trashgod at gmail dot com
home dot woh dot rr dot com slash jbmatthews