用JavaGUI写一个英雄pk界面,双方各有三个英雄可以选择,可以插入相应的图片,三次普攻可以释放一次技能,写出输赢。
时间: 2023-12-04 18:06:03 浏览: 170
好的,下面是一个简单的Java GUI英雄PK界面的实现方案:
1. 创建英雄选择界面
首先,您需要使用JFrame和JPanel来创建英雄选择界面。在这个界面上,您可以选择三个英雄作为您的队伍。每个英雄都有一个图片和一个名字。您可以使用JLabel组件来显示这些信息。此外,您还需要为每个英雄提供一个按钮,以便用户可以选择它们。
```java
import java.awt.*;
import javax.swing.*;
public class HeroSelection extends JFrame {
private JPanel panel;
private JLabel hero1Label, hero2Label, hero3Label;
private JButton hero1Button, hero2Button, hero3Button;
public HeroSelection() {
setTitle("英雄选择");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 300);
setLocationRelativeTo(null);
panel = new JPanel();
panel.setLayout(new GridLayout(3, 2));
hero1Label = new JLabel("英雄1", JLabel.CENTER);
hero2Label = new JLabel("英雄2", JLabel.CENTER);
hero3Label = new JLabel("英雄3", JLabel.CENTER);
hero1Button = new JButton(new ImageIcon("hero1.png"));
hero2Button = new JButton(new ImageIcon("hero2.png"));
hero3Button = new JButton(new ImageIcon("hero3.png"));
panel.add(hero1Label);
panel.add(hero1Button);
panel.add(hero2Label);
panel.add(hero2Button);
panel.add(hero3Label);
panel.add(hero3Button);
add(panel);
setVisible(true);
}
}
```
2. 创建战斗界面
一旦您选择了您的英雄,您需要创建一个战斗界面。您可以使用JPanel来绘制一个背景图片,以便使界面看起来更加逼真。在默认情况下,每个英雄都有一定的生命值和攻击力。您可以使用JProgressBar组件来显示每个英雄的生命值,并使用JLabel组件显示他们的攻击力。此外,您还需要添加一个按钮,使用户能够进行普通攻击。每个英雄可以进行三次普通攻击以释放技能,并使用JLabel组件显示技能的名称和效果。
```java
import java.awt.*;
import javax.swing.*;
public class Battle extends JFrame {
private JPanel panel;
private JLabel hero1Label, hero2Label, hero1HP, hero2HP, hero1Attack, hero2Attack, skillName, skillEffect;
private JButton hero1Button, hero2Button, attackButton;
private JProgressBar hero1HPBar, hero2HPBar;
private int hero1HPValue = 100, hero2HPValue = 100;
private int hero1AttackValue = 10, hero2AttackValue = 10;
private int hero1AttackCount = 0, hero2AttackCount = 0;
public Battle() {
setTitle("英雄PK");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(800, 600);
setLocationRelativeTo(null);
panel = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
ImageIcon bg = new ImageIcon("bg.png");
g.drawImage(bg.getImage(), 0, 0, getWidth(), getHeight(), null);
}
};
panel.setLayout(null);
hero1Label = new JLabel("英雄1", JLabel.CENTER);
hero2Label = new JLabel("英雄2", JLabel.CENTER);
hero1HP = new JLabel("生命值:" + hero1HPValue, JLabel.CENTER);
hero2HP = new JLabel("生命值:" + hero2HPValue, JLabel.CENTER);
hero1Attack = new JLabel("攻击力:" + hero1AttackValue, JLabel.CENTER);
hero2Attack = new JLabel("攻击力:" + hero2AttackValue, JLabel.CENTER);
skillName = new JLabel("", JLabel.CENTER);
skillEffect = new JLabel("", JLabel.CENTER);
hero1Button = new JButton(new ImageIcon("hero1.png"));
hero1Button.setBounds(50, 100, 100, 100);
hero2Button = new JButton(new ImageIcon("hero2.png"));
hero2Button.setBounds(650, 100, 100, 100);
attackButton = new JButton("普通攻击");
attackButton.setBounds(350, 500, 100, 50);
hero1HPBar = new JProgressBar(0, 100);
hero1HPBar.setBounds(50, 50, 100, 20);
hero1HPBar.setValue(hero1HPValue);
hero2HPBar = new JProgressBar(0, 100);
hero2HPBar.setBounds(650, 50, 100, 20);
hero2HPBar.setValue(hero2HPValue);
panel.add(hero1Label);
panel.add(hero2Label);
panel.add(hero1HP);
panel.add(hero2HP);
panel.add(hero1Attack);
panel.add(hero2Attack);
panel.add(skillName);
panel.add(skillEffect);
panel.add(hero1Button);
panel.add(hero2Button);
panel.add(attackButton);
panel.add(hero1HPBar);
panel.add(hero2HPBar);
hero1Button.addActionListener(e -> {
hero1Label.setText("英雄1");
hero1HPValue = 100;
hero1HP.setText("生命值:" + hero1HPValue);
hero1AttackValue = 10;
hero1Attack.setText("攻击力:" + hero1AttackValue);
});
hero2Button.addActionListener(e -> {
hero2Label.setText("英雄2");
hero2HPValue = 100;
hero2HP.setText("生命值:" + hero2HPValue);
hero2AttackValue = 10;
hero2Attack.setText("攻击力:" + hero2AttackValue);
});
attackButton.addActionListener(e -> {
if (hero1AttackCount < 3) {
hero2HPValue -= hero1AttackValue;
hero2HPBar.setValue(hero2HPValue);
hero1AttackCount++;
if (hero1AttackCount == 3) {
skillName.setText("技能:火球术");
skillEffect.setText("对敌方造成大量伤害");
}
} else {
hero2HPValue -= hero1AttackValue * 2;
hero2HPBar.setValue(hero2HPValue);
hero1AttackCount = 0;
skillName.setText("");
skillEffect.setText("");
}
if (hero2HPValue <= 0) {
JOptionPane.showMessageDialog(this, "英雄1获胜!");
}
if (hero2AttackCount < 3) {
hero1HPValue -= hero2AttackValue;
hero1HPBar.setValue(hero1HPValue);
hero2AttackCount++;
if (hero2AttackCount == 3) {
skillName.setText("技能:飞剑术");
skillEffect.setText("对敌方造成大量伤害");
}
} else {
hero1HPValue -= hero2AttackValue * 2;
hero1HPBar.setValue(hero1HPValue);
hero2AttackCount = 0;
skillName.setText("");
skillEffect.setText("");
}
if (hero1HPValue <= 0) {
JOptionPane.showMessageDialog(this, "英雄2获胜!");
}
});
add(panel);
setVisible(true);
}
}
```
3. 实现游戏逻辑
在游戏过程中,您需要实现游戏的逻辑。每次攻击后,您需要计算剩余的生命值,并确定谁是胜利者。您可以使用JOptionPane组件来显示游戏结果。
在上面的代码中,我们使用两个计数器来记录每个英雄的攻击次数。当一个英雄攻击三次时,他将释放一个技能,并对敌方造成更多的伤害。如果一个英雄的生命值降至零以下,他将输掉比赛,并弹出一个消息框显示比赛结果。
现在,您可以尝试运行这个程序,并选择您的英雄进行战斗。
阅读全文