📄 qipan.java
字号:
package com.abc.hrd;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Qipan {
public Qizi[] qzs = new Qizi[10];
public Blank[] blks = new Blank[2];
// 初始化棋盘布局
public void init() {
qzs[0] = new Dajiang(this, 0, 0);
qzs[1] = new Dajiang(this, 0, 2);
qzs[2] = new Dajiang(this, 3, 0);
qzs[3] = new Dajiang(this, 3, 2);
qzs[4] = new Xiaobing(this, 0, 4);
qzs[5] = new Xiaobing(this, 1, 4);
qzs[6] = new Xiaobing(this, 2, 4);
qzs[7] = new Xiaobing(this, 3, 4);
qzs[8] = new Guanyu(this, 1, 2);
qzs[9] = new Caocao(this, 1, 0);
blks[0] = new Blank(1, 3);
blks[1] = new Blank(2, 3);
}
// 判断某个位置是否有棋子
public boolean exists(int x, int y) {
if (blks[0].x == x && blks[0].y == y) {
return false;
}
if (blks[1].x == x && blks[1].y == y) {
return false;
}
return true;
}
// 得到某个位置的棋子信息
public Qizi getQizi(int x, int y) {
Qizi qz = null;
for (int i = 0; i < qzs.length; i++) {
if (qzs[i].inside(x, y)) {
qz = qzs[i];
break;
}
}
return qz;
}
public void locateBlank() {
int blkCount = 0;
boolean found = false;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 5; j++) {
found = false;
for (int k = 0; k < qzs.length; k++) {
if (qzs[k].inside(i, j)) {
found = true;
break;
}
}
if (!found) {
blks[blkCount++] = new Blank(i, j);
}
}
}
}
public void show() {
final JFrame frame = new JFrame("华容道");
// frame.setSize(326,414);
frame.setSize(330, 432);
final Container container = frame.getContentPane();
container.setLayout(new GraphPaperLayout(new Dimension(4, 5)));
final JButton[] btns = new JButton[10];
ClassLoader cl = getClass().getClassLoader();
for (int i = 0; i < btns.length; i++) {
Icon icon = new ImageIcon(cl.getResource("q" + i + ".jpg"));
//Icon icon = new ImageIcon("q" + i + ".jpg");
btns[i] = new JButton(icon);
container.add(btns[i], new Rectangle(qzs[i].x, qzs[i].y, qzs[i].w,
qzs[i].h));
btns[i].addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent me) {
JButton btn = (JButton) me.getSource();
int i = 0;
for (i = 0; i < btns.length; i++) {
if (btn == btns[i]) {
break;
}
}
double gridx = frame.getSize().getWidth() / 4;
double gridy = (frame.getSize().getHeight() - 20) / 5;
int x = (int) (me.getX() / gridx + qzs[i].x);
int y = (int) (me.getY() / gridy + qzs[i].y);
if (!exists(x, y) && qzs[i].move(x, y)) {
locateBlank();
container.removeAll();
for (i = 0; i < btns.length; i++) {
container.add(btns[i], new Rectangle(qzs[i].x, qzs[i].y, qzs[i].w,qzs[i].h));
}
container.validate();
}
}
});
}
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
});
}
public static void main(String[] args) {
Qipan qipan = new Qipan();
qipan.init();
qipan.show();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -