以下是一个简单的Java代码示例,演示了推箱子游戏的基本逻辑和图形界面交互:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class PushBoxGame extends JFrame {
private static final long serialVersionUID = 1L;
private GridButton[][] gridButtons;
private int playerRow;
private int playerCol;
public PushBoxGame(int rows, int cols) {
setTitle("推箱子游戏");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
Container container = getContentPane();
container.setLayout(new GridLayout(rows, cols));
gridButtons = new GridButton[rows][cols];
for (int row = 0; row < rows; row++) {
for (int col = 0; col < cols; col++) {
GridButton button = new GridButton(row, col);
button.addActionListener(new ButtonClickListener());
container.add(button);
gridButtons[row][col] = button;
}
}
pack();
setLocationRelativeTo(null);
setVisible(true);
}
private void updateGridButton(int row, int col, String text) {
gridButtons[row][col].setText(text);
}
private void movePlayer(int newRow, int newCol) {
updateGridButton(playerRow, playerCol, ".");
playerRow = newRow;
playerCol = newCol;
updateGridButton(playerRow, playerCol, "P");
}
private void moveBox(int oldRow, int oldCol, int newRow, int newCol) {
updateGridButton(oldRow, oldCol, ".");
updateGridButton(newRow, newCol, "B");
}
private class GridButton extends JButton {
private static final long serialVersionUID = 1L;
private int row;
private int col;
public GridButton(int row, int col) {
this.row = row;
this.col = col;
}
public int getRow() {
return row;
}
public int getCol() {
return col;
}
}
private class ButtonClickListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
GridButton button = (GridButton) e.getSource();
int buttonRow = button.getRow();
int buttonCol = button.getCol();
// TODO: 根据按钮的位置和当前玩家位置进行移动判断和更新逻辑的实现
// 示例代码:点击格子后玩家向上移动一格
if (buttonRow == playerRow - 1 && buttonCol == playerCol) {
movePlayer(buttonRow, buttonCol);
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
PushBoxGame game = new PushBoxGame(5, 5);
// TODO: 添加初始化地图和玩家的逻辑
game.updateGridButton(2, 2, "P");
game.updateGridButton(3, 2, "B");
game.updateGridButton(4, 2, "T");
game.playerRow = 2;
game.playerCol = 2;
});
}
}
请注意,这只是一个简化的示例代码,您需要根据具体要求补充完整的游戏逻辑,包括移动箱子、判断是否完成目标等功能。希望对您有所帮助!