Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 16 additions & 19 deletions client/src/main/java/object/EntropyAchievementsTracker.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package object;

import achievement.AchievementUtilKt;
import game.EntropyBidAction;
import game.Suit;
import util.AchievementsUtil;
import util.Registry;
Expand Down Expand Up @@ -85,11 +86,10 @@ public void unlockPerfectBidAchievements(boolean earnedPsychic)
earnedGardener, earnedSpaceman, earnedPsychic);
}

public void updatePerfectBidVariables(Bid lastBid)
public void updatePerfectBidVariables(EntropyBidAction lastBid)
{
EntropyBid entropyBid = (EntropyBid)lastBid;
var bidSuit = entropyBid.getBidSuit();

var bidSuit = lastBid.getSuit();

if (bidSuit == Suit.Spades)
{
earnedGardener = true;
Expand All @@ -116,26 +116,23 @@ else if (bidSuit == Suit.Stars)
}
}

public void update(Bid bid)
public void update(EntropyBidAction bid)
{
EntropyBid entropyBid = (EntropyBid)bid;

updateCardReveal(entropyBid);
updateMonotone(entropyBid);
updateCardReveal(bid);
updateMonotone(bid);
}

private void updateCardReveal(EntropyBid bidMade)
private void updateCardReveal(EntropyBidAction bidMade)
{
String card = bidMade.getCardToReveal();
if (card.isEmpty())
if (card == null)
{
return;
}

cardsRevealed++;

var bidSuit = bidMade.getBidSuit();
if (isCardRelevant(card, bidSuit))

if (isCardRelevant(card, bidMade.getSuit()))
{
revealedSameSuit = true;
}
Expand All @@ -144,17 +141,17 @@ private void updateCardReveal(EntropyBid bidMade)
revealedDifferentSuit = true;
}
}

private void updateMonotone(EntropyBid bid)
private void updateMonotone(EntropyBidAction bid)
{
var suitCode = bid.getBidSuit();
var suit = bid.getSuit();
if (firstSuitBid == null)
{
firstSuitBid = suitCode;
firstSuitBid = suit;
return;
}

if (suitCode != firstSuitBid)
if (suit != firstSuitBid)
{
deviatedFromFirstSuit = true;
}
Expand Down
18 changes: 9 additions & 9 deletions client/src/main/java/online/screen/EntropyRoom.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,27 @@
import java.awt.BorderLayout;
import java.util.UUID;

import game.EntropyBidAction;
import game.GameSettings;
import game.Suit;
import object.Bid;
import object.EntropyAchievementsTracker;
import object.EntropyBid;
import screen.EntropyBidPanel;
import util.ClientUtil;
import util.Registry;
import util.ReplayConstants;

import static game.CardsUtilKt.countSuit;
import static game.CardsUtilKt.extractCards;

public class EntropyRoom extends GameRoom
public class EntropyRoom extends GameRoom<EntropyBidAction>
{
private EntropyAchievementsTracker achievementTracker = new EntropyAchievementsTracker();

public EntropyRoom(UUID id, String roomName, GameSettings settings, int players)
{
super(id, roomName, settings, players);

bidPanel = new EntropyBidPanel();
bidPanel = new EntropyBidPanel(ClientUtil.getUsername(), handPanel);
leftPaneSouth.add(bidPanel, BorderLayout.CENTER);
bidPanel.addBidListener(this);
}
Expand All @@ -37,7 +37,7 @@ public void doSpecificResetGameVariables()
@Override
public void resetBids()
{
lastBid = new EntropyBid(Suit.Clubs, 0);
lastBid = null;
hmBidByPlayerNumber.clear();
}

Expand All @@ -46,7 +46,7 @@ public void updateScreenForChallengeOrIllegal()
{
if (isVisible())
{
var lastBidSuit = ((EntropyBid)lastBid).getBidSuit();
var lastBidSuit = lastBid.getSuit();
handPanel.displayAndHighlightHands(lastBidSuit);

achievementTracker.unlockPerfectBidAchievements(earnedPsychic);
Expand All @@ -69,18 +69,18 @@ public void saveModeSpecificVariablesForReplay()
{
int roundsSoFar = replay.getInt(Registry.REPLAY_INT_ROUNDS_SO_FAR, 0);
replay.putInt(Registry.REPLAY_INT_GAME_MODE, ReplayConstants.GAME_MODE_ENTROPY_ONLINE);
replay.put(roundsSoFar + Registry.REPLAY_STRING_LAST_BID_SUIT_NAME, ((EntropyBid)lastBid).getBidSuit().name());
replay.put(roundsSoFar + Registry.REPLAY_STRING_LAST_BID_SUIT_NAME, lastBid.getSuit().name());
replayDialog.roundAdded();
}

@Override
public void updatePerfectBidVariables(Bid bid)
public void updatePerfectBidVariables(EntropyBidAction bid)
{
achievementTracker.updatePerfectBidVariables(bid);
}

@Override
public void updateAchievementVariables(Bid bid)
public void updateAchievementVariables(EntropyBidAction bid)
{
achievementTracker.update(bid);
}
Expand Down
78 changes: 40 additions & 38 deletions client/src/main/java/online/screen/GameRoom.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package online.screen;

import game.GameMode;
import game.GameSettings;
import game.*;
import http.dto.RoomSummary;
import object.*;
import online.util.XmlBuilderClient;
Expand All @@ -23,17 +22,18 @@
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.prefs.Preferences;
import java.util.stream.Collectors;

import static utils.ColourUtilKt.getColourForPlayerNumber;
import static utils.CoreGlobals.logger;

/**
* This is an actual room as seen by the player
*/
public abstract class GameRoom extends JFrame
public abstract class GameRoom<B extends BidAction<B>> extends JFrame
implements WindowListener,
ActionListener,
BidListener,
BidListener<B>,
RevealListener,
Registry
{
Expand All @@ -60,18 +60,18 @@ public abstract class GameRoom extends JFrame
public boolean hasOverbid = false;
private boolean seenRoundStart = false;

public Bid lastBid = null;
public B lastBid = null;

private ConcurrentHashMap<Integer, Player> hmPlayerByAdjustedPlayerNumber = new ConcurrentHashMap<>();
public ConcurrentHashMap<Integer, List<String>> hmHandByAdjustedPlayerNumber = new ConcurrentHashMap<>();
public ConcurrentHashMap<Integer, Bid> hmBidByPlayerNumber = new ConcurrentHashMap<>();
public ConcurrentHashMap<Integer, B> hmBidByPlayerNumber = new ConcurrentHashMap<>();
private int personToStartLocal = -1;
private int personToStart = -1;
public int lastPlayerToAct = 0;
private OnlineChatPanel chatPanel = null;
public Preferences replay = null;
public ReplayDialog replayDialog = new ReplayDialog();
public BidPanel bidPanel = null;
public BidPanel<B> bidPanel = null;

public GameRoom(UUID id, String roomName, GameSettings settings, int players)
{
Expand Down Expand Up @@ -205,8 +205,8 @@ else if (mode == GameMode.Vectropy)
public abstract void resetBids();
public abstract void doSpecificResetGameVariables();
public abstract void saveModeSpecificVariablesForReplay();
public abstract void updatePerfectBidVariables(Bid bid);
public abstract void updateAchievementVariables(Bid bid);
public abstract void updatePerfectBidVariables(B bid);
public abstract void updateAchievementVariables(B bid);
public abstract void unlockEndOfGameAchievements();

private void setIcon()
Expand Down Expand Up @@ -767,7 +767,7 @@ public void startObserving(int personToStart, int lastPlayerToAct)
handPanel.displayHandsOnline(hmHandByAdjustedPlayerNumber);
handPanel.setInitted(true);

Bid lastBid = hmBidByPlayerNumber.get(lastPlayerToAct);
PlayerAction lastBid = hmBidByPlayerNumber.get(lastPlayerToAct);
if (lastBid != null)
{
handleBid(lastPlayerToAct, lastBid);
Expand All @@ -779,39 +779,39 @@ public void clearHands()
hmHandByAdjustedPlayerNumber.clear();
}

public void handleBid(int playerNumber, Bid bid)
public void handleBid(int playerNumber, PlayerAction action)
{
int playerNumberAdjusted = adjustForMe(playerNumber);
Player player = hmPlayerByAdjustedPlayerNumber.get(playerNumberAdjusted);
if (player != null)
{
bid.setPlayer(player);
}

addBidToBidBox(playerNumberAdjusted, bid);
addBidToBidBox(playerNumberAdjusted, action);
handPanel.selectPlayerInAwtThread(playerNumberAdjusted, false);

if (bid.isChallenge()
|| bid.isIllegal())
if (action instanceof ChallengeAction
|| action instanceof IllegalAction)
{
processChallengeOrIllegal();
return;
}

if (!(action instanceof BidAction)) {
throw new RuntimeException("Wtf");
}

lastPlayerToAct = playerNumber;
lastBid = bid;
hmBidByPlayerNumber.put(playerNumber, bid);
lastBid = (B)action;
hmBidByPlayerNumber.put(playerNumber, lastBid);

if (playerNumber != this.playerNumber
&& !observer)
{
bidPanel.adjust(bid);
bidPanel.adjust(lastBid);
}

if (settings.getCardReveal())
{
String card = bid.getCardToReveal();
if (!card.isEmpty())
String card = lastBid.getCardToReveal();
if (card != null)
{
handPanel.revealCard(card);
player.addRevealedCard(card);
Expand Down Expand Up @@ -994,21 +994,25 @@ else if (playerNumberAdjusted == playerNumberLocal)
}
}
}

private int getTotalFromHands()
{
int total = 0;


protected List<String> allCards() {
ArrayList<String> cards = new ArrayList<>();

for (int i=0; i<MAX_NUMBER_OF_PLAYERS; i++)
{
List<String> hand = hmHandByAdjustedPlayerNumber.get(i);
if (hand != null)
{
total += hand.size();
cards.addAll(hand);
}
}

return total;

return cards;
}

private int getTotalFromHands()
{
return allCards().size();
}

public void setObserver(boolean observer)
Expand Down Expand Up @@ -1373,12 +1377,10 @@ public void requestFocus()
* BidListener
*/
@Override
public void bidMade(Bid bid)
public void bidMade(B bid)
{
//1. Set the player on the bid
Player player = hmPlayerByAdjustedPlayerNumber.get(0);
bid.setPlayer(player);
lastBid = bid;
Player player = hmPlayerByAdjustedPlayerNumber.get(0);

//2. Disable the bid panel
enableBidPanel(false);
Expand All @@ -1405,8 +1407,8 @@ private void processPlayerBid()

//5. Unlock achievements, including specific perfect bid ones
updateAchievementVariables(lastBid);
if (lastBid.isPerfect(hmHandByAdjustedPlayerNumber, settings)
&& lastBid.isOverAchievementThreshold())
if (lastBid.isPerfect(allCards(), settings)
&& lastBid.overAchievementThreshold())
{
updatePerfectBidVariables(lastBid);

Expand All @@ -1416,7 +1418,7 @@ private void processPlayerBid()
}
}

boolean overBid = lastBid.isOverbid(hmHandByAdjustedPlayerNumber, settings.getJokerValue());
boolean overBid = lastBid.isOverbid(allCards(), settings);
if (overBid)
{
hasOverbid = true;
Expand Down
Loading
Loading