diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..efec373 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +/bin/ +.classpath +.project +.settings \ No newline at end of file diff --git a/BowlingKata/.classpath b/BowlingKata/.classpath deleted file mode 100644 index 1b83178..0000000 --- a/BowlingKata/.classpath +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/BowlingKata/.project b/BowlingKata/.project deleted file mode 100644 index 9fccbe4..0000000 --- a/BowlingKata/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - BowlingKata - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/BowlingKata/.settings/org.eclipse.jdt.core.prefs b/BowlingKata/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 3a21537..0000000 --- a/BowlingKata/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,11 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/PokerKata/.classpath b/PokerKata/.classpath deleted file mode 100644 index 1b83178..0000000 --- a/PokerKata/.classpath +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/PokerKata/.project b/PokerKata/.project deleted file mode 100644 index c950868..0000000 --- a/PokerKata/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - PokerKata - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/PokerKata/.settings/org.eclipse.jdt.core.prefs b/PokerKata/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 3a21537..0000000 --- a/PokerKata/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,11 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/PokerKata/src/session3/PokerGame.java b/PokerKata/src/session3/PokerGame.java index 92587ee..57a71ea 100644 --- a/PokerKata/src/session3/PokerGame.java +++ b/PokerKata/src/session3/PokerGame.java @@ -1,6 +1,7 @@ package session3; public class PokerGame { +<<<<<<< HEAD public Player calculateWinningPlayer(Player left, Player right) { @@ -12,9 +13,214 @@ public class PokerGame { Player pairResult = PairRule.compare(left, right); if(pairResult != null){ return pairResult; +======= + public int getScore(String hand) { + int score = 0; + char[] values = getValues(hand); + char[] colors = getColors(hand); + + if (findStraightFlush(values, colors) == true) + score = 14; + else if (findStraight(values) == true) + score = 12; + else if (findFlush(colors) == true) + score = 10; + else if (findFullHouse(values) == true) + score = 9; + else if (findFourOfAKind(values) == true) + score = 7; + else if (findTwoPairs(values) == true) + score = 6; + else if (findThreeOfAKind(values) == true) + score = 3; + else if (findPair(values) == true) + score = 2; + else + score = 0; + return score; + } + + /** + * Finds a pair by looking if two cards next to each other has the same + * value + * + * @param hand + * @return true if there is a pair, otherwise false + */ + private boolean findPair(char[] values) { + + // Loop again, find pair + for (int i = 0; i < values.length - 1; i++) { + if (values[i] == values[i + 1]) + return true; + } + return false; + } + + /** + * Finds a pair by looking if three cards next to each other has the same + * value + * + * @param hand + * @return true if there is a Three of a kind, otherwise false + */ + private boolean findThreeOfAKind(char[] values) { + + // Loop again, find three of a kind + for (int i = 0; i < values.length - 2; i++) { + if (values[i] == values[i + 1] && values[i + 1] == values[i + 2]) + return true; +>>>>>>> origin/master } return HighCardRule.compare(left, right); } +<<<<<<< HEAD +======= + /** + * Finds two pairs by looking for a pair, and them look if the remaining + * cards is a pair + * + * @param hand + * @return true if there is two pairs, otherwise false + */ + private boolean findTwoPairs(char[] values) { + + try { + // Loop again, find pair + for (int i = 0; i < values.length - 1; i++) { + if (values[i] == values[i + 1]) { + if (values[i + 2] == values[i + 3] + || values[i + 3] == values[i + 4]) { + return true; + } + } + } + } + catch (ArrayIndexOutOfBoundsException e) { + return false; + } + return false; + } + + /** + * Finds Four of a kind by first finding Three of a kind and then looks if + * one of the remaining cards matches + * + * @param hand + * @return true if there is a Four of a kind, otherwise false + */ + private boolean findFourOfAKind(char[] values) { + + // Loop again, find three of a kind + for (int i = 0; i < values.length - 2; i++) { + if (values[i] == values[i + 1] && values[i + 1] == values[i + 2] + && values[i + 2] == values[i + 3]) + return true; + } + return false; + } + + /** + * Finds a Full house. We have a Full House if the first and last two cards + * are a pair, and the middle card has same value as either of them (is + * three of a kind) + * + * @param hand + * @return true if there is a Full House, otherwise false + */ + private boolean findFullHouse(char[] values) { + + if (values[0] == values[1] && values[3] == values[4] + && (values[0] == values[2] || values[2] == values[3])) + return true; + return false; + } + + /** + * Finds a Flush by looking if all cards has the same colors + * + * @param hand + * @return true if there is a flush, otherwise false + */ + private boolean findFlush(char[] colors) { + + // Loop again, find pair + if (colors[0] == colors[1] && colors[1] == colors[2] + && colors[2] == colors[3] && colors[3] == colors[4]) + return true; + return false; + } + + /** + * Finds a Straight by looking if the value of the next card is 1 higher + * throughout all the cards + * + * @param values + * @return true if there is a straight, otherwise false + */ + private boolean findStraight(char[] values) { + for (int i = 0; i < values.length - 1; i++) + if (values[i + 1] != values[i] + 1) + return false; + return true; + } + + /** + * Finds a Straight Flush by first looking for a Straight and then the Flush + * + * @param values + * @param colors + * @return + */ + private boolean findStraightFlush(char[] values, char[] colors) { + for (int i = 0; i < values.length - 1; i++) + if (values[i + 1] != values[i] + 1) + return false; + if (colors[0] == colors[4]) + return true; + else + return false; + } + + /** + * Extracts all the values from the given String (hand) + * + * @param hand + * @return The values of all the cards + */ + private char[] getValues(String hand) { + char[] values = "".toCharArray(); + String temp = ""; + + // Find all values + for (int i = 1; i < hand.length(); i += 2) { + temp += hand.charAt(i); + } + values = temp.toCharArray(); + Arrays.sort(values); + return values; + } + + /** + * Extracts all the colors from the given String (hand) + * + * @param hand + * @return The colors of all the cards + */ + private char[] getColors(String hand) { + char[] colors = "".toCharArray(); + String temp = ""; + + // Find all values + for (int i = 0; i < hand.length() - 1; i += 2) { + temp += hand.charAt(i); + } + colors = temp.toCharArray(); + Arrays.sort(colors); + return colors; + } + +>>>>>>> origin/master } diff --git a/PokerKata/test/session3/PokerGameTest.java b/PokerKata/test/session3/PokerGameTest.java index 3d3e297..3a2e29e 100644 --- a/PokerKata/test/session3/PokerGameTest.java +++ b/PokerKata/test/session3/PokerGameTest.java @@ -39,4 +39,32 @@ public class PokerGameTest { assertEquals("White", winningPlayer.getPlayerName()); } + + @Test + public void straight_gives_12() throws Exception { + String hand = "K2S3H4R5R6"; + + int result = myGame.getScore(hand); + + assertEquals(12, result); + } + + @Test + public void straight_flush_gives_14() throws Exception { + String hand = "K2K3K4K5K6"; + + int result = myGame.getScore(hand); + + assertEquals(14, result); + } + + @Test + @Ignore + public void royal_straight_flush_gives_16() throws Exception { + String hand = "R10RKRDRKRE"; + + int result = myGame.getScore(hand); + + assertEquals(16, result); + } } diff --git a/README.md b/README.md index 926eacb..1248f82 100644 --- a/README.md +++ b/README.md @@ -68,6 +68,26 @@ Inom WhiteBox-test har man möjligheten att kunna titta in i lådan för att se ## 3. Test Double Inför detta pas gjorde vi som hemarbete den tredje katan, Poker Kata +Nu skall den göras på riktigt. + +### Klassdiagram + +#### Kort +- Färg +- Värde + +#### Kortlek +- Kort +- Blanda + +#### Spelare +- 5 Kort + +#### Spel +- Kortlek +- Regler +- Spelare +- Jämför händer ## 4. Clean Code + ATDD