模拟斗地主

(1)无序
import java.util.ArrayList;
import java.util.Collections;

/*
模拟斗地主的洗牌和发牌

  • *思路:
  • 1)创建一个牌盒(容器:集合)
  • ArrayList<String>
  • 2)装牌
  • 定义花色数组和点数数组(A,K)
  • 红桃A
  • 黑桃A
  • 梅花A
  • 方片A
  • ....
  • 3)洗牌
  • Collections中的随机置换的功能
  • 4)发牌
  • 遍历集合(获取集合中的具体的牌)
  • 需要判断:选择结构语句
  • 1--->A 2--->B 3----C
  • 4---A .................
  • 斗地主三个玩
  • 发个三个人----->三个人分别ArrayList<String>
  • 如果当前牌 % 3 ==0/1/2
  • 5)看牌
  • 三个人看牌:将看牌封装成一个功能(独立的 代码块)
  • */
    public class Poker {

    public static void main(String[] args) {

    //1.创建牌盒
    ArrayList<String> array = new ArrayList<String>() ;
    
    //2.装牌
    //2.1创建花色数组
    String[] colors = {"?","?","?","?"} ;
    //2.2 创建点数数组
    String[] numbers = {"A","2","3","4","5","6","7","8","9",
                        "10","J","Q","K"} ;
    for(String color :colors) {
        for(String number:numbers) {
                String poker = color.concat(number) ;
                array.add(poker) ;
        }
    }
    
    //添加小王和大王
    array.add("小王") ;
    array.add("大王") ;
    
    //3. 洗牌
    Collections.shuffle(array);
    
    //4.发牌
    //现在三个人玩,把每一个看成集合ArrayList
    ArrayList<String> player1 = new ArrayList<String>() ;
    ArrayList<String> player2 = new ArrayList<String>() ;
    ArrayList<String> player3 = new ArrayList<String>() ;
    ArrayList<String> diPai = new ArrayList<String>() ;
    
    //有规律的:遍历ArrayList集合 使用普通for循环,获取到集合的元素
    //通过元素 % 人数 = 0  /1/2 /..
    for(int x = 0 ; x < array.size() ; x ++) {
        //获取到每一个元素
        if(x >= array.size() -3) {
            diPai.add(array.get(x)) ;
        }else if(x % 3 == 0) {
            //玩家1
            player1.add(array.get(x)) ;
        }else if(x % 3 == 1) {
            //玩家2
            player2.add(array.get(x)) ;
        }else if(x % 3 == 2) {
            player3.add(array.get(x)) ;
        }
    }
    
    //5)看牌 

    // * 三个人看牌:将看牌封装成一个功能(独立的 代码块)
    lookPoker("玩家1", player1);
    lookPoker("玩家2", player2);
    lookPoker("玩家3", player3);
    lookPoker("底牌", diPai);
    }

    public static void lookPoker(String name,ArrayList<String> array) {
    System.out.print(name+"的牌是:");
    for(String s : array) {
    System.out.print(s+" ");
    }
    System.out.println();
    }
    }
    (2)有序
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.TreeSet;

/**

  • 模拟斗地主的洗牌和发牌,发到每一个手上的牌是保证有序的.. 思考: 1)创建牌盒
  • 创建两个集合:HashMap<Integer,String>,ArrayList<Integer> 2)装牌 定义花色数组和点数数组
  • 从0开始编号,将编号和编号对应的牌都存储到HashMap集合中,同时往ArrayList单独存储编号 3)洗牌 洗的是编号 4)发牌
  • 发的也是编号,为了保证牌有序,集合由TreeSet集合接收 5)看牌 封装功能
  • */
    public class Porker2 {

    public static void main(String[] args) {
    // 1. 创建两个集合:HashMap<Integer,String>,ArrayList<Integer>
    HashMap<Integer, String> hm = new HashMap<Integer, String>();
    ArrayList<Integer> array = new ArrayList<Integer>();

    // 2.装牌
    // 2.1 定义花色数组和点数数组
    String[] colors = { "?", "?", "?", "?" };
    String[] numbers = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2" };
    
    // 从0开始编号,将编号和编号对应的牌都存储到HashMap集合中,同时往ArrayList单独存储编号
    int index = 0;
    // 拼接
    for (String number : numbers) {
        for (String color : colors) {
            String poker = color.concat(number);
            hm.put(index, poker);
            array.add(index);
            index++;
        }
    }
    
    // 装小王和大王
    hm.put(index, "小王");
    array.add(index);
    index++;
    hm.put(index, "大王");
    array.add(index);
    // 不能++了,角标越界
    
    // 洗牌
    Collections.shuffle(array);
    
    // 4)发牌
    // 发的也是编号,为了保证牌有序,集合由TreeSet集合接收
    TreeSet<Integer> player1 = new TreeSet<Integer>();
    TreeSet<Integer> player2 = new TreeSet<Integer>();
    TreeSet<Integer> player3 = new TreeSet<Integer>();
    TreeSet<Integer> diPai = new TreeSet<Integer>();
    
    // 有规律的:遍历ArrayList集合 使用普通for循环,获取到集合的元素
    // 通过元素 % 人数 = 0 /1/2 /..
    for (int x = 0; x < array.size(); x++) {
        // 获取到每一个元素
        if (x >= array.size() - 3) {
            diPai.add(array.get(x));
        } else if (x % 3 == 0) {
            // 玩家1
            player1.add(array.get(x));
        } else if (x % 3 == 1) {
            // 玩家2
            player2.add(array.get(x));
        } else if (x % 3 == 2) {
            player3.add(array.get(x));
        }
    }

    // 5)看牌 封装功能
    lookPoker("玩家1", player1, hm);
    lookPoker("玩家2", player2, hm);
    lookPoker("玩家3", player3, hm);
    lookPoker("底牌", diPai, hm);

    }

    public static void lookPoker(String name,TreeSet<Integer> ts,
    HashMap<Integer, String> hm) {
    System.out.print(name+"的牌是:");
    //遍历TreeSet集合获取到每一个编号
    for(Integer key :ts) {
    //获取到编号,通过编号找牌(在HashMap中找)
    String value = hm.get(key) ;
    System.out.print(value+" ");
    }
    System.out.println();
    }
    }

原文地址:http://blog.51cto.com/13670525/2117644

时间: 2024-08-10 14:39:17

模拟斗地主的相关文章

模拟斗地主洗牌、发牌(含有排序和不排序的)

不排序的: package cn.idcast5; import java.util.ArrayList; import java.util.Collections; //模拟斗地主洗牌发牌 //分析 //A 创建一个牌盒 //B 装牌 //C 洗牌 //D 发牌 //E 看牌 public class Shiyue31 { public static void main(String[] args) { // 创建一个牌盒 ArrayList<String> array = new Arra

54张牌模拟斗地主

54张牌模拟斗地主 package demo; import java.util.Random; /** * 54张牌洗牌和发牌 * */ public class Puker { public static void main(String[] args) { Random random = new Random(); // 初始化数组 String[] puker = { "♠A", "♠2", "♠3", "♠4", &

代码实现:模拟斗地主洗牌和发牌并对牌进行排序的代码实现

package com.loaderman.test; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.TreeSet; public class Test{ /** * * A:案例演示 * 模拟斗地主洗牌和发牌并对牌进行排序的代码实现 * * 分析: * 1,买一副扑克,其实就是自己创建一个集合对象,将扑克牌存储进去 * 2,洗牌 * 3,

代码实现:模拟斗地主洗牌和发牌,牌没有排序

package com.loaderman.test; import java.util.ArrayList; import java.util.Collections; public class Test { /** * * A:案例演示 * 模拟斗地主洗牌和发牌,牌没有排序 * * 分析: * 1,买一副扑克,其实就是自己创建一个集合对象,将扑克牌存储进去 * 2,洗牌 * 3,发牌 * 4,看牌 */ public static void main(String[] args) { //1

java 18 - 12 模拟斗地主洗牌、发牌,并对发的牌进行排序

1 /* 2 模拟斗地主的发牌功能(发牌完毕后发到手上的牌是有顺序的) 3 分析: 4 A:创建一个HashMap集合 5 B:创建一个ArrayList集合 6 C:创建两个字符串,一个是花色,一个是牌的数字 (发牌得有一盒牌) 7 为了方便以后的排序,创建这两个字符串的时候,按照大小顺序排列(斗地主中的大小顺序) 8 大小王除外 9 D:把这两个字符串放进HashMap集合中(拼接一起 花色+牌号) 同时给每个放进去牌进行编码0--52并存储 10 同时也给ArrayList集合中存储编码,

2014 HDU多校弟六场J题 【模拟斗地主】

这是一道5Y的题目 有坑的地方我已在代码中注释好了 QAQ Ps:模拟题还是练的太少了,速度不够快诶 //#pragma comment(linker, "/STACK:16777216") //for c++ Compiler #include <stdio.h> #include <iostream> #include <climits> #include <cstring> #include <cmath> #inclu

ArrayList模拟斗地主的洗牌,发牌和看牌

/* * ArrayList模拟斗地主的洗牌,发牌和看牌 * * 分析: * 1.创建一个牌盒 * 2.装牌 * 3.洗牌 * 4.发牌 * 5.看牌 */ 代码: import java.util.ArrayList; import java.util.Collections; /** * ArrayList模拟斗地主的洗牌,发牌和看牌 * @author TP * */ public class Doudizhu { /* * ArrayList模拟斗地主的洗牌,发牌和看牌 * * 分析:

模拟斗地主真人在线发牌

模拟斗地主真人在线发牌 前言 要斗地主先得有牌吧,没牌斗个鸡毛,所以先让厂家生产一副扑克牌.然后呢,哥们三个今天想斗地主了,你得去超市买一副 崭新 的扑克牌吧.这样就可以进入玩耍阶段了,先得洗牌,后摸牌,在把最后三张牌压箱底,好了这样就开始展现技艺了..... 我们现在用java集合的知识模拟斗地主的发牌,和上述流程是一模一样的. 设计过程 造一副扑克 一副扑克有54张牌,有四种花色,从A到K,还有大小王.先定义一个nums集合来装扑克牌的数字,然后定义一个color集合装四种花色,保证它们的添

Map集合、HashMap集合、LinkedHashMap集合、Hashtable集合、Collections工具类和模拟斗地主洗牌和发牌

1.Map集合概述和特点 * A:Map接口概述  * 查看API可以知道:  * 将键映射到值的对象  * 一个映射不能包含重复的键  * 每个键最多只能映射到一个值 * B:Map接口和Collection接口的不同  * Map是双列的,Collection是单列的  * Map的键唯一,Collection的子体系Set是唯一的  * Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构是针对元素有效 2.Map集合的功能概述 * A:Map集合的功能概述  *