gvsu/cs654/final-proj/BlobWars.java
josh 45611181de updates pushing while Blobs moving
git-svn-id: svn://anubis/gvsu@98 45c1a28c-8058-47b2-ae61-ca45b979098e
2008-04-13 20:21:06 +00:00

188 lines
5.8 KiB
Java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;
import java.net.*;
import java.io.*;
public class BlobWars extends JFrame
{
private BlobWarsWorld m_world;
private BlobWarsPanel m_panel;
private JTextField m_nameField;
private JTextField m_serverField;
private JButton m_connectButton;
private EventHandler m_handler;
private javax.swing.Timer m_timer;
private Socket m_socket;
private BufferedWriter m_writer;
public BlobWars()
{
super("Josh's Blob Wars Game for CS654");
m_world = new BlobWarsWorld();
/* TODO: REMOVE */
m_world.addPlayer("Alice");
m_world.getPlayer("Alice").health = 0.8;
m_world.addPlayer("Bob the Bad");
m_world.getPlayer("Bob the Bad").health = 0.6;
m_world.addPlayer("Jo");
m_world.getPlayer("Jo").health = 0.4;
m_world.addPlayer("Triskaidekaphobia");
m_world.getPlayer("Triskaidekaphobia").health = 0.2;
/* END TODO */
m_handler = new EventHandler();
m_panel = new BlobWarsPanel(this, m_world);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setResizable(false);
getContentPane().add(new JPanel() {{
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
add(new JPanel() {{
setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
add(new JLabel("Player name: "));
add(m_nameField = new JTextField());
}});
add(new JPanel() {{
setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
add(new JLabel("Server: "));
add(m_serverField = new JTextField());
m_serverField.addKeyListener(m_handler);
add(m_connectButton = new JButton("Connect"));
m_connectButton.addActionListener(m_handler);
}});
// add(new Box.Filler(new Dimension(0, 0),
// new Dimension(0, 10000),
// new Dimension(10000, 10000)));
// add(new JPanel() {{
// setLayout(new BorderLayout());
add(m_panel);
m_panel.addKeyListener(m_handler);
// }});
}});
setSize(getPreferredSize());
setVisible(true);
}
public String getPlayerName()
{
return m_nameField.getText();
}
private void doConnect()
{
try {
m_socket = new Socket(m_serverField.getText(), BlobWarsServer.PORT);
m_writer = new BufferedWriter(
new OutputStreamWriter(m_socket.getOutputStream()));
m_writer.write("NAME:" + m_nameField.getText() + "\n");
m_writer.flush();
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null,
"Error connecting: " + e.getMessage());
return;
}
m_connectButton.setEnabled(false);
m_nameField.setEnabled(false);
m_serverField.setEnabled(false);
m_panel.requestFocusInWindow();
(new Thread(new ClientHandler())).start();
m_timer = new javax.swing.Timer(50, m_handler);
}
private class ClientHandler implements Runnable
{
public void run()
{
BufferedReader br;
try {
br = new BufferedReader(
new InputStreamReader(m_socket.getInputStream()));
} catch (Exception e) {
e.printStackTrace();
return;
}
/* main client loop */
for (;;)
{
String line = "";
try {
line = br.readLine();
} catch (Exception e) {
e.printStackTrace();
break;
}
if (line == null)
break;
System.out.println("GOT LINE: " + line);
}
/* TODO: disconnected logic */
System.out.println("client disconnected");
// SwingUtilities .... doDisconnect();
}
}
private class EventHandler implements ActionListener, KeyListener
{
public void actionPerformed(ActionEvent e)
{
if (e.getSource() == m_connectButton)
{
doConnect();
}
}
public void keyPressed(KeyEvent e)
{
if (e.getSource() == m_panel)
{
try {
switch (e.getKeyCode())
{
case KeyEvent.VK_UP:
m_writer.write("UP\n");
m_writer.flush();
break;
case KeyEvent.VK_DOWN:
m_writer.write("DOWN\n");
m_writer.flush();
break;
case KeyEvent.VK_LEFT:
m_writer.write("LEFT\n");
m_writer.flush();
break;
case KeyEvent.VK_RIGHT:
m_writer.write("RIGHT\n");
m_writer.flush();
break;
}
} catch (Exception ex) {}
}
else if (e.getSource() == m_serverField)
{
if (e.getKeyCode() == KeyEvent.VK_ENTER)
{
doConnect();
}
}
}
public void keyReleased(KeyEvent e)
{
}
public void keyTyped(KeyEvent e)
{
}
}
public static void main(String[] args)
{
new BlobWars();
}
}