按照斗地主的规则,完成洗牌发牌的动作。
具体规则:使用54张牌打乱顺序,三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。
准备牌: 牌可以设计为一个ArrayList,每个字符串为一张牌。 每张牌由花色 数字两部分组成,可以使用 花色集合 与 数字集合 嵌套迭代完成每张牌的组装。
牌由Collections类的shuffle方法进行随机排序。
发牌 : 将每个人以及底牌设计为ArrayList集合,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。
看牌 : 直接打印每个集合。
package Demo09;
import java.util.ArrayList;
import java.util.Collections;
public class Poker {
public static void main(String[] args) {
/*
* 1: 准备牌操作
*/
//1.1 创建一个装牌的容器 将来存储每一张牌的
ArrayList<
String> pokerBox = new ArrayList<
String>();
//1.2 创建花色的集合
ArrayList<
String> flowers = new ArrayList<
String>();
//1.3 创建数字的集合 为什么是String不是Integer 因为扑克里的JQKA没用数字表示
ArrayList<
String> numbers = new ArrayList<
String>();
//1.4 分别给花色 以及 数字集合添加元素
flowers.add("♥");
flowers.add("♦");
flowers.add("♠");
flowers.add("♣");
for(int i = 2;i<=10;i++){
numbers.add(i+" ");//这里将2~10用字符串表示即加“ ”
}
//数字集合添加J,Q,K,A
numbers.add("J");
numbers.add("Q");
numbers.add("K");
numbers.add("A");
//1.5 创造牌即拼接牌,将花色和数字拼接组建每一张牌
// 拿出每一个花色 然后跟每一个数字 进行结合 存储到装牌的容器中
//用增强for循环,数字循环在里在外都可以
for (String flower : flowers) {
//flower每一个花色
//遍历数字集合
for(String number : numbers){
//结合
String card = flower+number;
//存储到装牌的容器中
pokerBox.add(card);
}
}
//用普通的for循环来实现
/* for (int i = 0; i <
flowers.size() ; i++) {
for (int j = 0; j <
numbers.size() ; j++) {
String card= flowers.get(i)+numbers.get(j);
pokerBox.add(card);
}
}*/
//1.6添加大王小王
pokerBox.add("小☺");
pokerBox.add("大☠");
// System.out.println(pokerBox);
//2:洗牌 将容器里的牌的索引打乱
Collections.shuffle(pokerBox);
//3 发牌
//3.1 创建 三个 玩家集合 再创建一个底牌集合
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 i = 0;i<
pokerBox.size();i++){
//获取 每一张牌
String card = pokerBox.get(i);
//留出三张底牌 存到 底牌集合中
if(i>=51){//存到底牌集合中,一定要把判断底牌放在前面
dipai.add(card);
} else {
//玩家1 %3 ==0
if(i%3==0){
player1.add(card);
}else if(i%3==1){//玩家2
player2.add(card);
}else{//玩家3
player3.add(card);
}
}
}
//看看
System.out.println("刘备:"+player1);
System.out.println("关羽:"+player2);
System.out.println("张飞:"+player3);
System.out.println("底牌:"+dipai);
}
}运行结果:
————————————————
版权声明:本文为CSDN博主「DearNingning」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:java小游戏之斗地主_DearNingning的博客-CSDN博客
当然在做这些事情时,需要足够的细心,还得懂得分析,所以打麻将也真的是一项智力与体力兼并的娱乐。像如果有人打过了7筒后又打了个3筒,并且两张筒子一张,基本上可以确定就是筒子听的不是两张,而是需要碰对子。一般如果是一个教练的牌友呢,也会通过察颜观色。这也不失为一个了解对手出牌的最佳方式。
打麻将必胜绝技正包括了这些原因。还有一种原因就是自己的心理问题。当摸到一张牌后,想留下来这张牌,却又不舍得打出别的牌,于是自己的内心就开始进行了一系列的挣扎。殊不知,这种心理最容易影响一个人的心境,如果心境受到了影响博彩问答,那么恐怕在接下来的游戏中,总会这样的犹豫不决。从而,丢失了可能成功的机会。