我正在制作一个拥有主要类,战斗类,怪物类,玩家类等的Java游戏......我在主类框架上显示了统计数据。按下按钮可创建新的战斗框架,同时显示统计数据。在战斗之后,统计数据是不同的(例如,玩家的健康点低于被怪物击中之前的健康点)。我需要统计数据中的这些变化在战斗框架消失后反映在主框架上。
告诉主班战斗结束并刷新统计数据的最佳方法是什么?代码如下。显然,这是一项正在进行的工作,还有一些其他不相关的课程。
开始战斗的主类的一部分(即创建一个新的战斗对象,即JFrame):
public class DarkWorld extends JFrame implements ActionListener
{
...
public DarkWorld()
{
...
public void createInfoLabel()
{
infoLabel.setText("<html>Player: " + DarkWorld.user.getPlayerName()
+ "<br>Health: " + DarkWorld.user.getHealth()
+ "<br>Attack Damage: " + DarkWorld.user.getAttackDamage()
+ "<br>Level: " + DarkWorld.user.getLevel()
+ "<br>Experience: " + DarkWorld.user.getExperience());
}
...
if(source == monsterButton)
{
BattleFrame battle = new BattleFrame();
final int WIDTH = 700;
final int HEIGHT = 500;
battle.setSize(WIDTH, HEIGHT);
battle.setVisible(true);
}
...
}
战斗部分:
...
public class BattleFrame extends JFrame implements ActionListener
{
Monster newMonster = new Monster();
...
public BattleFrame()
...
public void displayStats()
{
monsterLabel.setText("<html>Type: " + newMonster.getMonsterName()
+ "<br>Health: " + newMonster.getHealth()
+ "<br>Attack: " + newMonster.getAttackName()
+ "<br>Attack Damage: " + newMonster.getAttackDamage());
playerLabel.setText("<html>Player: " + DarkWorld.user.getPlayerName()
+ "<br>Health: " + DarkWorld.user.getHealth()
+ "<br>Attack Damage: " + DarkWorld.user.getAttackDamage()
+ "<br>Level: " + DarkWorld.user.getLevel()
+ "<br>Experience: " + DarkWorld.user.getExperience());
}
...
if(newMonster.getHealth() <= 0)
{
...
JOptionPane.showMessageDialog(null, "You killed the monster! You found a " + newItem.getItemName()
+ ". It has been added to your inventory.");
dispose();
}
if(DarkWorld.user.getHealth() <= 0)
{
//if player dies (health reaches zero), the game is over - need to make game end
displayStats();
JOptionPane.showMessageDialog(null, "The monster killed you!");
dispose();
}
}
...
}
编辑:试图简化这里的代码,以便更清楚我要问的是什么。
答案 0 :(得分:0)
为什么不在主类中创建方法:
public void updateStats() { /*update the stats*/ }
然后,在你的战斗类中,当战斗结束时,你只需要调用该方法。另外,我认为您可能会发现在项目中实现Singleton模式很有用,因为它听起来总是只有一个战斗类。
您可能还想将所有战斗逻辑放入一个类中。我得到的最好的编程建议是从GUI中分离逻辑。
或者,你可能只想忽略我所说的一切,因为我只有13岁而且我用C#编程,而不是Java。
答案 1 :(得分:0)
我可以建议你不要这样做,而是让统计显示屏听 到主要玩家对象。当主要玩家对象的某个统计数据发生变化时 然后统计屏幕可以自行更新。
...
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;
...
public class User {
private List<PropertyChangeListener> propertyListeners;
... add, and remove listener methods ...
public void setHitPoints(int newValue){
PropertyChangeEvent event = new PropertyChangeEvent(this, "hitPoints", myHitpoints, newValue);
myHitpoints = newValue;
for (PropertyChangeListener listener : propertyListeners){
listener.propertyChange(event);
}
}