前言
以前来CSDN都只是为了完成作业来抄抄大佬的代码或者为了解决某些问题而百度进CSDN,该来的总会来,学代码的感觉逃不掉CSDN还有GITHUB了,这两个上面都是前辈的经验。这次终于要自己下水来贡献自己了。
第一次写,有点乱,见谅。
题目
需求:实现斗地主随机发牌后按照牌的大小实现自动排列牌序
老师上课带着我们写了斗地主的随机发牌,打斗地主嘛,发好牌后肯定要把牌按照顺序排列好才能更方便的打牌,这时候就需要我们的自动排列牌序了。
前置实现
扑克牌的生成
我们通过将 字符串List:numbers(A,2,3,4,5,6,7,8,9,10,J,Q,K) 和 字符串List:color(♥,♣,♦,♠)
相加产生 字符串List:pokes并且再在poles里add大王和小王实现牌的生成。】
代码如下
List<String>pokes=new ArrayList<>();
List<String>colors=new ArrayList<>();
List<String>numbers=new ArrayList<>();
colors.add("♥");
colors.add("♣");
colors.add("♦");
colors.add("♠");
numbers.add("A");
for (int i=2;i<=10;i++){
numbers.add(i+"");
}
numbers.add("J");
numbers.add("Q");
numbers.add("K");
for (String c:numbers){
for (String n:colors){
String pai=n+c;
pokes.add(pai);
}
}
pokes.add("大王");
pokes.add("小王");
下图是按以上方法输出的已经生成的扑克牌
洗牌
然后通过 Collections.shuffle()方法来打乱顺序洗牌
代码如下
Collections.shuffle(pokes);
System.out.println(pokes);
下图是按以上方法输出的已经洗过的扑克牌
分发扑克
牌有了 那我们就要把牌分发给大家,用3个字符串List:来代替人,然后还要留三张牌作为地主的底牌。
所以我们就通过for循环和if来分发扑克
代码如下
ArrayList<String> xiaomianbao=new ArrayList<>();
ArrayList<String> jingtongxue=new ArrayList<>();
ArrayList<String> hualili=new ArrayList<>();
ArrayList<String> dipai=new ArrayList<>();
for(int i=0;i<pokes.size();i++){
String pai=pokes.get(i);
if(i>=51){
dipai.add(pai);
}else {
if(i%3==0){
xiaomianbao.add(pai);
}else if (i%3==1){
jingtongxue.add(pai);
}else {
hualili.add(pai);
}
}
}
下图是按以上方法输出的各个人的牌和底牌
(无敌的小面包拥有着王炸!)
正题的实现
由于斗地主的大小是从3最小开始然后到J,Q,K,A,2,小王,大王,按照TX的欢乐斗地主来说,牌的排列顺序是从左开始由大到小排列。
方法1:将牌转换为可以排序的数字
参考我的小宇宙同学
宇宙同学的csdn
方法2:写一个扑克的类,牌的属性由花色和数字组成,然后重写排序以数字排序,从而实现扑克的自动排序。
参考ysy同学