集合模拟斗地主
1.
package poker;import java.util.ArrayList;
import java.util.Collections;
/*
* 模拟斗地主的洗牌和发牌
* 1)创建牌盒,ArrayList集合
* 2)装牌
* 3)洗牌
* 4)发牌
* 5)看牌
*/
public class PokerTest1 {
public static void main(String[] args) {
//创建ArrayList集合对象
ArrayList<String> array=new ArrayList<String>();
//装牌
//定义花色数组,静态初始化
String[]colors={"♠","♥","♦","♣"};
//定义点数数组,静态初始化
String[]numbers={"A","1","2","3","4","5","6","7","8","9","J","Q","K"};
//遍历花色数组和点色数组并将花色拼接点数
//增强for
for(String color:colors){
for(String number:numbers){
array.add(color.concat(number));
}
}
//给集合添加大王小王
array.add("大王");
array.add("小王");
//洗牌。使用Collections的置换功能
Collections.shuffle(array);
/*
* 发牌,每一个玩家都看作是一个集合,把第一张牌发给第一个人
* 把第二张牌发给第二个人
* 把第三张牌发给第三个人
* 把第四张牌发给第一个人
* 剩余三张是底牌
*/
//创建玩家集合对象
ArrayList<String> player1=new ArrayList<String>();
ArrayList<String> player2=new ArrayList<String>();
ArrayList<String> player3=new ArrayList<String>();
ArrayList<String> dipai=new ArrayList<String>();
for(int x=0;x<array.size();x++){
if(x>=array.size()-3){
dipai.add(array.get(x));
}else if(x%3==0){
player1.add(array.get(x));
}else if(x%3==1){
player2.add(array.get(x));
}else if(x%3==2){
player3.add(array.get(x));
}
}
lookPoker("玩家1",player1);
lookPoker("玩家2",player2);
lookPoker("玩家3",player3);
lookPoker("底牌", dipai);
}
//看牌,每个玩家都要看牌,把看牌封装成一个功能
public static void lookPoker(String name,ArrayList<String> array){
System.out.println(name+"的牌是:");
//遍历集合,获取每一张牌
for(String s:array){
System.out.print(s+" ");
}
System.out.println();
}
}
2.改进
package poker;import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;
/**
* 模拟斗地主
* 要求:每个玩家的牌按顺序排列
* 1)创建HashMap集合 <Integer,String>,编码作为键,牌作为值
* 同时将牌的编号储存到ArrayList<Integer>
* 2)洗牌,洗的是编码,用Collections的置换功能
* 3)发牌,发牌发的也是编码,为了保证每个玩家拿到的编码是有序的,用TreeSet集合去接收
* 4)看牌,用HashMap的get功能去获取每个键对应的值,也就是玩家拿到的牌
*
*
* */
public class PokerTest2 {
public static void main(String[] args) {
//创建HashMap集合
HashMap<Integer, String> hm = new HashMap<Integer, String>() ;
//创建ArrayList集合
ArrayList<Integer> array = new ArrayList<Integer>();
//装牌
//定义花色数组
String[] colors={"♠","♥","♦","♣"} ;
//定义点数数组
String[] numbers={"3","4","5","6","7","8","9","10",
"J","Q","k","A","2"};
//定义编号初始值,遍历花色数组和点数数组然后用点数拼接花色,将编号和牌放入到HashMap集合中
//同时给ArrayList添加编号
int index = 0 ;
//瑁呯墝
for(String number :numbers){
for(String color:colors){
String poker = color.concat(number) ;
hm.put(index, poker) ;
array.add(index) ;
index ++ ;
}
}
//给集合添加大王小王
hm.put(index, "小王") ;
array.add(index) ;
index ++;
hm.put(index, "大王") ;
array.add(index) ;
//洗牌
//用Collections的置换功能
Collections.shuffle(array) ;
//发牌
//发牌发的也是编码,为了保证每个玩家拿到的编码是有序的,用TreeSet集合去接收
TreeSet<Integer> player1 = new TreeSet<Integer>();
TreeSet<Integer> player2 = new TreeSet<Integer>();
TreeSet<Integer> player3 = new TreeSet<Integer>();
TreeSet<Integer> diPai = new TreeSet<Integer>();
/*
* 然后判断,剩下的最后三张牌是底牌
* 把第一张牌发给第一个玩家
* 把第二张牌发给第二个玩家
* 把第三张牌发给第三个玩家
* 把第四张牌发给第一个玩家
* ........
*/
for(int x = 0 ; x < array.size() ; x ++){
if(x>=array.size() -3){
diPai.add(array.get(x)) ;
}else if( x % 3==0){
player1.add(array.get(x)) ;
}else if(x % 3==1){
player2.add(array.get(x)) ;
}else if( x % 3==2){
player3.add(array.get(x)) ;
}
}
//看牌,每个玩家都要看牌,把看牌封装成一个功能
lookpoker("玩家1", player1, hm) ;
lookpoker("玩家2", player2, hm) ;
lookpoker("玩家3", player3, hm) ;
lookpoker("底牌", diPai, hm) ;
}
public static void lookpoker(String name,TreeSet<Integer> ts,
HashMap<Integer, String> hm){
System.out.println(name+"的牌是:");
//
for(Integer key :ts){
//用HashMap的get功能去获取每个键对应的值,也就是玩家拿到的牌
String value = hm.get(key) ;
System.out.print(value +" ");
}
System.out.println();
}
}