码迷,mamicode.com
首页 > 编程语言 > 详细

Java 实现 斗地主 案例

时间:2021-04-19 15:50:37      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:package   字符串   工具   个数   stat   rgs   阶段   str   遍历   

斗地主案例实现步骤

分析:

首先来梳理一下规则:
(1)准备牌阶段:斗地主总共54张牌,大王小王各一张(特殊对待),其他52张牌,分别4种花色,每种花色13张。四种花色分别为? ? ? ?(数组1);每一种花色中的13张牌(由大到小)2 A K Q J 10 9 8 7 6 5 4 3(数组2),定义一个集合/数组进行存储,遍历这两个集合,可以组装成52张牌;如:? 7,? 8等;

(2)洗牌阶段:使用集合工具类Collections方法,其中static void shuffle(List<?> list)方法对牌进行随机打乱。

(3)发牌阶段:要求每一位玩家拥有17张牌,剩余三张作为底牌,一人一张轮流发牌:集合的索引(0-53)%3,定义4个集合,来存储3个玩家的牌和场上的底牌。索引%3,有三个值(0,1,2),0%3=0,1%3=1,2%3=2,3%3=0,就可以给三名玩家发牌了,当索引>=51时,改为发底牌.

(4)看牌阶段:直接打印集合/数组

实现:

package doudizhu;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;

public class DouDiZhu {
public static void main(String[] args) {
    //1.准备牌
    //定义一个存储54张牌的ArrayList集合,泛型使用字符串
    ArrayList<String> poker = new ArrayList<>();
    //定义两个数组,一个数组存储花色,一个数组储存牌号
    String[] colors = {"?", "?", "?", "?"};//花色数组
    String[] numbers = {"2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3"};//牌号数组
    //先把大王小王(特殊对待)存储到poker集合中
    poker.add("大王");
    poker.add("小王");
    //循环嵌套遍历两个数组,组装52张牌,花色和牌号
    for (String number : numbers) {
        for (String color : colors) {
            //把组装好的牌存储到poker集合中
            poker.add(color + number);
        }
    }
    //2.洗牌,随机洗
    Collections.shuffle(poker);
    //3.发牌
    //定义四个集合,存储三个玩家牌和底牌
    ArrayList<String> player01 = new ArrayList<>();
    ArrayList<String> player02 = new ArrayList<>();
    ArrayList<String> player03 = new ArrayList<>();
    ArrayList<String> diPai = new ArrayList<>();
    for (int i = 0; i < poker.size(); i++) {
        //获取每一张牌
        String p = poker.get(i);
        //轮流发牌
        if (i >= 51) {
            diPai.add(p);                    //索引大于等于51时给底牌留3张
        } else if (i % 3 == 0) {
            player01.add(p);                 //给第一名玩家发牌
        } else if (i % 3 == 1) {
            player02.add(p);                 //给第二名玩家发牌
        } else if (i % 3 == 2) {
            player03.add(p);                 //给第三名玩家发牌
        }
    }
    //看牌
    System.out.println("玩家1" + player01);
    System.out.println("玩家2" + player02);
    System.out.println("玩家3" + player03);
    System.out.println("底牌" + diPai);
}
}

结果:

玩家1[?Q, ?7, 小王, ?10, ?K, ?A, ?6, ?2, ?5, ?8, ?9, ?J, ?5, ?5, ?4, ?3, ?4]
玩家2[?3, ?8, ?3, ?J, ?4, ?J, ?2, ?Q, ?Q, ?A, ?9, ?6, ?2, ?A, 大王, ?10, ?Q]
玩家3[?J, ?3, ?7, ?7, ?K, ?2, ?K, ?6, ?4, ?9, ?8, ?K, ?6, ?A, ?5, ?10, ?8]
底牌[?7, ?9, ?10]

感谢您的阅读,不足之处欢迎指正!

Java 实现 斗地主 案例

标签:package   字符串   工具   个数   stat   rgs   阶段   str   遍历   

原文地址:https://www.cnblogs.com/LRF-/p/14670560.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!