用java编写一个华容道程序,要求实现GUI系统
时间: 2024-02-13 21:02:15 浏览: 17
好的,下面是一个简单的华容道程序GUI界面的实现,希望能对您有所帮助:
1. 创建一个名为`HuarongDaoGUI`的Java类,并继承`JFrame`类。
2. 在`HuarongDaoGUI`类中创建一个JPanel,用来存放游戏面板。
3. 在JPanel中绘制游戏面板,可以使用`Graphics`类来绘制游戏板块。
4. 创建一个`HuarongDao`类用于实现华容道游戏逻辑,包括移动游戏板块、检查游戏是否完成等。
5. 在`HuarongDaoGUI`类中添加按钮和事件监听器,用于控制游戏的移动。
6. 在`HuarongDaoGUI`类中添加菜单栏和菜单项,用于实现游戏的开始、暂停、重置等功能。
下面是实现华容道GUI的代码示例:
```java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class HuarongDaoGUI extends JFrame {
private JPanel boardPanel;
private JButton upButton;
private JButton downButton;
private JButton leftButton;
private JButton rightButton;
private JButton startButton;
private JButton pauseButton;
private JButton resetButton;
private JMenuBar menuBar;
private JMenu gameMenu;
private JMenuItem startMenuItem;
private JMenuItem pauseMenuItem;
private JMenuItem resetMenuItem;
private HuarongDao hrd;
public HuarongDaoGUI() {
setTitle("华容道游戏");
setSize(500, 500);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
boardPanel = new JPanel();
boardPanel.setBackground(Color.WHITE);
add(boardPanel, BorderLayout.CENTER);
upButton = new JButton("上移");
downButton = new JButton("下移");
leftButton = new JButton("左移");
rightButton = new JButton("右移");
startButton = new JButton("开始");
pauseButton = new JButton("暂停");
resetButton = new JButton("重置");
upButton.addActionListener(new MoveListener("up"));
downButton.addActionListener(new MoveListener("down"));
leftButton.addActionListener(new MoveListener("left"));
rightButton.addActionListener(new MoveListener("right"));
startButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
hrd.start();
}
});
pauseButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
hrd.pause();
}
});
resetButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
hrd.reset();
}
});
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new FlowLayout());
buttonPanel.add(upButton);
buttonPanel.add(downButton);
buttonPanel.add(leftButton);
buttonPanel.add(rightButton);
buttonPanel.add(startButton);
buttonPanel.add(pauseButton);
buttonPanel.add(resetButton);
add(buttonPanel, BorderLayout.SOUTH);
menuBar = new JMenuBar();
gameMenu = new JMenu("游戏");
startMenuItem = new JMenuItem("开始");
pauseMenuItem = new JMenuItem("暂停");
resetMenuItem = new JMenuItem("重置");
startMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
hrd.start();
}
});
pauseMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
hrd.pause();
}
});
resetMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
hrd.reset();
}
});
gameMenu.add(startMenuItem);
gameMenu.add(pauseMenuItem);
gameMenu.add(resetMenuItem);
menuBar.add(gameMenu);
setJMenuBar(menuBar);
hrd = new HuarongDao(this);
}
public JPanel getBoardPanel() {
return boardPanel;
}
public void setBoardPanel(JPanel boardPanel) {
this.boardPanel = boardPanel;
}
public static void main(String[] args) {
HuarongDaoGUI gui = new HuarongDaoGUI();
gui.setVisible(true);
}
class MoveListener implements ActionListener {
private String direction;
public MoveListener(String direction) {
this.direction = direction;
}
public void actionPerformed(ActionEvent e) {
hrd.move(direction);
}
}
}
class HuarongDao {
private HuarongDaoGUI gui;
private int[][] board;
public HuarongDao(HuarongDaoGUI gui) {
this.gui = gui;
initBoard();
drawBoard();
}
public void initBoard() {
board = new int[5][4];
board[0][0] = 1;
board[0][1] = 1;
board[0][2] = 1;
board[1][0] = 1;
board[1][1] = 0;
board[1][2] = 1;
board[2][0] = 1;
board[2][1] = 0;
board[2][2] = 1;
board[3][0] = 1;
board[3][1] = 0;
board[3][2] = 0;
board[4][0] = 1;
board[4][1] = 1;
board[4][2] = 0;
}
public void drawBoard() {
JPanel boardPanel = gui.getBoardPanel();
boardPanel.removeAll();
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 4; j++) {
int x = j * 100;
int y = i * 100;
int w = 100;
int h = 100;
if (board[i][j] == 1) {
boardPanel.add(new Block(x, y, w, h));
}
}
}
boardPanel.revalidate();
boardPanel.repaint();
}
public void move(String direction) {
int[][] newBoard = new int[5][4];
if (direction.equals("up")) {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 4; j++) {
if (board[i][j] == 1) {
if (i > 0 && board[i-1][j] == 0) {
newBoard[i-1][j] = 1;
} else {
newBoard[i][j] = 1;
}
}
}
}
} else if (direction.equals("down")) {
for (int i = 4; i >= 0; i--) {
for (int j = 0; j < 4; j++) {
if (board[i][j] == 1) {
if (i < 4 && board[i+1][j] == 0) {
newBoard[i+1][j] = 1;
} else {
newBoard[i][j] = 1;
}
}
}
}
} else if (direction.equals("left")) {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 4; j++) {
if (board[i][j] == 1) {
if (j > 0 && board[i][j-1] == 0) {
newBoard[i][j-1] = 1;
} else {
newBoard[i][j] = 1;
}
}
}
}
} else if (direction.equals("right")) {
for (int i = 0; i < 5; i++) {
for (int j = 3; j >= 0; j--) {
if (board[i][j] == 1) {
if (j < 3 && board[i][j+1] == 0) {
newBoard[i][j+1] = 1;
} else {
newBoard[i][j] = 1;
}
}
}
}
}
board = newBoard;
drawBoard();
}
public void start() {
System.out.println("开始游戏");
}
public void pause() {
System.out.println("暂停游戏");
}
public void reset() {
initBoard();
drawBoard();
}
}
class Block extends JComponent {
private int x;
private int y;
private int w;
private int h;
public Block(int x, int y, int w, int h) {
this.x = x;
this.y = y;
this.w = w;
this.h = h;
}
public void paintComponent(Graphics g) {
g.setColor(Color.RED);
g.fillRect(x, y, w, h);
}
}
```
这是一个简单的华容道GUI程序,您可以根据需要进行修改和优化。