public class Doudizhu { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String[] huashe1 = {"♥", "♠", "♦", "♣"}; int[] daxiao1 = {3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; String[] pai1 = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"}; ArrayList<Pai> list = new ArrayList<>(); for (String s : huashe1) { for (int i = 0; i < daxiao1.length; i++) { list.add(new Pai(s, pai1[i], daxiao1[i])); } } list.add(new Pai("", "大王", 50)); list.add(new Pai("", "小王", 20)); Collections.shuffle((List<?>) list); ArrayList<Pai> player1 = new ArrayList<>(); ArrayList<Pai> player2 = new ArrayList<>(); ArrayList<Pai> player3 = new ArrayList<>(); ArrayList<Pai> under = new ArrayList<>(); for (int i = 0; i < list.size(); i++) { if (i >= list.size() - 3) { under.add(list.get(i)); } else { if (i % 3 == 0) { player1.add(list.get(i)); } else if (i % 3 == 1) { player2.add(list.get(i)); } else { player3.add(list.get(i)); } } } System.out.println(under); int r = new Random().nextInt(51); if (r % 3 == 0) { player1.addAll(under); } else if (r % 3 == 1) { player2.addAll(under); } else { player3.addAll(under); } Collections.sort(player1); Collections.sort(player2); Collections.sort(player3); System.out.println(player1); System.out.println(player2); System.out.println(player3); ArrayList<Pai> paikuplayer1 = new ArrayList<>(); ArrayList<Pai> paikuplayer2 = new ArrayList<>(); ArrayList<Pai> paikuplayer3 = new ArrayList<>(); ArrayList<Pai> paikuunderp1 = new ArrayList<>(); ArrayList<Pai> paikuunderp2 = new ArrayList<>(); ArrayList<Pai> paikuunderp3 = new ArrayList<>(); ArrayList<Pai> paikuunder = new ArrayList<>(); String p1; String p2; String p3; if (player1.size() == 20) { p1 = "地主"; p2 = "玩家一"; p3 = "玩家二"; } else if (player2.size() == 20) { p1 = "玩家二"; p2 = "地主"; p3 = "玩家一"; } else { p1 = "玩家一"; p2 = "玩家二"; p3 = "地主"; } if (player1.size() != 20) { } else { System.out.println("=================="); System.out.println(p1 + "的牌为" + player1); System.out.println("请" + p1 + "出牌"); System.out.println("请输入想要出的牌,输入-1停止出牌"); while (true) { if (paikuunderp2.size() == 0 && paikuunderp3.size() == 0) { paikuunderp1.clear(); } else { paikuunderp1.clear(); System.out.println("请选择,1.出牌 2.要不起 3.过"); if (sc.nextLine().equals("2")) { System.out.println("要不起"); break; }else if(sc.nextLine().equals("3")){ System.out.println("过"); break; } } while (true) { System.out.println("请输入要出的牌"); String a = sc.nextLine(); if (a.equals("-1")) { break; } else { if (!isTrue(player1, a)) { System.out.println("您没有这张牌"); } else { Pai pai = throwcard(player1, a); paikuplayer1.add(pai); player1.remove(pai); } } } System.out.println("出的牌为" + paikuplayer1); if (chuPai(paikuplayer1)) { System.out.println("可以出牌"); if (daNi(paikuplayer1, paikuunderp2) && daNi(paikuplayer1, paikuunderp3)) { paikuunderp1.addAll(paikuplayer1); paikuunder.addAll(paikuplayer1); paikuplayer1.clear(); System.out.println(p1 + "出的牌为" + paikuunderp1); paikuunderp3.clear(); break; } } System.out.println("不符合规则,请重新出牌"); player1.addAll(paikuplayer1); Collections.sort(player1); System.out.println("当前牌库为" + player1); paikuplayer1.clear(); } System.out.println("底库中牌为" + paikuunder); } if (player2.size() != 20 && paikuunderp1.size() == 0) { } else { System.out.println("=================="); System.out.println(p2 + "的牌为" + player2); System.out.println("请" + p2 + "出牌"); System.out.println("请输入想要出的牌,输入-1停止出牌"); while (true) { if (paikuunderp1.size() == 0 && paikuunderp3.size() == 0) { paikuunderp2.clear(); } else { paikuunderp2.clear(); System.out.println("请出入选择,1.出牌 2.要不起 3.过"); if (sc.nextLine().equals("2")) { System.out.println("要不起"); break; }else if(sc.nextLine().equals("3")){ System.out.println("过"); break; } } while (true) { System.out.println("请输入要出的牌"); String a = sc.nextLine(); if (a.equals("-1")) { break; } else { if (!isTrue(player2, a)) { System.out.println("您没有这张牌"); } else { Pai pai = throwcard(player2, a); paikuplayer2.add(pai); player2.remove(pai); } } } System.out.println("出的牌为" + paikuplayer2); if (chuPai(paikuplayer2)) { System.out.println("可以出牌"); if (daNi(paikuplayer2, paikuunderp1) && daNi(paikuplayer2, paikuunderp3)) { paikuunderp2.addAll(paikuplayer2); paikuunder.addAll(paikuplayer2); paikuplayer2.clear(); System.out.println(p2 + "出的牌为" + paikuunderp2); paikuunderp1.clear(); break; } } System.out.println("不符合规则,请重新出牌"); player2.addAll(paikuplayer2); Collections.sort(player2); System.out.println("当前牌库为" + player2); paikuplayer2.clear(); } System.out.println("底库中牌为" + paikuunder); } System.out.println("=================="); System.out.println(p3 + "的牌为" + player3); System.out.println("请" + p3 + "出牌"); System.out.println("请输入想要出的牌,输入-1停止出牌"); while (true) { if (paikuunderp1.size() == 0 && paikuunderp2.size() == 0) { paikuunderp3.clear(); } else { paikuunderp3.clear(); System.out.println("请出入选择,1.出牌 2.要不起 3.过"); if (sc.nextLine().equals("2")) { System.out.println("要不起"); break; }else if(sc.nextLine().equals("3")){ System.out.println("过"); break; } } while (true) { System.out.println("请输入要出的牌"); String a = sc.nextLine(); if (a.equals("-1")) { break; } else { if (!isTrue(player3, a)) { System.out.println("您没有这张牌"); } else { Pai pai = throwcard(player3, a); paikuplayer3.add(pai); player3.remove(pai); } } } System.out.println("出的牌为" + paikuplayer3); if (chuPai(paikuplayer3)) { System.out.println("可以出牌"); if (daNi(paikuplayer3, paikuunderp2) && daNi(paikuplayer3, paikuunderp1)) { paikuunderp3.addAll(paikuplayer3); paikuunder.addAll(paikuplayer3); paikuplayer3.clear(); System.out.println(p3 + "出的牌为" + paikuunderp3); paikuunderp2.clear(); break; } } System.out.println("不符合规则,请重新出牌"); player3.addAll(paikuplayer3); Collections.sort(player3); System.out.println("当前牌库为" + player3); paikuplayer3.clear(); } while (true) { System.out.println("=================="); System.out.println(p1 + "的牌为" + player1); System.out.println("请" + p1 + "出牌"); System.out.println("请输入想要出的牌,输入-1停止出牌"); while (true) { if (paikuunderp2.size() == 0 && paikuunderp3.size() == 0) { paikuunderp1.clear(); } else { paikuunderp1.clear(); System.out.println("请出入选择,1.出牌 2.要不起 3.过"); if (sc.nextLine().equals("2")) { System.out.println("要不起"); break; }else if(sc.nextLine().equals("3")){ System.out.println("过"); break; } } while (true) { System.out.println("请输入要出的牌"); String a = sc.nextLine(); if (a.equals("-1")) { break; } else { if (!isTrue(player1, a)) { System.out.println("您没有这张牌"); } else { Pai pai = throwcard(player1, a); paikuplayer1.add(pai); player1.remove(pai); } } } System.out.println("出的牌为" + paikuplayer1); if (chuPai(paikuplayer1)) { System.out.println("可以出牌"); if (daNi(paikuplayer1, paikuunderp2) && daNi(paikuplayer1, paikuunderp3)) { paikuunderp1.addAll(paikuplayer1); paikuunder.addAll(paikuplayer1); paikuplayer1.clear(); System.out.println(p1 + "出的牌为" + paikuunderp1); paikuunderp3.clear(); break; } else { System.out.println("你的牌太小,管不上"); break; } } System.out.println("不符合规则,请重新出牌"); player1.addAll(paikuplayer1); Collections.sort(player1); System.out.println("当前牌库为" + player1); paikuplayer1.clear(); } System.out.println("底库中牌为" + paikuunder); if (player1.size() == 0 || player2.size() == 0 || player3.size() == 0) { System.out.println("游戏结束"); break; } System.out.println("=================="); System.out.println(p2 + "的牌为" + player2); System.out.println("请" + p2 + "出牌"); System.out.println("请输入想要出的牌,输入-1停止输出"); while (true) { if (paikuunderp1.size() == 0 && paikuunderp3.size() == 0) { paikuunderp2.clear(); } else { paikuunderp2.clear(); System.out.println("请出入选择,1.出牌 2.要不起 3.过"); if (sc.nextLine().equals("2")) { System.out.println("要不起"); break; }else if(sc.nextLine().equals("3")){ System.out.println("过"); break; } } while (true) { System.out.println("请输入要出的牌"); String a = sc.nextLine(); if (a.equals("-1")) { break; } else { if (!isTrue(player2, a)) { System.out.println("您没有这张牌"); } else { Pai pai = throwcard(player2, a); paikuplayer2.add(pai); player2.remove(pai); } } } System.out.println("出的牌为" + paikuplayer2); if (chuPai(paikuplayer2)) { System.out.println("可以出牌"); if (daNi(paikuplayer2, paikuunderp1) && daNi(paikuplayer2, paikuunderp3)) { paikuunderp2.addAll(paikuplayer2); paikuunder.addAll(paikuplayer2); paikuplayer2.clear(); System.out.println(p2 + "出的牌为" + paikuunderp2); paikuunderp1.clear(); break; } } System.out.println("不符合规则,请重新出牌"); player2.addAll(paikuplayer2); Collections.sort(player2); System.out.println("当前牌库为" + player2); paikuplayer2.clear(); } System.out.println("底库中牌为" + paikuunder); if (player1.size() == 0 || player2.size() == 0 || player3.size() == 0) { System.out.println("游戏结束"); break; } System.out.println("=================="); System.out.println(p3 + "的牌为" + player3); System.out.println("请" + p3 + "出牌"); System.out.println("请输入想要出的牌,输入-1停止出牌"); while (true) { if (paikuunderp1.size() == 0 && paikuunderp2.size() == 0) { paikuunderp3.clear(); } else { paikuunderp3.clear(); System.out.println("请出入选择,1.出牌 2.要不起 3.过"); if (sc.nextLine().equals("2")) { System.out.println("要不起"); break; }else if(sc.nextLine().equals("3")){ System.out.println("过"); break; } } while (true) { System.out.println("请输入要出的牌"); String a = sc.nextLine(); if (a.equals("-1")) { break; } else { if (!isTrue(player3, a)) { System.out.println("您没有这张牌"); } else { Pai pai = throwcard(player3, a); paikuplayer3.add(pai); player3.remove(pai); } } } System.out.println("出的牌为" + paikuplayer3); if (chuPai(paikuplayer3)) { System.out.println("可以出牌"); if (daNi(paikuplayer3, paikuunderp2) && daNi(paikuplayer3, paikuunderp1)) { paikuunderp3.addAll(paikuplayer3); paikuunder.addAll(paikuplayer3); paikuplayer3.clear(); System.out.println(p3 + "出的牌为" + paikuunderp3); paikuunderp2.clear(); break; } } System.out.println("不符合规则,请重新出牌"); player3.addAll(paikuplayer3); Collections.sort(player3); System.out.println("当前牌库为" + player3); paikuplayer3.clear(); } System.out.println("当前的底牌池" + paikuunder); if (player1.size() == 0 || player2.size() == 0 || player3.size() == 0) { System.out.println("游戏结束"); break; } } }
public static int sameNum(ArrayList<Pai> list) { int max = 0; for (int i = 0; i < list.size(); i++) { int num = 0; for (int j = 0; j < list.size(); j++) { if (list.get(i).getId() == list.get(j).getId()) { num++; } } max = max >= num ? max : num; } return max;}
public static boolean chuPai(ArrayList<Pai> list) { switch (list.size()) { case 1: return true; case 2: if (list.get(0).getId() == list.get(1).getId()) { return true; } else if (list.get(0).getId() + list.get(1).getId() == 70) { return true; } else { return false; } case 3: if (sameNum(list)==3) { return true; } else return false; case 4: if (sameNum(list) == 4 || sameNum(list) == 3) { return true; } else return false; case 5: if (sameNum(list) == 1 && (max(list) - min(list) == list.size() - 1)) { return true; } else if (sameNum(list) == 3) { for (int i = 0; i < list.size(); i++) { if (theSameNum(list, list.get(i).getNum()) < 2) { return false; } } return true; } case 6: if (sameNum(list) == 1 && (max(list) - min(list) == list.size() - 1)) { return true; } else if (sameNum(list) == 4) { for (int i = 0; i < list.size(); i++) { if (theSameNum(list, list.get(i).getNum()) == 2) { return false; } } return true; } else if (sameNum(list) == 2 && (max(list) - min(list)) * 2 + 2 == list.size() && max(list) != 15) { return true; } else return false; case 8: if (sameNum(list) == 1 && (max(list) - min(list) == list.size() - 1)) { return true; } else if (sameNum(list) == 4) { for (int i = 0; i < list.size(); i++) { if (theSameNum(list, list.get(i).getNum()) == 2) { return true; } } return false; } else if (sameNum(list)==2 && (max(list) - min(list)) * 2 + 2 == list.size() && max(list) != 15) { return true; } else if (sameNum(list) == 3 && noSameNum(list) == 4 && (whichNumSame(list, 3).get(1) - whichNumSame(list, 3).get(0) == 1) && max(list) != 15) { for (int i = 0; i < list.size(); i++) { if (theSameNum(list, list.get(i).getNum()) == 2) { return false; } } return true; } else if (sameNum(list) == 3 && noSameNum(list) == 3 && (whichNumSame(list, 3).get(1) - whichNumSame(list, 3).get(0) == 1) && max(list) != 15) { return true; } else return false; default: if (sameNum(list) == 1 && (max(list) - min(list) == list.size() - 1) && max(list) < 15) { return true; } else if (list.size() % 2 == 0&&sameNum(list)==2 && (max(list) - min(list)) * 2 + 2 == list.size() && max(list) != 15) { return true; } else if (list.size() == 10 && sameNum(list) == 3 && noSameNum(list) == 4 && (whichNumSame(list, 3).get(1) - whichNumSame(list, 3).get(0) == 1) && max(list) != 15) { for (int i = 0; i < list.size(); i++) { if (theSameNum(list, list.get(i).getNum()) == 1) { return false; } } return true; } else if (list.size() == 12 && sameNum(list) == 3 && noSameNum(list) == 6 && (whichNumSame(list, 3).get(2) - whichNumSame(list, 3).get(0) == 2) && max(list) != 15) { for (int i = 0; i < list.size(); i++) { if (theSameNum(list, list.get(i).getNum()) == 2) { return false; } } return true; } else if (list.size() == 15 && sameNum(list) == 3 && noSameNum(list) == 6 && (whichNumSame(list, 3).get(2) - whichNumSame(list, 3).get(0) == 2) && max(list) != 15) { for (int i = 0; i < list.size(); i++) { if (theSameNum(list, list.get(i).getNum()) == 1) { return false; } } return true; } else if (list.size() == 16 && sameNum(list) == 3 && noSameNum(list) == 8 && (whichNumSame(list, 3).get(2) - whichNumSame(list, 3).get(0) == 2) && max(list) != 15) { for (int i = 0; i < list.size(); i++) { if (theSameNum(list, list.get(i).getNum()) == 1) { return false; } } return true; } return false; } }
public static int max(ArrayList<Pai> list) { int max = 0; for (int i = 0; i < list.size(); i++) { max = max >= list.get(i).getId() ? max : list.get(i).getId(); } return max;}
public static int min(ArrayList<Pai> list) { int min = list.get(0).getId(); for (int i = 0; i < list.size(); i++) { min = min <= list.get(i).getId() ? min : list.get(i).getId(); } return min;}
public static int theSameNum(ArrayList<Pai> list, String a) { int num = 0; for (int i = 0; i < list.size(); i++) { if (list.get(i).getNum().equals(a)) { num++; } } return num;}
public static Pai throwcard(ArrayList<Pai> list, String a) { for (int i = 0; i < list.size(); i++) { if (list.get(i).getNum().equals(a)) { return list.get(i); } } System.out.println("您手中没有" + a ); return null; }
public static boolean daNi(ArrayList<Pai> list, ArrayList<Pai> list1) { if ((list.size() >= 2 && list.get(0).getId() + list.get(1).getId() == 70) || list1.size() == 0) return true; if (list1.size() == 2 && list1.get(0).getId() + list1.get(1).getId() == 70) return false; if (list.size() == list1.size()) { switch (list1.size()) { case 1: return max(list) > max(list1); case 2: return max(list) > max(list1); case 3: return max(list) > max(list1); case 4: if (sameNum(list) == 4 && sameNum(list1) == 4 && max(list) > max(list1)) { return true; } else if (sameNum(list) == 4) { return true; } else if (sameNum(list) == 3 && sameNum(list1) == 3) { return (list.get(0).getId() == list.get(1).getId() ? list.get(0).getId() : list.get(2).getId()) > (list1.get(0).getId() == list1.get(1).getId() ? list1.get(0).getId() : list1.get(2).getId()); } return false; case 5: if (sameNum(list) == sameNum(list1) && sameNum(list) == 1) { return max(list) > max(list1); } else { return (theSameNum(list, idtoNum(list, max(list))) == 3 ? max(list) : min(list)) > (theSameNum(list1, idtoNum(list1, max(list1))) == 3 ? max(list1) : min(list1)); } case 6: if (sameNum(list) == sameNum(list1) && sameNum(list) == 1) { return max(list) > max(list1); } else if (sameNum(list) == sameNum(list1) && sameNum(list) == 2) { return max(list) > max(list1); } else { return (theSameNum(list, idtoNum(list, max(list))) == 4 ? max(list) : min(list)) > (theSameNum(list1, idtoNum(list1, max(list1))) == 4 ? max(list1) : min(list1)); } default: if (sameNum(list) == sameNum(list1) && sameNum(list) == 1) { return max(list) > max(list1); } else if (sameNum(list) == sameNum(list1) && sameNum(list) == 2) { return max(list) > max(list1); } else if (sameNum(list) == sameNum(list1) && sameNum(list) == 3) { return whichNumSame(list, 3).get(0) > whichNumSame(list1, 3).get(1); } else if (list.size() == 10 && sameNum(list) == 3) { return whichNumSame(list, 3).get(0) > whichNumSame(list1, 3).get(1); } else if (list.size() == 12 && sameNum(list) == 3) { return whichNumSame(list, 3).get(0) > whichNumSame(list1, 3).get(2); } else if (list.size() == 15 && sameNum(list) == 3) { return whichNumSame(list, 3).get(0) > whichNumSame(list1, 3).get(3); } else if (list.size() == 16 && sameNum(list) == 3) { return whichNumSame(list, 3).get(0) > whichNumSame(list1, 3).get(3); } else return false; } } else { if (list.size() == 4 && sameNum(list) == 4) { return true; } else if (list1.size() == 4 && sameNum(list1) == 4) { return false; } else return false; } }
public static boolean isTrue(ArrayList<Pai> list, String a) { for (int i = 0; i < list.size(); i++) { if (list.get(i).getNum().equals(a)) { return true; } } return false; }
public static String idtoNum(ArrayList<Pai> list, int id) { for (int i = 0; i < list.size(); i++) { if (list.get(i).getId() == id) { return list.get(i).getNum(); } } return ""; }
public static int noSameNum(ArrayList<Pai> list) { HashSet<Integer> set = new HashSet<>(); for (int i = 0; i < list.size(); i++) { set.add(list.get(i).getId()); } return set.size(); }
public static ArrayList<Integer> whichNumSame(ArrayList<Pai> list, int a) { ArrayList<Integer> li = new ArrayList<>(); for (int i = 0; i < list.size(); i++) { if (theSameNum(list, list.get(i).getNum()) == a && !li.contains(list.get(i).getId())) { li.add(list.get(i).getId()); } } return li;}
实体类
public class Pai implements Comparable<Pai>{ private String name ; private String num ; private int id ; public Pai(String name, String num, int id) { this.name = name; this.num = num; this.id = id; } public Pai() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getNum() { return num; } public void setNum(String num) { this.num = num; } public int getId() { return id; } public void setId(int id) { this.id = id; } @Override public String toString() { return name+num; } @Override public int compareTo(Pai o) { return this.getId()-o.getId(); }}
原文链接:https://blog.csdn.net/qq_33007465/article/details/114838384
- 随机文章
标签 qq游戏斗地主免费
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。