基于java实现斗地主代码实例解析

斗地主

规则:

1. 组装54张扑克牌

2. 将54张牌顺序打乱

3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。

4. 查看三人各自手中的牌(按照牌的大小排序)、底牌

手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5, 4,3

分析:

准备牌:

完成数字与纸牌的映射关系:

使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系(相当于一个字典)。

洗牌:

通过数字完成洗牌发牌

发牌:

将每个人以及底牌设计为ArrayList<String>,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。

存放的过程中要求数字大小与斗地主规则的大小对应。

将代表不同纸牌的数字分配给不同的玩家与底牌。

看牌:

通过Map集合找到对应字符展示。

通过查询纸牌与数字的对应关系,由数字转成纸牌字符串再进行展示。

代码:

package com.oracle.demo01;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

public class DouDiZhu {

  public static void main(String[] args) {

    Map<Integer, String> pooker=new HashMap<Integer, String>();
    ArrayList<Integer> pookerNumer=new ArrayList<Integer>();
    //封装Map
    String[] color={"♠","♦","♥","♣"};
    String[] number={"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
    int index=2;
    for (String n : number) {
      for (String c : color) {
        //封装Map
        pooker.put(index, c+n);
        //封装集合
        pookerNumer.add(index);
        index++;
      }
    }
    //封装大小王
    pooker.put(0, "大王");
    pookerNumer.add(0);
    pooker.put(1, "小王");
    pookerNumer.add(1);
    //System.out.println(pooker);
    //System.out.println(pookerNumer);
    //洗牌
    Collections.shuffle(pookerNumer);
    //System.out.println(pookerNumer);
    //创建四个容器
    ArrayList<Integer> player1=new ArrayList<Integer>();
    ArrayList<Integer> player2=new ArrayList<Integer>();
    ArrayList<Integer> player3=new ArrayList<Integer>();
    ArrayList<Integer> bottom=new ArrayList<Integer>();
    //发牌
    for (int i = 0; i< pookerNumer.size(); i++) {
      if(i<3){
        bottom.add(pookerNumer.get(i));
      }else if(i%3==0){
        player1.add(pookerNumer.get(i));
      }else if(i%3==1){
        player2.add(pookerNumer.get(i));
      }else if(i%3==2){
        player3.add(pookerNumer.get(i));
      }
    }
    //排序
    Collections.sort(player1);
    Collections.sort(player2);
    Collections.sort(player3);
    Collections.sort(bottom);
    //调用看牌的方法
    look("渣渣灰",pooker,player1);
    look("古天乐",pooker,player2);
    look("刘嘉玲",pooker,player3);
    look("底牌",pooker,bottom);
  }
  //看牌的方法
  public static void look(String name,Map<Integer, String> pooker,ArrayList<Integer> player){
    System.out.println(name+":");
    for (int num : player) {
      System.out.print(pooker.get(num)+" ");
    }
    System.out.println();
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java模拟实现斗地主发牌小程序

    一副扑克有54张牌:大小王+4*13,接下来我们来模拟一下斗地主的发牌过程 首先,我们需要买牌,新买来的牌都是按顺序摆放的,因此下一步是洗牌,最后就是发牌了,不过发牌的时候要注意还要在最后留三张底牌. 主要使用的类有 ArrayList:用来存储扑克,Collections用来洗牌. import java.util.ArrayList; import java.util.Collections; /* * 模拟斗地主发牌 一共54张牌 * 买牌 * 洗牌 * 发牌 * */ public cl

  • vpn连接程序hta版实现代码(修改)

    复制代码 代码如下: <HTA:APPLICATION ID="MySampleHTA" Caption="yes" SCROLL="auto" border="none" borderStyle="static" SINGLEINSTANCE="yes" maximizebutton="no" BORDER="no" icon="

  • 详解java_ 集合综合案例:斗地主

    案例介绍 按照斗地主的规则,完成洗牌发牌的动作. 具体规则: 使用54张牌打乱顺序,三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌. 案例分析 1.准备牌: 牌可以设计为一个ArrayList,每个字符串为一张牌. 每张牌由花色数字两部分组成,我们可以使用花色 集合与数字集合嵌套迭代完成每张牌的组装. 牌由Collections类的shuffle方法进行随机排序. 2.发牌 将每个人以及底牌设计为ArrayList,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌. 3.看

  • Java实现斗地主最简代码实例

    案例说明:使用Java实现简单的斗地主洗牌发牌的操作: 具体规则: 共有54张牌,顺序打乱: 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后留三张为底牌(地主牌). 具体代码实现步骤: 扑克牌准备操作 import java.util.ArrayList; import java.util.Collections; import java.util.List; public class PokerGame { public static void main(String[] args) {

  • java实现斗地主游戏

    感想: 第一次写博客,感觉编辑器挺复杂厉害的,感觉自己的内容挺简单的.有什么问题请多多指教! 思路: 1.创建一个扑克牌的实体类Poker,设置了四个参数:花色.数字.牌值(判断大小).是否地主牌,实现getset方法和构造方法: 2.创建一个玩家的实体类Player,设置了四个参数: 初始牌集合,排序后牌集合,牌值集合,是否地主,实现getset方法和构造方法: 3.洗牌:循环嵌套花色数组跟数字数组生成52个Poker,手动加入大小王Poker,放进map(int,Poker)里面,利用Col

  • Java实现简单的斗地主游戏

    本文实例为大家分享了Java实现斗地主游戏的具体代码,供大家参考,具体内容如下 原理图: 斗地主过程: 1.组合牌  * 2.洗牌  * 3.发牌  * 4.看牌 代码实现: package itcast.demo6; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; public class DouDiZhu { public static void main(String[]

  • java实现模仿斗地主发牌

    本文实例为大家分享了java斗地主发牌的具体代码,供大家参考,具体内容如下 分析 这是一个模仿斗地主发牌的例子: 按照斗地主的规则,完成洗牌发牌的动作. 具体规则: 用0~53分别对应相应的花色和牌面值: 用shuffle随机打乱排序好的数字,起到洗牌的作用: 使用54张牌打乱顺序,三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌. 实现方式 准备牌: 牌可以设计为一个ArrayList,每个字符串为一张牌. 每张牌由花色数字两部分组成,我们可以使用花色集合与数字集合嵌套迭代完成每

  • Java实现斗地主简化版

    本文实例为大家分享了Java实现斗地主的具体代码,供大家参考,具体内容如下 package com.westos.chinesePoker; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeSet; /*

  • 基于java实现斗地主代码实例解析

    斗地主 规则: 1. 组装54张扑克牌 2. 将54张牌顺序打乱 3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌. 4. 查看三人各自手中的牌(按照牌的大小排序).底牌 手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5, 4,3 分析: 准备牌: 完成数字与纸牌的映射关系: 使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系(相当于一个字典). 洗牌: 通过数字完成洗牌发牌 发牌: 将每个人以及底牌设计为Array

  • Java表格JTable代码实例解析

    代码如下: import javax.swing.JTable; import javax.swing.table.AbstractTableModel; import javax.swing.JScrollPane; import javax.swing.JFrame; import javax.swing.JOptionPane; import java.awt.*; import java.awt.event.*; public class JTableDemo extends JFram

  • Java实现基于TCP的通讯程序实例解析

    Java中的TCP通信程序 TCP可以实现两台计算机之间的数据交互通信的两端,要严格区分客户端与服务端 两端通信时的步骤: 1.服务端程序,需要事先启动,等待客户端连接 2.客户端主动连接服务器端,才能成功通信,服务器端不可以主动链接客户端 在java中两个类用于实现TCP通信程序: 客户端: java.net.Socket 类表示.创建 Socket 对象,向服务端发出连接请求,服务端响应请求,两者建 立连接开始通信. 服务端: java.net.ServerSocket 类表示.创建 Ser

  • Java 代码实例解析设计模式之监听者模式

    代码展示 Main:测试类 ObServer:每个被监听的对象实现该接口,重写该方法,完成自己的业务 public interface ObServer { /** * 当某一个被监控的对象发生变化时 * 所有实现该方法处理方法 */ void exceptionHandler(); } Subject:监听者容器 public interface Subject { /** * 添加被观察对象 */ void add(ObServer obServer); /** * 通知所有被观察者完成自己

  • Java Web开发入门书籍实例解析(总结一)

    从事Java Web开发这一段时间来,对Java 面向对象的思想和MVC开发模式可以说已经熟悉了.我当前参与的项目使用的框架是Spring.SpringMVC.Hibernate.下面我们小编给大家整理一篇教程帮助大家学习javaweb相关知识,感兴趣的朋友可以参考下. 一.基本概念 1.1.WEB开发的相关知识 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资源分为: 1.静态web资源(如html 页面):指w

  • Java中后台线程实例解析

    本文研究的主要是Java中后台线程的相关问题,具体介绍如下. 以前从来没有听说过,java中有后台线程这种东西.一般来说,JVM(JAVA虚拟机)中一般会包括俩种线程,分别是用户线程和后台线程.所谓后台线程(daemon)线程指的是:在程序运行的时候在后台提供的一种通用的服务的线程,并且这种线程并不属于程序中不可或缺的部分.因此,当所有的非后台线程结束的时候,也就是用户线程都结束的时候,程序也就终止了.同时,会杀死进程中的所有的后台线程.反过来说,只要有任何非后台线程还在运行,程序就不会结束.不

  • Spring Bean装载方式代码实例解析

    这篇文章主要介绍了Spring Bean装载方式代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Bean的装配方式 Bean的装配可以理解为依赖关系注入 基于XML的装配 a) 设值注入 i.要求: Bean 类必须提供一个默认的无参构造方法. Bean 类必须为需要注入的属性提供对应的setter方法. b) 构造注入 package com.itheima.assemble; import java.util.List; pub

  • Java数组越界问题实例解析

    Java中数组初始化和OC其实是一样的,分为动态初始化和静态初始化, 动态初始化:指定长度,由系统给出初始化值 静态初始化:给出初始化值,由系统给出长度 在我们使用数组时最容易出现的就是数组越界问题,好了,这里有个简单的例子 int [][] array = {{1,2,3},{1,4}}; System.out.println(array[1][2]); 这是一个二维数组,很明显,数组越界了,控制台中会打印如下信息: Exception in thread "main" java.l

  • Java多线程回调方法实例解析

    所谓回调,就是客户程序C调用服务程序S中的某个方法A,然后S又在某个时候反过来调用C中的某个方法B,对于C来说,这个B便叫做回调方法. 下面看一个实际例子来理解: 本示例设置一个提问者,一个回答者,而回答者需要回答提问者一个很深奥的问题时,这时需要很多时间去查找,提问者又开始做其他的事情, 等回答者找到答案后,再把答案告诉提问者. 一.提问者的类 涉及到长时间的思考,要sleep,要继承Thread package com.xykj.thread; public class XiaoZhang

  • java编程多线程并发处理实例解析

    本文主要是通过一个银行用户取钱的实例,演示java编程多线程并发处理场景,具体如下. 从一个例子入手:实现一个银行账户取钱场景的实例代码. 第一个类:Account.java 账户类: package cn.edu.byr.test; public class Account { private String accountNo; private double balance; public Account(){ } public Account(String accountNo,double

随机推荐