/** * */ package ats_jp.activity.cardgame; import java.util.HashMap; import java.util.HashSet; import java.util.Map.Entry; import java.util.Set; import ats_jp.activity.profile.PlayerProfile; /** * @author TMS * */ public class PlayingCard implements Card { // constant field public static final int RANK=200; public static final int ACE = 1; public static final int TWO = 2; public static final int THREE = 3; public static final int FOUR = 4; public static final int FIVE = 5; public static final int SIX = 6; public static final int SEVEN = 7; public static final int EIGHT = 8; public static final int NINE = 9; public static final int TEN = 10; public static final int JACK = 11; public static final int QUEEN = 12; public static final int KING = 13; public static final int SUIT = 201; public static final int SPADES = 100; public static final int HEARTS = 101; public static final int DIAMOND = 102; public static final int CLUBS = 103; public static final int STR_RANK=202; public static final String STR_ACE = "Ace"; public static final String STR_TWO = "Two"; public static final String STR_THREE = "Three"; public static final String STR_FOUR = "Four"; public static final String STR_FIVE = "Five"; public static final String STR_SIX = "Six"; public static final String STR_SEVEN = "Seven"; public static final String STR_EIGHT = "Eight"; public static final String STR_NINE = "Nine"; public static final String STR_TEN = "Ten"; public static final String STR_JACK = "Jack"; public static final String STR_QUEEN = "Queen"; public static final String STR_KING = "King"; public static final int STR_SUIT=203; public static final String STR_SPADES = "Spades"; public static final String STR_HEARTS = "Hearts"; public static final String STR_DIAMONDS = "Diamonds"; public static final String STR_CLUBS = "Clubs"; private static final HashMap STR_RANK_MAP= new HashMap() {{ put("STR_ACE",""); put("STR_TWO",""); put("STR_THREE",""); put("STR_FOUR",""); put("STR_FIVE",""); put("STR_SIX",""); put("STR_SEVEN",""); put("STR_EIGHT",""); put("STR_NINE",""); put("STR_TEN",""); put("STR_JACK",""); put("STR_QUEEN",""); put("STR_KING",""); }} // normal attribute private static HashMap myMapDeck = new HashMap(); private int rank; private int suit; @Override public Object getCardAttribute(int attribute) throws CardException { Object resultObj=null; switch (attribute) { case PlayingCard.RANK: resultObj=(Integer) getRank(); break; case PlayingCard.SUIT: resultObj=(Integer) getSuit(); break; case PlayingCard.STR_RANK: resultObj= (String) getStrRank(getRank()); // come faccio??? Utilizzo una EnumTable??? break; case PlayingCard.STR_SUIT: resultObj=(String) getStrSuit(getSuit()); // come faccio??? Problema analogo a sopra... break; default: throw new IllegalArgumentException("Invalid argument"); } return resultObj; } private String getStrRank(int paramRank) { String result=""; switch (paramRank) { case PlayingCard.ACE: result = PlayingCard.STR_ACE; break; case PlayingCard.TWO: result = PlayingCard.STR_TWO; break; case PlayingCard.THREE: result = PlayingCard.STR_THREE; break; case PlayingCard.FOUR: result = PlayingCard.STR_FOUR; break; case PlayingCard.FIVE: result = PlayingCard.STR_FIVE; break; case PlayingCard.SIX: result = PlayingCard.STR_SIX; break; case PlayingCard.SEVEN: result = PlayingCard.STR_SEVEN; break; case PlayingCard.EIGHT: result = PlayingCard.STR_EIGHT; break; case PlayingCard.NINE: result = PlayingCard.STR_NINE; break; case PlayingCard.TEN: result = PlayingCard.STR_TEN; break; case PlayingCard.JACK: result = PlayingCard.STR_JACK; break; case PlayingCard.QUEEN: result = PlayingCard.STR_QUEEN; break; case PlayingCard.KING: result = PlayingCard.STR_KING; break; default: throw new IllegalArgumentException("Invalid rank (doesn't exist!)"); } return result; } private String getStrSuit(int paramSuit) { String result = ""; switch (paramSuit) { case PlayingCard.SPADES: result = PlayingCard.STR_SPADES; break; case PlayingCard.HEARTS: result = PlayingCard.STR_HEARTS; break; case PlayingCard.DIAMOND: result = PlayingCard.STR_DIAMONDS; break; case PlayingCard.CLUBS: result = PlayingCard.STR_CLUBS; break; default: throw new IllegalArgumentException("Invalid suit (doesn't exist!)"); } return result; } private PlayingCard(int rank, int suit) { if((rank>0 && rank<14) && (suit>99 && suit<104)){ this.setRank(rank); this.setSuit(suit); } else { throw new IllegalArgumentException("Invalid rank's value or suit's value"); } } /** * @return the rank */ public int getRank() { return rank; } /** * @param rank the rank to set */ private void setRank(int rank) { this.rank = rank; } /** * @return the suit */ public int getSuit() { return suit; } /** * @param suit the suit to set */ private void setSuit(int suit) { this.suit = suit; } public String toString() { String resultString=""; try { resultString=getCardAttribute(PlayingCard.STR_RANK)+" of "+getCardAttribute(PlayingCard.STR_SUIT); } catch (CardException e) { e.printStackTrace(); System.out.println("Invalid attribute"); } return resultString; } public boolean equals(PlayingCard card) { boolean flag=false; try { if(getCardAttribute(PlayingCard.RANK)==card.getCardAttribute(PlayingCard.RANK) && getCardAttribute(PlayingCard.RANK)==card.getCardAttribute(PlayingCard.RANK)) { flag=true; } } catch(CardException exc) { exc.printStackTrace(); System.out.println("Invalid attribute"); } return flag; } public static PlayingCard getCard(int paramRank, int paramSuit) { //**************************************// // start my beautiful code :D (I hope!) // //**************************************// // creo la carta coi parametri forniti PlayingCard paramPlayingCard = new PlayingCard(paramRank, paramSuit); // devo vedere se รจ presente Integer nextPos=null; if(!myMapDeck.containsValue(paramPlayingCard)) { nextPos=new Integer(myMapDeck.size()+1); myMapDeck.put(nextPos, paramPlayingCard); } else { Set tmpSet=myMapDeck.keySet(); for(Integer pc : tmpSet) { if(myMapDeck.get(pc).equals(paramPlayingCard)) { nextPos=pc; System.out.print("\n"+nextPos+"\n"); break; } } } System.out.println(myMapDeck.get(nextPos)); return myMapDeck.get(nextPos); } }