Advertisement
Guest User

Untitled

a guest
Jun 17th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.85 KB | None | 0 0
  1. package main;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Arrays;
  5. import java.util.Collections;
  6. import java.util.Comparator;
  7. import java.util.stream.Stream;
  8.  
  9. /**
  10. *
  11. * @author Tamir
  12. */
  13. public class Hand {
  14.  
  15. private Card[] hand = new Card[2];
  16.  
  17. public enum HandRank {
  18.  
  19. ROYAL_FLUSH,
  20. STRAIGHT_FLUSH,
  21. FOUR_OF_A_KIND,
  22. FULL_HOUSE,
  23. FLUSH,
  24. STRAIGHT,
  25. THREE_OF_A_KIND,
  26. TWO_PAIR,
  27. PAIR,
  28. HIGH_CARD;
  29. }
  30.  
  31. public Hand() {
  32. }
  33.  
  34. public Hand(Card[] hand) {
  35. this.hand = hand;
  36. }
  37.  
  38. public Card[] getHand() {
  39. return hand;
  40. }
  41.  
  42. public void setHand(Card[] hand) {
  43. this.hand = hand;
  44. }
  45.  
  46. public void printHand() {
  47. for (Card c : hand) {
  48. System.out.println(c);
  49. }
  50. }
  51.  
  52. public HandRank determineHandRank(Card[] flop) {
  53. if (isARoyalFlush(flop)) {
  54. return HandRank.ROYAL_FLUSH;
  55. } else if (isAStraightFlush(flop)) {
  56. return HandRank.STRAIGHT_FLUSH;
  57.  
  58. } else if (isAFourOfAKind(flop)) {
  59. return HandRank.FOUR_OF_A_KIND;
  60. } else if (isAFullHouse(flop)) {
  61. return HandRank.FULL_HOUSE;
  62. } else if (isAFlush(flop)) {
  63. return HandRank.FLUSH;
  64. } else if (isAStraight(flop)) {
  65. return HandRank.STRAIGHT;
  66. } else if (isThreeOfAKind(flop)) {
  67. return HandRank.THREE_OF_A_KIND;
  68. } else if (isTwoPair(flop)) {
  69. return HandRank.TWO_PAIR;
  70. } else if (isPair(flop)) {
  71. return HandRank.PAIR;
  72. } else {
  73. return HandRank.HIGH_CARD;
  74. }
  75.  
  76. }
  77.  
  78. public boolean isARoyalFlush(Card[] flop) {
  79. if (isAStraight(flop) && isAFlush(flop)) {
  80. Card[] allCards = Stream.concat(Arrays.stream(flop), Arrays.stream(hand))
  81. .toArray(Card[]::new);
  82. boolean aceExists = false, kingExists = false, queenExists = false, jackExists = false, tenExists = false;
  83. for (Card c : allCards) {
  84. switch (c.getRank().getRank()) {
  85. case "ACE":
  86. aceExists = true;
  87. break;
  88. case "KING":
  89. kingExists = true;
  90. break;
  91. case "QUEEN":
  92. queenExists = true;
  93. break;
  94. case "JACK":
  95. jackExists = true;
  96. break;
  97. case "TEN":
  98. tenExists = true;
  99. break;
  100.  
  101. }
  102. }
  103. return (aceExists && kingExists && queenExists && jackExists && tenExists);
  104. } else {
  105. return false;
  106. }
  107. }
  108.  
  109. public boolean isAStraight(Card[] flop) {
  110. Card[] allCards = Stream.concat(Arrays.stream(flop), Arrays.stream(hand))
  111. .toArray(Card[]::new);
  112. Arrays.sort(allCards, byRank);
  113. int noOfCardsInARow = 0;
  114. int pos = 0;
  115. boolean isAStraight = false;
  116. while (pos < allCards.length - 1 && !isAStraight) {
  117. if (allCards[pos + 1].getRank().getValue() - allCards[pos].getRank().getValue() == 1) {
  118. noOfCardsInARow++;
  119. if (noOfCardsInARow == 4) {
  120. isAStraight = true;
  121. } else {
  122. pos++;
  123. }
  124. } else {
  125. noOfCardsInARow = 0;
  126. pos++;
  127. }
  128. }
  129. return isAStraight;
  130. }
  131.  
  132. public boolean isAFlush(Card[] flop) {
  133. Card[] allCards = Stream.concat(Arrays.stream(flop), Arrays.stream(hand))
  134. .toArray(Card[]::new);
  135. int noOfClubs = 0;
  136. int noOfSpades = 0;
  137. int noOfHearts = 0;
  138. int noOfDiamonds = 0;
  139. for (Card c : allCards) {
  140. switch (c.getSuit()) {
  141. case "HEART":
  142. noOfHearts++;
  143. break;
  144. case "SPADES":
  145. noOfSpades++;
  146. break;
  147. case "CLUBS":
  148. noOfClubs++;
  149. break;
  150. case "DIAMONDS":
  151. noOfDiamonds++;
  152. break;
  153. }
  154. }
  155. return (noOfClubs == 5 || noOfSpades == 5 || noOfHearts == 5 || noOfDiamonds == 5);
  156. }
  157.  
  158. private boolean isThreeOfAKind(Card[] flop) {
  159. Card[] allCards = Stream.concat(Arrays.stream(flop), Arrays.stream(hand))
  160. .toArray(Card[]::new);
  161. int cardRepeats = 1;
  162. boolean isThreeOfAKind = false;
  163. int i = 0;
  164. int k = i + 1;
  165. while (i < allCards.length && !isThreeOfAKind) {
  166. cardRepeats = 1;
  167. while (k < allCards.length && !isThreeOfAKind) {
  168. if (allCards[i].getRank().getValue() == allCards[k].getRank().getValue()) {
  169. cardRepeats++;
  170. if (cardRepeats == 3) {
  171. isThreeOfAKind = true;
  172. }
  173. }
  174. k++;
  175. }
  176. i++;
  177. }
  178. return isThreeOfAKind;
  179. }
  180.  
  181. private boolean isTwoPair(Card[] flop) {
  182. Card[] allCards = Stream.concat(Arrays.stream(flop), Arrays.stream(hand))
  183. .toArray(Card[]::new);
  184. int cardRepeats = 1;
  185. int noOfCardRepeats = 0;
  186. boolean isTwoPair = false;
  187. int i = 0;
  188. int k = i + 1;
  189. while (i < allCards.length && !isTwoPair) {
  190. cardRepeats = 1;
  191. while (k < allCards.length && !isTwoPair) {
  192. if (allCards[i].getRank().getValue() == allCards[k].getRank().getValue()) {
  193. cardRepeats++;
  194. if (cardRepeats == 2) {
  195. cardRepeats = 1;
  196. noOfCardRepeats++;
  197. if (noOfCardRepeats == 2) {
  198. isTwoPair = true;
  199.  
  200. }
  201. }
  202.  
  203. }
  204. k++;
  205. }
  206. i++;
  207. }
  208. return isTwoPair;
  209. }
  210.  
  211. private boolean isPair(Card[] flop) {
  212. Card[] allCards = Stream.concat(Arrays.stream(flop), Arrays.stream(hand))
  213. .toArray(Card[]::new);
  214. int cardRepeats = 1;
  215. boolean isPair = false;
  216. int i = 0;
  217. int k = i + 1;
  218. while (i < allCards.length && !isPair) {
  219. cardRepeats = 1;
  220. while (k < allCards.length && !isPair) {
  221. if (allCards[i].getRank().getValue() == allCards[k].getRank().getValue()) {
  222. cardRepeats++;
  223. if (cardRepeats == 2) {
  224. isPair = true;
  225. }
  226. }
  227. k++;
  228. }
  229. i++;
  230. }
  231. return isPair;
  232. }
  233. public Comparator<Card> byRank = (Card left, Card right) -> {
  234. if (left.getRank().getValue() < right.getRank().getValue()) {
  235. return -1;
  236. } else {
  237. return 1;
  238. }
  239. };
  240.  
  241. private boolean isAFullHouse(Card[] flop) {
  242. Card[] allCards = Stream.concat(Arrays.stream(flop), Arrays.stream(hand))
  243. .toArray(Card[]::new);
  244.  
  245. Arrays.sort(allCards, byRank);
  246. int noOfRepeats = 1;
  247. boolean isThreeOfAKind = false;
  248. boolean isTwoOfAKind = false;
  249. for (int i = 0; i < allCards.length - 1; i++) {
  250. if (allCards[i].getRank().getValue() == allCards[i + 1].getRank().getValue()) {
  251. noOfRepeats++;
  252. if (noOfRepeats == 3) {
  253. isThreeOfAKind = true;
  254. noOfRepeats = 1;
  255. } else if (noOfRepeats == 2) {
  256. isTwoOfAKind = true;
  257. noOfRepeats = 1;
  258. }
  259. } else {
  260. noOfRepeats = 1;
  261. }
  262. }
  263. return (isTwoOfAKind && isThreeOfAKind);
  264.  
  265. }
  266.  
  267. public boolean isAFourOfAKind(Card[] flop) {
  268. Card[] allCards = Stream.concat(Arrays.stream(flop), Arrays.stream(hand))
  269. .toArray(Card[]::new);
  270. int cardRepeats = 1;
  271. boolean isFourOfAKind = false;
  272. int i = 0;
  273. int k = i + 1;
  274. while (i < allCards.length && !isFourOfAKind) {
  275. cardRepeats = 1;
  276. while (k < allCards.length && !isFourOfAKind) {
  277. if (allCards[i].getRank().getValue() == allCards[k].getRank().getValue()) {
  278. cardRepeats++;
  279. if (cardRepeats == 4) {
  280. isFourOfAKind = true;
  281. }
  282. }
  283. k++;
  284. }
  285. i++;
  286. }
  287. return isFourOfAKind;
  288. }
  289.  
  290. private boolean isAStraightFlush(Card[] flop) {
  291. if (isAFlush(flop) && isAStraight(flop)) {
  292. return true;
  293. } else {
  294. return false;
  295. }
  296. }
  297.  
  298. public Card getHighCard(Card[] flop) {
  299. Card[] allCards = Stream.concat(Arrays.stream(flop), Arrays.stream(hand))
  300. .toArray(Card[]::new);
  301. Arrays.sort(allCards, byRank);
  302. return allCards[0];
  303. }
  304.  
  305. public Card getHandHighCard() {
  306. Arrays.sort(hand, byRank);
  307. return hand[0];
  308. }
  309. }
  310.  
  311. /*
  312. * To change this license header, choose License Headers in Project Properties.
  313. * To change this template file, choose Tools | Templates
  314. * and open the template in the editor.
  315. */
  316. package main;
  317.  
  318. /**
  319. *
  320. * @author Tamir
  321. */
  322. public class Card {
  323.  
  324. private String suit;
  325. private Rank rank;
  326. //isDealt: checks if the card is in play and out of the deck
  327. private boolean isDealt;
  328.  
  329. public Card() {
  330.  
  331. }
  332.  
  333. public Card(String suit, Rank rank, boolean isDealt) {
  334. this.suit = suit;
  335. this.rank = rank;
  336. this.isDealt = isDealt;
  337. }
  338.  
  339. public String getSuit() {
  340. return suit;
  341. }
  342.  
  343. public void setSuit(String suit) {
  344. this.suit = suit;
  345. }
  346.  
  347. public Rank getRank() {
  348. return rank;
  349. }
  350.  
  351. public void setRank(Rank rank) {
  352. this.rank = rank;
  353. }
  354.  
  355. public boolean isIsDealt() {
  356. return isDealt;
  357. }
  358.  
  359. public void setIsDealt(boolean isDealt) {
  360. this.isDealt = isDealt;
  361. }
  362.  
  363. @Override
  364. public String toString() {
  365. return suit + " " + rank;
  366. }
  367.  
  368. }
  369.  
  370. package main;
  371.  
  372. /**
  373. *
  374. * @author Tamir
  375. */
  376. public class Rank {
  377.  
  378. private int value;
  379. private String rank;
  380.  
  381. public Rank() {
  382. }
  383.  
  384. public Rank(int value, String rank) {
  385. this.value = value;
  386. this.rank = rank;
  387. }
  388.  
  389. public int getValue() {
  390. return value;
  391. }
  392.  
  393. public void setValue(int value) {
  394. this.value = value;
  395. }
  396.  
  397. public String getRank() {
  398. return rank;
  399. }
  400.  
  401. public void setRank(String rank) {
  402. this.rank = rank;
  403. }
  404.  
  405. @Override
  406. public String toString() {
  407. String stg = "";
  408. stg += this.rank + "(" + this.value + ")";
  409. return stg;
  410. }
  411.  
  412. }
  413.  
  414. return (noOfClubs == 5 || noOfSpades == 5 || noOfHearts == 5 || noOfDiamonds == 5);
  415.  
  416. return (noOfClubs >= 5 || noOfSpades >= 5 || noOfHearts >= 5 || noOfDiamonds >= 5);
  417.  
  418. public boolean isARoyalFlush(Card[] flop)
  419.  
  420. switch (c.getRank().getRank())
  421.  
  422. @Override
  423. public String toString() {
  424. return rank;
  425. }
  426.  
  427. private boolean isAStraightFlush(Card[] flop) {
  428. if (isAFlush(flop) && isAStraight(flop)) {
  429. return true;
  430. } else {
  431. return false;
  432. }
  433. }
  434.  
  435. private boolean isAStraightFlush(Card[] flop) {
  436. return isAFlush(flop) && isAStraight(flop);
  437. }
  438.  
  439. while (i < allCards.length && !isThreeOfAKind) {
  440. cardRepeats = 1;
  441. while (k < allCards.length && !isThreeOfAKind) {
  442. if (allCards[i].getRank().getValue() == allCards[k].getRank().getValue()) {
  443. cardRepeats++;
  444. if (cardRepeats == 3) {
  445. isThreeOfAKind = true;
  446. }
  447. }
  448. k++;
  449. }
  450. i++;
  451. }
  452. return isThreeOfAKind;
  453.  
  454. while (i < allCards.length) {
  455. cardRepeats = 1;
  456. while (k < allCards.length) {
  457. if (allCards[i].getRank().getValue() == allCards[k].getRank().getValue()) {
  458. cardRepeats++;
  459. if (cardRepeats == 3) {
  460. return true;
  461. }
  462. }
  463. k++;
  464. }
  465. i++;
  466. }
  467. return false;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement