引言
这个部分讲一个有关斗地主小代码,对于洗牌和发牌的相关部分做一介绍。用了两种不同的方法,让我们对普通的ArrayList集合和对Map集合的具体实现做一个大致的了解。
ArrayList
package com.stu.poker;
import java.util.ArrayList;
import java.util.Collections;
public class Poker {
public static void main(String[] args) {
//4:模拟斗地主洗牌和发牌
/**
* 1.创建一副牌(54)
* 2.洗牌
* 3.发牌
* 4.看牌
*/
//1.创建一副牌
//创建一个集合存储牌,使用ArrayList集合
ArrayList<String> pokers = new ArrayList<String>();
//创建存储花色的数组
String[] colors={"♥","♠","♣","♦"};
String[] numbers={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
for(String color:colors){
for(String number:numbers){
pokers.add(color+number);
}
}
//将大王和小王存储到集合
pokers.add("大王");
pokers.add("小王");
//2、洗牌
Collections.shuffle(pokers);
//System.out.println(pokers);
//3.发牌
/**
* 张三:0 3 6
* 李四:1 4 7
* 王五:2 5 8
* 底牌:设置成最后3张牌
*/
//创建三个集合存储各自的牌
ArrayList<String> zhangsan = new ArrayList<String>();
ArrayList<String> lisi = new ArrayList<String>();
ArrayList<String> wangwu = new ArrayList<String>();
ArrayList<String> dipai = new ArrayList<String>();
for(int i=0;i<pokers.size();i++){
if(i>=pokers.size()-3){
dipai.add(pokers.get(i));
}else if(i%3==0){
zhangsan.add(pokers.get(i));
}else if(i%3==1){
lisi.add(pokers.get(i));
}else if(i%3==2){
wangwu.add(pokers.get(i));
}
}
//4、看牌
lookPoker("张三", zhangsan);
lookPoker("李四", lisi);
lookPoker("王五", wangwu);
lookPoker("底牌", dipai);
}
public static void lookPoker(String name, ArrayList<String> pokers){
System.out.println(name+"的牌是:");
for(String poker:pokers){
System.out.print(poker+" ");
}
System.out.println();
}
}
编译运行结果如下:
张三的牌是:
♥3 ♣8 ♣6 ♠7 ♣K ♦9 ♥8 ♥J ♦K ♠5 ♦10 ♦4 ♥6 ♥A ♠2 ♥Q ♦7
李四的牌是:
♠A ♣Q ♦6 ♥10 ♠8 ♠K ♥9 ♣2 ♦5 ♣A ♠Q 大王 ♠3 ♥2 ♦J ♣4 ♥5
王五的牌是:
♦2 ♣7 ♠9 ♣5 ♥7 ♣9 ♦A ♠J ♥4 ♣3 小王 ♠4 ♦Q ♦8 ♥K ♠10 ♠6
底牌的牌是:
♣10 ♦3 ♣J
Map
package com.stu.poker;
import java.util.ArrayList;
import java.util.Collections;
import java.util.TreeMap;
import java.util.TreeSet;
public class Poker2 {
public static void main(String[] args) {
/**
* 1.创建Map集合存储牌,并且大的键对应大的牌,小的键对应小的牌
* 2.洗牌,洗的是索引(map集合中每一张牌对应的键)
* 3.发牌,发的索引,并且随这个索引进行排序
* 4.看牌,根据发到的键去map集合中找出对应的值
*/
//1、创建Map集合存储牌,大的键对应大的牌,小的键对应小的牌
TreeMap<Integer, String> pokers = new TreeMap<Integer,String>();
//向集合中存储元素
String[] colors = {"♥","♠","♣","♦"};
String[] numbers = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
//创建一个ArrayList存储每一张牌对应的索引
ArrayList<Integer> indexs = new ArrayList<Integer>();
int index=0;
for(String number:numbers){
for(String color:colors){
pokers.put(index, color+number);
indexs.add(index);
index++;
}
}
//将大王小王存进去
pokers.put(index, "大王");
indexs.add(index);
index++;
pokers.put(index, "小王");
indexs.add(index);
//System.out.println(pokers);
//洗牌
Collections.shuffle(indexs);
//发牌
TreeSet<Integer> xuezhiqian = new TreeSet<>();
TreeSet<Integer> zhourunfa = new TreeSet<>();
TreeSet<Integer> zhoujielun = new TreeSet<>();
TreeSet<Integer> dipai = new TreeSet<>();
//发牌
for (int i = 0; i < indexs.size(); i++) {
if (i>=indexs.size()-3) {
dipai.add(indexs.get(i));
}else if (i%3==0) {
xuezhiqian.add(indexs.get(i));
}else if (i%3==1) {
zhourunfa.add(indexs.get(i));
}else if (i%3==2) {
zhoujielun.add(indexs.get(i));
}
}
//看牌
lookPoker("薛之谦", xuezhiqian, pokers);
lookPoker("周润发", zhourunfa, pokers);
lookPoker("周杰伦", zhoujielun, pokers);
lookPoker("底牌", dipai, pokers);
}
public static void lookPoker(String name,TreeSet<Integer> indexs,
TreeMap<Integer, String> pokers){
System.out.print(name+"的牌是:");
for (Integer index : indexs) {
System.out.print(pokers.get(index)+" ");
}
System.out.println();
}
}
编译运行结果如下:
薛之谦的牌是:♥3 ♦3 ♥6 ♠6 ♦6 ♣7 ♥8 ♠9 ♣9 ♣10 ♦10 ♦J ♣Q ♥K ♦K ♠2 ♣2
周润发的牌是:♥4 ♣5 ♣6 ♥7 ♣8 ♦8 ♥10 ♠10 ♠J ♣J ♥Q ♠Q ♦Q ♣K ♥A ♥2 大王
周杰伦的牌是:♠3 ♠4 ♣4 ♦4 ♥5 ♠5 ♦5 ♠7 ♦7 ♥9 ♦9 ♥J ♠K ♠A ♣A ♦A ♦2
底牌的牌是:♣3 ♠8 小王