Skip to content

Commit

Permalink
#15 Kombinációban levő kártyák kigyűjtése listába
Browse files Browse the repository at this point in the history
Az 'orderedCardList' változó visszaadja a legjobb 5 lapot rendezett formában;
  • Loading branch information
imate committed Apr 17, 2015
1 parent cab3895 commit 52cb6b4
Show file tree
Hide file tree
Showing 20 changed files with 393 additions and 120 deletions.
21 changes: 21 additions & 0 deletions src/main/java/org/git_egylet/tools/RankComparator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package org.git_egylet.tools;

import com.wcs.poker.gamestate.Card;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

/**
*
* @author imate
*/
public class RankComparator implements Comparator<Card> {

private static final List<String> ranks = Arrays.asList("2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A");

@Override
public int compare(Card c1, Card c2) {
return ranks.indexOf(c2.getRank()) - ranks.indexOf(c1.getRank());
}

}
10 changes: 10 additions & 0 deletions src/main/java/org/git_egylet/tools/Tools.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package org.git_egylet.tools;

import com.wcs.poker.gamestate.Card;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

/**
Expand Down Expand Up @@ -31,4 +34,11 @@ public static List<Card> makeCardList(String... cards) {
}
return holeCards;
}

public static List<Card> orderCards(List<Card> cards) {
List<Card> orderedCards = new ArrayList<>();
orderedCards.addAll(cards);
Collections.sort(orderedCards,new RankComparator());
return orderedCards;
}
}
6 changes: 3 additions & 3 deletions src/main/java/org/leanpoker/player/CheckConditions.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import java.util.ArrayList;
import java.util.List;
import org.leanpoker.player.checkCards.CheckResult;
import org.leanpoker.player.checkCards.Hand;
import org.leanpoker.player.checkCards.HandRank;
import org.leanpoker.player.checkCards.HandChecker;
import org.leanpoker.player.strategies.*;

Expand Down Expand Up @@ -57,7 +57,7 @@ public int check() {
private void preFlop() {
HandChecker handChecker = new HandChecker();
CheckResult checkResult = handChecker.getResult(gameState);
Hand hand = checkResult.getHand();
HandRank hand = checkResult.getHand();
String highRank1 = checkResult.getHighRank1();

switch (hand) {
Expand Down Expand Up @@ -101,7 +101,7 @@ private void preFlop() {
private void afterPreFlop() {
HandChecker handChecker = new HandChecker();
CheckResult checkResult = handChecker.getResult(gameState);
Hand hand = checkResult.getHand();
HandRank hand = checkResult.getHand();
String highRank1 = checkResult.getHighRank1();
String highRank2 = checkResult.getHighRank2();

Expand Down
25 changes: 18 additions & 7 deletions src/main/java/org/leanpoker/player/checkCards/Check.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.leanpoker.player.checkCards;

import com.wcs.poker.gamestate.Card;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

Expand All @@ -13,31 +14,41 @@ public abstract class Check {
protected static final List<String> ranks = Arrays.asList("2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A");
protected static final List<String> suits = Arrays.asList("clubs", "diamonds", "hearts", "spades");
protected List<Card> cards;
protected Hand hand;
protected List<Card> orderedCardList;
protected HandRank handRank;
protected String highRank1;
protected String highRank2;
protected int myCardsOfHand;

public CheckResult getResult(List<Card> cards) {
hand = null;
highRank1 = "";
highRank2 = "";
myCardsOfHand = 0;
initValues();
this.cards = cards;
check();
if (hand == null) {
if (handRank == null) {
return null;
} else {
return new CheckResult(hand, highRank1, highRank2, myCardsOfHand);
return new CheckResult(handRank, orderedCardList, highRank1, highRank2, myCardsOfHand);
}
}

protected abstract void check();

protected abstract void calcMyCardsOfHand();

protected abstract void makeOrderedCardList();

public boolean isApplicable(List<Card> cards) {
return getResult(cards) != null;
}

private void initValues() {
handRank = null;
highRank1 = "";
highRank2 = "";
myCardsOfHand = 0;
orderedCardList = new ArrayList<>();

This comment has been minimized.

Copy link
@thomastrinn

thomastrinn Apr 21, 2015

Contributor

Igen... ezek itt nagyon mágikus inicializálások... :) Látom leszármazottban lesznek felhasználva, jó kis myCardsOfHand++-ok beficcennek.
Valahogy picit idegenkedek egy ilyentől.

}

protected int countRank(String rank) {
int i = 0;
for (Card card : cards) {
Expand Down
41 changes: 33 additions & 8 deletions src/main/java/org/leanpoker/player/checkCards/CheckDrill.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.leanpoker.player.checkCards;

import com.wcs.poker.gamestate.Card;
import org.git_egylet.tools.Tools;
import static org.leanpoker.player.checkCards.Check.*;

/**
Expand All @@ -13,18 +14,42 @@ public class CheckDrill extends Check {
protected void check() {
for (String rank : ranks) {
if (countRank(rank) == 3) {
hand = Hand.DRILL;
handRank = HandRank.DRILL;
highRank1 = rank;
}
}

//myCardsOfHand kiszámítása:
if (hand != null) {
for (Card card : cards) {
if (card.isInMyHand() && card.getRank().equals(highRank1)) {
myCardsOfHand++;
}
if (handRank != null) {
calcMyCardsOfHand();
makeOrderedCardList();
}
}

@Override
protected void calcMyCardsOfHand() {
for (Card card : cards) {
if (card.isInMyHand() && card.getRank().equals(highRank1)) {
myCardsOfHand++;
}
}
}

@Override
protected void makeOrderedCardList() {
for (Card card : cards) {
if (card.isEqualRank(highRank1)) {
orderedCardList.add(card);
//cards.remove(card); ez sajnos nem jött be (ConcurrentModificationException)

This comment has been minimized.

Copy link
@thomastrinn

thomastrinn Apr 21, 2015

Contributor

Igen, mert ép for ciklusban végigiterálsz és a remove-al módosítani szeretnéd a listát, ez nem szép dolog.
Érdemes iterator-t használni, annak van remove()-ja.

}
}
cards = Tools.orderCards(cards);
int i = 0;
Card actCard;
while (orderedCardList.size() < 5) {
actCard = cards.get(i);
if (!actCard.isEqualRank(highRank1)) {
orderedCardList.add(actCard);
}
i++;

This comment has been minimized.

Copy link
@thomastrinn

thomastrinn Apr 21, 2015

Contributor

itt egy for ciklus lett volna jó:

for (int i = 0; i < cards.size() && orderedCardsList.size() < 5; i++) {
    Card actualCard = cards.get(i);
    if (!actCard.isEqualRank(highRank1)) {
        orderedCardList.add(actCard);
    }
}
}
}

Expand Down
36 changes: 27 additions & 9 deletions src/main/java/org/leanpoker/player/checkCards/CheckFlush.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package org.leanpoker.player.checkCards;

import com.wcs.poker.gamestate.Card;
import java.util.List;
import org.git_egylet.tools.Tools;
import static org.leanpoker.player.checkCards.Check.*;

/**
Expand All @@ -9,32 +11,48 @@
*/
public class CheckFlush extends Check {

private String flushSuit = "";

@Override
protected void check() {
String flushSuit = "";
for (String suit : suits) {
if (countSuit(suit) >= 5) {
hand = Hand.FLUSH;
handRank = HandRank.FLUSH;
flushSuit = suit;
}
}
//legmagasabb lap kiszámítása flush esetén
if (hand == hand.FLUSH) {
if (handRank == handRank.FLUSH) {
for (String rank : ranks) {
if (countRank(rank) > 0) {
highRank1 = rank;
}
}
}

//myCardsOfHand kiszámítása:
if (hand != null) {
for (Card card : cards) {
if (card.isInMyHand() && card.getSuit().equals(flushSuit)) {
myCardsOfHand++;
}
if (handRank != null) {
calcMyCardsOfHand();
makeOrderedCardList();
}
}

@Override
protected void calcMyCardsOfHand() {
for (Card card : cards) {
if (card.isInMyHand() && card.getSuit().equals(flushSuit)) {
myCardsOfHand++;
}
}
}

@Override
protected void makeOrderedCardList() {
for (Card card : cards) {
if (card.isEqualSuit(flushSuit)) {
orderedCardList.add(card);
}
}
orderedCardList = Tools.orderCards(orderedCardList);
}

}
37 changes: 30 additions & 7 deletions src/main/java/org/leanpoker/player/checkCards/CheckFull.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package org.leanpoker.player.checkCards;

import com.wcs.poker.gamestate.Card;
import java.util.ArrayList;
import java.util.List;
import static org.leanpoker.player.checkCards.Check.*;

/**
Expand All @@ -24,19 +26,40 @@ protected void check() {
for (String rank : ranks) {
if (countRank(rank) == 2) {
highRank2 = rank;
hand = Hand.FULL;
handRank = HandRank.FULL;
}
}
}

//myCardsOfHand kiszámítása:
if (hand != null) {
for (Card card : cards) {
if (card.isInMyHand() && (card.getRank().equals(highRank1) || card.getRank().equals(highRank2))) {
myCardsOfHand++;
}
if (handRank != null) {
calcMyCardsOfHand();
makeOrderedCardList();
}
}

@Override
protected void calcMyCardsOfHand() {
for (Card card : cards) {
if (card.isInMyHand() && (card.getRank().equals(highRank1) || card.getRank().equals(highRank2))) {
myCardsOfHand++;
}
}

This comment has been minimized.

Copy link
@thomastrinn

thomastrinn Apr 21, 2015

Contributor

Ezt lehetne picit elegánsabban is:

List<String> acceptedRanks = Arrays.asList(highRank1, highRank2);
for (Card card : cards) {
    if (card.isInMyHand() && acceptedRanks.contains(card.getRank()) {
        myCardsOfHand++;
    }
}
}

@Override
protected void makeOrderedCardList() {
List<Card> drillCards = new ArrayList<>();
List<Card> pairCards = new ArrayList<>();
for (Card card : cards) {
if (card.isEqualRank(highRank1)) {
drillCards.add(card);
}
if (card.isEqualRank(highRank2)) {
pairCards.add(card);
}
}
orderedCardList.addAll(drillCards);
orderedCardList.addAll(pairCards);
}

}
30 changes: 21 additions & 9 deletions src/main/java/org/leanpoker/player/checkCards/CheckHighCard.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package org.leanpoker.player.checkCards;

import com.wcs.poker.gamestate.Card;
import static org.leanpoker.player.checkCards.Check.*;
import org.git_egylet.tools.Tools;

/**
*
Expand All @@ -11,13 +10,26 @@ public class CheckHighCard extends Check {

@Override
protected void check() {
for (String rank : ranks) {
for (Card card : cards) {
if (card.isInMyHand() && card.isEqualRank(rank)) {
highRank1 = rank;
hand = Hand.HIGH_CARD;
myCardsOfHand = 1;
}
handRank = HandRank.HIGH_CARD;
makeOrderedCardList();
highRank1 = orderedCardList.get(0).getRank();
highRank2 = orderedCardList.get(1).getRank();
}

@Override
protected void calcMyCardsOfHand() {
}

@Override
protected void makeOrderedCardList() {
cards = Tools.orderCards(cards);
int i = 0;
if (cards.size() == 2) {
orderedCardList.addAll(cards);
} else {
while (orderedCardList.size() < 5) {
orderedCardList.add(cards.get(i));
i++;

This comment has been minimized.

Copy link
@thomastrinn

thomastrinn Apr 21, 2015

Contributor

Azt hiszem erre is volna egy egyszerűbb megoldás:

orderedCardList.addAll(cards.sublist(0, 5));
}
}
}
Expand Down
Loading

0 comments on commit 52cb6b4

Please sign in to comment.