/** This class is responsible for the StartFrame * @author Kristof Friedrichsen * @author Ryan Mann * @author Bob Free * @author Pat O'Neill * @version December 15, 2006 **/ package chutesladder; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.border.EtchedBorder; import javax.swing.border.TitledBorder; public class StartFrame extends JFrame implements Runnable { JPanel lobbyPanel = new JPanel(); JPanel topPanel = new JPanel(); JPanel bottomPanel = new JPanel(); JLabel nameLabel = new JLabel("Please type in your name:"); JTextArea playersBox = new JTextArea(5,18); JTextField nameText = new JTextField(15); JButton loginButton = new JButton("Login"); JButton startButton = new JButton("Ready to start game"); JButton quitButton = new JButton("Leave game"); public static String Ghost = "moxie.oswego.edu"; public static Integer Gport = 2698; public static BufferedReader Gin; public static PrintWriter Gout; protected Thread Glistener; public String playerArray []= new String [4]; public int numberOfPlayers=0; public int count = 0; public int playernumber = 0; public String playername =""; public int Startcounter=0; public static CaL frame; public StartFrame(String title, InputStream Giin, OutputStream Giout) { super(title); this.Gin = new BufferedReader(new InputStreamReader(Giin)); this.Gout = new PrintWriter( new OutputStreamWriter(Giout)); Glistener = new Thread(this); Glistener.start(); playerArray [0] = "Guest 1"; playerArray [1] = "Guest 2"; playerArray [2] = "Guest 3"; playerArray [3] = "Guest 4"; setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle("Lobby: Two to four players."); topPanel.setLayout(new FlowLayout()); bottomPanel.setLayout(new FlowLayout()); lobbyPanel.setLayout(new BorderLayout()); TitledBorder loggedInPlayersBorder = new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED), "Logged-in players"); playersBox.setBorder(loggedInPlayersBorder); playersBox.setEditable(false); nameText.addKeyListener( new KeyAdapter() { public void keyPressed(KeyEvent e) { if(e.getKeyCode() == KeyEvent.VK_ENTER && loginButton.isEnabled()) { //code for signing in the server System.out.println("Name: "+nameText.getText()); playername = nameText.getText(); Gout.println("5"+nameText.getText()); Gout.flush(); loginButton.setEnabled(false); } } } ); loginButton.addMouseListener( new MouseAdapter() { public void mouseClicked(MouseEvent e) { if(e.getButton() == 1 && loginButton.isEnabled()) { //code for signing in the server System.out.println("Name: "+nameText.getText()); playername = nameText.getText(); Gout.println("5"+playername); Gout.flush(); loginButton.setEnabled(false); } } }); startButton.addMouseListener( new MouseAdapter() { public void mouseClicked(MouseEvent e) { if(e.getButton() == 1) { if ( count == 1 ) { JOptionPane tooFew = new JOptionPane(); tooFew.setSize(100,100); tooFew.setVisible(true); tooFew.showMessageDialog(null,"Not enough Players, "+playerArray[playernumber]); System.exit(0); } // end if ( count == 1 ) else { Socket t; try { t = new Socket(Ghost, Gport); frame = new CaL(playerArray[playernumber], t.getInputStream(), t.getOutputStream(),playernumber); setVisible(false); CaL.setPlayerInformation(playernumber,playerArray[0],playerArray[1],playerArray[2],playerArray[3], count); Gout.close(); Gin.close(); } catch (UnknownHostException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } } } }); quitButton.addMouseListener( new MouseAdapter() { public void mouseClicked(MouseEvent e) { if(e.getButton() == 1) { //code for signing off the server System.exit(0); } } }); topPanel.add(nameLabel); topPanel.add(nameText); topPanel.add(loginButton); bottomPanel.add(playersBox); bottomPanel.add(startButton); bottomPanel.add(quitButton); lobbyPanel.add(BorderLayout.NORTH, topPanel); lobbyPanel.add(BorderLayout.SOUTH, bottomPanel); setLocationRelativeTo(null); add(lobbyPanel); pack(); setVisible(true); } public void run() { try { while (true) { String line = Gin.readLine(); String playerInput = line.substring(1); if (!playerInput.equals("")) { playerArray [count] = playerInput; } System.out.println("Player Input from server "+playerInput); playersBox.append(playerArray[count]+" has joined.\n"); if (playername.equals(playerInput)) { playernumber = count; } count++; } } catch (IOException ex) { ex.printStackTrace(); } finally { Glistener = null; validate(); Gout.close(); } } public static void StartNewGame() throws UnknownHostException, IOException { //frame.setVisible(false); Socket z = new Socket(Ghost, Gport); StartFrame Game = new StartFrame("login"+ Ghost + ":" + Gport, z.getInputStream(), z.getOutputStream()); } public static void main(String[]args) throws UnknownHostException, IOException { Socket z = new Socket(Ghost, Gport); StartFrame Game = new StartFrame("login"+ Ghost + ":" + Gport, z.getInputStream(), z.getOutputStream()); } }