上个星期老师给个任务说如何用集合写出斗地主的炸弹💣和顺子
我丢 ,我。。。只会给张三 李四 王五发牌
直接上🐎。
package com.poker;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
/**
* 1.准备牌:54张牌存储到一个集合中
* 特殊牌:大王,小王
* 其他52张牌:
* 定义一个数组/集合,存储4种花色;
* 定义一个数组/集合,存储13个序号
* 循环嵌套遍历两个数组/集合,组装52张牌
* <p>
* 2.洗牌
* 使用集合工具Collections的方法
* static void shuffle(List<?> list)
* 随机打乱集合中元素的顺序
* <p>
* 3.发牌
* 1人17张牌为底牌,轮流发牌,集合的索引(0-53)%3
* 定义4个集合,存储3个玩家的牌和底牌
* <p>
* 4.看牌
* 直接打印集合,遍历存储玩家和底牌的集合
*/
public class Poker {
public static void main(String[] args) {
//创建 一个容器装 扑克
ArrayList<String> poker = new ArrayList<>();
String[] colors = {"♥", "♠", "♦", "♣"};
String[] numbers = {"A", "J", "Q", "K", "2", "3", "4", "5", "6", "7", "8", "9", "10"};
//遍历两个数组 里的字符串
for (String color : colors) {
for (String number : numbers) {
//1.准备扑克
poker.add(color + number);
}
}
poker.add("大王");
poker.add("小王");
poker.add("花牌");
//2.洗牌
//Random i = new Random();
Collections.shuffle(poker);
// System.out.println(poker);
//3.发牌
//先创建三个容器
ArrayList<String> arrayList01 = new ArrayList<>();
ArrayList<String> arrayList02 = new ArrayList<>();
ArrayList<String> arrayList03 = 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);
} else if (i % 3 == 0) {
arrayList01.add(p);
} else if (i % 3 == 1) {
arrayList02.add(p);
} else if (i % 3 == 2) {
arrayList03.add(p);
}
}
//张三的牌排序
// for (String arrLists01 :arrayList01 ){
// arrayList01=
// }
System.out.println("张三:" + arrayList01);
System.out.println("李四:" + arrayList02);
System.out.println("王五:" + arrayList03);
System.out.println("底牌:" + dipai);
}
}
有❀牌是因为我家那边都是这样玩的
下面看看老师的思路
先创建一个poker类
package com.bjpowernode.p1.map;
public class Poker {
private String color;
private int number;
// A--> 14
// 2 -->15
// 小王 99
// 大王 100
public Poker() {
}
public Poker(String color, int number) {
this.color = color;
this.number = number;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
@Override
public String toString() {
if(number<=10){
return color+number;
}else if(number<=15){
return color+"JQKA2".charAt(number-11);
}else{
return color;
}
}
}
然后实现一个Comparator<>接口
package com.bjpowernode.p1.map;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
public class OrderPokerByNumaber implements Comparator<Poker> {
@Override
public int compare(Poker o1, Poker o2) {
int diff=o2.getNumber()-o1.getNumber();
if(diff!=0){
return diff;
}else{
String [] arr={"黑桃","红桃","梅花","方块"};
List<String> list= Arrays.asList(arr); //将数组转换成集合
return list.indexOf(o1.getColor())-list.indexOf(o2.getColor());
}
}
}
最后测试
package com.bjpowernode.p1.map;
import java.util.ArrayList;
import java.util.Random;
import java.util.TreeSet;
public class Lx01 {
public static void main(String[] args) {
ArrayList<Poker> allPoker=new ArrayList<>();
for(int i=3;i<=15;i++){
String [] arr={"黑桃","红桃","梅花","方块"};
for(String s : arr){
Poker poker=new Poker(s,i);
allPoker.add(poker);
}
}
allPoker.add(new Poker("大王",100));
allPoker.add(new Poker("小王",99));
for (Poker poker : allPoker) {
System.out.print(poker+" ");
}
System.out.println();
Random random=new Random();
TreeSet<Poker> seta=new TreeSet<>(new OrderPokerByNumaber());
TreeSet<Poker> setb=new TreeSet<>(new OrderPokerByNumaber());
TreeSet<Poker> setc=new TreeSet<>(new OrderPokerByNumaber());
for(int i=0;i<17;i++){
int index1= random.nextInt(allPoker.size());
Poker p1= allPoker.remove(index1);
seta.add(p1);
int index2= random.nextInt(allPoker.size());
Poker p2=allPoker.remove(index2);
setb.add(p2);
int index3= random.nextInt(allPoker.size());
Poker p3=allPoker.remove(index3);
setc.add(p3);
}
System.out.println("玩家A 手中的牌");
for (Poker poker : seta) {
System.out.print(poker+" ");
}
}
}