メインクラス、バトルクラス、モンスタークラス、プレイヤークラスなどの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();
}
}
...
}
編集:私が何を求めているのかがより明確になるように、ここでコードを単純化しようとしました。