模拟斗地主洗牌发牌-JAVA
1.1案例介绍
按照斗地主的规则,完成洗牌发牌的动作。
具体规则:
1.组装54张扑克牌
2.将54张牌顺序打乱
3.三个玩家参与游戏,三人交替摸牌,,每人17张牌,最后三张留作底牌。
4.查看三人各自手中的牌(按照牌的大小排序)、底牌
手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3
1.2案例需求分析
准备牌:
完成数字与纸牌的映射关系:
使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系(相当于一个字典)。
洗牌:
通过数字完成洗牌发牌
发牌:
将每个人以及底牌设计为ArrayList<String>,将最后3张牌直接存放于牌底,剩余牌通过对3取模依次发牌。
存放的过程中要求数字大小与斗地主规则的大小对应。
将代表不同纸牌的数字分配给不同的玩家与底牌。
看牌:
通过Map集合找到对应字符展示。
通过查询纸牌与数字对应关系,由数字转成纸牌字符串再进行展示。
二、代码实现
实现方式一:
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
/** 斗地主洗牌发牌顺序*/
public class Poker {public static void main(String[] args) {//准备花色ArrayList<String> color=new ArrayList<String>();color.add("♠");color.add("♥");color.add("♦");color.add("♣");//准备数字ArrayList<String> number=new ArrayList<String>();Collections.addAll(number, "3","4","5","6","7","8","9","10","J","Q","K","A","2");//定义一个map集合,用来将数字与每一张牌进行对应HashMap<Integer, String> map=new HashMap<Integer,String>();int index =0;//加入大小王map.put(index++, "小?");map.put(index++,"大?");for (String thisNumber:number) {for (String thisColor:color) {map.put(index++,thisColor+thisNumber);}}//一副牌54张的牌ArrayList里边为0-53的数的新牌ArrayList<Integer> cards=new ArrayList<Integer>();for (int i =0;i<=53;i++) {cards.add(i);}//洗牌Collections.shuffle(cards);//创建三个玩家和底牌ArrayList<Integer> iPlayer=new ArrayList<Integer>();ArrayList<Integer> iPlayer2=new ArrayList<Integer>();ArrayList<Integer> iPlayer3=new ArrayList<Integer>();ArrayList<Integer> itCards=new ArrayList<Integer>();//遍历这副洗好的牌,遍历过程中,将牌发到三个玩家和底牌中for (int i=0;i<cards.size();i++) {if (i>=51) {itCards.add(cards.get(i)); } else {if(i%3==0) {iPlayer.add(cards.get(i)); } else if(i%3==1) {iPlayer2.add(cards.get(i));} else {iPlayer3.add(cards.get(i));}}}//对每个人手中的牌排序Collections.sort(iPlayer);Collections.sort(iPlayer2);Collections.sort(iPlayer3);//对应数字形式的每个人手中的牌,定义字符串形式的牌ArrayList<String> sPlayer=new ArrayList<String>();ArrayList<String> sPlayer2=new ArrayList<String>();ArrayList<String> sPlayer3=new ArrayList<String>();ArrayList<String> sCards=new ArrayList<String>();for (Integer key:iPlayer) {sPlayer.add(map.get(key));}for (Integer key:iPlayer2) {sPlayer2.add(map.get(key));}for (Integer key:iPlayer3) {sPlayer3.add(map.get(key));}for (Integer key:itCards) {sCards.add(map.get(key));}//看牌System.out.println(sPlayer);System.out.println(sPlayer2);System.out.println(sPlayer3);System.out.println(sCards);}}
实现方式二:
Card
package day03.collection;import lombok.AllArgsConstructor;
import lombok.Data;@Data
@AllArgsConstructor
public class Card implements Comparable<Card>{public static final int THREE = 0;public static final int FOUR = 1;public static final int FIVE =2;public static final int SIX = 3;public static final int SEVEN = 4;public static final int EIGHT =5;public static final int NINE = 6;public static final int TEN = 7;public static final int JACK =8;public static final int QUEEN = 9;public static final int KING = 10;public static final int ACE =11;public static final int TWO = 12;public static final int BLACK = 13;public static final int COLOR =14;// ---------public static final int HEART =0;public static final int SPADE = 1;public static final int DIAMOND = 2;public static final int CLUB =3;public static final int JOKER =4;public static final String[] RANK_NAMES = {"红桃","黑桃","方块","梅花",""};public static final String[] SUIT_NAMES = {"3","4","5","6","7","8","9","10","J","Q","K","A","2","小王","大王"};// 花色private int rank;// 点数private int suit;@Overridepublic String toString() {return RANK_NAMES[rank] +SUIT_NAMES[suit];}@Overridepublic int compareTo(Card o) {return this.suit-o.suit;}
}
Player
package day03.collection;import java.util.Arrays;public class Player {private String name;private Card[] cards;public Player(String name) {this.name = name;this.cards = new Card[]{};}public void addCard(Card card){cards = Arrays.copyOf(cards,cards.length+1);cards[cards.length-1] = card;}public String toString() {Arrays.sort(cards);return name+":"+Arrays.toString(cards);}
}
CardDemo
package day03.collection;import java.util.*;public class CardDemo {public static void main(String[] args) {List<Card> list = new ArrayList<>();for (int suit = Card.THREE;suit<=Card.TWO;suit++){list.add(new Card(Card.HEART,suit));list.add(new Card(Card.SPADE,suit));list.add(new Card(Card.DIAMOND,suit));list.add(new Card(Card.CLUB,suit));}list.add(new Card(Card.JOKER,Card.BLACK));list.add(new Card(Card.JOKER,Card.COLOR));System.out.println(list);Collections.shuffle(list);System.out.println(list);Player[] players = {new Player("张三"),new Player("李四"),new Player("王五")} ;Iterator<Card> iterator = list.iterator();int index = 0;while (iterator.hasNext()){Card card = iterator.next();players[index% players.length].addCard(card);iterator.remove();if (list.size()==3) break;index++;}System.out.println("底牌"+list);System.out.println(Arrays.toString(players));}
}
模拟斗地主洗牌发牌-JAVA相关推荐
- java中Map集合、模拟斗地主洗牌发牌、JDK9对集合添加的优化
1.1 Map集合概述 Map集合概述 Map==>映射(一个对应一个) Map是一个接口,只要实现了该接口的类都是双列集合. 双列集合每次存储元素时都需要存储两个元素,一个元素称为键,一个元素 ...
- 【JAVASE】模拟斗地主洗牌发牌
1.案例介绍 按照斗地主的规则,完成洗牌发牌的动作. 具体规则: 组装54张扑克牌 54张牌顺序打乱 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌. 查看三人各自手中的牌(按照牌的大 ...
- Java实现模拟斗地主洗牌发牌
按照斗地主的规则,完成洗牌发牌看牌的动作.最终结果预计为: 具体规则: 1.组装54张扑克牌 2.将54张扑克牌顺序打乱 3.三个玩家参与游戏,三人交替摸牌,每人17张,最后三张做底牌 4.查看三人手 ...
- 18.集合框架(Map集合,HashMap和Hashtable的区别,Collections(集合工具类),集合练习,模拟斗地主(洗牌,发牌,看牌))
1.Map集合概述和特点 1.需求: 根据学号获取学生姓名 2.Map接口概述 查看API可以知道: 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能 ...
- java使用集合模拟斗地主洗牌发牌案例
package com.itheima.模拟斗地主.斗地主版本2;import java.util.ArrayList; import java.util.Collections; import ja ...
- 斗地主洗牌发牌——排序版
文章目录 前言 一.知识点 二.使用步骤 2.完整代码 感谢您的阅读,不足之处欢迎指正 前言 Java实现模拟斗地主洗牌发牌操作,留下三张底牌,对发到手的纸牌排序. 一.知识点 主要使用HashMap ...
- Java——集合(模拟斗地主洗牌和发牌进行排序)
//改进版,没有进行按牌的地位从小到大排序 package com.yy.test;import java.util.ArrayList; import java.util.Collections;p ...
- java集合框架的练习之斗地主洗牌发牌的模拟(升级版)
首先,奉上java集合框架的练习之斗地主洗牌发牌的模拟(初级版)的链接:http://blog.csdn.net/striner/article/details/78489306 初级版只具有洗牌发牌 ...
- Java实现模拟斗地主洗牌、发牌、看牌并排序
1.模拟斗地主洗牌.发牌.看牌 /* * 模拟斗地主洗牌.发牌.看牌*/package PokerDemo;import java.util.ArrayList; import java.util.C ...
最新文章
- 自学python有哪些方向-Python新手入门应该注意的一些问题以及学习方向
- 设置sqlplus环境变量
- C语言如何使用其他文件定义的结构体?(C++报错:无法转换到不完整的类【需在头文件中定义结构体??】)
- Apache Hadoop 3.0.0 GA版正式发布,可以部署到线上
- 百度研究院商业智能实验室招聘研究实习生!
- bert 多义词_BERT之后,GLUE基准升级为SuperGLUE:难度更大
- 使用IPFS集群搭建创建私有IPFS网络
- 使用Metal打造令人惊叹的游戏效果
- String与字节数组转换
- 【C++】字体文件解析(FreeType)
- Android 项目之电话拨号器
- 正确理解文件与目录的可读、可写、可执行权限
- 热敏电阻(NTC)的基本参数及其应用
- 【DirectX 2D游戏编程基础】DirectX精灵的创建
- 服务器虚拟化技术主要有什么优势
- [转载]通过 call gate 访问目标 code segment
- 【一】软件测试的起源与发展介绍
- Fping命令批量ping地址
- 08.音频系统:第003课_Linux音频驱动程序:第002节_ASoC音频驱动框架
- 微软抄袭 AppGet 始末,开源普法任重道远