博客名称 |
---|
Java-(中级) |
模拟斗地主1-无序牌(那样用户体验不好)
无序牌看牌没有顺序很不方便
分析:
1.创建List集合牌盒子
2.创建 花色数组和点数数组
3.装牌
4.洗牌
5.发牌
6.看牌
代码演示
public class PokerDemo1 {
public static void main(String[] args) {
//创建扑克盒
ArrayList<String> pokers = new ArrayList<>();
//创建花色数组
String[] colors= {"♠","♣","♥","♦"};
//创建点数数组
String[] numbers= {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
//把牌装进数组
for(String color:colors){
for (String number:numbers){
pokers.add(color+number);
}
}
//添加大王
pokers.add("小王");
//添加小王
pokers.add("大王");
//洗牌
Collections.shuffle(pokers);
//创建玩扑克的人
ArrayList<String> liubei= new ArrayList<>();
ArrayList<String> guanyu= new ArrayList<>();
ArrayList<String> zhangfei= new ArrayList<>();
ArrayList<String> dipai= new ArrayList<>();
//发牌
for (int x = 0; x <pokers.size() ; x++) {
if(x>=pokers.size()-3){
dipai.add(pokers.get(x));
}else if(x%3==0){
liubei.add(pokers.get(x));
}else if(x%3==1){
guanyu.add(pokers.get(x));
}else if(x%3==2){
zhangfei.add(pokers.get(x));
}
}
//看牌
lookPoker("刘备",liubei);
lookPoker("关羽",guanyu);
lookPoker("张飞",zhangfei);
lookPoker("底牌",dipai);
}
//看牌的功能
public static void lookPoker(String name,ArrayList<String> arr){
System.out.print(name+"的牌是--");
for (String poker:arr){
System.out.print(poker+" ");
}
System.out.println();
}
}
结果:
刘备的牌是--♠10 ♠Q ♠7 ♥8 ♦10 ♥K ♦5 ♥2 ♦8 ♦7 ♠6 ♣3 大王 ♣9 ♣10 ♥4 ♣K
关羽的牌是--♠5 ♥10 ♦A ♠J ♣5 ♠9 ♠4 ♦K ♣8 ♥5 ♦J ♥7 ♦6 ♠2 ♣Q ♥Q ♣J
张飞的牌是--♣2 ♥J ♦9 ♣6 ♠3 ♣A ♥9 ♦2 ♠A ♦3 ♣7 ♠K ♦Q ♠8 ♣4 小王 ♦4
底牌的牌是--♥6 ♥A ♥3
模拟斗地主2-有序牌
写代码的时候也要注意了,不光是代码实现某个功能,有时候数据也要符合某种规则一定要配合,这里就是花色数组和点色数组循环是要有讲究的。
分析:
1.创建TreeMap集合
2.创建ArrayList集合
3.创建花色数组和点数数组
4.装牌(将编号和对应的牌装到TreeMap集合,将编号装到List集合)
5.洗牌(洗的也是编号)
6.发牌(发的也是编号)
7.看牌
public class PokerDemo2 {
public static void main(String[] args) {
//创建TreeMap集合
TreeMap<Integer,String> tm = new TreeMap<>();
//创建一个ArrayList集合
ArrayList<Integer> al = new ArrayList<>();
//创建花色
String[] colors={"♠","♥","♣","♦"};
//创建点数
//点数按照斗地主大小来定义的
String[] numbers={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
//定义一个统计变量
int count= 0;
//装牌(牌的大小一定要符合数字的大小)
//注意:外循环一定是点数,内循环花色。才符合牌大小的规则
//如果外循环是花色,内循环是点数就会出现♥3比♠2还要大
for(String number:numbers){
for(String color:colors){
tm.put(count,color+number);
al.add(count);
count++;
}
}
//添加小王
tm.put(count,"小王");
al.add(count);
count++;
//添加大王
tm.put(count,"大王");
al.add(count);
//洗牌(其实洗的是编号)
Collections.shuffle(al);
//创建玩扑克的人(开始玩牌的人是一个ArrayList集合是不对的,因为没有排序的)
//其实可以想想玩poker的时候,抓到手上的牌自己来排序,所以需要的是一个TreeSet集合,而不是ArrayList集合
TreeSet<Integer> liubei= new TreeSet<>();
TreeSet<Integer> guanyu= new TreeSet<>();
TreeSet<Integer> zhangfei= new TreeSet<>();
TreeSet<Integer> dipai= new TreeSet<>();
//发牌(其实发的也是编号)
for (int x = 0; x <al.size() ; x++) {
if(x>=al.size()-3){
dipai.add(al.get(x));
}else if(x%3==0){
liubei.add(al.get(x));
}else if(x%3==1){
guanyu.add(al.get(x));
}else if(x%3==2){
zhangfei.add(al.get(x));
}
}
//看牌
lookPoker("刘备",liubei,tm);
lookPoker("关羽",guanyu,tm);
lookPoker("张飞",zhangfei,tm);
lookPoker("底",dipai,tm);
}
public static void lookPoker(String name,TreeSet<Integer> ts,TreeMap<Integer,String> tm){
System.out.print(name+"牌是--");
for(Integer key:ts){
System.out.print(tm.get(key)+" ");
}
System.out.println();
}
}
结果:
刘备牌是--♦3 ♠5 ♠6 ♥8 ♠9 ♣10 ♠J ♦J ♦Q ♥K ♣K ♦K ♥A ♣A ♠2 ♥2 大王
关羽牌是--♣3 ♠4 ♣4 ♦5 ♥6 ♠7 ♥7 ♣7 ♠8 ♣8 ♥9 ♣9 ♦9 ♥10 ♠K ♣2 小王
张飞牌是--♠3 ♥3 ♥4 ♦4 ♥5 ♣5 ♣6 ♦6 ♦7 ♦8 ♠10 ♦10 ♥J ♠Q ♣Q ♦A ♦2
底牌是--♣J ♥Q ♠A
模拟斗地主图解