{"id":569,"date":"2018-01-23T11:11:38","date_gmt":"2018-01-23T03:11:38","guid":{"rendered":"https:\/\/blog.jsjs.org\/?p=569"},"modified":"2018-01-23T11:11:38","modified_gmt":"2018-01-23T03:11:38","slug":"5%e4%b8%aa%e5%b0%8f%e6%97%b6%e5%86%99%e4%b8%80%e4%b8%aa%e6%89%91%e5%85%8b%e7%89%8c%e6%b8%b8%e6%88%8f-%e9%87%91%e9%92%a9%e9%92%93%e9%b1%bc","status":"publish","type":"post","link":"https:\/\/blog.jsjs.org\/?p=569","title":{"rendered":"5\u4e2a\u5c0f\u65f6\u5199\u4e00\u4e2a\u6251\u514b\u724c\u6e38\u620f\u2014\u2014\u91d1\u94a9\u9493\u9c7c"},"content":{"rendered":"<div class=\"clear\"><\/div>\n<div class=\"postBody\">\n<div id=\"cnblogs_post_body\" class=\"blogpost-body\">\n<p>\u3000\u3000\u7f57\u5927\u4f51\u6709\u6b4c\u4e91\uff1a\u201c\u65e0\u804a\u7684\u65e5\u5b50\u603b\u662f\u4f1a\u5199\u70b9\u65e0\u804a\u7684\u6b4c\u66f2&#8230;&#8230;\u201d\uff0c\u6211\u4e0d\u662f\u6b4c\u624b\uff0c\u6211\u662f\u7a0b\u5e8f\u5458\uff0c\u4e8e\u662f\u65e0\u804a\u7684\u65e5\u5b50\u603b\u662f\u4f1a\u5199\u70b9\u65e0\u804a\u7684\u7a0b\u5e8f\u3002\u7a0b\u5e8f\u4e0d\u80fd\u592a\u5927\uff0c\u4e0d\u7136\u6ca1\u6709\u65f6\u95f4\u5b8c\u6210\uff1b\u7a0b\u5e8f\u5e94\u8be5\u6709\u8da3\uff0c\u4e0d\u7136\u5c31\u8fbe\u4e0d\u5230\u6d88\u78e8\u65f6\u95f4\u7684\u76ee\u7684\uff1b\u7a0b\u5e8f\u5e94\u8be5\u6709\u90a3\u4e48\u4e00\u70b9\u6311\u6218\u6027\uff0c\u4e0d\u7136\u5373\u4f7f\u5199\u5b8c\u4e86\u4e5f\u6ca1\u6709\u8fdb\u6b65\u3002<\/p>\n<p>\u91d1\u94a9\u9493\u9c7c\u6e38\u620f\u662f\u6211\u513f\u65f6\u7ecf\u5e38\u73a9\u7684\u4e00\u79cd\u6251\u514b\u724c\u6e38\u620f\uff0c\u89c4\u5219\u975e\u5e38\u7b80\u5355\uff0c\u4e24\u4e2a\u73a9\u5bb6\uff0c\u4e00\u65e6\u724c\u53d1\u5230\u624b\u91cc\u4e4b\u540e\uff0c\u63a5\u4e0b\u6765\u6bcf\u4e2a\u4eba\u51fa\u4ec0\u4e48\u724c\u57fa\u672c\u4e0a\u5df2\u7ecf\u5c31\u5b9a\u4e86\uff0c\u73a9\u5bb6\u6ca1\u6709\u81ea\u5df1\u505a\u51b3\u7b56\u7684\u673a\u4f1a\uff0c\u6240\u4ee5\u8fd9\u4e2a\u6e38\u620f\u5f88\u5bb9\u6613\u7528\u7a0b\u5e8f\u81ea\u52a8\u6a21\u62df\u51fa\u6765\u3002<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/images2015.cnblogs.com\/blog\/341412\/201512\/341412-20151211093828480-134925628.png\" alt=\"\" width=\"547\" height=\"391\" \/><\/p>\n<p>&nbsp;<\/p>\n<p><strong>\uff08\u4e00\uff09\u5173\u4e8e\u91d1\u94a9\u9493\u9c7c\u6e38\u620f<\/strong><\/p>\n<p>\u57fa\u672c\u89c4\u5219\uff08\u7b80\u5316\u7248\uff09\uff1a\u4e24\u4e2a\u73a9\u5bb6\uff08Player\uff09\uff0c\u4e00\u526f\u6251\u514b(Deck)\uff0c\u5927\u5c0f\u738b(Joker)\u53ef\u8981\u53ef\u4e0d\u8981\uff0c\u6211\u4eec\u7684\u6e38\u620f\u5047\u5b9a\u5305\u542b\u5927\u5c0f\u738b\uff0c\u6d17\u724c(Shuffle)\u4e4b\u540e\uff0c\u6bcf\u4e2a\u73a9\u5bb6\u5f97\u5230\u540c\u6837\u6570\u76ee\u7684\u724c\uff0827\u5f20\uff09\uff0c\u73a9\u5bb6\u4efb\u4f55\u65f6\u5019\u4e0d\u80fd\u770b\u81ea\u5df1\u624b\u91cc\u7684\u724c\uff0c\u73a9\u5bb6\u4f9d\u6b21\u51fa\u724c\uff0c\u6bcf\u6b21\u51fa\u4e00\u5f20\uff0c\u8f6e\u5230\u81ea\u5df1\u51fa\u724c\u65f6\uff0c\u62bd\u51fa\u81ea\u5df1\u624b\u4e2d\u6700\u5e95\u4e0b\u7684\u4e00\u5f20\u724c\u653e\u5230\u724c\u684c\uff08Board\uff09\u4e0a\uff0c\u724c\u684c\u4e0a\u7684\u724c\u6309\u7167\u73a9\u5bb6\u51fa\u724c\u7684\u987a\u5e8f\u6446\u6210\u4e00\u6761\u957f\u94fe\u3002J\uff08\u94a9\uff09\u662f\u6700\u7279\u6b8a\u7684\u4e00\u5f20\u724c\uff0c\u5f53\u67d0\u4e2a\u73a9\u5bb6\u51fa\u5230J\u65f6\uff0c\u4fbf\u5c06\u724c\u684c\u4e0a\u7684\u6240\u6709\u724c\u90fd\u5f52\u4e3a\u5df1\u6709\uff0c\u5e76\u653e\u5230\u81ea\u5df1\u724c\u6c60\u7684\u6700\u4e0a\u9762\uff08\u4e0e\u51fa\u724c\u65f6\u6070\u6070\u76f8\u53cd\uff09\uff0c\u6b64\u5373\u6240\u8c13\u201c\u91d1\u94a9\u9493\u9c7c\u201d\uff0c\u6b64\u65f6\u724c\u684c\u6e05\u7a7a\uff0c\u518d\u7531\u6b64\u73a9\u5bb6\u91cd\u65b0\u51fa\u724c\u3002\u53e6\u5916\uff0c\u5f53\u81ea\u5df1\u51fa\u7684\u724c\u4e0e\u724c\u684c\u4e0a\u7684\u67d0\u5f20\u724c\u70b9\u6570\u76f8\u540c\u65f6\uff0c\u4fbf\u5c06\u724c\u684c\u4e2d\u90a3\u5f20\u724c\u53ca\u5176\u4e4b\u540e\u7684\u724c\u90fd\u5f52\u4e3a\u5df1\u6709\uff08\u5305\u542b\u81ea\u5df1\u521a\u51fa\u7684\u90a3\u5f20\uff09\uff0c\u518d\u7531\u6b64\u73a9\u5bb6\u91cd\u65b0\u51fa\u724c\uff0c\u6bd4\u5982\u724c\u684c\u4e0a\u7684\u724c\u4e3a3\uff0c7\uff0c8\uff0c4\uff0c9\uff0c\u5f53\u67d0\u4e2a\u73a9\u5bb6\u51fa\u4e868\uff0c\u4fbf\u5c06\u724c\u684c\u4e0a\u76848\uff0c4\uff0c9\u8fde\u540c\u81ea\u5df1\u521a\u51fa\u76848\u4e00\u5e76\u6536\u56de\uff0c\u6d3e\u684c\u4e0a\u5269\u4e0b3\uff0c7\u3002\u6700\u540e\uff0c\u8c01\u624b\u4e2d\u7684\u724c\u6700\u5148\u51fa\u5b8c\uff0c\u8c01\u5c31\u8f93\u4e86\u3002<\/p>\n<p>&nbsp;<\/p>\n<p><strong>\uff08\u4e8c\uff09\u5bf9\u4e8e\u4e00\u526f\u724c\u7684\u5efa\u6a21<\/strong><\/p>\n<p>\u7531\u4e8e\u82b1\u8272(Suit)\u5bf9\u4e8e\u6b64\u6e38\u620f\u5e76\u4e0d\u91cd\u8981\uff0c\u6240\u4ee5\u5bf9\u6251\u514b\u724c\u5efa\u6a21\u65f6\u7701\u7565\u4e86\u5bf9\u82b1\u8272\u7684\u5efa\u6a21\uff0c\u540c\u6837\uff0c\u7531\u4e8e\u4e0d\u9700\u8981\u6bd4\u8f83\u5927\u5c0f\uff0c\u724c\u7684\u70b9\u6570\uff08Rank\uff09\u53ef\u4ee5\u7528String\u6765\u8868\u793a(\u5176\u4e2d\u738b\u7528&#8221;W&#8221;\u8868\u793a)\u3002<\/p>\n<div class=\"cnblogs_code\"><img decoding=\"async\" id=\"code_img_opened_41d683de-fcb1-4c9b-a42d-d11b95cf63cd\" class=\"code_img_opened\" src=\"https:\/\/images.cnblogs.com\/OutliningIndicators\/ExpandedBlockStart.gif\" alt=\"\" \/><\/p>\n<div id=\"cnblogs_code_open_41d683de-fcb1-4c9b-a42d-d11b95cf63cd\" class=\"cnblogs_code_hide\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>package com.thoughtworks.davenkin.simplefishinggame;\n\npublic class Card {\n    private String rank;\n\n    public Card(String rank) {\n        this.rank = rank;\n    }\n\n    public String getRank() {\n        return rank;\n    }\n}<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<\/div>\n<p>\u4e00\u526f\u6251\u514b\uff08Deck\uff09\u753154\u5f20\u724c\u7ec4\u6210\uff1a<\/p>\n<div class=\"cnblogs_code\"><img decoding=\"async\" id=\"code_img_opened_bbcbc399-9c00-4ddc-a77e-edb8964607d9\" class=\"code_img_opened\" src=\"https:\/\/images.cnblogs.com\/OutliningIndicators\/ExpandedBlockStart.gif\" alt=\"\" \/><\/p>\n<div id=\"cnblogs_code_open_bbcbc399-9c00-4ddc-a77e-edb8964607d9\" class=\"cnblogs_code_hide\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>package com.thoughtworks.davenkin.simplefishinggame;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\n\npublic class Deck {\n    ArrayList&lt;Card&gt; cards = new ArrayList&lt;Card&gt;();\n\n    public Deck() {\n        buildDeck();\n    }\n\n    private void buildDeck() {\n        buildNumberCards();\n        buildCard(\"J\");\n        buildCard(\"Q\");\n        buildCard(\"K\");\n        buildCard(\"A\");\n        buildJokerCard();\n    }\n\n    private void buildJokerCard() {\n        cards.add(new Card(\"W\"));\n        cards.add(new Card(\"W\"));\n    }\n\n    private void buildNumberCards() {\n        for (int rank = 2; rank &lt;= 10; rank++) {\n            buildCard(rank);\n        }\n    }\n\n    private void buildCard(int rank) {\n        for (int index = 1; index &lt;= 4; index++) {\n            cards.add(new Card(String.valueOf(rank)));\n        }\n    }\n\n    private void buildCard(String rank) {\n        for (int index = 1; index &lt;= 4; index++) {\n            cards.add(new Card(rank));\n        }\n    }\n\n    public ArrayList&lt;Card&gt; getCards() {\n        return cards;\n    }\n\n    public void shuffle() {\n        Collections.shuffle(cards);\n    }\n}<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<\/div>\n<p>Deck\u4e0d\u4ec5\u5305\u542b54\u5f20\u724c\uff0c\u8fd8\u5b9a\u4e49\u4e86\u6d17\u724c\uff08shuffle\uff09\u7b49\u65b9\u6cd5\u3002<\/p>\n<p>&nbsp;<\/p>\n<p><strong>\uff08\u4e09\uff09\u5bf9\u73a9\u5bb6\u7684\u5efa\u6a21<\/strong><\/p>\n<p>\u73a9\u5bb6\uff08Player\uff09\u6709\u81ea\u5df1\u7684\u540d\u5b57\u548c\u81ea\u5df1\u624b\u4e2d\u6240\u5269\u7684\u724c\uff0c\u6700\u91cd\u8981\u7684\u662f\u51fa\u724c\uff08playCard\uff09\u6210\u5458\u65b9\u6cd5\uff1a<\/p>\n<div class=\"cnblogs_code\"><img decoding=\"async\" id=\"code_img_opened_615c263a-4b87-418e-b4a4-bffd6eab8133\" class=\"code_img_opened\" src=\"https:\/\/images.cnblogs.com\/OutliningIndicators\/ExpandedBlockStart.gif\" alt=\"\" \/><\/p>\n<div id=\"cnblogs_code_open_615c263a-4b87-418e-b4a4-bffd6eab8133\" class=\"cnblogs_code_hide\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>package com.thoughtworks.davenkin.simplefishinggame;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class Player {\n    ArrayList&lt;Card&gt; cards = new ArrayList&lt;Card&gt;();\n    String name;\n\n    public Player(String name) {\n        this.name = name;\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public ArrayList&lt;Card&gt; getCards() {\n        return cards;\n    }\n\n    public void obtainCards(List&lt;Card&gt; cardsToAdd) {\n        cards.addAll(cardsToAdd);\n    }\n\n\n    public void playCard(Board board) {\n        board.addCard(cards.get(0));\n        System.out.println(name + \" played \" + cards.get(0).getRank());\n        board.displayCards();\n        cards.remove(0);\n    }\n\n    public void displayCards() {\n        System.out.print(\"Cards for \" + name + \": \");\n        for (Card card : cards) {\n            System.out.print(card.getRank() + \" \");\n        }\n\n        System.out.println();\n\n    }\n\n}<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<\/div>\n<p>\u6e38\u620f\u5f00\u59cb\u9700\u8981\u53d1\u724c\uff0c\u4e13\u95e8\u5b9a\u4e49\u4e86\u4e00\u4e2aCardDistributor\u6765\u53d1\u724c\uff0c\u6bcf\u4e2a\u73a9\u5bb6\u5f97\u5230\u76f8\u540c\u6570\u91cf\u7684\u724c\u3002\u5f53\u7136\uff0c\u53d1\u724c\u52a8\u4f5c\u5e94\u8be5\u5728\u6d17\u724c\u4e4b\u540e\uff1a<\/p>\n<div class=\"cnblogs_code\"><img decoding=\"async\" id=\"code_img_opened_72527ae4-e43f-40a5-ada8-15d2d82e3dd1\" class=\"code_img_opened\" src=\"https:\/\/images.cnblogs.com\/OutliningIndicators\/ExpandedBlockStart.gif\" alt=\"\" \/><\/p>\n<div id=\"cnblogs_code_open_72527ae4-e43f-40a5-ada8-15d2d82e3dd1\" class=\"cnblogs_code_hide\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>package com.thoughtworks.davenkin.simplefishinggame;\n\nimport java.util.List;\n\npublic class CardDistributor {\n\n    public void distributeCards(Deck deck, List&lt;Player&gt; players) {\n        int cardsPerPlayer = deck.getCards().size() \/ players.size();\n        int startIndex = 0;\n        for (Player player : players) {\n            player.obtainCards(deck.getCards().subList(startIndex, cardsPerPlayer + startIndex));\n            startIndex += cardsPerPlayer;\n        }\n    }\n}<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<\/div>\n<p>\u73a9\u5bb6\u5728\u51fa\u724c\u65f6\uff0c\u9700\u8981\u5c06\u81ea\u5df1\u624b\u4e2d\u7684\u4e00\u5f20\u724c\u8f6c\u79fb\u5230\u724c\u684c\u4e0a\uff08Board\uff09\uff0c\u800c\u5f53Player\u51fa\u724c\u4e4b\u540e\uff0c\u724c\u684c\u5e94\u8be5\u786e\u5b9a\u662f\u5426\u6709\u5c06\u88abPlayer\u201c\u9493\u201d\u8fdb\u7684\u724c\uff0c\u4e8e\u662f\u5728Borad\u4e2d\u8fd8\u5b9a\u4e49\u4e86getCardsToBeFished\u65b9\u6cd5:<\/p>\n<div class=\"cnblogs_code\"><img decoding=\"async\" id=\"code_img_opened_666d2689-35d7-4dbb-bcc3-22a3924fef26\" class=\"code_img_opened\" src=\"https:\/\/images.cnblogs.com\/OutliningIndicators\/ExpandedBlockStart.gif\" alt=\"\" \/><\/p>\n<div id=\"cnblogs_code_open_666d2689-35d7-4dbb-bcc3-22a3924fef26\" class=\"cnblogs_code_hide\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>package com.thoughtworks.davenkin.simplefishinggame;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class Board {\n    ArrayList&lt;Card&gt; cards = new ArrayList&lt;Card&gt;();\n\n    public ArrayList&lt;Card&gt; getCards() {\n        return cards;\n    }\n\n    public void addCard(Card card) {\n        cards.add(card);\n    }\n\n    public List&lt;Card&gt; getCardsToBeFished() {\n        if (cards.size() == 1)\n            return null;\n\n        List&lt;Card&gt; cardsToBeFished;\n        Card lastCard = cards.get(cards.size() - 1);\n        if (lastCard.getRank().equals(\"J\")) {\n            cardsToBeFished = cards;\n        } else {\n            cardsToBeFished = getCardsOfRangeFishing(lastCard);\n        }\n        return cardsToBeFished;\n    }\n\n    public void displayCards() {\n        System.out.print(\"Current cards on board:\");\n        for (Card card : cards) {\n            System.out.print(card.getRank() + \" \");\n        }\n        System.out.println();\n    }\n\n    public void removeFishedCards(List&lt;Card&gt; cardsToBeFished) {\n        int endIndex = getCards().indexOf(cardsToBeFished.get(0));\n        ArrayList&lt;Card&gt; newCards = new ArrayList&lt;Card&gt;();\n        newCards.addAll(cards.subList(0, endIndex));\n        cards = newCards;\n    }\n\n    private List&lt;Card&gt; getCardsOfRangeFishing(Card lastCard) {\n        int startIndex = -1;\n        for (Card card : cards) {\n            if (card == lastCard)\n                break;\n            if (card.getRank().equals(lastCard.getRank())) {\n                startIndex = cards.indexOf(card);\n            }\n        }\n\n        if (startIndex != -1)\n            return cards.subList(startIndex, cards.indexOf(lastCard) + 1);\n        return null;\n    }\n}<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<p><strong>(\u56db) \u5bf9\u6574\u4e2a\u6e38\u620f\u7684\u5efa\u6a21<\/strong><\/p>\n<p>\u6574\u4e2a\u6e38\u620f\u5b9a\u4e49\u4e86\u4e00\u4e2aFishingManager\u6765\u96c6\u4e2d\u7ba1\u7406\uff0cFishingManager\u5305\u62ec\u6240\u6709\u73a9\u5bb6\uff0c\u724c\u684c\u7b49\u6210\u5458\u53d8\u91cf\u3002<\/p>\n<div class=\"cnblogs_code\"><img decoding=\"async\" id=\"code_img_opened_d2fd65b4-6b1b-4f67-9cf8-8e73de3fec22\" class=\"code_img_opened\" src=\"https:\/\/images.cnblogs.com\/OutliningIndicators\/ExpandedBlockStart.gif\" alt=\"\" \/><\/p>\n<div id=\"cnblogs_code_open_d2fd65b4-6b1b-4f67-9cf8-8e73de3fec22\" class=\"cnblogs_code_hide\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>package com.thoughtworks.davenkin.simplefishinggame;\n\nimport java.util.ArrayList;\nimport java.util.ListIterator;\n\npublic class FishingManager implements FishingRuleChecker, AfterPlayListener {\n    ArrayList&lt;Player&gt; players = new ArrayList&lt;Player&gt;();\n    private Player currentPlayer;\n    Board board;\n    private ListIterator&lt;Player&gt; iterator;\n\n    public FishingManager() {\n        board = new Board();\n    }\n\n    private void resetPlayerIterator() {\n        iterator = players.listIterator();\n    }\n\n    public void addPlayers(ArrayList&lt;Player&gt; players) {\n        this.players.addAll(players);\n        resetPlayerIterator();\n    }\n\n    @Override\n    public Player nextPlayer() {\n        if (iterator.hasNext()) {\n            return iterator.next();\n        }\n        resetPlayerIterator();\n        return nextPlayer();\n    }\n\n    @Override\n    public Player whoFailed() {\n        ListIterator&lt;Player&gt; listIterator = players.listIterator();\n        while (listIterator.hasNext()) {\n            Player currentPlayer = listIterator.next();\n            if (currentPlayer.getCards().size() == 0)\n                return currentPlayer;\n        }\n\n        return null;\n    }\n\n    @Override\n    public void afterPlay() {\n        if (board.getCardsToBeFished() == null)\n            return;\n        doFish();\n        nextPlayer();\n    }\n\n    private void doFish() {\n        System.out.println(currentPlayer.getName() + \" fished cards\");\n        currentPlayer.obtainCards(board.getCardsToBeFished());\n        board.removeFishedCards(board.getCardsToBeFished());\n        currentPlayer.displayCards();\n        board.displayCards();\n    }\n\n    public void start() {\n        int count = 0;\n        while (true) {\n            currentPlayer = nextPlayer();\n            currentPlayer.displayCards();\n            currentPlayer.playCard(board);\n            afterPlay();\n            count++;\n            if (whoFailed() != null) {\n                break;\n            }\n        }\n\n        System.out.println(whoFailed().getName() + \" has failed.\");\n        System.out.println(\"Total: \" + count + \" rounds\");\n    }\n\n    public static void main(String[] args) {\n        FishingManager manager = new FishingManager();\n        Player player1 = new Player(\"Kayla\");\n        Player player2 = new Player(\"Samuel\");\n        ArrayList&lt;Player&gt; players = new ArrayList&lt;Player&gt;();\n        players.add(player1);\n        players.add(player2);\n\n        Deck deck = new Deck();\n        deck.shuffle();\n        CardDistributor distributor = new CardDistributor();\n        distributor.distributeCards(deck, players);\n\n        manager.addPlayers(players);\n        manager.start();\n    }\n}<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<\/div>\n<p>FishingManager\u8fd8\u5e94\u8be5\u5305\u542b\u6e38\u620f\u89c4\u5219\uff0c\u6bd4\u5982\u51b3\u5b9a\u8f93\u8d62\u548c\u73a9\u5bb6\u51fa\u724c\u987a\u5e8f\u7b49\uff0c\u4e8e\u662f\u5b9a\u4e49\u4e00\u4e2a\u6e38\u620f\u89c4\u5219\u63a5\u53e3FishingRuleChecker\uff0c\u5e76\u4f7fFishingManager\u5b9e\u73b0FishingRuleChecker\u63a5\u53e3\uff1a<\/p>\n<div class=\"cnblogs_code\"><img decoding=\"async\" id=\"code_img_opened_fe20b17d-6b1d-4218-bd48-b0e561ff30fb\" class=\"code_img_opened\" src=\"https:\/\/images.cnblogs.com\/OutliningIndicators\/ExpandedBlockStart.gif\" alt=\"\" \/><\/p>\n<div id=\"cnblogs_code_open_fe20b17d-6b1d-4218-bd48-b0e561ff30fb\" class=\"cnblogs_code_hide\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>package com.thoughtworks.davenkin.simplefishinggame;\n\npublic interface FishingRuleChecker {\n    Player nextPlayer();\n    Player whoFailed();\n}<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<\/div>\n<p>\u540c\u65f6\uff0c\u5f53\u6bcf\u4e2a\u73a9\u5bb6\u51fa\u724c\u4e4b\u540e\uff0cFishingManager\u5e94\u8be5\u51b3\u5b9a\u662f\u5426\u6709\u9c7c\u4e0a\u94a9\uff0c\u5e76\u6267\u884c\u9493\u9c7c\u64cd\u4f5c\uff0c\u4e8e\u662f\u5b9a\u4e49\u4e86\u4e00\u4e2aAfterPlayListener\u63a5\u53e3\uff0cFishingManager\u4e5f\u5b9e\u73b0\u4e86<br \/>\nAfterPlayListener\u63a5\u53e3\uff1a<\/p>\n<div class=\"cnblogs_code\"><img decoding=\"async\" id=\"code_img_opened_6d561bff-c7b4-4b47-af22-c25c6cbdbf04\" class=\"code_img_opened\" src=\"https:\/\/images.cnblogs.com\/OutliningIndicators\/ExpandedBlockStart.gif\" alt=\"\" \/><\/p>\n<div id=\"cnblogs_code_open_6d561bff-c7b4-4b47-af22-c25c6cbdbf04\" class=\"cnblogs_code_hide\">\n<pre>package com.thoughtworks.davenkin.simplefishinggame;\n\npublic interface AfterPlayListener {\n    public void afterPlay();\n}<\/pre>\n<\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<p><strong>\uff08\u4e94\uff09\u6709\u8da3\u7684\u73b0\u8c61<\/strong><\/p>\n<p>\u8fd0\u884cFinshingManager\u4fbf\u53ef\u4ee5\u81ea\u52a8\u6a21\u62df\u6574\u4e2a\u6e38\u620f\u8fc7\u7a0b\uff0c\u7b14\u8005\u6bd4\u8f83\u611f\u5174\u8da3\u7684\u662f\uff1a\u6240\u6709\u73a9\u5bb6\u4e00\u5171\u51fa\u591a\u5c11\u624b\u724c\u4e4b\u540e\u6e38\u620f\u7ed3\u675f\uff1f\u4e8e\u662f\u7b14\u8005\u505a\u4e8610000\u6b21\u6a21\u62df\u8bd5\u9a8c\uff0c\u5f97\u5230\u7684\u7ed3\u679c\u4e3a\uff1a\u6700\u592714023\u624b\uff0c\u6700\u5c0f66\u624b\uff0c\u5e73\u57471303\u624b\uff0c\u8bf7\u6570\u5b66\u9ad8\u624b\u5e2e\u5fd9\u8bc1\u660e\u4e00\u4e0b\u662f\u5426\u6709\u4e2a\u7edf\u8ba1\u5b66\u610f\u4e49\u4e0a\u7684\u671f\u671b\u503c\u3002\u51fa\u724c\u6b21\u6570\u5206\u5e03\u56fe\u5982\u4e0b\uff1a<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/pic002.cnblogs.com\/images\/2012\/341412\/2012032416075898.png\" alt=\"\" \/><\/p>\n<p>\u4e0a\u56fe\u4e2d\uff0c\u6a2a\u8f74\u4e3a\u6e38\u620f\u8f6e\u6b21\uff08\u4e00\u517110000\u6b21\uff09\uff0c\u7eb5\u8f74\u4e3a\u6bcf\u6b21\u6e38\u620f\u6240\u5bf9\u5e94\u7684\u51fa\u724c\u624b\u6570\u3002<\/p>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u3000\u3000\u7f57\u5927\u4f51\u6709\u6b4c\u4e91\uff1a\u201c\u65e0\u804a\u7684\u65e5\u5b50\u603b\u662f\u4f1a\u5199\u70b9\u65e0\u804a\u7684\u6b4c\u66f2&#8230;&#8230;\u201d\uff0c\u6211\u4e0d\u662f\u6b4c\u624b\uff0c\u6211\u662f\u7a0b\u5e8f\u5458\uff0c\u4e8e\u662f\u65e0\u804a\u7684\u65e5\u5b50\u603b\u662f\u4f1a\u5199\u70b9\u65e0\u804a\u7684\u7a0b\u5e8f\u3002\u7a0b\u5e8f\u4e0d\u80fd\u592a\u5927\uff0c\u4e0d\u7136\u6ca1\u6709\u65f6\u95f4\u5b8c\u6210\uff1b\u7a0b\u5e8f\u5e94\u8be5\u6709\u8da3\uff0c\u4e0d\u7136\u5c31\u8fbe\u4e0d\u5230\u6d88\u78e8\u65f6\u95f4\u7684\u76ee\u7684\uff1b\u7a0b\u5e8f\u5e94\u8be5\u6709\u90a3\u4e48\u4e00\u70b9\u6311\u6218\u6027\uff0c\u4e0d\u7136\u5373\u4f7f\u5199\u5b8c\u4e86\u4e5f\u6ca1\u6709\u8fdb\u6b65\u3002 \u91d1\u94a9\u9493\u9c7c\u6e38\u620f\u662f\u6211\u513f\u65f6\u7ecf\u5e38\u73a9\u7684\u4e00\u79cd\u6251\u514b\u724c\u6e38\u620f\uff0c\u89c4\u5219\u975e\u5e38\u7b80\u5355\uff0c\u4e24\u4e2a\u73a9\u5bb6\uff0c\u4e00\u65e6\u724c\u53d1\u5230\u624b\u91cc\u4e4b\u540e\uff0c\u63a5\u4e0b\u6765\u6bcf\u4e2a\u4eba\u51fa\u4ec0\u4e48\u724c\u57fa\u672c\u4e0a\u5df2\u7ecf\u5c31\u5b9a\u4e86\uff0c\u73a9\u5bb6\u6ca1\u6709\u81ea\u5df1\u505a\u51b3\u7b56\u7684\u673a\u4f1a\uff0c\u6240\u4ee5\u8fd9\u4e2a\u6e38\u620f\u5f88\u5bb9\u6613\u7528\u7a0b\u5e8f\u81ea\u52a8\u6a21\u62df\u51fa\u6765\u3002 &nbsp; \uff08\u4e00\uff09\u5173\u4e8e\u91d1\u94a9\u9493\u9c7c\u6e38\u620f \u57fa\u672c\u89c4\u5219\uff08\u7b80\u5316\u7248\uff09\uff1a\u4e24\u4e2a\u73a9\u5bb6\uff08Player\uff09\uff0c\u4e00\u526f\u6251\u514b(Deck)\uff0c\u5927\u5c0f\u738b(Joker)\u53ef\u8981\u53ef\u4e0d\u8981\uff0c\u6211\u4eec\u7684\u6e38\u620f\u5047\u5b9a\u5305\u542b\u5927\u5c0f\u738b\uff0c\u6d17\u724c(Shuffle)\u4e4b\u540e\uff0c\u6bcf\u4e2a\u73a9\u5bb6\u5f97\u5230\u540c\u6837\u6570\u76ee\u7684\u724c\uff0827\u5f20\uff09\uff0c\u73a9\u5bb6\u4efb\u4f55\u65f6\u5019\u4e0d\u80fd\u770b\u81ea\u5df1\u624b\u91cc\u7684\u724c\uff0c\u73a9\u5bb6\u4f9d\u6b21\u51fa\u724c\uff0c\u6bcf\u6b21\u51fa\u4e00\u5f20\uff0c\u8f6e\u5230\u81ea\u5df1\u51fa\u724c\u65f6\uff0c\u62bd\u51fa\u81ea\u5df1\u624b\u4e2d\u6700\u5e95\u4e0b\u7684\u4e00\u5f20\u724c\u653e\u5230\u724c\u684c\uff08Board\uff09\u4e0a\uff0c\u724c\u684c\u4e0a\u7684\u724c\u6309\u7167\u73a9\u5bb6\u51fa\u724c\u7684\u987a\u5e8f\u6446\u6210\u4e00\u6761\u957f\u94fe\u3002J\uff08\u94a9\uff09\u662f\u6700\u7279\u6b8a\u7684\u4e00\u5f20\u724c\uff0c\u5f53\u67d0\u4e2a\u73a9\u5bb6\u51fa\u5230J\u65f6\uff0c\u4fbf\u5c06\u724c\u684c\u4e0a\u7684\u6240\u6709\u724c\u90fd\u5f52\u4e3a\u5df1\u6709\uff0c\u5e76\u653e\u5230\u81ea\u5df1\u724c\u6c60\u7684\u6700\u4e0a\u9762\uff08\u4e0e\u51fa\u724c\u65f6\u6070\u6070\u76f8\u53cd\uff09\uff0c\u6b64\u5373\u6240\u8c13\u201c\u91d1\u94a9\u9493\u9c7c\u201d\uff0c\u6b64\u65f6\u724c\u684c\u6e05\u7a7a\uff0c\u518d\u7531\u6b64\u73a9\u5bb6\u91cd\u65b0\u51fa\u724c\u3002\u53e6\u5916\uff0c\u5f53\u81ea\u5df1\u51fa\u7684\u724c\u4e0e\u724c\u684c\u4e0a\u7684\u67d0\u5f20\u724c\u70b9\u6570\u76f8\u540c\u65f6\uff0c\u4fbf\u5c06\u724c\u684c\u4e2d\u90a3\u5f20\u724c\u53ca\u5176\u4e4b\u540e\u7684\u724c\u90fd\u5f52\u4e3a\u5df1\u6709\uff08\u5305\u542b\u81ea\u5df1\u521a\u51fa\u7684\u90a3\u5f20\uff09\uff0c\u518d\u7531\u6b64\u73a9\u5bb6\u91cd\u65b0\u51fa\u724c\uff0c\u6bd4\u5982\u724c\u684c\u4e0a\u7684\u724c\u4e3a3\uff0c7\uff0c8\uff0c4\uff0c9\uff0c\u5f53\u67d0\u4e2a\u73a9\u5bb6\u51fa\u4e868\uff0c\u4fbf\u5c06\u724c\u684c\u4e0a\u76848\uff0c4\uff0c9\u8fde\u540c\u81ea\u5df1\u521a\u51fa\u76848\u4e00\u5e76\u6536\u56de\uff0c\u6d3e\u684c\u4e0a\u5269\u4e0b3\uff0c7\u3002\u6700\u540e\uff0c\u8c01\u624b\u4e2d\u7684\u724c\u6700\u5148\u51fa\u5b8c\uff0c\u8c01\u5c31\u8f93\u4e86\u3002 &nbsp; \uff08\u4e8c\uff09\u5bf9\u4e8e\u4e00\u526f\u724c\u7684\u5efa\u6a21 \u7531\u4e8e\u82b1\u8272(Suit)\u5bf9\u4e8e\u6b64\u6e38\u620f\u5e76\u4e0d\u91cd\u8981\uff0c\u6240\u4ee5\u5bf9\u6251\u514b\u724c\u5efa\u6a21\u65f6\u7701\u7565\u4e86\u5bf9\u82b1\u8272\u7684\u5efa\u6a21\uff0c\u540c\u6837\uff0c\u7531\u4e8e\u4e0d\u9700\u8981\u6bd4\u8f83\u5927\u5c0f\uff0c\u724c\u7684\u70b9\u6570\uff08Rank\uff09\u53ef\u4ee5\u7528String\u6765\u8868\u793a(\u5176\u4e2d\u738b\u7528&#8221;W&#8221;\u8868\u793a)\u3002 package com.thoughtworks.davenkin.simplefishinggame; public class Card { private String rank; public Card(String rank) [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-569","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/posts\/569","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=569"}],"version-history":[{"count":0,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/posts\/569\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=569"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=569"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=569"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}