1
체스와 같지만 나이트와 만 관련된 ratsuk이라는 게임을 만들려고합니다. 나이트 캔트 이동은 이전에 이동 했으므로 이동 손실은 없습니다.버튼을 한 번만 만드는 방법;
문제는 버튼 중 하나를 누르면 새 기사가 나타나기 전에 기사가 나타납니다. 그리고 새로운 1이 나타나서는 안되는 이유가 확실하지 않습니다.
버튼이 한 번만 작동해야하기 때문일 수 있습니다.
그럼 한 번만 작업하려면 버튼을 어떻게 만듭니 까?
여기 루이 코드
버튼의 accions가 acciones 방법에package ratsuk;
import java.util.Random;
import javax.swing.JFrame;
/**
* import javax.swing.JFrame; import javax.swing.SwingUtilities; import
* javax.swing.UIManager;
*/
public class Ratsuk extends JFrame {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Random rad;
rad = new Random();
int row = rad.nextInt(8);
int column = rad.nextInt(8);
Tablero newtablero = new Tablero();
newtablero.caballo(row, column);
}
}
이다. 나는 아직 모든 가능한 움직임을 프로그램 할 수 없다.
package ratsuk;
import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JPanel;
import javax.swing.Icon;
import javax.swing.ImageIcon;
/**
*
* @author Melvin
*/
public class Tablero {
private static final int HEIGHT = 8;
private static final int WIDTH = 8;
private JButton[][] mesa;
private Icon image;
private JPanel panel;
public Tablero() {
mesa = new JButton[HEIGHT][WIDTH];
panel = new JPanel(new GridLayout(HEIGHT, WIDTH));
image = new ImageIcon(getClass().getResource("redKnight.gif"));
crearventana();
crearmesa();
pintarmesa();
}
private void crearventana() {
JFrame ventana = new JFrame("Juego de Ratsuk");
ventana.setVisible(true);
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ventana.setContentPane(panel);
ventana.setSize(500, 500);
ventana.setVisible(true);
}
private void crearmesa() {
for (int row = 0; row < HEIGHT; row++) {
for (int column = 0; column < WIDTH; column++) {
JButton button = new JButton();
button.setPreferredSize(new Dimension(40, 40));
mesa[row][column] = button;
panel.add(button);
}
}
}
private void pintarmesa() {
Color fondo;
for (int r = 0; r < HEIGHT; r++) {
for (int t = 0; t < WIDTH; t++) {
fondo = getBackgroundColor(r, t);
mesa[r][t].setBackground(fondo);
}
}
}
private Color getBackgroundColor(int r, int t) {
Color fondo;
if (r % 2 == 0 || r == 0) {
if (t % 2 == 0 || t == 0) {
fondo = Color.BLACK;
} else {
fondo = Color.WHITE;
}
} else {
if (t % 2 == 0 || t == 0) {
fondo = Color.WHITE;
} else {
fondo = Color.BLACK;
}
}
return fondo;
}
public void caballo(final int row, final int column) {
final JButton current = mesa[row][column];
current.setIcon(image);
panel.repaint();
acciones(row, column, current);
}
private void acciones(final int row, final int column, final JButton current) {
final int nextRow = row + 2;
final int nextColumn = column - 1;
if (tienebotton(nextRow, nextColumn)==true){
JButton next = mesa[nextRow][nextColumn];
next.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent d) {
current.setIcon(null);
caballo(nextRow, nextColumn);
}
});
}
final int nextColumn1 = column+ 1;
if (tienebotton(nextRow, nextColumn1)==true){
JButton next = mesa[nextRow][nextColumn1];
next.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent d) {
current.setIcon(null);
caballo(nextRow, nextColumn1);
}
});
}
final int nextRow1 = row- 2;
if (tienebotton(nextRow1, nextColumn)==true){
JButton next = mesa[nextRow1][nextColumn];
next.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent d) {
current.setIcon(null);
caballo(nextRow1, nextColumn);
}
});
}
}
private boolean tienebotton(int row, int column) {
if (row >= 0 && row < HEIGHT && column >= 0 && column < WIDTH) {
return true;
} else {
return false;
}
}
}
일부 1 개가 내 프로젝트에 대한 포인터를 일반적으로 제공 할 수 있으면 좋겠다.
자, setEnable 코드를 구현하십시오. 그러나 새로운 기사단은 여전히 두 곳 이상의 기사로 끝내지 않아야하는 장소에 나타납니다. 그것을 많이 실행하고 패턴을보고 시작합니다. 기사가 (행, 열)에있는 경우 새 기사는 항상 (행 + 4, 열 +2)에 표시되지만 여기에 제한되지 않습니다. 나는 틀린 것을 발견 할 수 없다 : /. – user2488345
원래 질문에 대한 답변이 왔으며 지금 묻고있는 것은 새로운 질문입니다. 새 스레드에서이 질문을해야합니다. –