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