需求分析
- 准备牌:
完成数字与纸牌的映射关系:
使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系(相当于一个字典)。
- 洗牌:
通过数字完成洗牌发牌
- 发牌:
将每个人以及底牌设计为ArrayList,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。
存放的过程中要求数字大小与斗地主规则的大小对应。
将代表不同纸牌的数字分配给不同的玩家与底牌。
- 看牌:
通过Map集合找到对应字符展示。
通过查询纸牌与数字的对应关系,由数字转成纸牌字符串再进行展示。
代码实现
package com.Map;
import java.util.*;
public class Doudizhu {
public static void main(String[] args) {
doudizhu();
}
private static void doudizhu() {
String[] hua={"♠","♥","♦","♣"};
String[] shu={"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
Map<Integer,String> map=new HashMap<>();
int i=2;
//循环的两个顺序不能颠倒,要把他们排列成2222AAAAKKKK这种。
for(String s:shu){
for(String h:hua){
map.put(++i,h+s);
}
}
map.put(1,"大王");
map.put(2,"小王");
//将牌打乱,先将牌的key取出到Set集合中,因为要用到Collections类中的shuffle()方法,所以必须要传给list。
Set<Integer> set= map.keySet();
List<Integer> list=new ArrayList<>();
list.addAll(set);
Collections.shuffle(list);
ArrayList<Integer> P1 = new ArrayList<>();
ArrayList<Integer> P2 = new ArrayList<>();
ArrayList<Integer> P3 = new ArrayList<>();
ArrayList<Integer> dipai = new ArrayList<>();
for(int j=1;j<=list.size();j++){
Integer no = list.get( j-1);
if(j>51) dipai.add(no);
else {
if(j%3==0) P1.add(no);
else if (j%3==1) P2.add(no);
else if (j%3==2) P3.add(no);
}
}
//排序
Collections.sort(P1);
Collections.sort(P2);
Collections.sort(P3);
Collections.sort(dipai);
kanpai("fjc",map,P1);
kanpai("ltf",map,P2);
kanpai("lwh",map,P3);
kanpai("dipai",map,dipai);
}
//看牌的方法
private static void kanpai(String name,Map<Integer,String> poker,ArrayList<Integer> arr) {
System.out.print(name+": ");
for(Integer k:arr){
String s1=poker.get(k);
System.out.print(s1+" ");
}
System.out.println();
}
}
来源:CSDN
作者:IT喳喳喳喳
链接:https://blog.csdn.net/fanjingchen/article/details/103656364