斗地主アルゴリズムの設計と実現–牌を並べ替える

9144 ワード

このページでは、どのようにカードをシャッフルし、リリースするかを簡単に紹介します.
この2つのアルゴリズムは簡単です.興味のある学生はもっと上手に書くことができます.
ポイント説明
a.シャッフルのアルゴリズムの考えは、54枚の牌を作って、シャッフルのN回、このアルゴリズムはランダムではないかもしれません.
b.配牌アルゴリズムの考えは、洗った牌の中から、規則的に3人のプレイヤーに送ります.例えば、1人のプレイヤーが1、4、7などの17枚の牌を取ります.
c.3人のプレイヤーは、このカードのIDを取った人が地主です.
1.初期化
  
 /**

     *    

     */

    private void deal() {

        shuffle();

        divide();

    }

2.シャッフル
 
   /**

     *   

     */

    private void shuffle() {



        for (int i = 0; i < 54; i++) {

            Card card = new Card(i + 1);

            allCards.add(card);

        }



        System.out.println("    :");

        CardUtil.printCards(allCards);



        //   ,  1000 

        for (int i = 0; i <= 1000; i++) {

            Collections.shuffle(allCards);//       

        }



        System.out.println("    :");

        CardUtil.printCards(allCards);

    }



3.カードを配る
    
//  

    private void divide() {

        // 1     

        for (int j = 0; j < 17; j++) {

            Card card = allCards.get(j * 3);

            myCards.add(card);

            if (myCards.get(j).id == 1) {

                diZhu = 1;

            }

        }



        // 2     

        for (int j = 0; j < 17; j++) {

            Card card = allCards.get(j * 3 + 1);

            rightCards.add(card);



            if (rightCards.get(j).id == 1) {

                diZhu = 2;

            }

        }



        // 3     

        for (int j = 0; j < 17; j++) {

            Card card = allCards.get(j * 3 + 2);

            leftCards.add(card);



            if (leftCards.get(j).id == 1) {

                diZhu = 3;

            }

        }



        for (int i = 51; i < 54; i++) {



            Card card = allCards.get(i);

            topCards.add(card);



            Card card2 = new Card(card.id);



            copyOfTopCards.add(card2);

        }



        CardUtil.sortCards(myCards);

        CardUtil.sortCards(leftCards);

        CardUtil.sortCards(rightCards);

    }



  

4.プリントアウトカード
  
 /**

     *    

     */

    private void printCards() {

        System.out.println("  1  :");

        CardUtil.printCards(myCards);



        System.out.println("  2  :");

        CardUtil.printCards(leftCards);



        System.out.println("  3  :");

        CardUtil.printCards(rightCards);



        System.out.println("  :");

        CardUtil.printCards(topCards);

    }



5.シャッフルしてカードを配るプログラムを実行する
public static void main(String[] args) {

        DealingDevice one = new DealingDevice();

        one.printCards();



        logger.info("      :");

        ArrayList<Card> allCards2 = one.getAllCards();

        CardUtil.printCards(allCards2);



        logger.info("      :");

        CardUtil.sortCards(allCards2);

        CardUtil.printCards(allCards2);

    }



6.プログラム運転結果
シャッフルの前:ブロックA(A 0.gif)    ブロック2(20 gif)    ブロック3(30.8 gif)    正方形4(40.gif)    ブロック5(50.gif)    ブロック6(60.gif)    ブロック7(70.gif)    ブロック8(80.gif)    ブロック9(90. gif)    ブロック10(100.gif)    ブロックJ(J 0.gif)    正方形Q(Q 0.gif)    ボックスK(K 0.gif)    梅A(A 1.gif)    梅2(21.8 gif)    梅3(31.gif)    梅の花4(41. gif)    梅の花5(51.gif)    梅6(61.gif)    梅7(71.gif)    梅8(81.gif)    梅の花9(91. gif)    梅の花10(101.gif)    梅の花J(J 1.gif)    梅の花Q(Q 1.gif)    梅の花K(K 1.gif)    ハートA(A 2.gif)    ハート2(22.gif)    ハート3(32.gif)    ハート4(42.gif)    ハート5(52.gif)    ハート6(62.gif)    ハート7(72.gif)    ハート8(82.gif)    ハート9(92. gif)    ハート10(102.gif)    ハートJ(J 2.gif)    ハートQ(Q 2.gif)    ハートK(K 2.gif)    スペードA(A 3.gif)    スペード2(23.gif)    スペード3(33.gif)    スペード4(43.gif)    スペード5(53.gif)    スペード6(63. gif)    スペード7(73.gif)    スペード8(83. gif)    スペード9(93.gif)    スペード10(103.gif)    スペードJ(J 3.gif)    スペードQ(Q 3.gif)    スペードK(K 3.gif)    王さんXiao Wang(small Joker.gif)    大王DaWang(bigJoker.gif)    
シャッフルの後:ハート7(72.gif)    ハートJ(J 2.gif)    ブロックJ(J 0.gif)    大王DaWang(bigJoker.gif)    スペード5(53.gif)    梅の花Q(Q 1.gif)    スペード2(23.gif)    梅6(61.gif)    ハート2(22.gif)    ボックスK(K 0.gif)    ハート5(52.gif)    ハート6(62.gif)    梅の花4(41. gif)    スペードK(K 3.gif)    梅の花J(J 1.gif)    梅の花9(91. gif)    ハート3(32.gif)    ブロック10(100.gif)    ブロック8(80.gif)    正方形Q(Q 0.gif)    スペード10(103.gif)    スペード9(93.gif)    ハート4(42.gif)    ブロック9(90. gif)    スペード3(33.gif)    スペード6(63. gif)    スペード7(73.gif)    梅の花K(K 1.gif)    ハート8(82.gif)    梅の花5(51.gif)    ブロック2(20 gif)    ハート9(92. gif)    ハートQ(Q 2.gif)    王さんXiao Wang(small Joker.gif)    ハートA(A 2.gif)    梅A(A 1.gif)    梅8(81.gif)    ブロック5(50.gif)    正方形4(40.gif)    ブロック3(30.8 gif)    ブロック6(60.gif)    スペード4(43.gif)    スペードJ(J 3.gif)    梅3(31.gif)    梅2(21.8 gif)    梅7(71.gif)    ブロック7(70.gif)    ブロックA(A 0.gif)    ハートK(K 2.gif)    スペードQ(Q 3.gif)    ハート10(102.gif)    梅の花10(101.gif)    スペード8(83. gif)    スペードA(A 3.gif)    
プレイヤー1のカード:ブロック3(30.0 gif)    スペード3(33.gif)    梅の花4(41. gif)    梅7(71.gif)    ハート7(72.gif)    ブロック8(80.gif)    梅8(81.gif)    梅の花9(91. gif)    スペード9(93.gif)    スペードJ(J 3.gif)    ボックスK(K 0.gif)    梅の花K(K 1.gif)    ハートK(K 2.gif)    ブロック2(20 gif)    スペード2(23.gif)    王さんXiao Wang(small Joker.gif)    大王DaWang(bigJoker.gif)    
プレイヤー2のカード:ブロック4(40.gif)    スペード4(43.gif)    梅の花5(51.gif)    ハート6(62.gif)    スペード7(73.gif)    ブロック9(90. gif)    ブロック10(100.gif)    ハート10(102.gif)    スペード10(103.gif)    ブロックJ(J 0.gif)    梅の花J(J 1.gif)    梅の花Q(Q 1.gif)    ハートQ(Q 2.gif)    ブロックA(A 0.gif)    梅A(A 1.gif)    梅2(21.8 gif)    ハート2(22.gif)    
プレイヤー3の牌:梅の花3(31.gif)    ハート3(32.gif)    ハート4(42.gif)    ブロック5(50.gif)    ハート5(52.gif)    スペード5(53.gif)    ブロック6(60.gif)    梅6(61.gif)    スペード6(63. gif)    ブロック7(70.gif)    ハート8(82.gif)    ハート9(92. gif)    ハートJ(J 2.gif)    正方形Q(Q 0.gif)    スペードQ(Q 3.gif)    スペードK(K 3.gif)    ハートA(A 2.gif)    
ネガ:梅の花10(101.gif)    スペード8(83. gif)    スペードA(A 3.gif)    
ハート7(72.gif)    10月11日、2013 1:16:41午後cn.fansunion.ddz.client.DealingDevice maninFO:ソートされていない牌:红桃J(J 2.gif)    ブロックJ(J 0.gif)    大王DaWang(bigJoker.gif)    スペード5(53.gif)    梅の花Q(Q 1.gif)    スペード2(23.gif)    梅6(61.gif)    ハート2(22.gif)    ボックスK(K 0.gif)    ハート5(52.gif)    ハート6(62.gif)    梅の花4(41. gif)    スペードK(K 3.gif)    梅の花J(J 1.gif)    梅の花9(91. gif)    ハート3(32.gif)    ブロック10(100.gif)    ブロック8(80.gif)    正方形Q(Q 0.gif)    スペード10(103.gif)    スペード9(93.gif)    ハート4(42.gif)    ブロック9(90. gif)    スペード3(33.gif)    スペード6(63. gif)    スペード7(73.gif)    梅の花K(K 1.gif)    ハート8(82.gif)    梅の花5(51.gif)    ブロック2(20 gif)    ハート9(92. gif)    ハートQ(Q 2.gif)    王さんXiao Wang(small Joker.gif)    ハートA(A 2.gif)    梅A(A 1.gif)    梅8(81.gif)    ブロック5(50.gif)    正方形4(40.gif)    ブロック3(30.8 gif)    ブロック6(60.gif)    スペード4(43.gif)    スペードJ(J 3.gif)    梅3(31.gif)    梅2(21.8 gif)    梅7(71.gif)    ブロック7(70.gif)    ブロックA(A 0.gif)    ハートK(K 2.gif)    スペードQ(Q 3.gif)    ハート10(102.gif)    梅の花10(101.gif)    スペード8(83. gif)    スペードA(A 3.gif)    
10月11日、2013 1:16:41午後cn.fansunion.ddz.client.DealingDevice maninFO:並べ替え後の札:ブロック3(30.0 gif)    梅3(31.gif)    ハート3(32.gif)    スペード3(33.gif)    正方形4(40.gif)    梅の花4(41. gif)    ハート4(42.gif)    スペード4(43.gif)    ブロック5(50.gif)    梅の花5(51.gif)    ハート5(52.gif)    スペード5(53.gif)    ブロック6(60.gif)    梅6(61.gif)    ハート6(62.gif)    スペード6(63. gif)    ブロック7(70.gif)    梅7(71.gif)    ハート7(72.gif)    スペード7(73.gif)    ブロック8(80.gif)    梅8(81.gif)    ハート8(82.gif)    スペード8(83. gif)    ブロック9(90. gif)    梅の花9(91. gif)    ハート9(92. gif)    スペード9(93.gif)    ブロック10(100.gif)    梅の花10(101.gif)    ハート10(102.gif)    スペード10(103.gif)    ブロックJ(J 0.gif)    梅の花J(J 1.gif)    ハートJ(J 2.gif)    スペードJ(J 3.gif)    正方形Q(Q 0.gif)    梅の花Q(Q 1.gif)    ハートQ(Q 2.gif)    スペードQ(Q 3.gif)    ボックスK(K 0.gif)    梅の花K(K 1.gif)    ハートK(K 2.gif)    スペードK(K 3.gif)    ブロックA(A 0.gif)    梅A(A 1.gif)    ハートA(A 2.gif)    スペードA(A 3.gif)    ブロック2(20 gif)    梅2(21.8 gif)    ハート2(22.gif)    スペード2(23.gif)    王さんXiao Wang(small Joker.gif)    大王DaWang(bigJoker.gif)    
関連記事
斗地主アルゴリズムの設計と実現–プロジェクト紹介&どのように定義し、カードを構築しますか?
斗地主アルゴリズムの設計と実現–どうやって手札のタイプを判断しますか?
斗地主アルゴリズムの設計と実現–両手牌の大きさをどう比較しますか?
斗地主アルゴリズムの設計と実現–牌を並べ替える
 
参照:http://FansUnion.cn/articles/2735