diff --git a/src/Game.java b/src/Game.java index 2ddc175..51e42d7 100644 --- a/src/Game.java +++ b/src/Game.java @@ -246,12 +246,18 @@ colorButton.addMouseListener(new MouseListener(){ @Override public void mouseReleased(MouseEvent e) { + if(!hintAvailable()){ + System.out.println("No hints left!"); + return; + } if(selectedCards > 0){ System.out.println("Please deselect all cards first"); return; } useColor = true; useValue = false; + placeCard = false; + trashCard = false; } @Override public void mousePressed(MouseEvent e) { @@ -269,12 +275,18 @@ valueButton.addMouseListener(new MouseListener(){ @Override public void mouseReleased(MouseEvent e) { + if(!hintAvailable()){ + System.out.println("No hints left!"); + return; + } if(selectedCards > 0){ System.out.println("Please deselect all cards first"); return; } useValue = true; useColor = false; + placeCard = false; + trashCard = false; } @Override public void mousePressed(MouseEvent e) { @@ -310,24 +322,7 @@ index = i; card.setBackground(Color.black); if(useColor){ - String color = null; - switch(chosenColor){ - case 0: - color = "green"; - break; - case 1: - color = "red"; - break; - case 2: - color = "yellow"; - break; - case 3: - color = "white"; - break; - case 4: - color = "blue"; - break; - } + String color = intColorToText(chosenColor); p.setCardInfo(labels, p.getCardInfo(labels) + ", " + color); } else if(useValue){ String value = "is " + chosenValue; @@ -335,24 +330,7 @@ } } else { if(useColor){ - String color = "not "; - switch(chosenColor){ - case 0: - color += "green"; - break; - case 1: - color += "red"; - break; - case 2: - color += "yellow"; - break; - case 3: - color += "white"; - break; - case 4: - color += "blue"; - break; - } + String color = "not " + intColorToText(chosenColor); p.setCardInfo(labels, p.getCardInfo(labels) + ", " + color); } else if(useValue){ String value = "is not " + chosenValue; @@ -385,24 +363,23 @@ deck[color][value-1] = c; deckUI[color][value-1].setText("Value: " + value); deckUI[color][value-1].setForeground(c.getColor()); + setWonOrLost(); } else { //TODO bad thunderUI[thunders++].setText("1"); + moveCardToTrash(indexLabel, index, playerContainer); setWonOrLost(); if(lost) return; - moveCardToTrash(indexLabel, index, playerContainer); } dealCard(indexLabel, currentPlayer); - players[currentPlayer].setCardInfo(indexLabel, ""); - c = players[currentPlayer].getCard(indexLabel); - JLabel card = (JLabel) playerContainer.getComponent(index); - card.setText("Value: " + c.getValue()); - card.setForeground(c.getColor()); + updateCards(indexLabel, index, playerContainer); } System.out.println("Player " + currentPlayer + " has finished his move!"); currentPlayer++; if(currentPlayer == NR_PLAYERS) currentPlayer = 0; resetMoveValues(); + System.out.println(CARDS_IN_DECK + " cards left."); + System.out.println(trash.size() + " cards in trash"); System.out.println("Player " + currentPlayer + "'s turn"); } @Override @@ -472,17 +449,35 @@ private void moveCardToTrash(int indexLabel, int index, JPanel playerContainer){ trash.add(players[currentPlayer].getCard(indexLabel)); + updateCards(indexLabel, index, playerContainer); + } + + private void updateCards(int indexLabel, int index, JPanel playerContainer){ dealCard(indexLabel, currentPlayer); players[currentPlayer].setCardInfo(indexLabel, ""); Card c = players[currentPlayer].getCard(indexLabel); JLabel card = (JLabel) playerContainer.getComponent(index); - card.setText("Value: " + c.getValue()); - card.setForeground(c.getColor()); + if(c.getValue() == -1){ //dummy card, no more cards + card.setForeground(Color.orange); + card.setText("No Cards left"); + MouseListener[] listeners = card.getMouseListeners(); + for(int i=0; i 0){ + int index = random(CARDS_IN_DECK--); + card = cards.remove(index); + } else { + card = new Card(3, -1); + } players[playerID].setCard(cardID, card); } @@ -539,23 +534,35 @@ curr.setForeground(card.getColor()); curr.setBackground(Color.black); curr.setOpaque(true); - curr.addMouseListener(new MouseListener() { + playerContainer.add(curr/*, playerSide*/); + playerContainer.add(Box.createRigidArea(new Dimension(15,15))); + curr.addMouseListener(new MouseListener() { @Override public void mouseReleased(MouseEvent e) { - if(!hintAvailable()){ - System.out.println("No hints left!"); - return; + JLabel label = (JLabel) e.getComponent(); + String name = label.getName(); + int clickedPlayer = Integer.parseInt(name.substring(0, 1)); + int clickedCard = Integer.parseInt(name.substring(name.length()-1)); + Card card = players[clickedPlayer].getCard(clickedCard); + int clickedValue = card.getValue(); + int clickedColor = card.getColorInt(); + if(label.getBackground() == Color.pink){ + selectedCards--; + label.setBackground(Color.black); + System.out.println("Removed card #" + clickedCard + "(" + card.getColorInt() + ", " + card.getValue() + ")"); + if(selectedCards == 0){ + resetMoveValues(); + } /*else if(selectedCards == 1){ + useColor = useValue = false; + }*/ } if(!useColor && !useValue && !trashCard && !placeCard){ System.out.println("Please choose move type first"); return; } - JLabel label = (JLabel) e.getComponent(); - String name = label.getName(); - int clickedPlayer = Integer.parseInt(name.substring(0, 1)); if(clickedPlayer == currentPlayer){ if(useColor || useValue){ - System.out.println("Please don't select your own cards, asshole!"); + System.out.println("Please don't select your own cards!"); return; } else if((trashCard || placeCard) && selectedCards == 1){ System.out.println("You already selected a card!"); @@ -565,10 +572,6 @@ System.out.println("Please select your own cards"); return; } - int clickedCard = Integer.parseInt(name.substring(name.length()-1)); - Card card = players[clickedPlayer].getCard(clickedCard); - int clickedValue = card.getValue(); - int clickedColor = card.getColorInt(); if(selectedPlayer == -1){ selectedPlayer = clickedPlayer; chosenColor = clickedColor; @@ -577,7 +580,7 @@ System.out.println("Selected player #" + selectedPlayer); label.setBackground(Color.pink); //selectedCards.add(clickedCard); - System.out.println("Added card #" + clickedCard + "(" + card.getColorInt() + ", " + card.getValue() + ")"); + System.out.println("Added card #" + clickedCard + "(" + intColorToText(card.getColorInt()) + ", " + card.getValue() + ")"); return; } if(selectedPlayer != clickedPlayer){ @@ -603,16 +606,7 @@ //TODO same color => select all reds } }*/ - if(label.getBackground() == Color.pink){ - selectedCards--; - label.setBackground(Color.black); - System.out.println("Removed card #" + clickedCard + "(" + card.getColorInt() + ", " + card.getValue() + ")"); - if(selectedCards == 0){ - resetMoveValues(); - } else if(selectedCards == 1){ - useColor = useValue = false; - } - } else { + if(label.getBackground() == Color.black){ if(useColor){ if(chosenColor == clickedColor){ //TODO add card @@ -620,7 +614,7 @@ if(label.getBackground() != Color.pink){ selectedCards++; label.setBackground(Color.pink); - System.out.println("Added card #" + clickedCard + "(" + card.getColorInt() + ", " + card.getValue() + ")"); + System.out.println("Added card #" + clickedCard + "(" + intColorToText(card.getColorInt()) + ", " + card.getValue() + ")"); } } } else if(useValue){ @@ -630,7 +624,7 @@ if(label.getBackground() != Color.pink){ selectedCards++; label.setBackground(Color.pink); - System.out.println("Added card #" + clickedCard + "(" + card.getColorInt() + ", " + card.getValue() + ")"); + System.out.println("Added card #" + clickedCard + "(" + intColorToText(card.getColorInt()) + ", " + card.getValue() + ")"); } } } @@ -653,8 +647,6 @@ public void mouseClicked(MouseEvent e) { } }); - playerContainer.add(curr/*, playerSide*/); - playerContainer.add(Box.createRigidArea(new Dimension(15,15))); } mainFrame.add(playerContainer, playerSide); } @@ -664,10 +656,33 @@ return (hints > 0); } + private String intColorToText(int id){ + String color = ""; + switch(id){ + case 0: + color = "green"; + break; + case 1: + color = "red"; + break; + case 2: + color = "yellow"; + break; + case 3: + color = "white"; + break; + case 4: + color = "blue"; + break; + } + return color; + } + private void setWonOrLost(){ won = true; lost = false; for(int i=0; i