您的位置:首页 > 编程语言 > Java开发

java学习笔记(二十五)模拟斗地主发牌与洗牌

2017-05-11 12:45 281 查看
生活中,我们经常和朋友一起玩斗地主纸牌游戏,大家都知道斗地主有54张牌,大王和小王还有四种花色的A~k,那么斗地主中的发牌和洗牌用java是怎么完成的呢?

案列分析:

1.先创建两个String数组存储牌的点数和花色

2.斗地主中有洗牌这一功能,那么我们就可以用Collections这个集合工具类中的shuffle()这个方法,所以创建一个ArrayList集合

3.创建hashmap来存储牌的序号和牌的内容

4.遍历上面的两个数组,将序号和牌加入hs中,并将序号加入lists中

5.将大王和小王加入hs中,序号加入lists中

6.洗牌,洗牌的时候洗索引

7.发牌。创建TreeSet集合来存储各自的牌的序号,使得牌有序

8.写一个看牌的方法

9.看牌

代码如下:

package com.edu;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.TreeSet;

public class Poker {
public static void main(String[] args) {
//1.先创建两个String数组存储牌的点数和花色
//点数
String []numbers={"3","4","5","6","7","8","9","10","J","O","k","A","2"};
String []colors={ "♥", "♠", "♣", "♦" };
//2.因为要洗牌所以用ArrayList集合存储牌的序号
ArrayList<Integer> lists = new ArrayList<Integer>();
//3.创建hashmap来存储牌的序号和牌的内容
HashMap<Integer, String> hs = new HashMap<Integer, String>();
//4.遍历上面的两个数组,将序号和牌加入hs中,并将序号加入lists中
int index=0;
for (String number : numbers) {
for (String color : colors) {
hs.put(index, color+number);
lists.add(index);
index++;
}
}
//5.将大王和小王加入hs中,序号加入lists中
lists.add(index);
hs.put(index, "大王");
index++;//序号加1
lists.add(index);
hs.put(index, "小王");
//6.洗牌,洗牌的时候洗索引
Collections.shuffle(lists);
//7.发牌。创建TreeSet集合来存储各自的牌的序号,使得牌有序
TreeSet<Integer> zhangsan = new TreeSet<Integer>();
TreeSet<Integer> lisi = new TreeSet<Integer>();
TreeSet<Integer> wangwu = new TreeSet<Integer>();
TreeSet<Integer> dipai = new TreeSet<Integer>();
//用for循环发牌
for (int i = 0; i < lists.size(); i++) {
if(i>=lists.size()-3){
dipai.add(lists.get(i));
}else if(i%3==0){
zhangsan.add(lists.get(i));
}else if(i%3==1){
lisi.add(lists.get(i));
}else if(i%3==2){
wangwu.add(lists.get(i));
}
}
lookpoker("张三", zhangsan, hs);
lookpoker("李四", lisi, hs);
lookpoker("王五", wangwu, hs);
lookpoker("底牌", dipai, hs);
}
//8.写一个看牌的方法
public static void lookpoker(String name,TreeSet<Integer> ts,HashMap<Integer, String> hs){
System.out.print(name+"的牌是:  ");
for (Integer it : ts) {
System.out.print(hs.get(it)+" ");
}
System.out.println();
}
}


结果如下:

张三的牌是: ♠4 ♦6 ♥8 ♠8 ♥9 ♣9 ♠10 ♥O ♠O ♣O ♦O ♥k ♠k ♥A ♥2 ♣2 ♦2

李四的牌是: ♣3 ♦4 ♥5 ♠5 ♣5 ♣6 ♥7 ♣8 ♦8 ♠9 ♦9 ♥10 ♣10 ♥J ♣J ♣A ♠2

王五的牌是: ♥3 ♦3 ♥4 ♣4 ♦5 ♥6 ♠6 ♠7 ♣7 ♦7 ♦10 ♠J ♣k ♠A ♦A 大王 小王

底牌的牌是: ♠3 ♦J ♦k
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java
相关文章推荐