Java实现斗地主案例

作者:-_Coco_ 时间:2023-06-01 06:43:59 

本文实例为大家分享了Java实现斗地主的具体代码,供大家参考,具体内容如下


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

public class DemoPoker {
public static void main(String[] args) {
/**
*一、准备牌
普通牌:2 A K...3
花色:♥ ♠ ♣ ♦
王牌:大王 小王
创建一个集合,把牌组装之后存进去
*/
String[] numbers = {"2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3"};
String[] colors = {"♥", "♠", "♣", "♦"};
ArrayList<String> pokerBox = new ArrayList<>();
for (String color : colors) {
 for (String number : numbers) {
 pokerBox.add(color + number);
 }
}
pokerBox.add("大王");
pokerBox.add("小王");

/**
* 二、洗牌
static void shuffle(List<?> list) 使用默认的随机源随机置换指定的列表。
此处为了输出结果工整所以没有直接输出集合
*/
Collections.shuffle(pokerBox);
for (int i = 0; i < pokerBox.size(); i++) {
 System.out.print(pokerBox.get(i)+"\t");
 if (i==26) {
 System.out.println();
 }
}
System.out.println();

/**
* 三、发牌
遍历集合,用索引%3发牌,余0给玩家1,余1给玩家2,余2给玩家3
索引0-50是玩家的牌,51-53是底牌
*/
//玩家一
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 < pokerBox.size(); i++) {
 String faces = pokerBox.get(i);
 if (i>=51) {
 diPai.add(faces);
 } else if (i%3==0) {
 player01.add(faces);
 } else if (i%3==1) {
 player02.add(faces);
 } else if (i%3==2) {
 player03.add(faces);
 }
}

/**
* 四、看牌
直接输出每位玩家的集合
 */
System.out.println("张无忌"+player01);
System.out.println("张翠山"+player02);
System.out.println("殷素素"+player03);
System.out.println("底牌"+diPai);
}
}

带排序版的


package com.demo_2.poker;

import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;

public class Poker {
/**
*一共要四步。一、备牌 二、洗牌 三、发牌 四、看牌
目的:练习集合的用法
*/
public static void main(String[] args) {
/**
 * 第一步:备牌
 使用List接口中的of()方法添加并分别创建numbers和colors集合
 */
//numbers:存储普通牌 2、A、K...3从大到小
List<String> numbers = List.of("2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3");
//colors:存储四种花色 ♥、♠、♦、♣
List<String> colors = List.of("♥", "♠", "♦", "♣");
//创建一个Map集合存储索引和组装好的牌
HashMap<Integer, String> pokerBox = new HashMap<>();
//创建一个List集合储存牌的索引
LinkedList<Integer> pokerIndex = new LinkedList<>();
//先把大王、小王和下标分别放进Map的键和值里面,再向LinkedList里面存储下标,下标增加1
int index = 0;
pokerBox.put(index, "大王");
pokerIndex.add(index);
index++;
pokerBox.put(index, "小王");
pokerIndex.add(index);
index++;
//组装牌:遍历两个List集合,使用Map接口中的put()方法给pokerBox添加键和值,并给LinkedList传下标
for (String number : numbers) {
 for (String color : colors) {
 pokerBox.put(index, color + number);
 pokerIndex.add(index);
 index++;
 }
}
/**
 * 第二步:洗牌
使用Collocations类中的shuffler方法,传递参数pokerIndex
 */
Collections.shuffle(pokerIndex);

/**
 * 第三步:发牌
创建四个List集合,分别存储三位玩家和底牌
使用for循环遍历pokerIndex,i%3结果为0的给玩家1,1的给玩家2,2的给玩家3
 */
LinkedList<Integer> player01 = new LinkedList<>();
LinkedList<Integer> player02 = new LinkedList<>();
LinkedList<Integer> player03 = new LinkedList<>();
LinkedList<Integer> diPai = new LinkedList<>();

for (int i = 0; i < pokerIndex.size(); i++) {
 Integer in = pokerIndex.get(i);
 if (i >= 51) {
 diPai.add(in);
 } else if (i % 3 == 0) {
 player01.add(in);
 } else if (i % 3 == 1) {
 player02.add(in);
 } else if (i % 3 == 2) {
 player03.add(in);
 }
}
//给玩家的牌排序,使用Collocations接口中的sort()方法排序
Collections.sort(player01);
Collections.sort(player02);
Collections.sort(player03);
Collections.sort(diPai);
/**
*第四步:看牌
遍历排过序的List集合作为Map集合的键值获取对应的值
为提高代码复用性定义一个方法代替
 */
print("令狐冲",player01,pokerBox);
print("诸葛瑾",player02,pokerBox);
print("司马懿",player03,pokerBox);
print("底牌",diPai,pokerBox);
}
/**
*看牌的方法:
参数:
String name
LinkedList<Integer> list
HashMap<Integer, String> map
*/
public static void print(String name,LinkedList<Integer> list,HashMap<Integer, String> map){
System.out.print(name+":");
for (Integer key : list) {
 System.out.print(map.get(key)+" ");
}
System.out.println();
}
}

来源:https://blog.csdn.net/wwwwssw_/article/details/104622499

标签:java,斗地主
0
投稿

猜你喜欢

  • Java中比较抽象类与接口的异同

    2023-09-24 01:50:40
  • springboot 自定义权限标签(tld),在freemarker引用操作

    2023-11-23 06:20:15
  • Java深入讲解static操作符

    2023-11-27 00:59:16
  • Java并发线程池实例分析讲解

    2022-08-05 20:25:40
  • Java Scala实现数据库增删查改操作详解

    2022-02-03 05:09:22
  • Android入门之TabHost与TabWidget实例解析

    2022-12-07 23:03:42
  • JavaBean和Map转换封装类的方法

    2023-04-18 06:50:52
  • java组件fileupload文件上传demo

    2022-09-14 11:00:45
  • C#实现Socket通信的解决方法

    2022-06-01 22:06:00
  • maven多profile 打包下 -P参和-D参数的实现

    2023-03-22 08:25:08
  • HttpServletRequest对象常用功能_动力节点Java学院整理

    2022-01-05 10:37:08
  • Android仿淘宝物流信息TimeLineView

    2023-10-09 20:12:47
  • Android注解基础介绍快速入门与解读

    2023-04-30 22:32:19
  • mybatis日志打印的两款IDEA插件推荐

    2022-01-12 07:55:52
  • C#使用SQL DataAdapter数据适配代码实例

    2021-11-29 11:51:15
  • Android Studio的中文乱码问题解决方法

    2023-06-05 04:48:14
  • Java 8 动态类型语言Lambda表达式实现原理解析

    2023-08-05 09:04:25
  • springboot集成elasticsearch7的图文方法

    2022-05-15 19:46:11
  • c# 实现语音聊天的实战示例

    2021-11-18 06:29:20
  • c# 值类型实例构造器

    2023-12-23 16:10:10
  • asp之家 软件编程 m.aspxhome.com