Newer
Older
hanabi-networking / src / server / SwingClientGame.java
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);
	}
}