集合模拟斗地主

集合模拟斗地主

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();
}
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值