项目代码实现
首先,Esc界面的模块要弄的功能是在游戏的运行过程中,玩家能过随时按下Esc键实现弹窗,弹出的窗口中包含了玩家的基本信息,如Hp,Mp,人物的头像等等,然后当玩家再次按下Esc键时,该窗口能够关闭,窗口中还应该出现一个按钮,当晚间按下按钮时,能够退出游戏。
为了实现这个功能,首先得用Swing 弄出一个框架来,然后在框架里面添加一个面板,然后在添加许多个JLabel分别显示角色的信息。然后用setVisible(true)使框架显示出来;为了实现按下一次显示框架,第二次按下隐藏框架。声明一个 i 变量 当i变量为1时,隐藏框架并掷i=0;当i变量为0时,隐藏框架并掷i=1;以下是代码实现 (将EscAction设为自定义类便于代码的复用)
class EscAction implements KeyListener{
int i=0;
Player p;
JFrame jf;
JFrame f=new JFrame("角色状态");
public EscAction(Player player,JFrame frame){
p=player;
jf=frame;
}
@Override
public void keyPressed(KeyEvent e){
// TODO Auto-generated method stub
if(e.getKeyCode() == KeyEvent.VK_ESCAPE){
if(i==0)
{ try {
FileInputStream fis=new FileInputStream("G:\\My_RPG_GAME\\My_RPG_GAME\\Player.txt");
DataInputStream dis = new DataInputStream(fis);
try {
p.level1=dis.readInt(); //读取文本信息,实现数据的更改与保存
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
f.setSize(400,600);
f.setLocation(400,150);
int Maxhp=30+(10+p.level1*5)*2;
int Maxmp=20+(8+p.level1*3)*2+Maxhp/2;
ImageIcon iconplayer=new ImageIcon("主角.png");
JLabel name=new JLabel(" 名称: "+p.name);
JLabel HP=new JLabel(" HP: "+Maxhp);
JLabel MP=new JLabel(" MP: "+Maxmp);
JLabel Strength=new JLabel(" 力量: "+(10+p.level1*5));
JLabel Intelligence=new JLabel(" 智力: "+(8+p.level1*3));
JLabel Attact=new JLabel(" 攻击力: "+(int)((10+p.level1*5) * 1.5));
JLabel Defence=new JLabel(" 防御力: "+(int)((10+p.level1*5 +10*p.level1) * 0.5 ));
JLabel Level=new JLabel(" 等级: "+p.level1);
JLabel Wonpen=new JLabel(" 武器: null"); //后续添加
JLabel Equipment=new JLabel(" 防具: null");
JLabel Jweelry=new JLabel(" 首饰: null");
JButton Exit=new JButton("离开游戏");
JPanel jp=new JPanel();
jp.setLayout(new GridLayout(13,1));
jp.add(new JLabel(iconplayer));
jp.add(name);
jp.add(HP);
jp.add(MP);
jp.add(Strength);
jp.add(Intelligence);
jp.add(Attact);
jp.add(Defence);
jp.add(Level);
jp.add(Wonpen);
jp.add(Equipment);
jp.add(Jweelry);
jp.add(Exit);
f.setContentPane(jp);
f.setFocusableWindowState(false);
f.setVisible(true);
i=1;
f.setAlwaysOnTop(true);
exitButton exit=new exitButton(jf,f);//其他功能
Exit.addActionListener(exit);
}
else if(i==1)
{
f.setVisible(false);
i=0;
}
}
}//由于自学Swing不久,因此代码必有有漏洞之处,见谅