Java poker implementation
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  2. <html>
  3. <head>
  4. <title>JaPoker: A Java Poker implementation</title>
  5. <style type="text/css">
  6. body {
  7. margin: 90px 30px;
  8. .font-size: large;
  9. }
  10. h1 {
  11. position: absolute;
  12. top: 0px;
  13. left: 0px;
  14. width: 100%;
  15. background-color: #ccc;
  16. margin: 0px;
  17. padding: 10px 0px;
  18. border-bottom: 1px solid black;
  19. }
  20. h1 img {
  21. margin: 0px 5px 0px 10px;
  22. }
  23. .thumbs {
  24. float: right;
  25. width: 250px;
  26. text-align: center;
  27. }
  28. .thumbs a {
  29. text-decoration: none;
  30. }
  31. .thumbs a img {
  32. border: 0px;
  33. }
  34. .main {
  35. margin-right: 270px;
  36. }
  37. h2 {
  38. border-bottom: 5px solid #ccc;
  39. }
  40. h3 {
  41. border-bottom: 3px solid #ccc;
  42. }
  43. th {
  44. text-align: left;
  45. border-bottom: 2px solid #ccc;
  46. }
  47. td, th {
  48. margin: 2px 10px;
  49. }
  50. table {
  51. width: 100%;
  52. }
  53. tr.o td {
  54. background-color: #ccc;
  55. }
  56. </style>
  57. <link rel="stylesheet" href="css/lightbox.css" type="text/css">
  58. </head>
  59. <body>
  60. <h1><img src="icon.png" alt="Card icon"> JaPoker</h1>
  61. <div class="thumbs">
  62. <a href="poker-13-appearance.png" rel="lightbox[screens]" title="JaPoker release 13, appearance settings">
  63. <img src="thumbs/poker-13-appearance.png" alt="Screenshot thumbnail"><br>
  64. Release 13 (config)<br>
  65. </a>
  66. <br><br>
  67. <a href="japoker-omaha.png" rel="lightbox[screens]" title="JaPoker release 10">
  68. <img src="thumbs/japoker-omaha.png" alt="Screenshot thumbnail"><br>
  69. Release 10<br>
  70. </a>
  71. <br><br>
  72. <a href="poker-6-game.png" rel="lightbox[screens]" title="JaPoker release 6">
  73. <img src="thumbs/poker-6-game.png" alt="Screenshot thumbnail"><br>
  74. Release 6<br>
  75. </a>
  76. <br><br>
  77. <a href="poker-6-config.png" rel="lightbox[screens]" title="JaPoker release 6, config screen">
  78. <img src="thumbs/poker-6-config.png" alt="Screenshot thumbnail"><br>
  79. Release 6 (config)<br>
  80. </a>
  81. <br><br>
  82. <a href="poker-5.png" rel="lightbox[screens]" title="JaPoker release 5">
  83. <img src="thumbs/poker-5.png" alt="Screenshot thumbnail"><br>
  84. Release 5<br>
  85. </a>
  86. <br><br>
  87. <a href="poker.png" rel="lightbox[screens]" title="JaPoker release 2">
  88. <img src="thumbs/poker.png" alt="Screenshot thumbnail"><br>
  89. Release 2
  90. </a>
  91. </div>
  92. <div class="main">
  93. <p class="blurb">
  94. JaPoker is a Java Poker game. It supports several poker variants (see table
  95. below), and from 2 to 14 players (depending on the variant). Players can
  96. at present either be local human players, or one of three primitive
  97. computer-controlled players.
  98. </p>
  99. <p>
  100. JaPoker requires Java version 1.6 or greater to run,
  101. which can be obtained from
  102. <a href="http://www.java.com/">www.java.com</a>.
  103. </p>
  104. <h2>Download</h2>
  105. <p>
  106. Release 12 may be downloaded from <a href="https://github.com/csmith/JaPoker/releases/download/v12/CardGame.jar">GitHub</a>.
  107. </p>
  108. <h2>Games</h2>
  109. <table>
  110. <tr><th>Game</th><th>Release</th><th>Max players</th><th>Notes</th></tr>
  111. <tr><td>Texas Hold'Em</td><td>1</td><td>14</td><td>The most
  112. commonly played poker variant<br>&nbsp;</td></tr>
  113. <tr class="o"><td>Royal Hold'Em</td><td>6</td><td>6</td><td>Texas Hold'Em variant.
  114. <br>Cards below 10 are stripped from the deck</td></tr>
  115. <tr><td>Five Card Stud</td><td>8</td><td>10</td><td>The earliest form of
  116. stud poker<br>&nbsp;</td></tr>
  117. <tr class="o"><td>Asian Five Card Stud</td><td>8</td><td>6</td><td>Five Card Stud variant.
  118. <br>Cards below 7 are stripped from the deck</td></tr>
  119. <tr><td>Seven Card Stud</td><td>8</td><td>8</td><td>Popular stud variant
  120. <br>&nbsp;</td></tr>
  121. <tr class="o"><td>Omaha Hold'Em</td><td>10</td><td>10</td><td>Popular Hold'Em variant.
  122. <br>Players have 4 hole cards and must use exactly 2.</td></tr>
  123. <tr><td>Omaha High/Low</td><td>10</td><td>10</td><td>Omaha Hold'Em variant.
  124. <br>Half the pot is given to the person with the lowest hand.</td></tr>
  125. <tr class="o"><td>Courchevel</td><td>11</td><td>10</td><td>Omama Hold'Em variant.
  126. <br>One community card is dealt before the first round of betting.</td></tr>
  127. <tr><td>Super Hold'Em</td><td>11</td><td>14</td><td>Texas Hold'Em variant.
  128. <br>Each player has three hole cards, instead of two.</td></tr>
  129. <tr class="o"><td>Five-Card Draw</td><td>11</td><td>10</td><td>Popular draw game.
  130. <br>Players may replace hole cards after the first round.</td></tr>
  131. <tr><td>Pineapple</td><td>11</td><td>14</td><td>Texas Hold'Em variant.
  132. <br>Players start with three hole cards and discard one.</td></tr>
  133. <tr class="o"><td>Crazy Pineapple</td><td>11</td><td>14</td><td>Pineapple variant.
  134. <br>Players wait until after the flop to discard their card.</td></tr>
  135. </table>
  136. <h2>Future enhancements</h2>
  137. <ul>
  138. <li>Network player support</li>
  139. <li>Improved AI</li>
  140. <li>Way to restart tournaments</li>
  141. <li>Integrate raise dialog with main window</li>
  142. <li>
  143. More poker variants
  144. <ul>
  145. <li>Double-board Hold'Em (needs UI support for separate boards)</li>
  146. </ul>
  147. </li>
  148. <li>Tutorial mode</li>
  149. <li>Support for various limit types (no limit, pot limit, spread limit, fixed limit)</li>
  150. <li>Support for bring-ins</li>
  151. <li>Support for wild cards (needed for some variants)</li>
  152. <li>Achievements</li>
  153. <li>Better support for multiple local human players (card hiding, etc)</li>
  154. <li>Documentation for each poker variant</li>
  155. </ul>
  156. <h2>Changelog</h2>
  157. <h3>Release 12 to Release 13</h3>
  158. <ul>
  159. <li>Added animations for card dealing</li>
  160. <li>Added animations for card flipping</li>
  161. <li>Fixed incorrect amount being displayed when taking the big blind</li>
  162. <li>Card style and background colour can now be changed</li>
  163. <li>The last-used settings are now stored and used by default</li>
  164. <li>You can no longer raise if all your opponents are all-in</li>
  165. </ul>
  166. <h3>Release 11 to Release 12</h3>
  167. <ul>
  168. <li>Fixed bug where images wouldn't load when running from a jar</li>
  169. </ul>
  170. <h3>Release 10 to Release 11</h3>
  171. <ul>
  172. <li>Fixed bug in Omaha High/Low games when all bar one player folded</li>
  173. <li>Added Courchevel</li>
  174. <li>Expanded betting config tab to include more (non-operational) options</li>
  175. <li>Added keyboard shortcut for continue (space or enter)</li>
  176. <li>Added Super Hold'Em</li>
  177. <li>Added support for discarding cards</li>
  178. <li>Added Five-Card Draw</li>
  179. <li>Added Pineapple</li>
  180. <li>Added Crazy Pineapple</li>
  181. <li>Fixed bug with aces inappropriately being treated as low not high</li>
  182. <li>Fix bug that allowed you to raise beyond your available cash due to way raises were processed</li>
  183. </ul>
  184. <h3>Release 9 to Release 10</h3>
  185. <ul>
  186. <li>Fixed issue where if all bar one players went all-in, the last player didn't have to call.</li>
  187. <li>Added Omaha Hold'Em</li>
  188. <li>Added Omaha High/Low</li>
  189. <li>Added keyboard shortcuts for call/check (c), raise/open (r and o) and fold (f).</li>
  190. <li>Added basic version of new config screen</li>
  191. <li>Buttons are now slightly wider, and the text is properly centered rather than hard coded at a rough guess.</li>
  192. <li>Fixed bug where hands containing a flush were compared with all their cards, rather than just the 5 (highest) cards in the flush.</li>
  193. <li>All hole cards are now visible if there are no active, local, human players.</li>
  194. </ul>
  195. <h3>Release 8 to Release 9</h3>
  196. <ul>
  197. <li>Fixed null pointer exception</li>
  198. </ul>
  199. <h3>Release 7 to Release 8</h3>
  200. <ul>
  201. <li>Fixed cards being cleared after blinds (and thus blinds going missing).</li>
  202. <li>Implemented five card stud</li>
  203. <li>Implemented asian five card stud</li>
  204. <li>Player hands are now positioned and collapsed better</li>
  205. <li>Implemented seven card stud</li>
  206. <li>Only 5 cards per hand are now compared (i.e., e.g., a royal flush in the community cards would be a tie between all players, regardless of their hole cards).</li>
  207. <li>Full houses are now described as "X full of Y" not "Y among X".</li>
  208. </ul>
  209. <h3>Release 6 to Release 7</h3>
  210. <ul>
  211. <li>Fixed community and player cards not being reset after a game.</li>
  212. </ul>
  213. <h3>Release 5 to Release 6</h3>
  214. <ul>
  215. <li>Fixed issue where kickers were compared in the wrong order.</li>
  216. <li>Fixed issue where single card decks were compared incorrectly (this resulted in various sorting anamolies).</li>
  217. <li>Added icon to both config window and main game window.</li>
  218. <li>Fixed flushes being compared incorrectly.</li>
  219. <li>The end game AI is now basically functional.</li>
  220. <li>Massive code refactoring to improve maintainability.</li>
  221. <li>The 'two' rank has now been renamed to 'deuce'.</li>
  222. <li>Implemented Royal Hold'Em variant.</li>
  223. <li>Cards are now dealt from the left of the dealer, rather than from the first player.</li>
  224. </ul>
  225. <h3>Release 4 to Release 5</h3>
  226. <ul>
  227. <li>Centered the text on the speed buttons a little better.</li>
  228. <li>The number of raises per round can now be capped.</li>
  229. <li>Implemented 'heads up' rule for blinds when only two players are competing.</li>
  230. <li>Blinds are now actually paid before the cards are dealt.</li>
  231. <li>Cards are now dealt out properly (1 to each player, then a further 1 to each player), and there is now a short delay after each card so the deal is visible.</li>
  232. <li>The game window is now fully resizable.</li>
  233. <li>You now have to explicitly tell the game to continue after each game, rather than there being an arbitrary, long delay.</li>
  234. <li>Players in the bottom row are now drawn right-to-left so play goes in a clockwise circle.</li>
  235. <li>Increased maximum players to 14.</li>
  236. <li>The small circle indicating the active player is no longer shown during showdown.</li>
  237. </ul>
  238. <h3>Release 3 to Release 4</h3>
  239. <ul>
  240. <li>Re-fixed bug when painting community cards that aren't there.</li>
  241. <li>Raise dialog now gets positioned before becoming visible.</li>
  242. <li>Straights now have their Ts back.</li>
  243. <li>You can now open a round of bidding with a custom bet.</li>
  244. <li>Added end game AI.</li>
  245. <li>
  246. The flop/turn/river is no longer superfluously revealed after all players
  247. except one fold.
  248. </li>
  249. </ul>
  250. <h3>Release 2 to Release 3</h3>
  251. <ul>
  252. <li>
  253. Fixed issue where tournament ended when there were still multiple players,
  254. but all bar one had folded in the previous round.
  255. </li>
  256. <li>
  257. Fixed issue where game would halt (because of an exception) when performing
  258. a showdown with a player who is out.
  259. </li>
  260. <li>
  261. Fixed exception with window trying to draw community cards that aren't there
  262. </li>
  263. <li>
  264. Implemented dead button rule (big blind is always played by the next player
  265. in turn, and the small blind and dealer button move as needed).
  266. </li>
  267. <li>
  268. Fixed issue with players who weren't in paying blinds.
  269. </li>
  270. <li>
  271. Added speed options to the game window.
  272. </li>
  273. <li>
  274. Removed popup dialog for input in favour of buttons in the game window.
  275. </li>
  276. <li>
  277. The game window is no longer maximisable.
  278. </li>
  279. <li>
  280. The player is now prompted to enter an amount to raise by if they have
  281. more money than the minimum raise.
  282. </li>
  283. </ul>
  284. <h3>Release 1 to Release 2</h3>
  285. <ul>
  286. <li>Fixed issue where play would loop indefinitely</li>
  287. <li>The pot is now split correctly between winners</li>
  288. <li>Players that go all in now show "all in" instead of a 0 balance</li>
  289. <li>If there are more players than screen space cards are automatically stacked</li>
  290. <li>Added support for Antes</li>
  291. <li>Added new player controller - ConservativeOpener - that folds unless it has
  292. a good pair of cards</li>
  293. <li>Fixed issue with kickers being compared backwards</li>
  294. <li>Added config screen</li>
  295. </ul>
  296. </div>
  297. <script type="text/javascript" src="js/prototype.js"></script>
  298. <script type="text/javascript" src="js/scriptaculous.js?load=effects,builder"></script>
  299. <script type="text/javascript" src="js/lightbox.js"></script>
  300. <script>
  301. (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  302. (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  303. m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  304. })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
  305. ga('create', 'UA-54779037-2', 'auto');
  306. ga('send', 'pageview');
  307. </script>
  308. </body>
  309. </html>