package server;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import card.Card;
import player.BasePlayer;
public class SwingClientGame extends ClientGame {
//UI STUFF
JFrame mainFrame;
JPanel gamePanel;
JPanel hintPanel;
JPanel flashPanel;
JPanel buttonPanel;
JPanel deckPanel;
JLabel[][] deckUI;
JButton hintButton;
JLabel[] hintUI;
JLabel[] flashUI;
JPanel[] playersUI;
GridBagConstraints layoutConstr;
Font font;
public static void main(String[] args){
new SwingClientGame();
}
@Override
protected void createUI() {
layoutConstr = new GridBagConstraints();
mainFrame = new JFrame("Hanabi");
mainFrame.setSize(1000, 650);
mainFrame.setLocation(0, 0);
mainFrame.setLayout(new GridBagLayout());
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.getContentPane().setBackground(Color.black);
mainFrame.setVisible(true);
gamePanel = new JPanel();
gamePanel.setLayout(new BoxLayout(gamePanel, BoxLayout.Y_AXIS));
GridLayout deckLayout = new GridLayout(COLORS, 5);
deckPanel = new JPanel(deckLayout);
deckPanel.setBackground(Color.black);
deckUI = new JLabel[COLORS][5];
for(int i=0; i<COLORS; ++i){
for(int j=0; j<5; ++j){
JLabel tmp = new JLabel("Not set");
tmp.setBackground(Color.black);
tmp.setForeground(Color.white);
tmp.setFont(font);
tmp.setHorizontalAlignment(JLabel.CENTER);
deckUI[i][j] = tmp;
deckPanel.add(deckUI[i][j]);
}
}
hintPanel = new JPanel();
hintPanel.setBackground(Color.black);
flashPanel = new JPanel();
flashPanel.setBackground(Color.black);
buttonPanel = new JPanel();
buttonPanel.setBackground(Color.black);
hintButton = new JButton("Hint");
hintButton.setFont(font);
buttonPanel.add(hintButton);
//first empty cell
layoutConstr.gridx = 0;
layoutConstr.gridy = 0;
layoutConstr.weightx = 0.2;
layoutConstr.weighty = 0.1;
layoutConstr.gridwidth = 1;
mainFrame.add(new JPanel(), layoutConstr);
layoutConstr.gridx = 1;
if(nrOfPlayers < 5){
layoutConstr.weightx = 0.6;
layoutConstr.gridwidth = 1;
int index = (nrOfPlayers == 2) ? 1 : 2;
//mainFrame.add(((SwingPlayer) players[index]).getContainer(), layoutConstr);
} else {
layoutConstr.weightx = 0.3;
layoutConstr.gridwidth = 1;
//mainFrame.add(((SwingPlayer) players[3]).getContainer(), layoutConstr);
layoutConstr.gridx = 2;
//mainFrame.add(((SwingPlayer) players[2]).getContainer(), layoutConstr);
}
//second empty cell
layoutConstr.gridx = (nrOfPlayers < 5) ? 2 : 3;
layoutConstr.weightx = 0.2;
layoutConstr.gridwidth = 1;
mainFrame.add(new JPanel(), layoutConstr);
//4th or 5th player
layoutConstr.gridx = 0;
layoutConstr.gridy = 1;
layoutConstr.weightx = 0.2;
layoutConstr.weighty = 0.8;
layoutConstr.gridwidth = 1;
if(nrOfPlayers == 2 || nrOfPlayers == 3){
mainFrame.add(new JPanel(), layoutConstr);
} else {
int index = (nrOfPlayers == 4) ? 3 : 4;
//mainFrame.add(((SwingPlayer) players[index]).getContainer(), layoutConstr);
}
layoutConstr.gridx = 1;
layoutConstr.weightx = 0.6;
layoutConstr.gridwidth = (nrOfPlayers < 5) ? 1 : 2;
mainFrame.add(gamePanel, layoutConstr);
//2nd player
layoutConstr.gridx = (nrOfPlayers < 5) ? 2 : 3;
layoutConstr.weightx = 0.2;
layoutConstr.gridwidth = 1;
if(nrOfPlayers == 2){
mainFrame.add(new JPanel(), layoutConstr);
} else {
//mainFrame.add(((SwingPlayer) players[1]).getContainer(), layoutConstr);
}
//third empty cell
layoutConstr.gridx = 0;
layoutConstr.gridy = 2;
layoutConstr.weightx = 0.2;
layoutConstr.weighty = 0.1;
layoutConstr.gridwidth = 1;
mainFrame.add(new JPanel(), layoutConstr);
layoutConstr.gridx = 1;
layoutConstr.weightx = 0.8;
layoutConstr.gridwidth = (nrOfPlayers < 5) ? 1 : 2;
//mainFrame.add(((SwingPlayer) players[0]).getContainer(), layoutConstr);
//fourth empty cell
layoutConstr.gridx = (nrOfPlayers < 5) ? 2 : 3;
layoutConstr.gridy = 2;
layoutConstr.weightx = 0.2;
layoutConstr.gridwidth = 1;
mainFrame.add(new JPanel(), layoutConstr);
gamePanel.add(hintPanel);
gamePanel.add(flashPanel);
gamePanel.add(buttonPanel);
gamePanel.add(deckPanel);
hintUI = new JLabel[MAX_HINTS];
for(int i=0; i<MAX_HINTS; ++i){
JLabel tmp = new JLabel();
tmp.setText("1");
tmp.setForeground(Color.white);
tmp.setName("Hint_" + i);
tmp.setFont(font);
hintPanel.add(tmp);
hintUI[i] = tmp;
}
flashUI = new JLabel[MAX_FLASHS];
for(int i=0;i<MAX_FLASHS; ++i){
JLabel tmp = new JLabel();
tmp.setText("0");
tmp.setForeground(Color.white);
tmp.setName("Flash_" + i);
tmp.setFont(font);
flashPanel.add(tmp);
flashUI[i] = tmp;
}
// TODO remove! Only example listener
hintButton.addMouseListener(new MouseListener(){
@Override
public void mouseReleased(MouseEvent e) {
System.out.println("Hint!");
SwingUtilities.isLeftMouseButton(e);
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseClicked(MouseEvent e) {
}
});
}
@Override
public void loadFont() {
font = new Font("Shanghai", Font.PLAIN, fontSize);
}
}