diff --git a/cs654/final-proj/BlobWars.java b/cs654/final-proj/BlobWars.java index 7195857..5b52dfb 100644 --- a/cs654/final-proj/BlobWars.java +++ b/cs654/final-proj/BlobWars.java @@ -14,6 +14,7 @@ public class BlobWars extends JFrame private BlobWarsPanel m_panel; private JTextField m_nameField; private JTextField m_serverField; + private JLabel m_statusLabel; private JButton m_connectButton; private EventHandler m_handler; private javax.swing.Timer m_timer; @@ -47,6 +48,10 @@ public class BlobWars extends JFrame add(m_connectButton = new JButton("Connect")); m_connectButton.addActionListener(m_handler); }}); + add(new JPanel() {{ + setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); + add(m_statusLabel = new JLabel()); + }}); // add(new Box.Filler(new Dimension(0, 0), // new Dimension(0, 10000), // new Dimension(10000, 10000))); @@ -234,6 +239,11 @@ public class BlobWars extends JFrame Integer shotid = Integer.parseInt(s.substring(7)); m_world.removeShot(shotid); } + else if (s.startsWith("WINNER:")) + { + String winner = s.substring(7); + m_statusLabel.setText(winner + " won the match!"); + } } } diff --git a/cs654/final-proj/BlobWarsServer.java b/cs654/final-proj/BlobWarsServer.java index e43590b..f6f14c0 100644 --- a/cs654/final-proj/BlobWarsServer.java +++ b/cs654/final-proj/BlobWarsServer.java @@ -13,6 +13,7 @@ public class BlobWarsServer private HashMap m_socketToPlayerName; private HashMap m_lastPlayers; private HashMap m_lastShots; + private int m_lastNumPlayersAlive; public static void main(String[] args) { @@ -22,6 +23,7 @@ public class BlobWarsServer public BlobWarsServer() { + m_lastNumPlayersAlive = 0; m_world = new BlobWarsWorld(); m_clientUpdates = new Vector(); m_socketToPlayerName = new HashMap(); @@ -198,6 +200,25 @@ public class BlobWarsServer } } + /* check number of players alive, possibly declare winner */ + Player alivePlayer = null; + int alivePlayers = 0; + for (Player p : players.values()) + { + if (p.health > 0.0) + { + alivePlayers++; + alivePlayer = p; + } + } + if (alivePlayers == 1 && alivePlayers < m_lastNumPlayersAlive) + { + /* game is over, alivePlayer won */ + sendLine += "WINNER:" + alivePlayer.name + "\n"; + m_world.resetPlayers(); + } + m_lastNumPlayersAlive = alivePlayers; + /* write updated info to each client */ synchronized (m_socketToPlayerName) { diff --git a/cs654/final-proj/BlobWarsWorld.java b/cs654/final-proj/BlobWarsWorld.java index 0295e30..eb2323b 100644 --- a/cs654/final-proj/BlobWarsWorld.java +++ b/cs654/final-proj/BlobWarsWorld.java @@ -24,6 +24,16 @@ public class BlobWarsWorld m_shots.clear(); } + public void resetPlayers() + { + for (Player p : m_players.values()) + { + p.health = 1.0; + p.dx = 0; + p.dy = 0; + } + } + public boolean playerExists(String name) { return m_players.containsKey(name);