2021-04-21

Java集合的综合案例之——斗地主的“洗牌”与“发牌”

Java集合的综合案例之——斗地主的"洗牌"与"发牌"

Java集合的综合案例之——斗地主的"洗牌"与"发牌"

按照斗地主的规则,完成洗牌发牌的动作。

具体规则:

使用54张牌打乱顺序,摞整齐放在桌子上,三个玩家参与游戏,三人交替从最上面开始摸牌,当只剩三张牌时停止摸牌,并把最后的三张牌留作底牌。

1.需求分析

  1. 准备牌——54张牌存到一个集合

    大王和小王特殊牌:2张

    四种花色普通牌:52张

    ​ 先定义一个数组/集合,存储4中花色的扑克牌:

    ​ 再定义一个数组/集合,用来存储13个序号:3,4,5 ... K,A,2

    然后循环嵌套两个数组/集合,组装这52张扑克牌:

    3,4,5,...,K,A,2

    3,4,5,...,K,A,2,

    3,3,3,...,K,A,2,

    3,4,5,...,K,A,2,

  2. 洗牌

    使用集合工具类Collections:

    static void shuffle(List<?> list) ;//使用默认随机源对指定列表进行置换

    ​ 该方法会随机打乱集合中元素的顺序

  3. 发牌

    要求:1人17张牌,剩余三张当底牌,没人每次一张牌,轮流发:使用集合的索引去除以三,取余

    定义四个集合,存储三个玩家的牌和三张底牌

    索引%2,有两个值(0和1)

    索引%3,有三个值(0和1和2)

    索引>=51,变成给底牌发牌

  4. 看牌

    直接打印集合,遍历存储玩家和底牌的集合。

2.代码实现

import java.util.ArrayList;import java.util.Collections;/*斗地主综合案例:* 1.准备54张牌* 2.洗牌* 3.发牌* 4.看牌*/public class PlayPoker { public static void main(String[] args) {  //1.准备54张牌  //新建一个集合存储54张牌并打乱顺序  ArrayList<String> pokers = new ArrayList<>();  //直接定义两个数组并赋值,一个存四种花色,一个存13张牌的值(3,4,5,6,7,8,9,10,J,Q,K,A,2)  String[] kind = {"♥","♠","♦","♣"};  String[] number = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};  //先存大王小王到pokers集合中  pokers.add("大王");  pokers.add("小王");  //组装两个集合的数据,生成带花色的52张牌(可以用普通for循环,也可以用增强for循环foreach)  for (int i = 0; i < kind.length; i++) {   for (int j = 0; j < 13; j++) {    pokers.add(kind[i]+number[j]);   }  }  System.out.println("54张牌:"+pokers);//顺序打印  //洗牌--打乱pokers集合里的元素顺序  Collections.shuffle(pokers);  System.out.println("洗过的54张牌:"+pokers);//乱序打印  //发牌--  //定义4个集合,分别存储3个玩家的牌和3张底牌  ArrayList<String> player1 = new ArrayList<>();  ArrayList<String> player2 = new ArrayList<>();  ArrayList<String> player3 = new ArrayList<>();  ArrayList<String> bottoms = new ArrayList<>();  /*遍历pokers集合,获取每一张牌(由于增强for循环里没有索引,就无法对每一张牌进行操作,所以下面要用普通for循环)  * 轮流发牌:使用集合的索引去除以三,取余  * 索引%2,有两个值(0和1)   索引%3,有三个值(0和1和2)   索引>=51,变成给底牌发牌  注意事项:必须先判断索是否大于51,因为要提前判断是不是发到了第51张,之后的三张要留着  */  for (int i = 0; i < pokers.size(); i++) {   if (i<51){    if (i%3==0){     player1.add(pokers.get(i));    }else if (i%3==1){     player2.add(pokers.get(i));    }else if (i%3==2){     player3.add(pokers.get(i));    }   }else {    bottoms.add(pokers.get(i));   }  }  System.out.println("=========================================");  System.out.println("玩家1:"+player1);  System.out.println("玩家2:"+player2);  System.out.println("玩家3:"+player3);  System.out.println("底 牌:"+bottoms); }}

运行结果:

思考

如果想要给发好的牌排序怎么操作? 🤔🤔🤔

未完待续...









原文转载:http://www.shaoqun.com/a/698753.html

跨境电商:https://www.ikjzd.com/

卖家精灵:https://www.ikjzd.com/w/532

etsy:https://www.ikjzd.com/w/169.html


Java集合的综合案例之——斗地主的"洗牌"与"发牌"Java集合的综合案例之——斗地主的"洗牌"与"发牌"按照斗地主的规则,完成洗牌发牌的动作。具体规则:使用54张牌打乱顺序,摞整齐放在桌子上,三个玩家参与游戏,三人交替从最上面开始摸牌,当只剩三张牌时停止摸牌,并把最后的三张牌留作底牌。1.需求分析准备牌——54张牌存到一个集合中大王和小王特殊牌:2张四种花色普通牌:52张​ 先定义一个数组/
cares:https://www.ikjzd.com/w/1302
黄劲:https://www.ikjzd.com/w/2426
灯塔计划:https://www.ikjzd.com/w/1281
Google广告5大智能出价策略,你都了解吗?:https://www.ikjzd.com/home/116039
跨境电商的采购,没你想的那么简单:https://www.ikjzd.com/home/106725
mein:https://www.ikjzd.com/w/1601

No comments:

Post a Comment