Java纸牌拖拉机简单模拟

  有天跟前任玩纸牌的拖拉机,来来回回玩了好长时间,分不出胜负,当时就在想,这玩意能分出胜负吗?于是心血来潮就想写一个程序模拟一下,看到底能不能分出胜负,写出来了,能分出胜负,但貌似哪里还有点问题,总共52张牌,到最后游戏结束,有时候剩四十多牌,有时候剩53、52张牌,不知道其牌去哪了哈哈,先扔着吧,有时间再看看。

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * ClassName:Test <br/>
 * Date: 2018年9月24日 上午9:51:37 <br/>
 * 
 * @author Plum
 */
public class Tractor {
    public static void main(String[] args) {
        // 模拟去除两张王的52张扑克牌
        List<Integer> puke = new ArrayList<Integer>();
        for (int i = 1; i < 14; i++) {
            for (int j = 0; j < 4; j++) {
                puke.add(i);
            }
        }
        System.out.println("扑克牌模拟完毕。。。。。。。。");
        // 洗牌
        Collections.shuffle(puke);
        List<Integer> person1 = new ArrayList<Integer>();
        List<Integer> person2 = new ArrayList<Integer>();
        for (int i = 0; i < puke.size(); i++) {
            if (i < puke.size() / 2) {
                person1.add(puke.get(i));
            } else {
                person2.add(puke.get(i));
            }
        }
        List<Integer> pub = new ArrayList<Integer>();
        do {
            // 第一个人先出牌
            int t = person2.get(0);
            pub.add(t);
            person2.remove(0);
            System.out.println("甲出牌:" + t);
            // 判断最后一张牌和前面的每一张是否相等,相等则拿走
            // 拿到最后一张牌
            if (pub.size() > 1) {
                int first = -1;
                int l = pub.get(pub.size() - 1);
                for (int i = 0; i < pub.size(); i++) {
                    System.out.println("池子中的牌分别为:" + pub.get(i));
                }
                for (int i = 0; i < pub.size() - 1; i++) {
                    if (l == pub.get(i)) {
                        System.out.println("第" + (i + 1) + "张牌和刚打入的一致,收进去!");
                        first = i;
                        break;
                    }
                }
                // 将牌收入
                if (first != -1) {
                    for (int i = pub.size() - 1; i > first - 1; i--) {
                        person2.add(pub.get(i));
                        pub.remove(i);
                    }
                }
            }
            System.out.println("甲总共" + person2.size() + "张牌:" + person2.toString());
            // 第二个人出牌
            if (person1.size() != 0) {
                t = person1.get(0);
                pub.add(t);
                person1.remove(0);
                System.out.println("乙出牌:" + t);
                if (pub.size() > 1) {
                    int first = -1;
                    int l = pub.get(pub.size() - 1);
                    for (int i = 0; i < pub.size(); i++) {
                        System.out.println("池子中的牌分别为:" + pub.get(i));
                    }
                    for (int i = 0; i < pub.size() - 1; i++) {
                        if (l == pub.get(i)) {
                            System.out.println("第" + (i + 1) + "张牌和刚打入的一致,收进去!");
                            first = i;
                            break;
                        }
                    }
                    // 将牌收入
                    if (first != -1) {
                        for (int i = pub.size() - 1; i > first - 1; i--) {
                            person1.add(pub.get(i));
                            pub.remove(i);
                        }
                    }
                }
            }
            System.out.println("乙总共" + person1.size() + "张牌:" + person1.toString());
        } while (person1.size() != 0 && person2.size() != 0);
        System.out.println("==========游戏结束==========");
        System.out.println("乙剩余" + person1.size() + "张牌!");
        System.out.println("甲剩余" + person2.size() + "张牌!");
    }
}
原文地址:https://www.cnblogs.com/plumsq/p/10715323.html