// Constructor connection receiving a socket number public ClientGUI(String host, int port, int udpPort) { super("Clash of Clans"); defaultPort = port; defaultUDPPort = udpPort; defaultHost = host; // the server name and the port number JPanel serverAndPort = new JPanel(new GridLayout(1, 5, 1, 3)); tfServer = new JTextField(host); tfPort = new JTextField("" + port); tfPort.setHorizontalAlignment(SwingConstants.RIGHT); // CHAT COMPONENTS chatStatus = new JLabel("Please login first", SwingConstants.LEFT); chatField = new JTextField(18); chatField.setBackground(Color.WHITE); JPanel chatControls = new JPanel(); chatControls.add(chatStatus); chatControls.add(chatField); chatControls.setBounds(0, 0, 200, 50); chatArea = new JTextArea("Welcome to the Chat room\n", 80, 80); chatArea.setEditable(false); JScrollPane jsp = new JScrollPane(chatArea); jsp.setBounds(0, 50, 200, 550); JPanel chatPanel = new JPanel(null); chatPanel.setSize(1000, 600); chatPanel.add(chatControls); chatPanel.add(jsp); // LOGIN COMPONENTS mainLogin = new MainPanel(); mainLogin.add(new JLabel("Main Login")); usernameField = new JTextField("user", 15); passwordField = new JTextField("password", 15); login = new CButton("Login"); login.addActionListener(this); sideLogin = new SidePanel(new FlowLayout(FlowLayout.LEFT)); sideLogin.add(usernameField); sideLogin.add(passwordField); sideLogin.add(login); // MAIN MENU COMPONENTS mainMenu = new MainPanel(); mmLabel = new JLabel("Main Menu"); timer = new javax.swing.Timer(1000, this); mainMenu.add(mmLabel); sideMenu = new SidePanel(new FlowLayout(FlowLayout.LEFT)); cmButton = new CButton("Customize Map"); tmButton = new CButton("Troop Movement"); gsButton = new CButton("Game Start"); logout = new CButton("Logout"); cmButton.addActionListener(this); tmButton.addActionListener(this); gsButton.addActionListener(this); logout.addActionListener(this); sideMenu.add(cmButton); // sideMenu.add(tmButton); sideMenu.add(gsButton); sideMenu.add(logout); // CM COMPONENTS mainCM = new MainPanel(new GridLayout(mapSize, mapSize)); tiles = new Tile[mapSize][mapSize]; int tileSize = mainCM.getWidth() / mapSize; for (int i = 0; i < mapSize; i++) { tiles[i] = new Tile[mapSize]; for (int j = 0; j < mapSize; j++) { tiles[i][j] = new Tile(i, j); tiles[i][j].setPreferredSize(new Dimension(tileSize, tileSize)); tiles[i][j].setSize(tileSize, tileSize); tiles[i][j].addActionListener(this); if ((i + j) % 2 == 0) tiles[i][j].setBackground(new Color(102, 255, 51)); else tiles[i][j].setBackground(new Color(51, 204, 51)); mainCM.add(tiles[i][j]); } } sideCM = new SidePanel(new FlowLayout(FlowLayout.LEFT)); cmBack = new CButton("Main Menu"); cmBack.setSize(150, 30); cmBack.setPreferredSize(new Dimension(150, 30)); cmBack.addActionListener(this); sideCM.add(cmBack); // TM COMPONENTS mainTM = new MainPanel(null); mapTM = new Map(600); mapTM.setPreferredSize(new Dimension(600, 600)); mapTM.setSize(600, 600); mapTM.setBounds(0, 0, 600, 600); mainTM.add(mapTM); sideTM = new SidePanel(new FlowLayout(FlowLayout.LEFT)); tmBack = new CButton("Main Menu"); tmBack.setSize(150, 30); tmBack.setPreferredSize(new Dimension(150, 30)); tmBack.addActionListener(this); sideTM.add(tmBack); JRadioButton button; ButtonGroup group; ub = new ArrayList<JRadioButton>(); group = new ButtonGroup(); button = new JRadioButton("Barbarian"); button.addActionListener(this); ub.add(button); sideTM.add(button); group.add(button); button = new JRadioButton("Archer"); button.addActionListener(this); ub.add(button); sideTM.add(button); group.add(button); createBuildings(); bb = new ArrayList<JRadioButton>(); group = new ButtonGroup(); JRadioButton removeButton = new JRadioButton("Remove Building"); bb.add(removeButton); sideCM.add(removeButton); group.add(removeButton); for (int i = 0; i < bList.size(); i++) { button = new JRadioButton(bList.get(i).getName() + '-' + bList.get(i).getQuantity()); bb.add(button); sideCM.add(button); group.add(button); } mainPanels = new MainPanel(new CardLayout()); mainPanels.add(mainLogin, "Login"); mainPanels.add(mainMenu, "Menu"); mainPanels.add(mainCM, "CM"); mainPanels.add(mainTM, "TM"); sidePanels = new SidePanel(new CardLayout()); sidePanels.add(sideLogin, "Login"); sidePanels.add(sideMenu, "Menu"); sidePanels.add(sideCM, "CM"); sidePanels.add(sideTM, "TM"); JPanel mainPanel = new JPanel(null); mainPanel.setSize(1000, 600); mainPanel.add(sidePanels); mainPanel.add(mainPanels); mainPanel.add(chatPanel); add(mainPanel, BorderLayout.CENTER); try { setIconImage(ImageIO.read(new File("images/logo.png"))); } catch (IOException exc) { exc.printStackTrace(); } setDefaultCloseOperation(EXIT_ON_CLOSE); setSize(1000, 600); setVisible(true); setResizable(false); chatField.requestFocus(); }
public void actionPerformed(ActionEvent e) { Object o = e.getSource(); for (JRadioButton u : ub) { if (o == u) { mapTM.setUnitType(u.getText()); System.out.println("Set unit type - " + u.getText()); return; } } if (o == timer) { /* mmLabel.setText("Main Menu ("+(cdTime--)+")"); if(cdTime == 0){ timer.stop(); gsButton.setText("Game Start"); mmLabel.setText("Main Menu"); ArrayList<Building> bArr = new ArrayList<Building>(); String temp = "Elixir Collector-24,8-960|Elixir Collector-31,8-960|Gold Mine-17,10-960|Elixir Collector-25,21-960|Elixir Collector-11,22-960"; String[] bs = temp.split("\\|"); for(String b : bs){ String[] bParts = b.split("-"); String[] cParts = bParts[1].split(","); int x = Integer.parseInt(cParts[0].trim()); int y = Integer.parseInt(cParts[1].trim()); Building tb = new Building(bParts[0], new Coordinate(x,y)); tb.setHp(Integer.parseInt(bParts[2].trim())); bArr.add(tb); } mapTM.setBuildings(bArr); switchCards("TM"); } */ return; } if (o == gsButton) { if (timer.isRunning()) { // timer.stop(); gsButton.setText("Game Start"); mmLabel.setText("Main Menu"); // sends the leave command client.sendUDP("leave~" + unameUDP); return; } // sends the joinlobby command client.sendUDP("joinlobby~" + unameUDP); // gsButton.setText("Game Stop"); String serverResp = client.receiveUDP(); if (serverResp.trim().equals("false")) { // place false handler here } else { String[] enemies = serverResp.trim().split(","); ArrayList<Building> bArr = new ArrayList<Building>(); String mapConfig = getBaseConfig(enemies[0]); String[] bs = mapConfig.split("\\|"); for (String b : bs) { String[] bParts = b.split("-"); String[] cParts = bParts[1].split(","); int x = Integer.parseInt(cParts[0].trim()); int y = Integer.parseInt(cParts[1].trim()); Building tb = new Building(bParts[0], new Coordinate(x, y)); tb.setHp(Integer.parseInt(bParts[2].trim())); bArr.add(tb); } mapTM.setBuildings(bArr); switchCards("TM"); } // System.out.println(serverResp); // cdTime = 10; // timer.start(); return; } if (o == logout) { client.sendMessage(new ChatMessage(ChatMessage.LOGOUT, "")); chatArea.setText(""); switchCards("Login"); return; } if (o == cmButton) { String baseConfig = getBaseConfig(); System.out.println("base config: " + baseConfig); for (int i = 0; i < mapSize; i++) { for (int j = 0; j < mapSize; j++) { tiles[i][j].setValue(""); } } if (!baseConfig.equals("")) { String[] bs = baseConfig.split("\\|"); for (String b : bs) { String[] bParts = b.split("-"); String[] cParts = bParts[1].split(","); int x = Integer.parseInt(cParts[0].trim()); int y = Integer.parseInt(cParts[1].trim()); int index = 0; for (int i = 0; i < bb.size(); i++) { if (bb.get(i).getText().split("-")[0].trim().equals(bParts[0])) { index = i; break; } } insertBuilding(y, x, index); } } switchCards("CM"); return; } if (o == tmButton) { ArrayList<Building> bArr = new ArrayList<Building>(); for (int i = 0; i < 40; i++) { for (int j = 0; j < 40; j++) { if (tiles[i][j].getValue().equals("") || tiles[i][j].getValue().contains("-")) { continue; } // weird part here bArr.add(new Building(tiles[i][j].getValue(), new Coordinate(j, i))); } } mapTM.setBuildings(bArr); switchCards("TM"); return; } // if it the who is in button if (o == whoIsIn) { client.sendMessage(new ChatMessage(ChatMessage.WHOISIN, "")); return; } if (o == cmBack) { ArrayList<Building> bArr = new ArrayList<Building>(); for (int i = 0; i < 40; i++) { for (int j = 0; j < 40; j++) { if (tiles[i][j].getValue().equals("") || tiles[i][j].getValue().contains("-")) { continue; } // weird part here bArr.add(new Building(tiles[i][j].getValue(), new Coordinate(j, i))); } } String temp = "mapdata~" + unameUDP + "~"; int tileCount = 40; int dim = 600; int tileDim = (int) (dim / tileCount); int counter = 0; for (Building b : bArr) { int x, y, hp; x = b.getPos().getX() / tileDim; y = b.getPos().getY() / tileDim; hp = b.getHp(); temp += b.getName() + "-" + x + "," + y + "-" + hp + "|"; counter += 1; } if (counter > 0) { temp = temp.substring(0, temp.length() - 1); // removes the last '|' } else { temp += "none"; } client.sendUDP(temp); // allows saving of the current state of the map into the user's account switchCards("Menu"); return; } if (o == tmBack) { switchCards("Menu"); return; } for (int i = 0; i < 40; i++) { for (int j = 0; j < 40; j++) { if (o == tiles[i][j]) { for (int k = 0; k < bb.size(); k++) { if (bb.get(k).isSelected()) { if (bb.get(k).getText().equals("Remove Building")) { removeBuilding(i, j); return; } insertBuilding(i, j, k); // JOptionPane.showMessageDialog(null, bb.get(k).getText()); return; } } // JOptionPane.showMessageDialog(null, "i-"+i+" j-"+j); return; } } } // ok it is coming from the JTextField if (connected) { // just have to send the message client.sendMessage(new ChatMessage(ChatMessage.MESSAGE, chatField.getText())); chatField.setText(""); return; } if (o == login) { // ok it is a connection request String username = usernameField.getText().trim(); String password = passwordField.getText().trim(); // empty username ignore it if (username.length() == 0) return; // empty serverAddress ignore it String server = tfServer.getText().trim(); if (server.length() == 0) return; // empty or invalid port numer, ignore it String portNumber = tfPort.getText().trim(); if (portNumber.length() == 0) return; int port = 0; try { port = Integer.parseInt(portNumber); } catch (Exception en) { return; // nothing I can do if port number is not valid } // try creating a new Client with GUI client = new Client(server, port, username, password, this); // test if we can start the Client if (!client.start()) return; unameUDP = username; switchCards("Menu"); // fetching of the base_config string from the database chatField.setText(""); chatArea.setText(""); } }