import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.*;
/* Updates and Questions:
* ?Waarom blijven niet alle knoppen bovenop liggen?
* ---
* UPDATE: Handelshavens erinzetten
* !!! UPDATE: players en resources toevoegen/verwijderen en van plaats veranderen {aanpassen van "playerAmount"; "resourceAmount"; "playerColors"; "resourceColors"}
* UPDATE: namen van players en resources toevoegen en kunnen veranderen
* */
public class Table implements ActionListener, ItemListener{
final static int windowWidth = 450, windowHeight = 600;
final static Dimension windowSize = new Dimension(windowWidth, windowHeight);
int playerAmount = 4;
int resourceAmount = 6;
public Color darkGreen = new Color(0, 100, 0);
public Color brown = new Color(100, 50, 0);
public Color gold = new Color(255, 140, 12);
int cellWidth = windowWidth/(playerAmount+1);
int cellHeight = windowHeight/(resourceAmount+1);
Dimension cellSize = new Dimension(cellWidth, cellHeight);
JPanel[] playerPanels = new JPanel[playerAmount];
JPanel[] resourcePanels = new JPanel[resourceAmount];
JPanel[] specialistPanels = new JPanel[resourceAmount];
JLabel[][] scoreLabels = new JLabel[playerAmount][resourceAmount];
JButton[][] addButtons = new JButton[playerAmount][resourceAmount];
JButton[][] substractButtons = new JButton[playerAmount][resourceAmount];
/*!!! This isn't compiled with a variety of players !!!
*!!! And neither with a variety of resources !!!*/
int[] scoresPlayer1 = {0, 0, 0, 0, 0, 0};
int[] scoresPlayer2 = {0, 0, 0, 0, 0, 0};
int[] scoresPlayer3 = {0, 0, 0, 0, 0, 0};
int[] scoresPlayer4 = {0, 0, 0, 0, 0, 0};
int lastWoodHighscore = 0;
Color[] playerColors = {
Color.blue,
Color.orange,
Color.red,
Color.white,
Color.pink,
brown,
Color.green
};
Color[] resourceColors = {
darkGreen,
Color.green,
Color.gray,
Color.yellow,
brown,
gold
};
JPanel basicPanel;
public static void main(String[] args){
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
SwingUtilities.invokeLater(new Runnable(){
public void run() {
createAndShowGUI();
}
});
}
private static void createAndShowGUI(){
JFrame frame = new JFrame("Catan Specialisten App");
frame.setSize(windowSize);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setAlwaysOnTop(true);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
Table table = new Table();
frame.setContentPane(table.createContentPane());
}
public JPanel createContentPane() {
basicPanel = new JPanel();
basicPanel.setOpaque(true);
basicPanel.setLayout(null);
basicPanel.setBackground(Color.black);
createPlayerPanels();
createResourcePanels();
createScorePanels();
createSpecialistIcons();
return basicPanel;
}
public void createPlayerPanels(){
for(int p=1; p<playerAmount+1; p++){
JPanel player = new JPanel();
player.setLocation(p*cellWidth, 0);
player.setSize(cellSize);
player.setBackground(playerColors[p-1]);
basicPanel.add(player);
}
System.out.println(playerAmount+" Players added");
}
public void createResourcePanels(){
for(int r=1; r<resourceAmount+1; r++){
JPanel resource = new JPanel();
resource.setLocation(0, r*cellHeight);
resource.setSize(cellSize);
resource.setBackground(resourceColors[r-1]);
basicPanel.add(resource);
}
System.out.println(resourceAmount+" Resources added");
}
public void createScorePanels(){
for(int p=1; p<playerAmount+1; p++){
for(int r=1; r<resourceAmount+1; r++){
JLabel scoreLabel = new JLabel("0");
scoreLabel.setOpaque(true);
scoreLabel.setHorizontalAlignment(JLabel.CENTER);
scoreLabel.setLocation(p*cellWidth, r*cellHeight);
scoreLabel.setSize(cellSize);
scoreLabel.setBackground(Color.gray);
basicPanel.add(scoreLabel);
scoreLabels[p-1][r-1] = scoreLabel;
JButton add = new JButton();
add.setLocation(p*cellWidth+40+10, r*cellHeight+40);
add.setSize(10, 10);
add.setBackground(Color.green);
add.addActionListener(this);
basicPanel.add(add);
basicPanel.setComponentZOrder(add, 0);
addButtons[p-1][r-1] = add;
JButton substract = new JButton();
substract.setLocation(p*cellWidth+40-20, r*cellHeight+40);
substract.setSize(10, 10);
substract.setBackground(Color.red);
substract.addActionListener(this);
basicPanel.add(substract);
basicPanel.setComponentZOrder(substract, 0);
substractButtons[p-1][r-1] = substract;
}
}
}
public void createSpecialistIcons(){
for(int r=1; r<resourceAmount+1; r++){
JPanel specialist = new JPanel();
specialist.setLocation(cellWidth-(cellWidth/4), (r+1)*(cellHeight)-(cellWidth/4));
specialist.setSize(cellWidth/4, cellHeight/4);
specialist.setBackground(Color.pink);
basicPanel.add(specialist);
basicPanel.setComponentZOrder(specialist, 0);
specialistPanels[r-1] = specialist;
}
System.out.println(resourceAmount+" Specialists added");
}
//Not yet programmed the shipyards!!!
public void itemStateChanged(ItemEvent event){
}
public void actionPerformed(ActionEvent event){
for(int p=1; p<playerAmount+1; p++){
for(int r=1; r<resourceAmount+1; r++){
if(event.getSource() == addButtons[p-1][r-1]){
System.out.println("You hit the \"ADD\" button of player "+p+" at the resource "+r);
/*!!! This ain't compatible with changing number of players !!!*/
switch(p){
case 1:
scoresPlayer1[r-1] += 1;
scoreLabels[p-1][r-1].setText(""+scoresPlayer1[r-1]);
break;
case 2:
scoresPlayer2[r-1] += 1;
scoreLabels[p-1][r-1].setText(""+scoresPlayer2[r-1]);
break;
case 3:
scoresPlayer3[r-1] += 1;
scoreLabels[p-1][r-1].setText(""+scoresPlayer3[r-1]);
break;
case 4:
scoresPlayer4[r-1] += 1;
scoreLabels[p-1][r-1].setText(""+scoresPlayer4[r-1]);
break;
default:
System.out.println("It seems you hit a button without player");
}
}
if(event.getSource() == substractButtons[p-1][r-1]){
System.out.println("You hit the \"SUBSTRACT\" button of player "+p+" at the resource"+r);
switch(p){
case 1:
if(scoresPlayer1[r-1] != 0){
scoresPlayer1[r-1] -= 1;
}
scoreLabels[p-1][r-1].setText(""+scoresPlayer1[r-1]);
break;
case 2:
if(scoresPlayer2[r-1] != 0){
scoresPlayer2[r-1] -= 1;
}
scoreLabels[p-1][r-1].setText(""+scoresPlayer2[r-1]);
break;
case 3:
if(scoresPlayer3[r-1] != 0){
scoresPlayer3[r-1] -= 1;
}
scoreLabels[p-1][r-1].setText(""+scoresPlayer3[r-1]);
break;
case 4:
if(scoresPlayer4[r-1] != 0){
scoresPlayer4[r-1] -= 1;
}
scoreLabels[p-1][r-1].setText(""+scoresPlayer4[r-1]);
break;
default:
System.out.println("It seems you hit a button without player");
}
}
}
}
System.out.println("Checking who gains each specialist!");
checkHighestResourceScore();
}
public void checkHighestResourceScore(){
/* Even here isn't compiled with an variety in playerAmount */
int r=0;
if(scoresPlayer1[r] > scoresPlayer2[r] && scoresPlayer1[r] > scoresPlayer3[r] && scoresPlayer1[r] > scoresPlayer4[r]){
System.out.println(" Player 1 has the best wood score!");
if(lastWoodHighscore != 1){
specialistPanels[r].setLocation(((r+2)*cellWidth)-(cellWidth/4), (r+2)*(cellHeight)-(cellWidth/4));
System.out.println(" Location changed of the wood specialist");
}
lastWoodHighscore = 1;
}else if(scoresPlayer2[r] > scoresPlayer1[r] && scoresPlayer2[r] > scoresPlayer3[r] && scoresPlayer2[r] > scoresPlayer4[r]){
System.out.println(" Player 2 has the best wood score!");
specialistPanels[r].setLocation(((r+3)*cellWidth)-(cellWidth/4), (r+2)*(cellHeight)-(cellWidth/4));
}else if(scoresPlayer3[r] > scoresPlayer1[r] && scoresPlayer3[r] > scoresPlayer2[r] && scoresPlayer3[r] > scoresPlayer4[r]){
System.out.println(" Player 3 has the best wood score!");
specialistPanels[r].setLocation(((r+4)*cellWidth)-(cellWidth/4), (r+2)*(cellHeight)-(cellWidth/4));
}else if(scoresPlayer4[r] > scoresPlayer1[r] && scoresPlayer4[r] > scoresPlayer2[r] && scoresPlayer4[r] > scoresPlayer3[r]){
System.out.println(" Player 4 has the best wood score!");
specialistPanels[r].setLocation(((r+5)*cellWidth)-(cellWidth/4), (r+2)*(cellHeight)-(cellWidth/4));
}else{
System.out.println(" NO-ONE has the best wood score!");
specialistPanels[r].setLocation(cellWidth-(cellWidth/4), (r+2)*(cellHeight)-(cellWidth/4));
}
basicPanel.setComponentZOrder(specialistPanels[r], 0);
}
}